关于s7300语句表程序问题
郑志武
发布于2012-12-18 17:51
207
0
标签:
a(
l#a1
l#a2
-r
t#a3
anov
save
clr
abr
)
a(
l#in
l#a3
<r
)
=#alarm1
以上程序,ov,save,clr,br在其中的作用没有看明白,不知道为什么要这么用!
佳答案
ov:overflow,s7程序状态字(statusword)的第五位,用来监视浮点数运算是不是溢出,溢出,即有错误时为1,
br:binaryresultbit,二进制结果位,是statusword的第八位,具体功能可以按f1帮助;
save,savesavestherlointothebrbit,把逻辑运算结果位的状态保存到br位中,rlo是第1位;
clr:将rlo为清零,也就是置位为零。
a(
l#a1
l#a2
-r//用a1-a2
t#a3//把结果放在a3里面
anov//将ov位的值取反(ov为true时溢出,为false时正常)这时,rlo位的状态和ov取反后的状态一样,即rlo为true时,正常,为false时溢出;
save//将rlo的状态保存到br位,这样br位就保存了浮点数运算是正确与否的信息。
clr//清空rlo位,即rlo位为false;
abr//取br位的状态,为true则继续往下执行;
)
a(
l#in//
l#a3//取in和a3的值进行比较
<r//若in小于a3则rlo位为1
)
=#alarm1//将rlo位的值赋值给alarm1,即报警。
为什么这样用:
在程序的执行过程中你也发现了,rlo运算结果位是不断的被修改的,所以是不能保留某一个步骤的状态的,或者说是不能长时间保留某一步运算状态的,所以这个时候用br位将rlo的状态保存下来,在后面的判断中使用;因为rlo位是强制为true的,所以一旦将信息保存到br位后务必予以清零,这样rlo位才能真实记录实际程序的运行结果。