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