ModbusReader1.java 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package com.htyg.manger.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.ghgande.j2mod.modbus.io.ModbusSerialTransaction;
  4. import com.ghgande.j2mod.modbus.msg.ReadMultipleRegistersRequest;
  5. import com.ghgande.j2mod.modbus.msg.ReadMultipleRegistersResponse;
  6. import com.ghgande.j2mod.modbus.net.SerialConnection;
  7. import com.ghgande.j2mod.modbus.util.SerialParameters;
  8. public class ModbusReader1 {
  9. private static final String PORT_NAME = "COM3"; // 更改为你的串口名称
  10. private static final int BAUD_RATE = 9600;
  11. private static final int DATA_BITS = 8;
  12. private static final int STOP_BITS = 1;
  13. private static final int PARITY = 0; // 无校验位
  14. public static void main(String[] args) {
  15. JSONObject jsonObject=new JSONObject();
  16. getData(jsonObject);
  17. }
  18. //1605 水箱温度
  19. public static void getData(JSONObject jsonObject) {
  20. SerialParameters parameters = new SerialParameters();
  21. parameters.setPortName(PORT_NAME);
  22. parameters.setBaudRate(BAUD_RATE);
  23. parameters.setDatabits(DATA_BITS);
  24. parameters.setStopbits(STOP_BITS);
  25. parameters.setParity(PARITY);
  26. SerialConnection connection = new SerialConnection(parameters);
  27. try {
  28. connection.open();
  29. ModbusSerialTransaction transaction = new ModbusSerialTransaction(connection);
  30. ReadMultipleRegistersRequest request = new ReadMultipleRegistersRequest();
  31. request.setUnitID(1); // Modbus设备的ID,通常为1
  32. request.setReference(1600); // 寄存器起始地址
  33. // 读取连续6个单字节(每个字节占用一个寄存器)
  34. request.setWordCount(20);
  35. transaction.setRequest(request);
  36. transaction.execute();
  37. ReadMultipleRegistersResponse response = (ReadMultipleRegistersResponse) transaction.getResponse();
  38. if (response != null) {
  39. for (int i = 0; i < response.getWordCount(); i++) {
  40. // 每个字节占用一个寄存器,直接读取寄存器值即可
  41. int value = response.getRegisterValue(i);
  42. // 处理读取到的数据
  43. System.out.println("Register " + (i + 1600) + ": " + value);
  44. jsonObject.put(Integer.valueOf(i + 1600).toString(),value/10.0);
  45. }
  46. } else {
  47. System.out.println("Response is null.");
  48. }
  49. } catch (Exception e) {
  50. e.printStackTrace();
  51. } finally {
  52. if (connection != null) {
  53. connection.close();
  54. }
  55. }
  56. }
  57. }