Преглед на файлове

增加了modbusrtu的粘帧等待时间

xiuwei преди 4 години
родител
ревизия
0a7398f918

+ 3 - 3
pom.xml

@@ -6,7 +6,7 @@
 
     <groupId>wei.yigulu</groupId>
     <artifactId>protocol</artifactId>
-    <version>1.1.5</version>
+    <version>1.1.6</version>
     <packaging>pom</packaging>
     <modules>
         <module>protocol-core</module>
@@ -32,9 +32,9 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <java.version>1.8</java.version>
-        <protocol.version>1.1.5</protocol.version>
+        <protocol.version>1.1.6</protocol.version>
         <iec104.version>1.4.11</iec104.version>
-        <modbus.version>1.2.3</modbus.version>
+        <modbus.version>1.2.4</modbus.version>
         <cdt.version>1.0.0</cdt.version>
     </properties>
     <distributionManagement>

+ 1 - 1
protocol-all/pom.xml

@@ -6,7 +6,7 @@
     <parent>
         <artifactId>protocol</artifactId>
         <groupId>wei.yigulu</groupId>
-        <version>1.1.5</version>
+        <version>1.1.6</version>
     </parent>
 
 

+ 1 - 1
protocol-cdt/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>protocol</artifactId>
         <groupId>wei.yigulu</groupId>
-        <version>1.1.5</version>
+        <version>1.1.6</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 3 - 2
protocol-core/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>protocol</artifactId>
         <groupId>wei.yigulu</groupId>
-        <version>1.1.5</version>
+        <version>1.1.6</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
@@ -14,10 +14,11 @@
     <packaging>jar</packaging>
 
     <dependencies>
+        <!-- https://mvnrepository.com/artifact/com.github.purejavacomm/purejavacomm -->
         <dependency>
             <groupId>com.github.purejavacomm</groupId>
             <artifactId>purejavacomm</artifactId>
-            <version>1.0.1.RELEASE</version>
+            <version>1.0.2.RELEASE</version>
         </dependency>
     </dependencies>
 </project>

+ 5 - 2
protocol-core/src/main/java/wei/yigulu/netty/AbstractDelimiterHandler.java

@@ -5,6 +5,7 @@ import io.netty.buffer.ByteBuf;
 import io.netty.buffer.ByteBufUtil;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.ChannelInboundHandlerAdapter;
+import lombok.Getter;
 import lombok.Setter;
 import lombok.experimental.Accessors;
 import org.joda.time.DateTime;
@@ -40,6 +41,7 @@ public abstract class AbstractDelimiterHandler extends ChannelInboundHandlerAdap
 	 * 接收的最长的报文长度
 	 */
 	@Setter
+	@Getter
 	@Accessors(chain = true)
 	protected  int maxLength = 10240;
 
@@ -48,6 +50,7 @@ public abstract class AbstractDelimiterHandler extends ChannelInboundHandlerAdap
 	 * 判断是否是断包的最大时间间隔
 	 */
 	@Setter
+	@Getter
 	@Accessors(chain = true)
 	protected  int maxTimeSpace=200;
 
@@ -127,7 +130,7 @@ public abstract class AbstractDelimiterHandler extends ChannelInboundHandlerAdap
 	 * @param byteBuf 字节缓冲区
 	 */
 	protected void mergeOrFlushByTimeSpan(ByteBuf byteBuf){
-		if (timeMark.plusMillis(maxTimeSpace).isBeforeNow()) {
+		if (timeMark.plusMillis(getMaxTimeSpace()).isBeforeNow()) {
 			log.warn("上一帧数据长度不足,但两帧时间间隔较长上一帧被舍弃 舍弃的数据帧为:" + DataConvertor.ByteBuf2String(cumulation));
 			while (!cumulation.release()) {
 			}
@@ -147,7 +150,7 @@ public abstract class AbstractDelimiterHandler extends ChannelInboundHandlerAdap
 	 * @return boolean
 	 */
 	protected boolean isOverMaxLength(ByteBuf byteBuf){
-		if (byteBuf.readableBytes() > maxLength) {
+		if (byteBuf.readableBytes() > getMaxLength()) {
 			while (!cumulation.release()) {
 			}
 			cumulation = null;

+ 1 - 1
protocol-iec104/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>protocol</artifactId>
         <groupId>wei.yigulu</groupId>
-        <version>1.1.5</version>
+        <version>1.1.6</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 1 - 1
protocol-modbus/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>protocol</artifactId>
         <groupId>wei.yigulu</groupId>
-        <version>1.1.5</version>
+        <version>1.1.6</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
     <version>${modbus.version}</version>

+ 11 - 2
protocol-modbus/src/main/java/wei/yigulu/modbus/netty/ModbusRtuMasterDelimiterHandler.java

@@ -3,6 +3,7 @@ package wei.yigulu.modbus.netty;
 
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.ChannelHandlerContext;
+import lombok.Getter;
 import lombok.Setter;
 import lombok.experimental.Accessors;
 import org.joda.time.DateTime;
@@ -29,10 +30,18 @@ public class ModbusRtuMasterDelimiterHandler extends AbstractDelimiterHandler {
 	 */
 	private boolean doCrcCheck = true;
 
+	/**
+	 * 判断是否是断包的最大时间间隔
+	 */
+	@Setter
+	@Getter
+	@Accessors(chain = true)
+	protected  int maxTimeSpace=1000;
+
 
 	@Override
 	public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
-		//log.warn("接收到原始的报文 :"+ DataConvertor.ByteBuf2String((ByteBuf) msg));
+		log.info("接收到原始的报文 :"+ DataConvertor.ByteBuf2String((ByteBuf) msg));
 		if (isOverMaxLength((ByteBuf) msg)) {
 			return;
 		}
@@ -47,7 +56,7 @@ public class ModbusRtuMasterDelimiterHandler extends AbstractDelimiterHandler {
 			cumulation.markReaderIndex();
 			cumulation.readBytes(1).release();
 			functionCode = cumulation.readUnsignedByte();
-			if (functionCode > 0x80) {
+			if (functionCode > 0x80 ) {
 				//异常功能码 异常帧
 				byteNum = 0;
 			} else {

+ 3 - 3
protocol-modbus/src/test/java/TestRtuMaster.java

@@ -31,8 +31,8 @@ public class TestRtuMaster {
 		master3.createByUnBlock();*/
 		Thread.sleep(5000L);
 		Map<Integer, ModbusDataTypeEnum> map = new HashMap<>();
-		for (int i = 0; i < 23; i+=1) {
-			map.put(2*i , ModbusDataTypeEnum.CDAB);
+		for (int i = 0; i < 43; i+=1) {
+			map.put(i , ModbusDataTypeEnum.PM_AB);
 		}
 		List<Obj4RequestRegister> ll = ModbusRequestDataUtils.splitModbusRequest(map, 1, FunctionCode.READ_HOLDING_REGISTERS);
 
@@ -45,7 +45,7 @@ public class TestRtuMaster {
 			} catch (ModbusException e) {
 				System.out.println(e.getMsg());
 			}
-			Thread.sleep(10L);
+			Thread.sleep(1000L);
 		}