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