
??背景AWTK?全稱 Toolkit AnyWhere,是 ZLG 開發的開源 GUI 引擎,旨在為嵌入式系統、WEB、各種小程序、手機和 PC 打造的通用 GUI 引擎,為用戶提供一個功能強大、高效可靠、簡單易用、可輕松做出炫酷效果的 GUI 引擎。
??簡介
狀態機是一個常用的設計模式,在有的情況下采用狀態機,邏輯清晰,實現簡單。在 AWPLC 中,也是可以采用狀態機模式的,本文以一個簡化版的紅綠燈為例,演示在 AWPLC 中實現狀態機的方法。
狀態轉換如下圖所示:

1. 系統組成
??PLC?程序
1. 變量定義
STATE_RED 表示紅色狀態,是一個常量,取值為 1;
STATE_YELLOW 表示黃色狀態,是一個常量,取值為 2;
STATE_GREEN 表示綠色狀態,是一個常量,取值為 3;
STATE 表示系統當前的狀態;
LED_RED 表示紅色 LED 燈,映射到第 1 個數字輸出;
LED_YELLOW 表示黃色 LED 燈,映射到第 2 個數字輸出;
LED_GREEN 表示綠色 LED 燈,映射到第 3 個數字輸出。

如果系統當前狀態 STATE 等于 STATE_RED 時,表明當前處于紅燈狀態:點亮紅色 LED 燈,定時器保持工作,當定時器超時,設置系統當前狀態為黃燈狀態;
如果系統當前狀態 STATE 等于 STATE_YELLOW 時,表明當前處于黃燈狀態:點亮黃色 LED 燈,定時器保持工作,當定時器超時,設置系統當前狀態為綠燈狀態;
如果系統當前狀態 STATE 等于 STATE_GREEN 時,表明當前處于綠燈狀態:點亮綠色 LED 燈,定時器保持工作,當定時器超時,設置系統當前狀態為綠燈狀態。
* 值得注意的是,這里使用了功能塊 MOVE 對變量進行賦值。按道理來說,對變量進行賦值,直接拉根線連接起來就可以了,為什么還要加個 MOVE 呢?原因在于,這里是條件賦值,即在定時器超時的時候,才對 STATE 進行賦值。
*?這就需要利用功能的執行控制?(Execution Control),當功能塊啟用執行控制?(Execution Control)?時,只有其輸入引腳 EN 為 TRUE 時,其后續賦值才生效。
具體實現如下圖所示:

??用戶界面
應用程序不需要編程,用 AWTK Designer 設計好界面,將控件與模型進行綁定即可。下面介紹一下控件與模型的綁定方法。這里用的是 AWTK-MVVM,數據綁定規則與 AWTK-MVVM 是完全一樣的。
模型可以用 io、plc 或者 io+plc。io 可以用來綁定 IO 變量,plc 可以用來綁定程序 PLC 內部變量。

運行效果:系統啟動后,三個 LED 燈循環點亮,和跑馬燈不同的是,三個 LED 點亮的時間并不完全相同。
*?由此可見,在 AWPLC 功能塊圖的幫助下,我們不要寫 C 代碼或腳本,即可完成應用程序的開發。AWPLC 用低代碼降低了開發的門檻,提高了開發的效率。AWPLC 等您來玩!
AWPLC 目前還處于開發階段的早期,寫這個系列文章的目的,除了用來驗證目前所做的工作外,還希望得到大家的指點和反饋。如果您有任何疑問和建議,請在評論區留言。
??技術交流群
更多往期文章,請點擊“?閱讀原文?”。





