搞PLC編程多年,一直不知道狀態機,學習matlab后,發現狀態機編程異常方便,過去很多編程時的疑惑豁然開朗起來。今天跟大家分享一下如何在STL中使用狀態機。
下面是用狀態機描述的控制任務。
這個狀態機較簡單,那如何在STL中把它描述出來呢? 這里我們選擇用JL指令。。。我就直接上代碼了,一看便知。但JL程序只能用來表示單步狀態,遇到並行狀態就處理不了了。。下次我們用ST語言來描述更復雜的狀態機。。
L #state // 把#state的值載入累加器
JL rng1 // 如果累加器的值,大於4,也就是說,跳轉分支不包含下面的分支,就跳轉到rng1,說明出錯。。// 其實這條語句相當於 else 語句
JU st0 // 當累加器的值為0時, 走這個分支
JU st1 // 當累加器的值為1時, 走這個分支
JU st2 // 當累加器的值為2時, 走這個分支
JU st3 // 當累加器的值為3時, 走這個分支
JU st4 // 當累加器的值為4時, 走這個分支rng1: SET
S #error
BEUst0: L 1 // 這個 1 就是下個狀態。
A #transition01 // 這個轉移條件滿足,狀態將由state0,轉移到 state1,下面的流程類似。。。
JC next
JU ovrst1: L 2
A #transition12
JC nextL 3
A #transition13
JC next
JU ovrst2: L 4
A #transition24
JC next
JU ovrst3: L 1
A #transition31
JC next
JU ovrst4: L 3
A #transition43
JC next
JU ovrnext: T #state
ovr: NOP 0