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