From 8eef58973585492ba315d22a0b03eb6e84ccd578 Mon Sep 17 00:00:00 2001
From: whyclxw <810412026@qq,com>
Date: 星期六, 29 八月 2020 09:41:44 +0800
Subject: [PATCH] 水冷修改

---
 WaterSystem_MonitorServer/src/com/modbus/data/MyModbusUtils.java |  628 +++++++++++++++++++++++++++++++--------------------------
 1 files changed, 342 insertions(+), 286 deletions(-)

diff --git a/WaterSystem_MonitorServer/src/com/modbus/data/MyModbusUtils.java b/WaterSystem_MonitorServer/src/com/modbus/data/MyModbusUtils.java
index f16410b..6cdf707 100644
--- a/WaterSystem_MonitorServer/src/com/modbus/data/MyModbusUtils.java
+++ b/WaterSystem_MonitorServer/src/com/modbus/data/MyModbusUtils.java
@@ -1,286 +1,342 @@
-package com.modbus.data;
-
-import com.serotonin.modbus4j.ModbusMaster;
-import com.serotonin.modbus4j.exception.ErrorResponseException;
-import com.serotonin.modbus4j.exception.ModbusTransportException;
-import com.serotonin.modbus4j.locator.BaseLocator;
-import com.serotonin.modbus4j.msg.ModbusResponse;
-import com.serotonin.modbus4j.msg.WriteCoilRequest;
-import com.serotonin.modbus4j.msg.WriteCoilResponse;
-import com.serotonin.modbus4j.msg.WriteCoilsRequest;
-import com.serotonin.modbus4j.msg.WriteCoilsResponse;
-import com.serotonin.modbus4j.msg.WriteRegisterRequest;
-import com.serotonin.modbus4j.msg.WriteRegisterResponse;
-import com.serotonin.modbus4j.msg.WriteRegistersRequest;
-
-public class MyModbusUtils {
-		
-	/**
-	 * 读取[01 Coil Status 0x]类型 开关数据
-	 * 
-	 * @param slaveId
-	 *            slaveId
-	 * @param offset
-	 *            位置
-	 * @return 读取值
-	 */
-	public static Boolean readCoilStatus(int offset,MyModbusMaster master){
-		// 01 Coil Status
-		BaseLocator<Boolean> loc = BaseLocator.coilStatus(master.getSlaveId(), offset);
-		Boolean value = null;;
-		try {
-			value = master.getMaster().getValue(loc);
-		} catch (ModbusTransportException | ErrorResponseException e) {
-			master.addErrorCount();
-			//e.printStackTrace();
-		}
-		return value;
-	}
- 
-	/**
-	 * 读取[02 Input Status 1x]类型 开关数据
-	 * 
-	 * @param slaveId
-	 * @param offset
-	 * @return
-	 */
-	public static Boolean readInputStatus(int offset,MyModbusMaster master){
-		// 02 Input Status
-		BaseLocator<Boolean> loc = BaseLocator.inputStatus(master.getSlaveId(), offset);
-		Boolean value = null;;
-		try {
-			value = master.getMaster().getValue(loc);
-		} catch (ModbusTransportException | ErrorResponseException e) {
-			master.addErrorCount();
-			//e.printStackTrace();
-		}
-		return value;
-	}
- 
-	/**
-	 * 读取[03 Holding Register类型 2x]模拟量数据
-	 * 
-	 * @param slaveId
-	 *            slave Id
-	 * @param offset
-	 *            位置
-	 * @param dataType
-	 *            数据类型,来自com.serotonin.modbus4j.code.DataType
-	 * @return
-	 */
-	public static Number readHoldingRegister(int offset, int dataType,MyModbusMaster master){
-		// 03 Holding Register类型数据读取
-		BaseLocator<Number> loc = BaseLocator.holdingRegister(master.getSlaveId(), offset, dataType);
-		Number value = null;
-		try {
-			value = master.getMaster().getValue(loc);
-		} catch (ModbusTransportException | ErrorResponseException e) {
-			//e.printStackTrace();
-			master.addErrorCount();
-		}
-		return value;
-	}
- 
-	/**
-	 * 读取[04 Input Registers 3x]类型 模拟量数据
-	 * 
-	 * @param slaveId
-	 *            slaveId
-	 * @param offset
-	 *            位置
-	 * @param dataType
-	 *            数据类型,来自com.serotonin.modbus4j.code.DataType
-	 * @return 返回结果
-	 * @throws ModbusTransportException
-	 *             异常
-	 * @throws ErrorResponseException
-	 *             异常
-	 * @throws ModbusInitException
-	 *             异常
-	 */
-	public static Number readInputRegisters(int offset, int dataType,MyModbusMaster master){
-		// 04 Input Registers类型数据读取
-		BaseLocator<Number> loc = BaseLocator.inputRegister(master.getSlaveId(), offset, dataType);
-		Number value = null;
-		try {
-			value = master.getMaster().getValue(loc);
-		} catch (ModbusTransportException | ErrorResponseException e) {
-			//e.printStackTrace();
-			master.addErrorCount();
-		}
-		return value;
-	}
- 
-	/**
-	 * 批量读取使用方法
-	 * 
-	 * @throws ModbusTransportException
-	 * @throws ErrorResponseException
-	 * @throws ModbusInitException
-	 */
-	public static void batchRead() { 
-//		BatchRead<Integer> batch = new BatchRead<Integer>();
-// 
-//		batch.addLocator(0, BaseLocator.holdingRegister(1, 1, DataType.FOUR_BYTE_FLOAT));
-//		batch.addLocator(1, BaseLocator.inputStatus(1, 0));
-// 
-//		ModbusMaster master = getMaster();
-// 
-//		batch.setContiguousRequests(false);
-//		BatchResults<Integer> results = master.send(batch);
-//		System.out.println(results.getValue(0));
-//		System.out.println(results.getValue(1));
-	}
-
-	/**
-	 * 写 [01 Coil Status(0x)]写一个 function ID = 5
-	 * 
-	 * @param slaveId
-	 *            slave的ID
-	 * @param writeOffset
-	 *            位置
-	 * @param writeValue
-	 *            值
-	 * @return 是否写入成功
-	 */
-	public static boolean writeCoil(int writeOffset, boolean writeValue,MyModbusMaster master){
-		// 获取master
-		ModbusMaster tcpMaster = master.getMaster();
-		// 创建请求
-		// 发送请求并获取响应对象
-		WriteCoilResponse response = null;
-		try {
-			WriteCoilRequest request = new WriteCoilRequest(master.getSlaveId(), writeOffset, writeValue);
-			response = (WriteCoilResponse) tcpMaster.send(request);
-		} catch (ModbusTransportException e) {
-			e.printStackTrace();
-		}
-		if (response == null || response.isException()) {
-			master.addErrorCount();
-			return false;
-		} else {
-			return true;
-		}
-	}
- 
-	/**
-	 * 写[01 Coil Status(0x)] 写多个 function ID = 15
-	 * 
-	 * @param slaveId
-	 *            slaveId
-	 * @param startOffset
-	 *            开始位置
-	 * @param bdata
-	 *            写入的数据
-	 * @return 是否写入成功
-	 */
-	public static boolean writeCoils(int startOffset, boolean[] bdata,MyModbusMaster master) {
-		// 获取master
-		ModbusMaster tcpMaster = master.getMaster();
-		// 创建请求
-		WriteCoilsRequest request;
-		WriteCoilsResponse response = null;
-		try {
-			request = new WriteCoilsRequest(master.getSlaveId(), startOffset, bdata);
-			response = (WriteCoilsResponse) tcpMaster.send(request);
-		} catch (ModbusTransportException e) {
-			e.printStackTrace();
-		}
-		// 发送请求并获取响应对象
-		if (response == null || response.isException()) {
-			master.addErrorCount();
-			return false;
-		} else {
-			return true;
-		}
- 
-	}
- 
-	/***
-	 * 写[03 Holding Register(4x)] 写一个 function ID = 6
-	 * 
-	 * @param slaveId
-	 * @param writeOffset
-	 * @param writeValue
-	 * @return
-	 */
-	public static boolean writeRegister(int writeOffset, short writeValue,MyModbusMaster master){
-		// 获取master
-		ModbusMaster tcpMaster = master.getMaster();
-		// 创建请求对象
-		WriteRegisterRequest request;
-		WriteRegisterResponse response = null;
-		try {
-			request = new WriteRegisterRequest(master.getSlaveId(), writeOffset, writeValue);
-			response = (WriteRegisterResponse) tcpMaster.send(request);
-		} catch (ModbusTransportException e) {
-			e.printStackTrace();
-		}
-		if (response == null || response.isException()) {
-			master.addErrorCount();
-			return false;
-		} else {
-			return true;
-		}
- 
-	}
- 
-	/**
-	 * 
-	 * 写入[03 Holding Register(4x)]写多个 function ID=16
-	 * 
-	 * @param slaveId
-	 *            modbus的slaveID
-	 * @param startOffset
-	 *            起始位置偏移量值
-	 * @param sdata
-	 *            写入的数据
-	 * @return 返回是否写入成功
-	 */
-	public static boolean writeRegisters(int startOffset, short[] sdata,MyModbusMaster master){
-		// 获取master
-		ModbusMaster tcpMaster = master.getMaster();
-		// 创建请求对象
-		WriteRegistersRequest request;
-		// 发送请求并获取响应对象
-		ModbusResponse response = null;
-		try {
-			request = new WriteRegistersRequest(master.getSlaveId(), startOffset, sdata);
-			response = tcpMaster.send(request);
-		} catch (ModbusTransportException e) {
-			e.printStackTrace();
-		}
-		if (response.isException()) {
-			//log.error(response.getExceptionMessage());
-			master.addErrorCount();
-			return false;
-		} else {
-			return true;
-		}
-	}
- 
-	/**
-	 * 写入数字类型的模拟量(如:写入Float类型的模拟量、Double类型模拟量、整数类型Short、Integer、Long)
-	 * 
-	 * @param slaveId
-	 * @param offset
-	 * @param value
-	 *            写入值,Number的子类,例如写入Float浮点类型,Double双精度类型,以及整型short,int,long
-	 * @param registerCount
-	 *            ,com.serotonin.modbus4j.code.DataType
-	 */
-	public static void writeHoldingRegister(int offset, Number value, int dataType,MyModbusMaster master){
-		// 获取master
-		ModbusMaster tcpMaster = master.getMaster();
-		// 类型
-		BaseLocator<Number> locator = BaseLocator.holdingRegister(master.getSlaveId(), offset, dataType);
-		try {
-			tcpMaster.setValue(locator, value);
-		} catch (ModbusTransportException | ErrorResponseException e) {
-			e.printStackTrace();
-		}
-	}
-
-	
-	
-}
+package com.modbus.data;
+
+import com.base.ComBase;
+import com.serotonin.modbus4j.BatchRead;
+import com.serotonin.modbus4j.BatchResults;
+import com.serotonin.modbus4j.ModbusMaster;
+import com.serotonin.modbus4j.exception.ErrorResponseException;
+import com.serotonin.modbus4j.exception.ModbusTransportException;
+import com.serotonin.modbus4j.locator.BaseLocator;
+import com.serotonin.modbus4j.msg.ModbusResponse;
+import com.serotonin.modbus4j.msg.WriteCoilRequest;
+import com.serotonin.modbus4j.msg.WriteCoilResponse;
+import com.serotonin.modbus4j.msg.WriteCoilsRequest;
+import com.serotonin.modbus4j.msg.WriteCoilsResponse;
+import com.serotonin.modbus4j.msg.WriteRegisterRequest;
+import com.serotonin.modbus4j.msg.WriteRegisterResponse;
+import com.serotonin.modbus4j.msg.WriteRegistersRequest;
+
+public class MyModbusUtils {
+		
+	/**
+	 * 读取[01 Coil Status 0x]类型 开关数据
+	 * 
+	 * @param slaveId
+	 *            slaveId
+	 * @param offset
+	 *            位置
+	 * @return 读取值
+	 */
+	public static Boolean readCoilStatus(int offset,MyModbusMaster master){
+		// 01 Coil Status
+		BaseLocator<Boolean> loc = BaseLocator.coilStatus(master.getSlaveId(), offset);
+		Boolean value = null;;
+		try {
+			value = master.getMaster().getValue(loc);
+		} catch (ModbusTransportException | ErrorResponseException e) {
+			master.addErrorCount();
+			//e.printStackTrace();
+		}
+		return value;
+	}
+ 
+	/**
+	 * 读取[02 Input Status 1x]类型 开关数据
+	 * 
+	 * @param slaveId
+	 * @param offset
+	 * @return
+	 */
+	public static Boolean readInputStatus(int offset,MyModbusMaster master){
+		// 02 Input Status
+		BaseLocator<Boolean> loc = BaseLocator.inputStatus(master.getSlaveId(), offset);
+		Boolean value = null;;
+		try {
+			value = master.getMaster().getValue(loc);
+		} catch (ModbusTransportException | ErrorResponseException e) {
+			master.addErrorCount();
+			//e.printStackTrace();
+		}
+		return value;
+	}
+ 
+	/**
+	 * 读取[03 Holding Register类型 2x]模拟量数据
+	 * 
+	 * @param slaveId
+	 *            slave Id
+	 * @param offset
+	 *            位置
+	 * @param dataType
+	 *            数据类型,来自com.serotonin.modbus4j.code.DataType
+	 * @return
+	 */
+	public static Number readHoldingRegister(int offset, int dataType,MyModbusMaster master){
+		// 03 Holding Register类型数据读取
+		BaseLocator<Number> loc = BaseLocator.holdingRegister(master.getSlaveId(), offset, dataType);
+		Number value = null;
+		try {
+			value = master.getMaster().getValue(loc);
+		} catch (ModbusTransportException | ErrorResponseException e) {
+			//e.printStackTrace();
+			master.addErrorCount();
+		}
+		return value;
+	}
+ 
+	/**
+	 * 读取[04 Input Registers 3x]类型 模拟量数据
+	 * 
+	 * @param slaveId
+	 *            slaveId
+	 * @param offset
+	 *            位置
+	 * @param dataType
+	 *            数据类型,来自com.serotonin.modbus4j.code.DataType
+	 * @return 返回结果
+	 * @throws ModbusTransportException
+	 *             异常
+	 * @throws ErrorResponseException
+	 *             异常
+	 * @throws ModbusInitException
+	 *             异常
+	 */
+	public static Number readInputRegisters(int offset, int dataType,MyModbusMaster master){
+		// 04 Input Registers类型数据读取
+		BaseLocator<Number> loc = BaseLocator.inputRegister(master.getSlaveId(), offset, dataType);
+		Number value = null;
+		try {
+			value = master.getMaster().getValue(loc);
+		} catch (ModbusTransportException | ErrorResponseException e) {
+			//e.printStackTrace();
+			master.addErrorCount();
+		}
+		return value;
+	}
+ 
+	/**
+	 * 批量读取使用方法
+	 * 
+	 * @throws ModbusTransportException
+	 * @throws ErrorResponseException
+	 * @throws ModbusInitException
+	 */
+	public static void batchRead() { 
+//		BatchRead<Integer> batch = new BatchRead<Integer>();
+// 
+//		batch.addLocator(0, BaseLocator.holdingRegister(1, 1, DataType.FOUR_BYTE_FLOAT));
+//		batch.addLocator(1, BaseLocator.inputStatus(1, 0));
+// 
+//		ModbusMaster master = getMaster();
+// 
+//		batch.setContiguousRequests(false);
+//		BatchResults<Integer> results = master.send(batch);
+//		System.out.println(results.getValue(0));
+//		System.out.println(results.getValue(1));
+	}
+
+	/**
+	 * 写 [01 Coil Status(0x)]写一个 function ID = 5
+	 * 
+	 * @param slaveId
+	 *            slave的ID
+	 * @param writeOffset
+	 *            位置
+	 * @param writeValue
+	 *            值
+	 * @return 是否写入成功
+	 */
+	public static boolean writeCoil(int writeOffset, boolean writeValue,MyModbusMaster master){
+		// 获取master
+		ModbusMaster tcpMaster = master.getMaster();
+		// 创建请求
+		// 发送请求并获取响应对象
+		WriteCoilResponse response = null;
+		try {
+			WriteCoilRequest request = new WriteCoilRequest(master.getSlaveId(), writeOffset, writeValue);
+			response = (WriteCoilResponse) tcpMaster.send(request);
+		} catch (ModbusTransportException e) {
+			e.printStackTrace();
+		}
+		if (response == null || response.isException()) {
+			master.addErrorCount();
+			return false;
+		} else {
+			return true;
+		}
+	}
+ 
+	/**
+	 * 写[01 Coil Status(0x)] 写多个 function ID = 15
+	 * 
+	 * @param slaveId
+	 *            slaveId
+	 * @param startOffset
+	 *            开始位置
+	 * @param bdata
+	 *            写入的数据
+	 * @return 是否写入成功
+	 */
+	public static boolean writeCoils(int startOffset, boolean[] bdata,MyModbusMaster master) {
+		// 获取master
+		ModbusMaster tcpMaster = master.getMaster();
+		// 创建请求
+		WriteCoilsRequest request;
+		WriteCoilsResponse response = null;
+		try {
+			request = new WriteCoilsRequest(master.getSlaveId(), startOffset, bdata);
+			response = (WriteCoilsResponse) tcpMaster.send(request);
+		} catch (ModbusTransportException e) {
+			e.printStackTrace();
+		}
+		// 发送请求并获取响应对象
+		if (response == null || response.isException()) {
+			master.addErrorCount();
+			return false;
+		} else {
+			return true;
+		}
+ 
+	}
+ 
+	/***
+	 * 写[03 Holding Register(4x)] 写一个 function ID = 6
+	 * 
+	 * @param slaveId
+	 * @param writeOffset
+	 * @param writeValue
+	 * @return
+	 */
+	public static boolean writeRegister(int writeOffset, short writeValue,MyModbusMaster master){
+		// 获取master
+		ModbusMaster tcpMaster = master.getMaster();
+		// 创建请求对象
+		WriteRegisterRequest request;
+		WriteRegisterResponse response = null;
+		try {
+			request = new WriteRegisterRequest(master.getSlaveId(), writeOffset, writeValue);
+			response = (WriteRegisterResponse) tcpMaster.send(request);
+		} catch (ModbusTransportException e) {
+			e.printStackTrace();
+		}
+		if (response == null || response.isException()) {
+			master.addErrorCount();
+			return false;
+		} else {
+			return true;
+		}
+ 
+	}
+ 
+	/**
+	 * 
+	 * 写入[03 Holding Register(4x)]写多个 function ID=16
+	 * 
+	 * @param slaveId
+	 *            modbus的slaveID
+	 * @param startOffset
+	 *            起始位置偏移量值
+	 * @param sdata
+	 *            写入的数据
+	 * @return 返回是否写入成功
+	 */
+	public static boolean writeRegisters(int startOffset, short[] sdata,MyModbusMaster master){
+		// 获取master
+		ModbusMaster tcpMaster = master.getMaster();
+		// 创建请求对象
+		WriteRegistersRequest request;
+		// 发送请求并获取响应对象
+		ModbusResponse response = null;
+		try {
+			request = new WriteRegistersRequest(master.getSlaveId(), startOffset, sdata);
+			response = tcpMaster.send(request);
+		} catch (ModbusTransportException e) {
+			e.printStackTrace();
+		}
+		if (response.isException()) {
+			//log.error(response.getExceptionMessage());
+			master.addErrorCount();
+			return false;
+		} else {
+			return true;
+		}
+	}
+ 
+	/**
+	 * 写入数字类型的模拟量(如:写入Float类型的模拟量、Double类型模拟量、整数类型Short、Integer、Long)
+	 * 
+	 * @param slaveId
+	 * @param offset
+	 * @param value
+	 *            写入值,Number的子类,例如写入Float浮点类型,Double双精度类型,以及整型short,int,long
+	 * @param registerCount
+	 *            ,com.serotonin.modbus4j.code.DataType
+	 */
+	public static void writeHoldingRegister(int offset, Number value, int dataType,MyModbusMaster master){
+		// 获取master
+		ModbusMaster tcpMaster = master.getMaster();
+		// 类型
+		BaseLocator<Number> locator = BaseLocator.holdingRegister(master.getSlaveId(), offset, dataType);
+		try {
+			tcpMaster.setValue(locator, value);
+		} catch (ModbusTransportException | ErrorResponseException e) {
+			e.printStackTrace();
+		}
+	}
+
+	public static BatchResults<Integer> readMutilRegisters(BatchRead<Integer> batch,MyModbusMaster master){
+		batch.setContiguousRequests(false);
+		try {
+			return master.getMaster().send(batch);
+		} catch (ModbusTransportException | ErrorResponseException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	/**
+	 * 	构造线圈读取节点
+	 * @param offset
+	 * @param master
+	 * @return
+	 */
+	public static BaseLocator<?> createBaseLocator(int offset,MyModbusMaster master) {
+		return BaseLocator.coilStatus(master.getSlaveId(), offset);
+	}
+	
+	/**
+	 * 	构造读取节点
+	 * @param offset
+	 * @param master
+	 * @return
+	 */
+	public static BaseLocator<?> createBaseLocator(int offset,int datatype,MyModbusMaster master) {
+		return BaseLocator.holdingRegister(master.getSlaveId(), offset, datatype);
+	}
+
+	/**
+	 * 	读取float类型数据
+	 * @param obj	Short类型
+	 * @return
+	 */
+	public static float readShortToFloat(Object obj) {
+		return (float)ComBase.changeShortToInt((Short)obj);
+	}
+	
+	/**
+	 * 	读取int类型数据
+	 * @param obj	Short类型
+	 * @return
+	 */
+	public static int readShortToInt(Object obj) {
+		return ComBase.changeShortToInt((Short)obj);
+	}
+	
+	/**
+	 * 	读取Boolean类型数据
+	 * @param obj	Boolean类型
+	 * @return
+	 */
+	public static int readBooleanToInt(Object obj) {
+		return ((Boolean)obj?1:0);
+	}
+}

--
Gitblit v1.9.1