发布于 2011-08-19 16:43:44
15楼
我也写了个,累计脉冲时间间隔的。脉冲输入翻转M0.0,建一个连续的存储区,来存放8次时间间隔的数值,M0.0每翻转一次就就累加一次,如果累计值小于一分钟就输出报警。
TITLE=程序注释
Network 1
// 建立入栈指针和累计指针 ,上电复位
LD SM0.1
MOVD &VB100, VD16
MOVD &VB100, VD22
MOVB 0, VB20
MOVD 0, VD26
FILL 0, VW100, 20
R M0.0, 1
Network 2 // 网络标题
// 网络注释
LD I0.0
EU
LD I0.1
EU
OLD
LD I0.2
EU
OLD
LD I0.3
EU
OLD
CALL SBR0, M0.0
Network 3
// m0.0上升沿计时
LD M0.0
= L60.0
LD M0.0
= L63.7
LD L60.0
CALL SBR1, L63.7
Network 4
// m0.0下降沿计时
LDN M0.0
= L60.0
LDN M0.0
= L63.7
LD L60.0
CALL SBR2, L63.7
Network 5
// 上升沿入栈
LD M0.0
EU
CALL SBR3, 9
Network 6
// 下降沿入栈
LD M0.0
ED
CALL SBR3, 9
Network 7
// 时间间隔累加
LD M0.0
EU
CALL SBR4, 8
Network 8
LD M0.0
ED
CALL SBR4, 8
Network 9
LDW< VW26, 600
= Q0.0
点翻转
LDN #翻转点:L0.0
= #翻转点:L0.0
计时1
LD #in:L0.0
TON T37, VW10
MOVW T37, VW8
计时2
LD #in:L0.0
TON T38, VW10
MOVW T38, VW8
入栈
LD SM0.0
MOVW VW8, *VD16
+D 2, VD16
INCB VB20
AB>= VB20, #堆栈长度:LB0
MOVB 0, VB20
AENO
MOVD &VB100, VD16
累加
Network 2
LD SM0.0
FOR LW2, 1, LW0
Network 3
LD SM0.0
+I *VD22, VW26
+D 2, VD22
Network 4
NEXT
生命就是次单程旅行