quote:以下是引用peisong在2011-09-04 17:37:15的发言:
以100mS的定时器为例,思路如下:
定时器/10=总计秒数
总计秒数/60=总计分数
总计秒数/3600=总计时数=显示小时数
总计分数-(显示的小时数*60)=显示的分数
总计秒数-(显示的小时数*3600+显示的分数*60)=显示的秒数
程序如下:
网络1
LD SM0.0
MOVW T37, MW0 //MW0为总计秒数
/I 10, MW0
MOVW MW0, MW2 //MW02为总计分数
/I 60, MW2
MOVW MW0, MW4 //MW4是显示的小时数。
/I 3600, MW4
网络2 // MW2-(MW4*60) =MW20 是显示的分钟数
LD SM0.0
MOVW MW4, MW10
*I 60, MW10
MOVW MW2, MW20
-I MW10, MW20
网络3 MW0-(MW4*3600)-MW20*60=MW22 是显示的秒数
LD SM0.0
MOVW MW4, MW12
*I +3600, MW12
MOVW MW20, MW14
*I 60, MW14
MOVW MW12, MW16
+I MW14, MW16
MOVW MW0, MW22
-I MW16, MW22
不知是否正确,请各位指正。
万分感谢!!!此程序经过和组态验证后很好用,上传一段定时器工作的条件:
网络 5
LDN M0.1
A M0.3
AN T39
TON T38, 60
网络 6
LD T38
TON T39, VW30
网络 7
LD SM0.0
MOVW T37, VW28
/I +10, VW28
MOVW VW26, VW32
*I +600, VW32
网络 8
LDN M0.1
A M0.3
AN T39
TON T38, 60
网络 9
LD T38
TON T39, VW30
LD SM0.0
MOVW T39, VW24
网络 10
LD SM0.0
MOVW T39, VW20
/I +10, VW20
MOVW VW22, VW30
*I +600, VW30
只是在存储区因为mw的操作数太少我将M改成了V,部分朋友一开始没能理解我的意思,我的要求是定时器值的触发是有条件的,而不是那种系统时间的形式,附系统时间:
LD SM0.0
TODR VB500
LD SM0.0
LPS
BTI VB503, VW550
AENO
MOVW VW550, 当前显示时间(时):VW510
BCDI 当前显示时间(时):VW510
LRD
BTI VB504, VW552
AENO
MOVW VW552, 当前显示时间(分):VW512
BCDI 当前显示时间(分):VW512
LRD
BTI VB500, VW554
AENO
MOVW VW554, VW570
AENO
BCDI VW570
AENO
MOVW VW570, 当前显示时间(年):VW516
+I +2000, 当前显示时间(年):VW516
LRD
BTI VB501, VW556
AENO
MOVW VW556, 当前显示时间(月):VW518
BCDI 当前显示时间(月):VW518
LRD
BTI VB502, VW558
AENO
MOVW VW558, 当前显示时间(日):VW520
BCDI 当前显示时间(日):VW520
LRD
MOVW 当前显示时间(时):VW510, VW560
AENO
*I +100, VW560
AENO
MOVW VW560, #TIME_WORD:LW0
+I 当前显示时间(分):VW512, #TIME_WORD:LW0
LPP
BTI VB505, VW562
AENO
MOVW VW562, 当前显示时间(秒):VW514
BCDI 当前显示时间(秒):VW514