恭喜,你发布的帖子
发布于 2018-01-31 07:20:16
41楼
1、关于单次,是我们认为的单次,PLC则不这么认为。PLC一运行起来,不知道什么时候才是尽头,几年之后第二次没来,也不会认为这就是单次了。
2、关于循环体内是那个循环时捉到了沿,把STL程序作了修,把更新计数器时的现场保留下来,进行分析:
TITLE=五、实例5A:沿指令在主程序的循环中,记录循环体内沿发生的时刻
//
// 1、使用SMB34定时产生50ms中断,对M0.0取反,模拟一个10Hz的信号源
//
// 2、在主程序,每周期扫一次,取M0.0上升沿对VD0加1
//
// 3、在主程序,做一个循环,在循环内同样对M0.0的上升沿,对VD4加1
//
Network 1
LD SM0.1 // 第一扫描周期
FILL 0, VW0, 12 // 清0,6个DW
MOVB 50, SMB34 // 定时中断,50ms
ATCH INT0, 10 // 启用中断
ENI // 开中
// 每周期扫一次
LD M0.0 // 10Hz信号
EU // 上升沿
INCD VD0 // 在上升沿增1
// 做一个For 循环
LD SM0.0
FOR AC3, 1, 4
LD M0.0
EU // 循环体内,对M0.0取沿
INCD VD4
MOVW AC3, VW100 // 把循环值记下来
S M1.0, 1 // 做一个更新标记
// 插入5ms延时,让M0.0有机会在循环体内变化
LD SM0.0
BITIM AC1 // 记录时间点
LBL 10
LD SM0.0
CITIM AC1, AC0 // AC0就是延时的时间
LDD>= 5, AC0 // 不到5ms?
JMP 10
// For循环结束
NEXT
// 看看是什么时候捉到的沿,分析
LDW= 1, VW100
A M1.0
INCD VD8 // 沿在第一循环出现
LDW= 2, VW100
A M1.0
INCD VD12 // 沿在第二循环出现
LDW= 3, VW100
A M1.0
INCD VD16 // 沿在第三循环出现
LDW= 4, VW100
A M1.0
INCD VD20 // 沿在第四循环出现
// 复位更新标记
LD SM0.0
R M1.0, 1 // 复位更新标志
MOVD VD8, AC2
+D VD12, AC2
+D VD16, AC2
+D VD20, AC2
MOVD AC2, VD24 // 把各计数加起来,应等于VD4
观察下来,VD8、VD12、VD16、VD20均有计数,概率基本相等。VW100在1-4之间不断变化。
VD8-VD20的总和==VD4==VD0
请填写推广理由:
分享
只看
楼主