eoowill 2014-12-02 12:07
浏览 4429

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,望高人指点,不胜感激

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
    • ¥15 对于相关问题的求解与代码
    • ¥15 ubuntu子系统密码忘记
    • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
    • ¥15 保护模式-系统加载-段寄存器
    • ¥15 电脑桌面设定一个区域禁止鼠标操作
    • ¥15 求NPF226060磁芯的详细资料
    • ¥15 使用R语言marginaleffects包进行边际效应图绘制