Browse Source

修改modbus说明书

xiuwei 4 years ago
parent
commit
188bdcc240

+ 6 - 5
protocol-iec104/src/test/java/SlaveTest.java

@@ -1,5 +1,7 @@
 import wei.yigulu.iec104.nettyconfig.Iec104SlaverBuilder;
 
+import java.net.InetSocketAddress;
+
 /**
  * @author: xiuwei
  * @version:
@@ -11,18 +13,17 @@ public class SlaveTest {
 
 
 
-		/*slaverBuilder.getConnectFilterManager().appendFilter((c)->{
+		slaverBuilder.getConnectFilterManager().appendFilter((c)->{
 			if(slaverBuilder.getChannels().size()>=1){
 				return -1;
 			}
-			return 1;
-			*//*InetSocketAddress ipSocket = (InetSocketAddress) c.remoteAddress();
+			InetSocketAddress ipSocket = (InetSocketAddress) c.remoteAddress();
 			String clientIp = ipSocket.getAddress().getHostAddress();
 			Integer clientPort = ipSocket.getPort();
 			if(clientPort>30000){
 				return -1;
-			}else {return 1;}*//*
-		});*/
+			}else {return 1;}
+		});
 		slaverBuilder.create();
 	}
 

+ 55 - 0
protocol-modbus/README.md

@@ -17,6 +17,61 @@
 
 create() 方法会阻塞线程,如果不希望阻塞线程可以使用createByUnBlock(),以工具内的单线程池执行。
 
+```java
+	ModbusTcpMasterBuilder master = new ModbusTcpMasterBuilder("127.0.0.1", 5001);
+		master.createByUnBlock();
+		TcpSynchronousWaitingRoom.waitTime=5000L;
+		Thread.sleep(3000L);
+		Map<Integer, ModbusDataTypeEnum> map = new HashMap<>();
+//构建一个请求数据的列表  该map代表 取0-120 地址位 , 数据类型为P_AB的 数据 这个根据实际需要进行修改 占用两个寄存器的数据 地址位该数据起始寄存器地址
+		for (int i = 0; i <= 120; i++) {
+			map.put(i , ModbusDataTypeEnum.P_AB);
+		}
+		List<Obj4RequestRegister> ll = ModbusRequestDataUtils.splitModbusRequest(map, 1, FunctionCode.READ_HOLDING_REGISTERS);
+
+		for (; ; ) {
+			try {
+				Map<Integer, IModbusDataType> map1 = ModbusRequestDataUtils.getRegisterData(master, ll);
+				ArrayList<Integer> lll = new ArrayList<Integer>(map1.keySet());
+				Collections.sort(lll);
+				for (Integer i : lll) {
+					if(map1.get(i) instanceof  NumericModbusData) {
+						System.out.println(i + " ============ " + ((NumericModbusData) map1.get(i)).getValue());
+					}else {
+						System.out.println(i + " ============ " + JSON.toJSONString(((BooleanModbusDataInRegister) map1.get(i)).getValues()));
+				}
+				}
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
+			Thread.sleep(3000L);
+		}
+```
+
+
+
+### SLAVER的创建 
+
+```java
+ModbusTcpSlaverBuilder slaverBuilder = new ModbusTcpSlaverBuilder(502);
+		slaverBuilder.createByUnBlock();
+
+		Random random = new Random();
+		boolean f;
+		for (; ; ) {
+			for (int i = 0; i < 10; i++) {
+                //设置地址位  数据类型&值
+				slaverBuilder.getModbusSlaveDataContainer().setRegister(1, i, new BADC(BigDecimal.valueOf(random.nextFloat())));
+				/*f = random.nextBoolean();
+				System.out.println(i + ":" + f);
+				slaverBuilder.getModbusSlaveDataContainer().setCoil(1, i, f);*/
+			}
+			Thread.sleep(2000L);
+		}
+```
+
+
+
 ### 数据的接收
 
 

+ 1 - 1
protocol-modbus/src/test/java/TestSlaver.java

@@ -18,7 +18,7 @@ public class TestSlaver {
 		boolean f;
 		for (; ; ) {
 			for (int i = 0; i < 10; i++) {
-				slaverBuilder.getModbusSlaveDataContainer().setRegister(1, i, new BADC(BigDecimal.valueOf(20)));
+				slaverBuilder.getModbusSlaveDataContainer().setRegister(1, i, new BADC(BigDecimal.valueOf(random.nextFloat())));
 				/*f = random.nextBoolean();
 				System.out.println(i + ":" + f);
 				slaverBuilder.getModbusSlaveDataContainer().setCoil(1, i, f);*/