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 如何在scanpy上做差异基因和通路富集?
    • ¥20 关于#硬件工程#的问题,请各位专家解答!
    • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
    • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
    • ¥30 截图中的mathematics程序转换成matlab
    • ¥15 动力学代码报错,维度不匹配
    • ¥15 Power query添加列问题
    • ¥50 Kubernetes&Fission&Eleasticsearch
    • ¥15 報錯:Person is not mapped,如何解決?
    • ¥15 c++头文件不能识别CDialog