lession07 2024-10-08 13:56 采纳率: 20%
浏览 3

Java获取modbus数据失败报错

Java获取波特率为9600,地址位为0x50的modbus数据失败
使用jSerialComm库来读取波特率为9600,地址位为0x50的Modbus数据。无效果,port.readBytes报错

   SerialPort port = SerialPort.getCommPort("COM3"); // 请替换为你的串口名称
        port.setComPortParameters(9600, 8, 1, 0);
        port.setComPortTimeouts(SerialPort.TIMEOUT_READ_SEMI_BLOCKING, 0, 0);

        if (port.openPort()) {
            try {
                // 这里你可以调用Modbus的读取函数,例如读取保持寄存器
                // 假设我们要读取从地址0x00开始的1个寄存器
                InputStream inputStream = port.getInputStream();
                byte[] response = port.readBytes(new byte[]{0x01, (byte)0x83, 0x00, 0x00, 0x00, 0x01, 0x50}, 1000);
                if (response != null && response.length > 2) {
                    // 检查响应中的CRC是否正确
                    if (response[response.length - 2] == 0 && response[response.length - 1] == 0) {
                        // 数据长度检查和地址匹配
                        if (response[1] == 3 && response[2] == (byte)0x83) {
                            // 获取数据,这里我们假设只读取一个字节的数据
                            byte registerValue = response[3];
                            System.out.println("Register value: " + registerValue);
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                port.closePort();
            }
        } else {
            System.out.println("Unable to open port!");
        }
    }

  • 写回答

2条回答 默认 最新

  • IT工程师_二师兄 2024-10-08 14:34
    关注

    具体什么情况下出现的告诉我

    评论

报告相同问题?

问题事件

  • 创建了问题 10月8日

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证