PLC状态机编程第二篇-负载均衡

控制任务

大家好,今天我们用状态机描述稍复杂的实例,同时用LAD和ST语言写状态机.我们的控制任务如下:

真空泵A和真空泵B, 按下启动按钮后, 泵A启动, 3秒后泵B也启动, 此时泵A仍运行, 当容器真空达到后, 泵B停止, 泵A继续运行, 维持容器真空. 当按下停止按钮后, 泵A停止.  再次按启动按钮, 泵B启动, 3秒后泵A也启动, 此时泵B仍运行, 当容器真空达到后, 泵A停止, 泵B继续运行, 维持容器真空. 当按钮停止按钮后, 泵B停止.

注意: 任何状态按下停止按钮, 都停止, 在按启动后, 切换泵的顺序.

首先,我们写画状态机.

1

注意其中两个中间变量:isActivatedPumpAB和lastPumpA. lastPumpA 是记录泵的启动顺序,而isActivatedPumpAB保证每次任务,PumpAB只激活一次.另外Idle状态到PumpA和PumpB少了一个条件,这里我不想修改图片,直接文字说明一下,应改为

[start && ~stop && ~lastPumpA] 和 [start && ~stop && lastPumpA].

 

 

用LAD表达状态机

LAD


程序段1到程序段5代表每个状态, 每个状态用一个SR指令表示,S管脚是转移到此状态的条件,R管脚代表当有其它状态激活时,就把当前状态复位掉,一面有状态同时激活.

状态机就这么简单.

 

LAD1

LAD的表达上,有两点需要注意,每个状态机需要一个默认的激活步,我们选Idle,那么stateIdle默认是true状态. 每个步的复位条件,必需RLO上升严,否则不会转移..

 

用SCL表达状态机

SCL

SCL2

用SCL表达的状态机中,用case语句表达状态的转移.这里我们还是看stateIdle状态,其中的两个IF,是两个转移条件.#mainState中的值代表当前激活状态,它一共可以取4个值,代表4个状态,这里我用常量表示..另外注意初始状态,我们给#mainState的值初始化为0,代表stateIdel为初始状态.其它的比较简单.

转载于:https://www.cnblogs.com/TomDing/p/7142570.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值