package com.htyg.manger.controller; import com.alibaba.fastjson.JSONObject; import com.ghgande.j2mod.modbus.io.ModbusSerialTransaction; import com.ghgande.j2mod.modbus.msg.ReadMultipleRegistersRequest; import com.ghgande.j2mod.modbus.msg.ReadMultipleRegistersResponse; import com.ghgande.j2mod.modbus.net.SerialConnection; import com.ghgande.j2mod.modbus.util.SerialParameters; public class ModbusReader1 { private static final String PORT_NAME = "COM3"; // 更改为你的串口名称 private static final int BAUD_RATE = 9600; private static final int DATA_BITS = 8; private static final int STOP_BITS = 1; private static final int PARITY = 0; // 无校验位 public static void main(String[] args) { JSONObject jsonObject=new JSONObject(); getData(jsonObject); } //1605 水箱温度 public static void getData(JSONObject jsonObject) { SerialParameters parameters = new SerialParameters(); parameters.setPortName(PORT_NAME); parameters.setBaudRate(BAUD_RATE); parameters.setDatabits(DATA_BITS); parameters.setStopbits(STOP_BITS); parameters.setParity(PARITY); SerialConnection connection = new SerialConnection(parameters); try { connection.open(); ModbusSerialTransaction transaction = new ModbusSerialTransaction(connection); ReadMultipleRegistersRequest request = new ReadMultipleRegistersRequest(); request.setUnitID(1); // Modbus设备的ID,通常为1 request.setReference(1600); // 寄存器起始地址 // 读取连续6个单字节(每个字节占用一个寄存器) request.setWordCount(20); transaction.setRequest(request); transaction.execute(); ReadMultipleRegistersResponse response = (ReadMultipleRegistersResponse) transaction.getResponse(); if (response != null) { for (int i = 0; i < response.getWordCount(); i++) { // 每个字节占用一个寄存器,直接读取寄存器值即可 int value = response.getRegisterValue(i); // 处理读取到的数据 System.out.println("Register " + (i + 1600) + ": " + value); jsonObject.put(Integer.valueOf(i + 1600).toString(),value/10.0); } } else { System.out.println("Response is null."); } } catch (Exception e) { e.printStackTrace(); } finally { if (connection != null) { connection.close(); } } } }