夢雨天涯
微信hui530527 &
級別: 網絡英雄
|
第一次 macro_command main() bool a[2],QB_lamp,MB_Rising_edge bool on=1,off=0 GetData(a[0], "Local HMI", LB, 0, 1) //產生上升沿 if a[0] and not a[1] then MB_Rising_edge=1 end if //啟動自鎖 GetData(QB_lamp, "Local HMI", LB, 10, 1) if ( MB_Rising_edge and not QB_lamp ) or (not MB_Rising_edge and QB_lamp) then SetData(on, "Local HMI", LB, 10, 1) else SetData(off, "Local HMI", LB, 10, 1) end if //復位上升沿和保持 MB_Rising_edge=0 a[1]=a[0] end macro_command [ 此帖被夢雨天涯在2023-02-03 10:58重新編輯 ] |
|
---|---|---|
本帖最近評分記錄:
|
夢雨天涯
微信hui530527 &
級別: 網絡英雄
|
看到以上程序,就感覺有點復雜了,于是先寫一個上升沿的程序 macro_command main() bool Button,keep//按鈕,保持 unsigned short count//計數 GetData(Button, "Local HMI", LB, 0, 1) GetData(count, "Local HMI", LW, 0, 1) if Button and not keep then//當按鈕接通且保持沒有接通,開始計數一次 count=count+1//計數一次 end if keep=Button//按鈕賦值給保持 SetData(count, "Local HMI", LW, 0, 1) end macro_command |
|
---|---|---|
|
夢雨天涯
微信hui530527 &
級別: 網絡英雄
|
第三次,有了以上思路,然后繼續寫 macro_command main() bool Button,keep//按鈕,保持 bool light//指示燈 GetData(Button, "Local HMI", LB, 0, 1) GetData(light, "Local HMI", LB, 10, 1) if Button and not keep then if light then//當按鈕接通且保持沒有接通,開始計數一次 light=0//指示燈亮 else light=1//指示燈亮 end if end if keep=Button//按鈕狀態賦值到保存輸出 SetData(light, "Local HMI", LB, 10, 1) end macro_command |
|
---|---|---|
|
夢雨天涯
微信hui530527 &
級別: 網絡英雄
|
發現第二個IF是可以簡化的,再次簡化可得 macro_command main() bool Button,keep//按鈕,保持 bool light//指示燈 GetData(Button, "Local HMI", LB, 0, 1) GetData(light, "Local HMI", LB, 10, 1) if Button and not keep then//判斷按鈕是否接通,且判斷按鈕是否在保持狀態 light=not light//按鈕輸出相反 end if keep=Button//按鈕狀態賦值到保存輸出 SetData(light, "Local HMI", LB, 10, 1) end macro_command |
|
---|---|---|
|
夢雨天涯
微信hui530527 &
級別: 網絡英雄
|
不斷簡化,精益求精,程序邏輯和思路整理的過程,這就是學習 |
|
---|---|---|
|
夢雨天涯
微信hui530527 &
級別: 網絡英雄
|
圖片:
圖片:
圖片:
圖片:
全部圖片 |
|
---|---|---|
|