国产清洁工av剧情精品_欧洲日韩av网站_国产视频手机在线播放_亚洲精品国产va在线观看蜜芽_AV网页在线好看_久久精品国产亚洲精品2023_一级日韩一级欧美_亚洲欧美日韩中文天堂_最近中文字幕mv在线视频_男女啪啪高潮激烈免费版网站

您好,歡迎訪問泰安宏盛自動化科技有限公司!
20年專注工控自動化研發(fā)制造 系統(tǒng)設(shè)計\制作\安裝一條龍服務(wù)
全國咨詢熱線:18605386049
當前位置: 首頁 > 技術(shù)資料 > 程序案例

西門子博途中WinCC 腳本使用技巧匯總

作者:小編 時間:2023-09-22 17:59:21 點擊:

如果使用一個內(nèi)部變量調(diào)用另外一個內(nèi)部變量,以此,例如被調(diào)用的變量又去執(zhí)行一個腳本(比如,根據(jù)變量變化),此時一個安全機制會阻止這個功能被執(zhí)行。

此安全功能是為了阻止連續(xù)的執(zhí)行。

例如

在內(nèi)部變量 “HMI_Tag_01” 屬性下,“更改數(shù)值”事件去置位內(nèi)部變量 “HMI_Tag_02” 中的某一位。同時內(nèi)部變量 “HMI_Tag_02” 的“更改數(shù)值”事件下又調(diào)用一個腳本。結(jié)果:這個腳本不會被執(zhí)行。

解決辦法

使用和控制器通訊的外部變量。請注意,通過使用外部變量可以規(guī)避上述安全機制。在項目運行時可能會產(chǎn)生問題。

(2)如何在一個腳本中訪問數(shù)組中的元素?

對數(shù)組元素的訪問是通過數(shù)組的名稱和數(shù)組中由括號分隔的數(shù)組索引來實現(xiàn)的:“SmartTags("Array Name")(array index) ”

例如 訪問數(shù)組 "DB10_HMI_Data" 的第二個元素 :

Dim Tag_01 'Internal script tag
Tag_01 = SmartTags("DB10_HMI_Data")(2)

注意

使用下面語法訪問字符串類型數(shù)組中的元素:

Dim Tag_01 'Internal script tag
Tag_01 = SmartTags("DB10_HMI_Data[2]")

例如 通過一個循環(huán)描述數(shù)組 "DM10_HMI_Data" 的第一個元素至第十一個元素

Dim Tag_01
For Tag_01=0 to 10
SmartTags("DB10_HMI_Data")(Tag_01) = 5
Next

局部腳本的數(shù)組(該數(shù)組僅在此腳本中可用)可以使用同樣的方式查詢,對于多維數(shù)組,各個維度通過一個逗號分隔開。

例如 訪問二維數(shù)組變量 "HMI_Data" 沒有連接控制器。

Dim HMI_Data(10 ,10)
Dim Tag_01
Tag_01 = HMI_Data(0 , 5)

注意

當使用控制器連接的數(shù)組元素時,推薦在腳本開始前將他們賦值給腳本內(nèi)部變量,然后再使用內(nèi)部變量進行其他工作。結(jié)束腳本前,將內(nèi)部變量賦值給數(shù)組元素。

(3)如何在控制器和腳本之間有效的賦值過程變量數(shù)組?

從控制器到一個腳本賦值,過程變量數(shù)組需要在一個循環(huán)中將數(shù)組元素一個一個賦值,參考示例。然而,也可以通過一個簡單的指令把局部腳本的數(shù)組的值賦給過程變量數(shù)組。

例如 把控制器的數(shù)組 "CPU_Array" 的值賦給內(nèi)部數(shù)組 "local_array" 和 把內(nèi)部數(shù)組 "local_array" 的值賦給控制器的數(shù)組 "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

注意使用數(shù)組可能導(dǎo)致較高的通信負載和數(shù)據(jù)不一致。

(4)如何訪問動態(tài)庫 ( "動態(tài)鏈接庫 ",DLLs)?

WinCC Comfort 和 Advanced 不能訪問 DLLs。WinCC Professional在用戶定義的C函數(shù)里可以調(diào)用DLL函數(shù) (DLL = Dynamic Link Library) 。

DLL 位于“..\Common Files\Siemens\bin”文件夾中,或位于 PATH 系統(tǒng)變量所定義的文件夾中。此變量由操作系統(tǒng)的系統(tǒng)屬性指定。

步驟

按如下步驟執(zhí)行,以通過 DLL 調(diào)用函數(shù):

(1)打開要調(diào)用 DLL 函數(shù)的用戶自定義 C 函數(shù)。

(2)在用戶自定義 C 函數(shù)的開始位置添加以下代碼:

#pragma code(".dll")

//聲明在 DLL 中存儲的函數(shù):

(...);

(...);

...

(...);

#pragma code

結(jié)果

<名稱.dll> 中的函數(shù) <函數(shù)名稱 1=""> ... <函數(shù)名稱 n=""> 被聲明??稍谟脩糇远x C 函數(shù)中調(diào)用這些函數(shù)。

示例:

以下示例顯示如何集成“kernel32.dll”文件和調(diào)用“GetLocalTime”函數(shù):

#pragma code("kernel32.dll")

VOID GetLocalTime(LPSYSTEMTIME lpSystemTime);

#pragma code()

SYSTEMTIME st;

GetLocalTime(&st);

(5)如何用VBS腳本確定鼠標當前的位置?

為了讀取當前鼠標的位置,需要訪問操作系統(tǒng)的 API (Application Programming Interface) 。VBS 不支持通過 DLLs 訪問操作系統(tǒng)的 API 。

(6)為什么不能在腳本里使用 “ MsgBox ” 命令?

“MsgBox” 命令不能用于 WinCC Comfort 和 WinCC Advanced 版本是由于安全的原因。 “MsgBox”的彈出顯示可能會覆蓋掉元素操作,比如:阻止設(shè)備的快速操作。此外,消息框可能會阻止腳本的進一步執(zhí)行。

解決辦法可以使用系統(tǒng)函數(shù) ShowSystemAlarm。

如何在一個腳本中使用十六進制符號給變量賦值?

在腳本編輯器中把字符組合 "&h" 作為個十六進制常數(shù)的標識。

例如

Dim Tag_01
Tag_01 = &h45E ' Corresponds to the decimal value "1118"

(7)如何在腳本里顯示或隱藏各個層級?

使用層是 WinCC (TIA Portal) 開發(fā)系統(tǒng)的一個功能。層只能在這里組態(tài)及顯示隱藏。

這個功能在操作面板或 PC 的運行系統(tǒng)中不可用。所以不能用腳本顯示或隱藏“層”。

解決辦法

在 “ 屬性>動畫>可見性 ” 組態(tài)變量,根據(jù)變量值控制相關(guān)對象的顯示或隱藏。

(8)如何在腳本中合并字符串?

可以使用 “ ” 來合并字符串:

例如 將 "Tag_Text_01", "Tag_Text_02" 和 "Tag_Text_03" 合并成新字符串 "Tag_01"

Dim Tag_01, Tag_Text_01, Tag_Text_02, Tag_Text_03

Tag_01 = Tag_Text_01 & Tag_Text_02 & Tag_Text_03

注意VB函數(shù) CStr (Expression) 將相應(yīng)的表達式轉(zhuǎn)換為“字符串”類型。 這樣在連接字符串轉(zhuǎn)換之前可以避免運行時出現(xiàn)錯誤。

(9)在腳本中如何在單獨的字符串之間插入一個通配符(空格)?

為了在兩個文本之間插入任意數(shù)量的空格,可以使用兩個引號 " "?!翱崭瘛钡臄?shù)量取決于兩個引號間的距離" "

連接下一個字符需要再次使用連接操作 "&"。

例如 將字符串 "Tag_Text_01", "Tag_Text_02" 和 "Tag_Text_03" 還有空格組合成一個新的字符串 "Tag_01"

Dim Tag_01, Tag_Text_01, Tag_Text_02, Tag_Text_03

Tag_01 = Tag_Text_01 & " " & Tag_Text_02 & " " & Tag_Text_03

(10)如何組態(tài)帶返回值和參數(shù)的腳本?

腳本類型必須是 “ Function ” 才可以有返回值。所以,請在TIA Portal 中添加新 VB 函數(shù)的 "Properties > General > Settings" 類型的下拉列表框中選擇 “Function” 。

在 “ Parameter ” 表格中您以創(chuàng)建腳本變量用來將內(nèi)部變量或控制器變量傳入在腳本需要的時候。組態(tài)函數(shù)返回值,在腳本中為腳本的名稱分配表達式。

例如

組態(tài)函數(shù)類型,。按下面所示,在TIA Portal 組態(tài)名稱為 “ VBFunction_1 ” 腳本函數(shù)的參數(shù)和返回值:

圖. 01

例如,腳本在按鈕的 “ Click ” 的事件中被使用。

圖. 02

在腳本中使用 "HMI_Tag_1" 的值賦給"Parameter_1" ,"HMI_Tag_2" 的值賦給"Parameter_2" ,必須有一行腳本定義了返回值。

下面的例子的返回值是兩個傳入?yún)?shù)的乘積:

VB_Function_1= Parameter_1 * Parameter_2

"VB_Function_1" 是這個函數(shù)的名字,在執(zhí)行這個腳本后,"HMI_Tag_3" 獲得這個函數(shù)的返回值是 "HMI_Tag_1" * "HMI_Tag_2" 。

注意

定義一個 "by reference" 的參數(shù) ,這意味著作為 "By_Ref " 參數(shù),僅對腳本中定義的和引用的變量產(chǎn)生影響,對 HMI 內(nèi)部變量或者控制器變量不起作用。

(11)如何在運行時改變對象的屬性(顏色,長度等)?

以下手冊中提供了對象的屬性和使用的信息:

SIMATIC WinCC WinCC Engineering V15 - 編程參考下 "VB腳本編寫 > VBS 對象模型 > 屬性"。(沒有該手冊的可以聯(lián)系主編)

(12)什么能導(dǎo)致“最大嵌套深度到達”消息被觸發(fā)?

如果太多的腳本在結(jié)束前調(diào)用自己或者調(diào)用其他腳本,會引起到達最大嵌套深度消息。

解決方法檢查腳本過程的處理,如有必要,減少腳本的嵌套。

(13)如何確定當前畫面的編號和畫面名稱?

通過預(yù)定義 VB 函數(shù) “HmiRuntime.BaseScreenName ” 的返回值提供了當前畫面的名字。

注意

不能使用腳本通過相關(guān)畫面的“屬性”直接讀取畫面名稱/編號。

也可以使用“畫面編號”區(qū)域指針。

(14)如何在腳本中使用多路復(fù)用變量?

多路復(fù)用變量不能用在腳本中。

(15)如何在腳本里使用 HMI UDT 變量?

可以使用“SmartTags” 訪問數(shù)據(jù)類型是HMI UDT的變量元素(用戶定義的數(shù)據(jù)類型)。

例如 訪問 UDT 變量 " Recipe " 的元素 "x"

SmartTags("Recipe.x")

注意

這適用于在項目中已創(chuàng)建庫類型 HMI UDT的實例。不能直接訪問庫類型。

(16)如何在腳本中保存變量值當他們在兩個腳本之間調(diào)用?

在兩個腳本間相互傳遞數(shù)據(jù)需要使用全局變量。全局變量可以是 HMI 或者 PLC 變量。

腳本中定義的變量總是在腳本結(jié)束時刪除。

(17)如何通過腳本修改文本域的內(nèi)容?

文本域的文本在運行時可以通過修改相應(yīng)的對象屬性而改變。

例如 在畫面 "MachineData" 中,將文本 "NewText" 分配給 文本域 "Text_Field_01" :

Dim obj
Set obj = HmiRuntime .Screens("MachineData") .ScreenItems("Text_Field_01")
obj .Text = "NewText"

注意

文本的變化只是“暫時”的。當屏幕更改后這個被修改后的文本將被組態(tài)的文本覆蓋。

(18)如何在腳本中從密碼列表或用戶視圖中讀取用戶密碼?

由于安全原因這個功能在 WinCC (TIA Portal) 中不能實現(xiàn)。

(19)如何通過腳本關(guān)閉 WinCC 運行系統(tǒng)和關(guān)閉PC和面板?

通過系統(tǒng)函數(shù) “StopRuntime” 可以關(guān)閉 WinCC 運行系統(tǒng)和操作系統(tǒng) 。

可以通過修改 "StopRuntime" 函數(shù)的參數(shù)方式選擇僅關(guān)閉運行系統(tǒng)或者將運行系統(tǒng)和操作系統(tǒng)都關(guān)閉。

Parameter

Meaning

0 = hmiStopRuntime

Ends on the Runtime

1 = hmiStopRuntimeAndOperationSystem

Ends both the Runtime and the OS

例如StopRuntime hmiStopRuntime

StopRuntime 1

注意 Windows-based 面板的操作系統(tǒng)不能通過這種方式關(guān)閉。

(20)如何在腳本中訪問一個畫面或者模板的對象?

組態(tài) “Runtime” 對象的屬性 “ ActiveScreen ”,可以找到畫面上組態(tài)對象的名字和修改相關(guān)的屬性。

例如 把激活屏幕中的對象 "Circle_01" 設(shè)置為不顯示

HmiRuntime .ActiveScreen .ScreenItems("Circle_01") .Visible=False

注意

在畫面中被組態(tài)對象必須有唯一的名字。對象的屬性修改僅是暫時的,當屏幕更改后視圖使用組態(tài)時的配置。

如何在運行時選擇一個畫面對象(例如輸入輸出域)?

獲得一個對象的焦點通過 "Activate" 功能,文本輸入會直接自動指向那個對象。

例如 獲得屏幕 "Screen_1" 的 輸入/輸出域 "IOField_1" 的焦點


HMIRuntime.Screens("Screen_1").ScreenItems("IOField_1").Activate


QQ在線咨詢
聯(lián)系電話
17658151177
售后服務(wù)
17658151177