威纶通EMT3070B触摸屏读取三菱FX3U PLC D寄存器数据存入变量,并对该变量值进行比较,在比较时发现比较失败,如读取D100数据50,和60比较大小,发现无法比较大。
原读取指令为:
int p1,p2,p3,p4=0
while true
GetData(p1, "FX3U", M, 111, 1)
GetData(p2, "FX3U", D, 100, 1)
if p1==1 and p2>=600 then //出现比较失败的情况
p3=1
SetData(P3,"Local HMI",LW,0,1)
SetData(P3,"FX3U",M,800,1)
else
SetData(p4,"Local HMI",LW,0,1)
SetData(P4,"FX3U",M,800,1)
end if
wend
检查发现:
1、变量类型定义出错,不应该定义int,这是32位变量,而D寄存器是16位,这样会导致读出D100和D101两个寄存器值。
应该定义为short,这个是16位变量。
2、读取M值,也要注意把变量类型定义为BOOL
更改后的指令为:
bool p1
short p2=0
int p3=0,p4=0
while true
GetData(p1, "FX3U", M, 111, 1)
GetData(p2, "FX3U", D, 100, 1)
if p1==1 and p2>=600 then
p3=1
SetData(P3,"Local HMI",LW,0,1)
SetData(P3,"FX3U",M,800,1)
else
SetData(p4,"Local HMI",LW,0,1)
SetData(P4,"FX3U",M,800,1)
end if
wend