恭喜,你发布的帖子
发布于 2020-01-31 00:11:01
2楼
终于搞明白了,整整一天,模拟量输入类型竟然为ANY,以前没有碰到过,思维进入了死循环!这段程序的意思是判断这个指针对应的数据是字节的,还是一个字或整型,还是双字或双整型,然后做相应的转换成实数,如果是其他类型的就写入0, 最后做数据的转换,和FC105的功能类似,变成百分比,一个实数,一个整数,输出, 感谢艾星落尘的帮助,我整理了一下,发给大家!
//模拟量读取
TAR1 #TEMP11
L P##IN0 //模拟量输入地址 数据类型ANY
LAR1
L B [AR1,P#1.0] //判断ANY中存放的数据类型
T #TEMP7
L W [AR1,P#4.0] //装入ANY中存放的数据块
T #TEMP8
OPN DB [#TEMP8]//打开数据块
A(
L #TEMP7
L 2 //数据类型为字节
==I
)
JCN M001 //Jump if RLO = 0
L D [AR1,P#6.0] //装入ANY中数据地址
LAR1
L B [AR1,P#0.0]//装入数据
ITD
DTR //转换为实数
JU M002
M001: NOP 0
O(
L #TEMP7
L 4 //数据类型为字
==I
)
O(
L #TEMP7
L 5 //数据类型为整数
==I
)
JCN M003
L D [AR1,P#6.0]//装入ANY中数据地址
LAR1
L W [AR1,P#0.0]//装入数据
ITD
DTR
JU M002
M003: NOP 0
O(
L #TEMP7
L 6 //数据类型为双字
==I
)
O(
L #TEMP7
L 7 //数据类型为双整数
==I
)
JCN M004
L D [AR1,P#6.0]
LAR1
L D [AR1,P#0.0]
DTR
JU M002
M004: NOP 0
A(
L #TEMP7
L 8 //数据类型为实数
==I
)
JCN M005
L D [AR1,P#6.0]
LAR1
L D [AR1,P#0.0]
JU M002
M005: L 0.000000e+000
M002: T #TEMP9
L #IN1 //模拟量最大值
L #IN2 //模拟量最小值
-R
T #TEMP10
L #TEMP9
L #IN2
-R
L #TEMP10
/R
T #TEMP10
L #IN3 //工程量量最大值
L #IN4 //模拟量最小值
-R
L #TEMP10
*R
L #IN4
+R
T #OUT5
RND
T #OUT6
LAR1 #TEMP11
//这是调用的程序
CALL "ANALOG_VALUE_READ"
IN0 :="=32+ET12-2M1_PIW"
IN1 :=2.764800e+004
IN2 :=5.530000e+003
IN3 :=1.000000e+002
IN4 :=0.000000e+000
OUT5:="ACTUAL_VAL".DRY.DRY1._014.ACT
OUT6:=#Output_INT
NOP 0
精华帖版主置评:能及时跟大家分享,很好
请填写推广理由:
分享
只看
楼主