FB块中主要有Input、Output、Static、InOut、Temp、Contant这几个接口,今天主要介绍InOut接口。
InOut接口为输入输出型,代表此接口的参数既可以用过外部接口输入实参,也可作为输出类型,通过外部接口赋值给其他变量
下面通过一个例子实际演示。
功能需求:
按下启动按钮,在没有报警、互锁、暂停情况下,电机运行。
当有报警或者互锁时,触发暂停,电机立即停止,
当人工暂停时,电机也立即停止
程序逻辑截图:
变量名称 | 数据类型 | 接口类型 | 描述 |
---|---|---|---|
Start | Bool | Input | 电机启动 |
Interlock | Bool | Input | 电机互锁 |
Alarm | Bool | Input | 电机报警 |
Run | Bool | Output | 电机运行 |
Pause | Bool | InOut | 电机暂停运行 |
但根据截图中程序运行时,却无法通过外部接口给Pause写值。
原因为:虽然Pause为InOut型,但由于使用梯形图编写,导致Pause线圈在没有互锁或报警时,线圈无法得电,即此时Pause线圈是一直写 0的,导致无法通过外部给Pause写值
不过如果捕捉pause信号,会发现你可以对Pause写值,因为在PLC的一个扫描周期内,在完成外部的Pause写值后,程序会在下一个扫描周期重新写0,从而将原来的值覆盖掉,由于PLC的扫描周期很快,一般为150ms,所以肉眼一般很难看到此变化。
如何改进呢?很简单,将关于Pause程序修改为SCL就可以了。截图如下: