前面小節我們介紹了下圖中的數學運算,
字符串處理,數據轉換,數據操作分類函數,
這小節我們繼續了解宏控制分類下的函數,
通過編寫程序來實踐。
宏在編寫好后,可以供元件調用,也可以供其他宏調用。
威綸提供3個宏操作的函數。
1.DELAY。
主要用于在宏指令執行過程當中延時執行的功能。
例如DELAY(1000),表示延時1000ms后,再執行后面的宏指令。
macro_command main()
int value=0,n=0
int i=0
for i=0 to 3 step 1
RAND(value)
n=value%255
//延時500ms再執行后面的SetData(n, "Local HMI", LW, 0, 1)
DELAY(500)
SetData(n, "Local HMI", LW, 0, 1)
next
end macro_command
2. ASYNC_TRIG_MACRO。
函數用于在一個宏指令中,使用異步的方法調用其他宏指令。
例如我們編寫好了一個宏,ID為0,名稱為macro_0
我們就可以通過宏ID,或宏名稱調用宏。
ASYNC_TRIG_MACRO(0)
ASYNC_TRIG_MACRO("macro_0")
3. SYNC_TRIG_MACRO。
跟上邊的函數類似,我們可以使用同步方式調用一個宏。
在使用上是相同的,也可以傳遞宏ID,或宏名稱。
如下
macro_command main()
SYNC_TRIG_MACRO(0)
SYNC_TRIG_MACRO("macro_1")
end macro_command
同步可以理解為函數必須等被調用的宏執行完才往下繼續執行。
而異步不會關心被調用的宏是否執行完,僅觸發一次調用就繼續執行后面的代碼。
這里我們可以編寫一個例程來使用宏指令相關的函數,同時查看同步,異步的區別。
首先編寫兩個宏指令,實現對LW0,LW1寄存器數值的修改,用于被調用其他宏調用。
代碼如下
第一個宏ID為0,名稱為 macro_0,實現了對地址LW0的隨機修改。
macro_command main()
int value=0
int i=0
for i=0 to 255 step 10
value = value+10
SetData(value, "Local HMI", LW, 0, 1)
DELAY(100)
next
end macro_command
第二個宏ID為1,名稱為 macro_1,實現了對地址LW1的隨機修改。
macro_command main()
int value=0
int i=0
for i=0 to 255 step 10
value = value+10
SetData(value, "Local HMI", LW, 1, 1)
DELAY(100)
next
end macro_command
然后再編寫兩個宏,對前面編寫好的宏進行同步與異步調用。
第三個宏,實現對第一個,第二個宏的異步調用。
可以通過宏ID或宏名稱調用。
macro_command main()
ASYNC_TRIG_MACRO(0)
ASYNC_TRIG_MACRO("macro_1")
end macro_command
第四個宏,實現對第一個,第二個宏的同步調用。
macro_command main()
SYNC_TRIG_MACRO(0)
SYNC_TRIG_MACRO("macro_1")
end macro_command
然后是添加元件,來顯示宏執行的效果。
如下圖,我們添加了一個棒圖元件,一個表針元件。
同時設置了其讀寫地址為LW0和LW1,以及數值范圍為0-255.
再添加兩個位狀態設置元件,調用宏3,宏4.