你传回来的数据加入放在D2000开始。
D2005是数据字1的高8位,但在PLC里却是放在低8位的,也就是需要把数据左移动8位,实际上就是乘以256(16#100)。
由于台达乘法运算比移位运算更快(处理器有专用乘法器),所以就是D2005 * 256
注意,16位乘法的结果是32位的,也就是占用2个16位数据,我们只需要低16位。所以这也是我喜欢全部用浮点数来运算的原因,反正是32位,不去管16位/32位之间的转换问题,慢也慢不到哪里去。
MUL D2005 256 D100
这时D100中的数据就是D2005左移8位的数据了。
D2006是数据字1的低8位,在PLC里本就是放在低8位的,不用管它。
ADD D2006 D100 D200
这个时候D200中的数据就是按要求组合完成的16数据了。
再下来把这个16位数据转换成32位浮点数
FLT D200 D300 ,为了运算方便,建议不要直接采用地址,而采用变量定义,比如这里定义一个浮点数 R1
则上条指令就是 FLT D200 R1
然后进行小数点处理,因为有3个小数位,所以R1/1000
DEDIV R1 1000.00 R1
注意,常数要带小数点,系统才知道是浮点数。
这个时候R1中就把小数位搞好了。
再来做符号位
D2003是符号位,为1就是负数,那么就可以用接点逻辑运算来做
LD= D2003 1 DEMUL R1 -1.00 R1
这样就OK了。
当然,移位也可以,指令还要精简些,但速度差不多。
写得有点烦锁,不知道有写错的地方没有,你参考下,用仿真写段指令试下。