完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
控制任务
大家好,今天我们用状态机描述稍复杂的实例,同时用LAD和ST语言写状态机。我们的控制任务如下: 真空泵A和真空泵B, 按下启动按钮后, 泵A启动, 3秒后泵B也启动, 此时泵A仍运行, 当容器真空达到后, 泵B停止, 泵A继续运行, 维持容器真空。 当按下停止按钮后, 泵A停止。 再次按启动按钮, 泵B启动, 3秒后泵A也启动, 此时泵B仍运行, 当容器真空达到后, 泵A停止, 泵B继续运行, 维持容器真空。 当按钮停止按钮后, 泵B停止。 注意: 任何状态按下停止按钮, 都停止, 在按启动后, 切换泵的顺序。 首先,我们写画状态机。 注意其中两个中间变量:isActivatedPumpAB和lastPumpA. lastPumpA 是记录泵的启动顺序,而isActivatedPumpAB保证每次任务,PumpAB只激活一次。另外Idle状态到PumpA和PumpB少了一个条件,这里我不想修改图片,直接文字说明一下,应改为 [start && ~stop && ~lastPumpA] 和 [start && ~stop && lastPumpA]。 用LAD表达状态机 程序段1到程序段5代表每个状态, 每个状态用一个SR指令表示,S管脚是转移到此状态的条件,R管脚代表当有其它状态激活时,就把当前状态复位掉,一面有状态同时激活。 状态机就这么简单。 LAD的表达上,有两点需要注意,每个状态机需要一个默认的激活步,我们选Idle,那么stateIdle默认是true状态。 每个步的复位条件,必需RLO上升严,否则不会转移。. 用SCL表达状态机 用SCL表达的状态机中,用case语句表达状态的转移。这里我们还是看stateIdle状态,其中的两个IF,是两个转移条件.#mainState中的值代表当前激活状态,它一共可以取4个值,代表4个状态,这里我用常量表示。.另外注意初始状态,我们给#mainState的值初始化为0,代表stateIdel为初始状态。其它的比较简单. |
|
|
|
只有小组成员才能发言,加入小组>>
922浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 08:48 , Processed in 0.661214 second(s), Total 99, Slave 80 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号