STL编写的一个程序块(昨天问题的补充)
刘玉蓉
发布于2014-10-24 17:38
71
0
标签:
昨天提问得到了耐心解答。今天继续补充问题!
A #ZFRG
JC M001
S #ZFRG
R #ZAGL
L 0
T #ISTH
T #ISTM
T #SEK
JC M002
M001: AN M 99.7
BEC
L #SEK
INC 1
T #SEK
L 60
<I
JC M002
L 0
T #SEK
L #ISTM
INC 1
T #ISTM
L 60
<I
JC M002
L 0
T #ISTM
L #ISTH
INC 1
T #ISTH
M002: NOP 0
L #SOLH
L #ISTH
>I
BEC
L #SOLM
L #ISTM
>I
BEC
S #ZAGL
L 0
T #ISTH
T #ISTM
T #SEK
下边一段程序昨天没粘贴上,今天补充,希望解答。
其中#SOLH被外部赋值W#16#0,#SOLM被赋值W#16#99
佳答案
A #ZFRG
JC M001//如果 #ZFRG=1则跳转到M001处;
S #ZFRG//置位#ZFRG标志
R #ZAGL//复位#ZAGL标志
L 0
T #ISTH//小时单元清0
T #ISTM//分钟单元清0
T #SEK//秒单元清0
JC M002
M001: AN M 99.7
BEC //如M 99.7为0,则条件块结束
L #SEK
INC 1
T #SEK//秒单元加1
L 60
<I
JC M002//秒单元如小于60,则跳转到M002。
L 0
T #SEK//如大于等于60,秒单元清0.
L #ISTM
INC 1
T #ISTM//分钟单元加1
L 60
<I
JC M002//分钟单元如小于60,则跳转到M002。
L 0
T #ISTM//如大于等于60,分钟单元清0.
L #ISTH
INC 1
T #ISTH//小时钟单元加1
M002: NOP 0//空操作。
L #SOLH
L #ISTH
>I
BEC //如果#SOLH(小时设定值)大于#ISTH(小时现行值),则本程序块结束
L #SOLM
L #ISTM
>I
BEC //如果#SOLM(分钟设定值)大于#ISTM(分钟现行值),则本程序块结束
S #ZAGL//如果上述两个比较均不成立,则#ZAGL置位
L 0
T #ISTH//小时单元清0
T #ISTM//分钟单元清0
T #SEK///秒单元清0
上述程序包括三部分:
1、初始化,将小时、分钟、秒存储单元清零。
2、时间计时,按秒、分钟、小时的60进制进行计算。
3、如果#SOLH(小时设定值)大于#ISTH(小时现行值),则本程序块结束;
如果#SOLM(分钟设定值)大于#ISTM(分钟现行值),则本程序块结束;
如果上述两个比较均不成立,则#ZAGL置位。
其中#SOLH被外部赋值W#16#0,#SOLM被赋值W#16#99?
为什么要采用这样的数值,在此讲不出道理,这要看你的控制对象的实际要求了,只有自己解读这些数值。不过#SOLM被赋值W#16#99,令人不解,原因时间是60进制,不应出现大于60的数值。可能这里99表示一个两位的BCD码(以二进制表示的十进制数)。