一客户以前一直使用8位绝对值编码器,单圈格雷码输出。后因为8位编码器货期太长,就换成倍加福13位编码器了。但客户和我们反映,换成13位编码器后原程序执行不正常,经分析程序发现原程序采用的是查表法,查表范围为0-255,当换成13位编码器后,查表出错,程序执行也就不正常了。把程序修改为计算法,在SIEMENS官网上下了一个格雷码转二进制的库,正常调用,转换过的值仍然不对,明显转换过后的二进制值很大。百思不得其解,经过一番查找,经倍加福技术人员提示,最终找到解决方案。原来客户在把格雷码13根线接到PLC DI输入端时,把格雷码第一位接到I0.0,第二位接到I0.1...第9位接到I1.0,然后在程序中直接把IW0进行转换。但是没有考虑到SIEMENS PLC的一个字在内存中是高字节在前,低字节在后。而按照当时的接线是把格雷码的低字节放在前面,高字节放在后面。后面在程序中改了一下,把IW0在M区中转一下,再进行高低字节互换,执行程序一切正常。当然重新接线,把格雷码的第一位接到I1.0,第二位接到I1.1...,第9位接到I0.0...,这样也是可以的。