2 eoowill eoowill 于 2014.12.02 20:07 提问

Modbus RTU协议TCP通信代码

空调远程控制系统
使用的是modbus4j,不成功,初次使用modbus设备

协议解析
一、读取设备状态
发送:
设备地址 功能号 起始寄存器 寄存器字节个数 CRC校验
1字节 01H 0x00 0x00 0x00 0x01 MSB LSB
返回:
设备地址 功能号 起始寄存器 数据字节个数 设备状态 CRC校验
1字节 01H 0x00 0x00 0x00 0x01 9字节 MSB LSB

测试指令:
发送:01 01 00 00 00 09 MSB LSB
返回:01 01 00 00 00 09 11 00 02 1A 02 01 00 00 01 MSB LSB
其中:11-温度17度;00-保留;02 1A 02空调状态为制冷26度(详见空调码表);01 00-输入1闭合,输入2断开;00 01-输出1断开,输出2闭合


/**
     * 批量写数据到保持寄存器
     * 
     * @param master
     *            主站
     * @param slaveId
     *            从站地址
     * @param start
     *            起始地址的偏移量
     * @param values
     *            待写数据
     */
    public static void writeRegistersTest(ModbusMaster master, int slaveId,
            int start, short[] values) {
        try {
            WriteRegistersRequest request = new WriteRegistersRequest(slaveId,
                    start, values);
            WriteRegistersResponse response = (WriteRegistersResponse) master
                    .send(request);

            if (response.isException())
                System.out.println("Exception response: message="
                        + response.getExceptionMessage());
            else
                System.out.println("Success");
        } catch (ModbusTransportException e) {
            e.printStackTrace();
        }
    } 
 public static void main(String[] args) throws Exception {
        String ip = "10.1.8.222";
        int port = 100;
        ModbusFactory modbusFactory = new ModbusFactory(); // 设备ModbusTCP的Ip与端口,如果不设定端口则默认为502
        IpParameters params = new IpParameters();
        params.setHost(ip);
        if (502 != port) {
            params.setPort(port);
        }// 设置端口,默认502
        ModbusMaster tcpMaster = null;
        tcpMaster = modbusFactory.createTcpMaster(params, true);
        try {
            tcpMaster.init();
            writeRegistersTest(tcpMaster, 1, 0, new short[] { 0x01, 0x00, 0x00,
                    0x00, 0x09 });
        } finally {
            tcpMaster.destroy();
        }
    }

我QQ:782007828,望高人指点,不胜感激

Csdn user default icon
上传中...
上传图片
插入图片