搞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 BEU st0: L 1 // 这个 1 就是下个状态。 A #transition01 // 这个转移条件满足,状态将由state0,转移到 state1,下面的流程类似。。。 JC next JU ovr st1: L 2 A #transition12 JC next L 3 A #transition13 JC next JU ovr st2: L 4 A #transition24 JC next JU ovr st3: L 1 A #transition31 JC next JU ovr st4: L 3 A #transition43 JC next JU ovr next: T #state ovr: NOP 0
|