许多人谈到边沿指令,就和“周期”“扫描周期”相关联,我写的这一段实验程序可以证明,边沿指令和周期无关。
我要达到的预期目的:
1、一个边沿指令,只能服务一个取沿对象,不能为多个取沿对象共享。
2、边沿指令,和周期、扫描周期等时间概念无关,只与 扫描 行为有关。
3、边沿指令放在子程序中,与在主程序中的行为表现是相同的。在中断程序中也是一样的。
4、一个扫描周期内,子程序被 间隔调用,多次调用,均不会影响 边沿指令的行为,以及输出结果。
STL形式的程序
一、主程序
LD First_Scan_On:SM0.1 // 初始化
FILL 0, CNT_间调用EU:VW0, 50 // 对变量区清0
// 间隔调用,100ms调用一次
LD T33
CALL 间隔调用:SBR0, Clock_1s:SM0.5
NOT
TON T33, 10 // 100ms周期
// 循环多次调用
LD Always_On:SM0.0
FOR AC0, 1, 10 // 循环10 次
CALL 循环多次调用:SBR1, Clock_1s:SM0.5
NEXT
// 一般多次调用
LD Always_On:SM0.0
CALL 一般多次调用:SBR2, Clock_1s:SM0.5 // 1#
CALL 一般多次调用:SBR2, Clock_1s:SM0.5 // 2#
CALL 一般多次调用:SBR2, Clock_1s:SM0.5 // 3#
CALL 一般多次调用:SBR2, Clock_1s:SM0.5 // 4#
CALL 一般多次调用:SBR2, Clock_1s:SM0.5 // 5#
CALL 一般多次调用:SBR2, Clock_1s:SM0.5 // 6#
CALL 一般多次调用:SBR2, Clock_1s:SM0.5 // 7#
CALL 一般多次调用:SBR2, Clock_1s:SM0.5 // 8#
CALL 一般多次调用:SBR2, Clock_1s:SM0.5 // 9#
CALL 一般多次调用:SBR2, Clock_1s:SM0.5 // 10#
二、子程序:间隔调用:SBR0
LD #取沿对象:L0.0
EU
INCW CNT_间调用EU:VW0 // 检测到上升沿+1
LD Always_On:SM0.0
INCD CNT_间隔调用:VD12 // 每调用一次+1
三、子程序:循环多次调用:SBR1
LD #取沿对象:L0.0
EU
INCW CNT_循环多次调用EU:VW2 // 检测到上升沿+1
LD Always_On:SM0.0
INCD CNT_循环多次调用:VD16 // 每调用一次+1
四、子程序:一般多次调用:SBR2
LD #取沿对象:L0.0
EU
INCW CNT_一般多次调用EU:VW4 // 检测到上升沿+1
LD Always_On:SM0.0
INCD CNT_一般多次调用:VD20 // 每调用一次+1
五、变量定义:

六、状态监视结果:

七、LAD程序
沿指令间隔调用与多次调用.rar.pdf
自行改名为rar,再解压。