恭喜,你发布的帖子
发布于 2022-12-12 22:39:33
46楼
你的例子,我写的程序没有使用中间变量,也没有使用沿指令,同样只有一次输出
能实现你的要求吗?
不全扫描会影响结果吗?
重新贴一下程序:
定义信号:
MS:手动启动指令,状态型值
AS:自动启动指令,状态型值
NMA:当前输入(新的)手自动指令,状态值,0=M,1=A
PMA:前一次扫描留下的手自动指令,状态值,0=M,1=A
FAULT:故障状态,0=正常,1=故障
RUN:运行状态,0=停止,1=运行
网络1
LD RUN // 电机运行中
A PMA // 取前一扫描留下的值
LDN RUN // 电机未运行
A NMA // 取当前输入的新值
OLD // 合并
= PMA // 作为本次扫描使用的值
网络2
LD MS // 手动命令
AN PMA // 在手动模式下有效
LD AS // 自动命令
A PMA // 在自动模式下有效
OLD // 合并
AN FAULT // 非故障状态
= RUN // 电机运行
转成LAD视图如下。
如果这是个大型电机,本身有自己的控制系统,它的启停可能会是个比较长的过程,PLC的输出也只是个控制指令而已,你的程序在停机的瞬间就切换有效模式了,此时系统可能还在停机过程中,而此时如果有效模式下的启动指令到来,控制系统可能在电机系统在停机过程中又对其发出启动指令。
当然,我也可以通过程序来规定严格的操作顺序,比如必须在对应的模式下才能停机,停机后才能人工选择切换工作模式。
我不在于说谁的程序的逻辑是否合理或者优化,就你的例程与我说的全扫描与与逻辑变量赋值一次没冲突呀。
请填写推广理由:
分享
只看
楼主