L #IN
ITD
DTR
L #FACTOR
*R
L #OFFSET
+R
T #OUT
L #IN // if(IN_REAL<K1)
L #LO_LIM // .
>=I // .
JC EL02 // {
// error
S #RET_VAL // .
L 0 // ACC1=LO_LIM
T #OUT // OUT=ACC1
JU FAIL // error
EL02: POP // } else {
L #HI_LIM // if(IN_REAL>K2)
<=I // .
JC EI04 // {
// error
S #RET_VAL // .
L #HI_LIM // ACC1=HI_LIM
T #OUT // OUT=ACC1
JU FAIL // error
EI04: NOP 0 // }
NOP 0 // }
// set BR bit : no error-set BR bit to 1; with error-set BR bit to 0.
// return error code 0
R #RET_VAL
SET // RLO = 1 (NO ERROR)
JU SVBR //
FAIL: CLR // RLO = 0 (ERROR)
SVBR: SAVE // BR = RLO
最佳答案
L #IN
ITD ------------整数转双整数
DTR -----------双整数转实数
L #FACTOR
*R
L #OFFSET
+R
T #OUT
这段是#OUT=#IN*#FACTOR(系数)+#OFFSET(偏差),通过系数和偏差的设定,可以调节你的输出值。
下面的程序是判断输入值并报警的。
L #IN
L #LO_LIM 低限制 .
>=I .
JC EL02 若输入>=低限制,则跳转至EL02,不满足则向下执行
// error
S #RET_VAL 若输入<低限制,则置位 #RET_VAL .
L 0
T #OUT 若输入<低限制,则输出为0
JU FAIL 跳转到FAIL
EL02: POP
L #HI_LIM 高限制
<=I .
JC EI04 若输入<=高限制,则跳转至EL04,不满足则向下执行
// error
S #RET_VAL .若输入>低限制,则置位 #RET_VAL
L #HI_LIM
T #OUT 若输入>低限制,则输出为0
JU FAIL 跳转到FAIL
EI04: NOP 0
NOP 0
R #RET_VAL 若输入>=低限制且输入<=高限制,输入数据正常,复位#RET_VAL
SET 置位RLO = 1 (NO ERROR)
JU SVBR 跳转到SVBR
FAIL: CLR 复位RLO = 0 (ERROR)
SVBR: SAVE BR = RLO,当正常时你的块监视为绿色,有超范围时块为虚线
提问者对于答案的评价:
解释很到位,谢谢!
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc238799.html