客户器件里的数据排列是CDAB类型的,而西门子PLC的数据排列是ABCD,因此得把客户的数据进行高位和低位转换,假设客户的数值是1000.1,在西门子PLC里转换后也许得到正确的数值;可是客户的数值是10.0001,转换后还能得到正确的数值吗?
--------------------------------------------
怕误人子弟,我更正一下:
浮点数有像点像串行信号,每个位都有不同的含义。
根据IEEE754标准,浮点数占32个位,第1位是表示正负,第2-9是表示小点数有几位,从第10位开始才是数值本身
情况就成了:第1位至第9位占了第一个寄存器和第二寄存器的第1位,从第二个寄存器的第2位开始才表示数值本身(当然还有其它的规定,这里不表述。想知道详情的请去百度)
这就是浮点数的格式。用右移SHR指令时,此指令只能移位整数,而整数格式与前述IEEE754的不一样,如果让SHR移位整数,它会用隐形变量先把实数转换成整数,再移位16位。这就丢掉了IEEE754对浮点数的格式限制,发送出去后也不会是原来的数字。
所以,用SHR指令是未毕对的。当然网上有人写文章用这个指令,但是不可全听他们的。
我的例题中的浮点数又是非常小的,是0.005,是一个脉冲对应的实际行程,不好取整,只能做高低字节转换,目前还找不到可靠的方法。