如果使用一個內部變量調用另外一個內部變量,以此,例如被調用的變量又去執行一個腳本(比如,根據變量變化),此時一個安全機制會阻止這個功能被執行。
此安全功能是為了阻止連續的執行。
例如
在內部變量 “HMI_Tag_01” 屬性下,“更改數值”事件去置位內部變量 “HMI_Tag_02” 中的某一位。同時內部變量 “HMI_Tag_02” 的“更改數值”事件下又調用一個腳本。結果:這個腳本不會被執行。
解決辦法
使用和控制器通訊的外部變量。請注意,通過使用外部變量可以規避上述安全機制。在項目運行時可能會產生問題。
(2)如何在一個腳本中訪問數組中的元素?
對數組元素的訪問是通過數組的名稱和數組中由括號分隔的數組索引來實現的:“SmartTags("Array Name")(array index) ”
例如 訪問數組 "DB10_HMI_Data" 的第二個元素 :
Dim Tag_01 'Internal script tag
Tag_01 = SmartTags("DB10_HMI_Data")(2)
注意
使用下面語法訪問字符串類型數組中的元素:
Dim Tag_01 'Internal script tag
Tag_01 = SmartTags("DB10_HMI_Data[2]")
例如 通過一個循環描述數組 "DM10_HMI_Data" 的第一個元素至第十一個元素
Dim Tag_01
For Tag_01=0 to 10
SmartTags("DB10_HMI_Data")(Tag_01) = 5
Next
局部腳本的數組(該數組僅在此腳本中可用)可以使用同樣的方式查詢,對于多維數組,各個維度通過一個逗號分隔開。
例如 訪問二維數組變量 "HMI_Data" 沒有連接控制器。
Dim HMI_Data(10,10)
Dim Tag_01
Tag_01 = HMI_Data(0, 5)
注意
當使用控制器連接的數組元素時,推薦在腳本開始前將他們賦值給腳本內部變量,然后再使用內部變量進行其他工作。結束腳本前,將內部變量賦值給數組元素。
從控制器到一個腳本賦值,過程變量數組需要在一個循環中將數組元素一個一個賦值,參考示例。然而,也可以通過一個簡單的指令把局部腳本的數組的值賦給過程變量數組。
例如 把控制器的數組 "CPU_Array" 的值賦給內部數組 "local_array" 和 把內部數組 "local_array" 的值賦給控制器的數組 "CPU_Array"
Dim local_array(10)
Dim i
...
' Copy from the CPU to the script:
For i = 0 To 9
local_array(i) = SmartTags("CPU_Array")(i)
Next
...
' Copy back to the CPU:
SmartTags("CPU_Array") = local_array
注意使用數組可能導致較高的通信負載和數據不一致。
WinCC Comfort 和 Advanced 不能訪問 DLLs。WinCC Professional在用戶定義的C函數里可以調用DLL函數 (DLL = Dynamic Link Library) 。
DLL 位于“..\Common Files\Siemens\bin”文件夾中,或位于 PATH 系統變量所定義的文件夾中。此變量由操作系統的系統屬性指定。
步驟按如下步驟執行,以通過 DLL 調用函數:
(1)打開要調用 DLL 函數的用戶自定義 C 函數。
(2)在用戶自定義 C 函數的開始位置添加以下代碼:
#pragma code(" //聲明在 DLL 中存儲的函數: (...); (...); ... (...); #pragma code |
<名稱.dll> 中的函數 <函數名稱 1=""> ... <函數名稱 n=""> 被聲明??稍谟脩糇远x C 函數中調用這些函數。
示例:以下示例顯示如何集成“kernel32.dll”文件和調用“GetLocalTime”函數:
#pragma code("kernel32.dll") VOID GetLocalTime(LPSYSTEMTIME lpSystemTime); #pragma code()
SYSTEMTIME st;
GetLocalTime(&st); |
(5)如何用VBS腳本確定鼠標當前的位置?
為了讀取當前鼠標的位置,需要訪問操作系統的 API (Application Programming Interface) 。VBS 不支持通過 DLLs 訪問操作系統的 API 。
“MsgBox” 命令不能用于 WinCC Comfort 和 WinCC Advanced 版本是由于安全的原因。 “MsgBox”的彈出顯示可能會覆蓋掉元素操作,比如:阻止設備的快速操作。此外,消息框可能會阻止腳本的進一步執行。
解決辦法可以使用系統函數 ShowSystemAlarm。
在腳本編輯器中把字符組合 "&h" 作為個十六進制常數的標識。
例如
Dim Tag_01
Tag_01 = &h45E ' Corresponds to the decimal value "1118"
- 如何又快又好的入門西門子PLC 2024-11-23
- 大型的西門子PLC程序,是如何規范編寫的 2024-11-23
- 看看高手是怎么從零基礎學習西門子PLC 2024-11-23
- 西門子plc程序怎么模擬運行 2024-11-23
- 西門子PLC怎么實現實時曲線 2024-11-23
- 什么是PID?西門子S7-1200PID功能如何應用 2024-11-23
- 為何給西門子高速計數器賦初始值和預置值時不起作用,或效果出乎意料 2024-11-23
- 西門子高速計數器如何復位到0 2024-11-23
- 西門子高速計數器如何尋址? 為什么從SMDx中讀不出當前的計數值 2024-11-23
- 為什么西門子高速計數器不能正常工作 2024-11-23
- 西門子高速計數器怎樣占用輸出點 2024-11-23
- NPN和PNP傳感器混接進西門子S7-200 PLC的方法 2024-11-23
- NPN/PNP輸出的旋轉編碼器(和其他傳感器),能否接到西門子S7-200 CPU上 2024-11-23
- 西門子S7-200支持的通訊協議哪些是公開的,哪些是不公開的 2024-11-23
- 西門子S7-200的遠距離通訊有哪些方式 2024-11-23
聯系方式
- 電 話:13510737515
- 聯系人:董海波
- 手 機:13185520415
- 微 信:13185520415