From 7243e0b4bd9a267a633d2e481e17646509b6868d Mon Sep 17 00:00:00 2001
From: YYC <1833023622@qq.com>
Date: 星期四, 07 九月 2023 19:36:37 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ModbusUtil2.java |  203 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 203 insertions(+), 0 deletions(-)

diff --git a/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ModbusUtil2.java b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ModbusUtil2.java
new file mode 100644
index 0000000..4eb27c7
--- /dev/null
+++ b/igds-protocol-modbus/src/main/java/com/ld/igds/protocol/modbus/ModbusUtil2.java
@@ -0,0 +1,203 @@
+package com.ld.igds.protocol.modbus;
+
+import com.serotonin.modbus4j.ModbusFactory;
+import com.serotonin.modbus4j.ModbusMaster;
+import com.serotonin.modbus4j.code.DataType;
+import com.serotonin.modbus4j.exception.ErrorResponseException;
+import com.serotonin.modbus4j.exception.ModbusInitException;
+import com.serotonin.modbus4j.exception.ModbusTransportException;
+import com.serotonin.modbus4j.ip.IpParameters;
+import com.serotonin.modbus4j.locator.BaseLocator;
+import com.serotonin.modbus4j.msg.*;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * @Desc: 宸ュ叿绫�
+ * @author: Andy
+ * @update-time: 2023/8/11
+ */
+@Slf4j
+public class ModbusUtil2 {
+
+    //浠庢満榛樿鍊�
+    private static Integer slaveId = 1;
+
+    /**
+     * 宸ュ巶
+     */
+    static ModbusFactory modbusFactory;
+
+    static {
+        if (modbusFactory == null) {
+            modbusFactory = new ModbusFactory();
+        }
+    }
+
+
+    /**
+     * 鑾峰彇master
+     *
+     * @return
+     */
+    public static ModbusMaster getMaster(String ip, int port) throws ModbusInitException, InterruptedException {
+
+        IpParameters ipParameters = new IpParameters();
+        ipParameters.setHost(ip);
+        ipParameters.setPort(port);
+        ModbusMaster modbusMaster = modbusFactory.createTcpMaster(ipParameters, false);
+        modbusMaster.init();
+
+        //鍒濆鍖栦箣鍚庣瓑寰咃紝閬垮厤鍑虹幇杩炴帴鏈垱寤�
+        Thread.sleep(2500);
+
+        return modbusMaster;
+    }
+
+
+    /**
+     * 璇诲彇绾垮湀寮�鍏崇姸鎬佹暟鎹�  0x01
+     *
+     * @param offset
+     * @return
+     * @throws ModbusInitException
+     * @throws ModbusTransportException
+     * @throws ErrorResponseException
+     */
+    public static Boolean readCoilStatus(String ip, int port, int offset) throws ModbusInitException, ModbusTransportException, ErrorResponseException, InterruptedException {
+        BaseLocator<Boolean> coilStatus = BaseLocator.coilStatus(slaveId, offset);
+        Boolean res = getMaster(ip, port).getValue(coilStatus);
+        return res;
+    }
+
+    /**
+     * 璇荤鏁h緭鍏ュ瘎瀛樺櫒鐘舵�佹暟鎹�  0x02
+     *
+     * @param offset
+     * @return
+     * @throws ModbusInitException
+     * @throws ModbusTransportException
+     * @throws ErrorResponseException
+     */
+    public static Boolean readInputStatus(String ip, int port, int offset) throws ModbusInitException, ModbusTransportException, ErrorResponseException, InterruptedException {
+        BaseLocator<Boolean> inputStatus = BaseLocator.inputStatus(slaveId, offset);
+
+        // Thread.sleep(3000);
+        Boolean res = getMaster(ip, port).getValue(inputStatus);
+        return res;
+    }
+
+    /**
+     * 璇讳繚鎸佸瘎瀛樺櫒鏁版嵁  0x03
+     *
+     * @param offset
+     * @param dataType
+     * @return
+     * @throws ModbusInitException
+     * @throws ModbusTransportException
+     * @throws ErrorResponseException
+     */
+    public static Number readHoldingRegister(String ip, int port, int offset, int dataType) throws ModbusInitException, ModbusTransportException, ErrorResponseException, InterruptedException {
+        BaseLocator<Number> holdingRegister = BaseLocator.holdingRegister(slaveId, offset, dataType);
+        Number value = getMaster(ip, port).getValue(holdingRegister);
+        return value;
+    }
+
+    public static Number readHoldingRegister(String ip, int port, int offset) throws ModbusInitException, ModbusTransportException, ErrorResponseException, InterruptedException {
+        int dataType = DataType.TWO_BYTE_INT_SIGNED;
+        return readHoldingRegister(ip, port, offset, dataType);
+    }
+
+    /**
+     * 璇昏緭鍏ュ瘎瀛樺櫒鏁版嵁   0x04
+     *
+     * @param offset
+     * @param dataType
+     * @return
+     * @throws ModbusInitException
+     * @throws ModbusTransportException
+     * @throws ErrorResponseException
+     */
+    public static Number readInputRegister(String ip, int port, int offset, int dataType) throws ModbusInitException, ModbusTransportException, ErrorResponseException, InterruptedException {
+        BaseLocator<Number> inputRegister = BaseLocator.inputRegister(slaveId, offset, dataType);
+        Number value = getMaster(ip, port).getValue(inputRegister);
+        return value;
+    }
+
+    /**
+     * 璇昏緭鍏ュ瘎瀛樺櫒鏁版嵁   0x04
+     *
+     * @param offset
+     * @return
+     * @throws ModbusInitException
+     * @throws ModbusTransportException
+     * @throws ErrorResponseException
+     */
+    public static Number readInputRegister(String ip, int port, int offset) throws ModbusInitException, ModbusTransportException, ErrorResponseException, InterruptedException {
+        int dataType = DataType.TWO_BYTE_INT_SIGNED;
+        return readInputRegister(ip, port, offset, dataType);
+    }
+
+
+    /**
+     * 鍐欑嚎鍦堝紑鍏崇姸鎬佹暟鎹�  0x05
+     *
+     * @param offset
+     * @param status
+     * @return
+     * @throws ModbusTransportException
+     * @throws ModbusInitException
+     */
+    public static Boolean writeCoilStatus(String ip, int port, int offset, boolean status) throws ModbusTransportException, ModbusInitException, InterruptedException {
+        WriteCoilRequest coilRequest = new WriteCoilRequest(slaveId, offset, status);
+        WriteCoilResponse coilResponse = (WriteCoilResponse) getMaster(ip, port).send(coilRequest);
+        return !coilResponse.isException();
+    }
+
+
+    /**
+     * 鍐欏崟涓繚鎸佸瘎瀛樺櫒鏁版嵁 0x06
+     *
+     * @param offset
+     * @param value
+     * @return
+     * @throws ModbusTransportException
+     * @throws ModbusInitException
+     */
+    public static Boolean writeRegister(String ip, int port, int offset, int value) throws ModbusTransportException, ModbusInitException, InterruptedException {
+        WriteRegisterRequest registerRequest = new WriteRegisterRequest(slaveId, offset, value);
+        WriteRegisterResponse registerResponse = (WriteRegisterResponse) getMaster(ip, port).send(registerRequest);
+        return !registerResponse.isException();
+
+    }
+
+    /**
+     * 鍐欑嚎鍦堝紑鍏崇姸鎬佹暟鎹�愬銆�  0x0f
+     *
+     * @param offset
+     * @param booleans
+     * @return
+     * @throws ModbusTransportException
+     * @throws ModbusInitException
+     */
+    public static Boolean writeCoils(String ip, int port, int offset, boolean[] booleans) throws ModbusTransportException, ModbusInitException, InterruptedException {
+        WriteCoilsRequest writeCoils = new WriteCoilsRequest(slaveId, offset, booleans);
+        WriteCoilsResponse coilsResponse = (WriteCoilsResponse) getMaster(ip, port).send(writeCoils);
+        return !coilsResponse.isException();
+    }
+
+
+    /**
+     * 鍐欎繚瀛樺瘎瀛樺櫒鏁版嵁銆愬銆�  0x10
+     *
+     * @param offset
+     * @param nums
+     * @return
+     * @throws ModbusTransportException
+     * @throws ModbusInitException
+     */
+    public static Boolean writeRegisters(String ip, int port, int offset, short[] nums) throws ModbusTransportException, ModbusInitException, InterruptedException {
+        WriteRegistersRequest writeRegisters = new WriteRegistersRequest(slaveId, offset, nums);
+        WriteRegistersResponse registersResponse = (WriteRegistersResponse) getMaster(ip, port).send(writeRegisters);
+        return !registersResponse.isException();
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3