恭喜,你发布的帖子
发布于 2022-12-11 23:47:49
30楼
我强调一下吧,我讲的逻辑运算全扫描,逻辑变量只赋值一次,指的是通常二进制逻辑运算涉及的逻辑变量(也就是布尔变量)。
我从来没有公开讲过,数值处理运算的数值变量也要全扫描并且只赋值一次。
举个例子大家去试试吧
电机启停控制,有手动指令M_Cmd(1=启动),有自动指令A_Cmd(1=启动),手自动切换指令M_A(0=M,1=A),有故障信号FAULT,有运行反馈信号RUN,要求电机在运行中手自动切换指令无效。
我再做一下Z版的这个例子.
先定义信号:
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的网友,在STL视图下COPY进去,再转成LAD视图即可。
只是在LAD下,看不到注释了。
这段程序,隔几个扫描周期调用(扫描)一次,并不会出现问题。
请填写推广理由:
分享
只看
楼主