From 5adce825013b49f0614db1746cffe43a7502de82 Mon Sep 17 00:00:00 2001
From: jiazx0107@163.com <jiazx0107@163.com>
Date: 星期二, 22 八月 2023 23:07:46 +0800
Subject: [PATCH] 更新MODBUS-TCP协议 1

---
 igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ModbusUtil.java |   82 ++++++++++++++++++++++++++---------------
 1 files changed, 52 insertions(+), 30 deletions(-)

diff --git a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ModbusUtil.java b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ModbusUtil.java
index ae245da..416e7cb 100644
--- a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ModbusUtil.java
+++ b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ModbusUtil.java
@@ -1,8 +1,12 @@
 package com.ld.igds.protocol.modbus;
 
+import com.serotonin.modbus4j.BatchRead;
+import com.serotonin.modbus4j.BatchResults;
 import com.serotonin.modbus4j.ModbusMaster;
+import com.serotonin.modbus4j.code.DataType;
 import com.serotonin.modbus4j.exception.ModbusInitException;
 import com.serotonin.modbus4j.exception.ModbusTransportException;
+import com.serotonin.modbus4j.locator.BaseLocator;
 import com.serotonin.modbus4j.msg.ReadCoilsRequest;
 import com.serotonin.modbus4j.msg.ReadCoilsResponse;
 import com.serotonin.modbus4j.msg.ReadDiscreteInputsRequest;
@@ -19,6 +23,7 @@
 import com.serotonin.modbus4j.msg.WriteRegisterResponse;
 import com.serotonin.modbus4j.msg.WriteRegistersRequest;
 import com.serotonin.modbus4j.msg.WriteRegistersResponse;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -27,6 +32,7 @@
  * @author: Andy
  * @update-time: 2023/8/11
  */
+@Slf4j
 @Component
 public class ModbusUtil {
 
@@ -37,7 +43,15 @@
     private ModbusConfig modbusConfig;
 
 
-    public boolean[] readCoilStatus(String ip, int port, int offset, int numberOfRegister) throws ModbusTransportException {
+    /**
+     * 璇荤嚎鍦�--01
+     *
+     * @param ip
+     * @param port
+     * @param offset
+     * @param numberOfRegister
+     */
+    public boolean[] readStatus01(String ip, int port, int offset, int numberOfRegister) throws ModbusTransportException {
 
         ModbusMaster master = modbusConfig.getMaster(ip, port);
         ReadCoilsRequest request = new ReadCoilsRequest(slaveId, offset, numberOfRegister);
@@ -48,32 +62,26 @@
     }
 
     /**
-     * @Description: 璇诲彇澶栧洿璁惧杈撳叆鐨勫紑鍏抽噺锛岀浉褰撲簬鍔熻兘鐮侊細02H-璇荤鏁h緭鍏ョ姸鎬�
+     * @Description: 02H-璇荤鏁h緭鍏ラ噺
      * @Param: [ip, offset, numberOfRegister]
      * @return: boolean[]
      * @throws:
-     * @Author: Ricardo.Liu
-     * @Date: 2020/5/8
      */
-    public boolean[] readInputStatus(String ip, int port, int offset, int numberOfRegister) throws ModbusTransportException {
-
+    public boolean[] readStatus02(String ip, int port, int offset, int numberOfRegister) throws ModbusTransportException {
         ModbusMaster master = modbusConfig.getMaster(ip, port);
         ReadDiscreteInputsRequest request = new ReadDiscreteInputsRequest(slaveId, offset, numberOfRegister);
         ReadDiscreteInputsResponse response = (ReadDiscreteInputsResponse) master.send(request);
         boolean[] booleans = response.getBooleanData();
-
         return valueRegroup(numberOfRegister, booleans);
     }
 
     /**
-     * @Description: 璇诲彇淇濇寔瀵勫瓨鍣ㄦ暟鎹紝鐩稿綋浜庡姛鑳界爜锛�03H-璇讳繚鎸佸瘎瀛樺櫒
+     * @Description: 03H-璇讳繚鎸佸瘎瀛樺櫒
      * @Param: [ip, offset, numberOfRegister]
      * @return: short[]
      * @throws:
-     * @Author: Ricardo.Liu
-     * @Date: 2020/5/8
      */
-    public short[] readHoldingRegister(String ip, int port, int offset, int numberOfRegister) throws ModbusTransportException {
+    public short[] readStatus03(String ip, int port, int offset, int numberOfRegister) throws ModbusTransportException {
 
         ModbusMaster master = modbusConfig.getMaster(ip, port);
         ReadHoldingRegistersRequest request = new ReadHoldingRegistersRequest(slaveId, offset, numberOfRegister);
@@ -82,19 +90,43 @@
     }
 
     /**
-     * @Description: 璇诲彇澶栧洿璁惧杈撳叆鐨勬暟鎹紝鐩稿綋浜庡姛鑳界爜锛�04H-璇昏緭鍏ュ瘎瀛樺櫒
+     * @Description: 04H-璇昏緭鍏ュ瘎瀛樺櫒
      * @Param: [ip, offset, numberOfRegister]
      * @return: short[]
      * @throws:
-     * @Author: Ricardo.Liu
-     * @Date: 2020/5/8
      */
-    public short[] readInputRegisters(String ip, int port, int offset, int numberOfRegister) throws ModbusTransportException {
-
+    public short[] readStatus04(String ip, int port, int offset, int numberOfRegister) throws ModbusTransportException {
         ModbusMaster master = modbusConfig.getMaster(ip, port);
         ReadInputRegistersRequest request = new ReadInputRegistersRequest(slaveId, offset, numberOfRegister);
         ReadInputRegistersResponse response = (ReadInputRegistersResponse) master.send(request);
         return response.getShortData();
+    }
+
+
+    public BatchResults<Integer> readBatch(String ip, int port) throws Exception {
+        ModbusMaster master = modbusConfig.getMaster(ip, port);
+
+        if (null == master) return null;
+
+        return readBatch(master);
+    }
+
+    /**
+     * 鎵归噺璇诲彇澶氫釜
+     *
+     * @param master
+     * @throws ModbusTransportException
+     */
+    public BatchResults<Integer> readBatch(ModbusMaster master) throws Exception {
+        BatchRead<Integer> batch = new BatchRead<>();
+        batch.addLocator(0, BaseLocator.holdingRegister(1, 1, DataType.TWO_BYTE_INT_SIGNED));
+        batch.addLocator(1, BaseLocator.inputStatus(1, 0));
+        batch.setContiguousRequests(true);
+        BatchResults<Integer> results = master.send(batch);
+        log.info("batchRead:" + results.getValue(0));
+        log.info("batchRead:" + results.getValue(1));
+
+        return results;
     }
 
     /**
@@ -102,10 +134,8 @@
      * @Param: [ip, writeOffset, writeValue]
      * @return: boolean
      * @throws:
-     * @Author: Ricardo.Liu
-     * @Date: 2020/5/8
      */
-    public boolean writeCoil(String ip, int port, int writeOffset, boolean writeValue) throws ModbusTransportException {
+    public boolean writeValue05(String ip, int port, int writeOffset, boolean writeValue) throws ModbusTransportException {
 
         ModbusMaster tcpMaster = modbusConfig.getMaster(ip, port);
         WriteCoilRequest request = new WriteCoilRequest(slaveId, writeOffset, writeValue);
@@ -118,10 +148,8 @@
      * @Param: [ip, startOffset, data]
      * @return: boolean
      * @throws:
-     * @Author: Ricardo.Liu
-     * @Date: 2020/5/8
      */
-    public boolean writeCoils(String ip, int port, int startOffset, boolean[] data) throws ModbusTransportException {
+    public boolean writeValues15(String ip, int port, int startOffset, boolean[] data) throws ModbusTransportException {
 
         ModbusMaster tcpMaster = modbusConfig.getMaster(ip, port);
         WriteCoilsRequest request = new WriteCoilsRequest(slaveId, startOffset, data);
@@ -135,10 +163,8 @@
      * @Param: [ip, writeOffset, writeValue]
      * @return: boolean
      * @throws:
-     * @Author: Ricardo.Liu
-     * @Date: 2020/5/8
      */
-    public boolean writeHoldingRegister(String ip, int port,int writeOffset, short writeValue) throws ModbusTransportException, ModbusInitException {
+    public boolean writeValue06(String ip, int port, int writeOffset, short writeValue) throws ModbusTransportException, ModbusInitException {
 
         ModbusMaster tcpMaster = modbusConfig.getMaster(ip, port);
         WriteRegisterRequest request = new WriteRegisterRequest(slaveId, writeOffset, writeValue);
@@ -152,10 +178,8 @@
      * @Param: [ip, startOffset, data]
      * @return: boolean
      * @throws:
-     * @Author: Ricardo.Liu
-     * @Date: 2020/5/8
      */
-    public boolean writeHoldingRegisters(String ip,int port, int startOffset, short[] data) throws ModbusTransportException, ModbusInitException {
+    public boolean writeValues16(String ip, int port, int startOffset, short[] data) throws ModbusTransportException, ModbusInitException {
 
         ModbusMaster tcpMaster = modbusConfig.getMaster(ip, port);
         WriteRegistersRequest request = new WriteRegistersRequest(slaveId, startOffset, data);
@@ -168,8 +192,6 @@
      * @Param: [numberOfBits, values]
      * @return: boolean[]
      * @throws:
-     * @Author: Ricardo.Liu
-     * @Date: 2020/5/8
      */
     private boolean[] valueRegroup(int numberOfBits, boolean[] values) {
         boolean[] bs = new boolean[numberOfBits];

--
Gitblit v1.9.3