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