1.采用modbus4j实现了modbus通信,但读取PLC的浮点数时,读取到整数位正确,小数位错误,请问如何解决?
-
读取PLC保持寄存器的方法如下:
readHoldingRegistersTest(master,1,1,4); private static void readHoldingRegistersTest(ModbusMaster master, int slaveId, int start, int len) { try { ReadHoldingRegistersRequest request = new ReadHoldingRegistersRequest( slaveId, start, len); ReadHoldingRegistersResponse response = (ReadHoldingRegistersResponse) master .send(request); if (response.isException()) { System.out.println("Exception response: message=" + response.getExceptionMessage()); } else { System.out.println(Arrays.toString(response.getShortData())); short[] list = response.getShortData(); byte[] bb = shortToBytes(list); Float ff=byte2float(bb,0); System.out.println("读到"+ff); } } catch (ModbusTransportException e) { e.printStackTrace(); } }
3.和PLC通讯时,PLC给出的数字为46.68,程序读取到的数字为46.5,![图片说明](https://img-ask.csdn.net/upload/201912/10/1575987797_782854.png)
4.和modbus slave仿真软件通讯时,数据读取正常。控制台输出如下: