modbus中如何将float转换为short[]

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);
    }


  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值