From ecd980ec6c9763dfbd183a3e5560e10fb85199e5 Mon Sep 17 00:00:00 2001
From: whyclj <1525436766@qq.com>
Date: 星期二, 25 八月 2020 15:34:04 +0800
Subject: [PATCH] 提高查询速度

---
 ElectricalSystem_MonitorServer_4KW/src/com/modbus/data/MyModbusUtils.java |   87 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 86 insertions(+), 1 deletions(-)

diff --git a/ElectricalSystem_MonitorServer_4KW/src/com/modbus/data/MyModbusUtils.java b/ElectricalSystem_MonitorServer_4KW/src/com/modbus/data/MyModbusUtils.java
index eee8918..b981a90 100644
--- a/ElectricalSystem_MonitorServer_4KW/src/com/modbus/data/MyModbusUtils.java
+++ b/ElectricalSystem_MonitorServer_4KW/src/com/modbus/data/MyModbusUtils.java
@@ -1,6 +1,12 @@
 package com.modbus.data;
 
+import java.util.Date;
+
+import com.base.ComBase;
+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.ErrorResponseException;
 import com.serotonin.modbus4j.exception.ModbusTransportException;
 import com.serotonin.modbus4j.locator.BaseLocator;
@@ -139,6 +145,17 @@
 		return value;
 	}
  
+	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;
+	}
+	
+	
 	/**
 	 * 批量读取使用方法
 	 * 
@@ -159,7 +176,27 @@
 //		System.out.println(results.getValue(0));
 //		System.out.println(results.getValue(1));
 	}
-
+	
+	/**
+	 * 	构造线圈读取节点
+	 * @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);
+	}
+	
 	/**
 	 * 写 [01 Coil Status(0x)]写一个 function ID = 5
 	 * 
@@ -320,4 +357,52 @@
 			}
 		}
 	}
+	
+	public static void main(String[] args) {
+		BatchRead<Integer> batch = new BatchRead<Integer>();
+ 
+		batch.addLocator(0, BaseLocator.holdingRegister(1, 1, DataType.TWO_BYTE_INT_SIGNED));
+        batch.addLocator(1, BaseLocator.coilStatus(1, 1));
+        batch.setContiguousRequests(true);
+ 
+		MyModbusMaster m = new MyModbusMaster("192.168.10.221", 2);
+		
+		ModbusMaster master = m.getMaster();
+ 
+		BatchResults<Integer> results = new BatchResults<>();
+		try {
+			results = master.send(batch);
+		} catch (ModbusTransportException | ErrorResponseException e) {
+			e.printStackTrace();
+		}
+		System.out.println(results.getValue(0));
+		//System.out.println(results.getValue(1));
+	}
+	
+	/**
+	 * 	读取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