加入收藏 在線留言 聯系我們
        關注微信
        手機掃一掃 立刻聯系商家
        全國服務熱線13185520415
        公司新聞
        西門子博途中WinCC 腳本使用技巧匯總
        發布時間: 2023-12-06 21:14 更新時間: 2024-11-23 08:00
        觀看西門子博途中WinCC 腳本使用技巧匯總視頻
        (1)為什么一個由內部變量的 “數值改變” 事件觸發的腳本不被執行?

        如果使用一個內部變量調用另外一個內部變量,以此,例如被調用的變量又去執行一個腳本(比如,根據變量變化),此時一個安全機制會阻止這個功能被執行。
        此安全功能是為了阻止連續的執行。
        例如
        在內部變量 “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)

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

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

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

        例如   把控制器的數組 "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

        注意使用數組可能導致較高的通信負載和數據不一致。
         

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


        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 。


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


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

        解決辦法可以使用系統函數 ShowSystemAlarm。


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

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

        例如


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

        聯系方式

        • 電  話:13510737515
        • 聯系人:董海波
        • 手  機:13185520415
        • 微  信:13185520415