modbus4j中 有一个发送的方法
public final ModbusResponse send(ModbusRequest request) throws ModbusTransportException,其中
WriteRegistersRequest 是一个用于向 Modbus 设备写入多个寄存器的请求。Modbus 是一种工业通信协议,用于连接电子设备。在 Modbus 通信中,数据通常存储在寄存器中,这些寄存器可以通过读写操作进行访问。
WriteRegistersRequest 通常包含以下信息:
slaveId:从设备的 ID。这是向特定设备发送请求的标识符。
registerAddress:要写入的第一个寄存器的地址。这是数据在设备中的存储位置。
data:要写入的值。这是要写入设备的字节数组。
dataLength:要写入的数据长度。这是要写入的字节数。
```java
modbusConnector.send(
new WriteRegistersRequest(
1,
9500,
toShortArray(action)
)
);
//取值,array[0],array[1]是short类型,array[2]array[3] 是通过float转的short[]类型.
private short[] toShortArray(Action action) {
short[] array = new short[4];
array[0] = action.getvalue1().shortValue();
array[1] = action.getvalue2().shortValue();
insertFloat32ToShortArray(action.getMoveX(), array, 2);
return array;
}
// 将float转换成modbus可用的short[]类型
private void insertFloat32ToShortArray(float floatValue, short[] dest, int destPos) {
int bits = Float.floatToIntBits(floatValue);
byte[] bytes = new byte[4];
bytes[0] = (byte) (0xff & (bits >> 8));
bytes[1] = (byte) (0xff & bits);
bytes[2] = (byte) (0xff & (bits >> 24));
bytes[3] = (byte) (0xff & (bits >> 16));
short[] src = new short[2];
src[0] = (short) (((bytes[0] & 0xff) << 8) | (bytes[1] & 0xff));
src[1] = (short) (((bytes[2] & 0xff) << 8) | (bytes[3] & 0xff));
System.arraycopy(src, 0, dest, destPos, 2);
}