xiuwei 4 gadi atpakaļ
vecāks
revīzija
86bdcda37f

+ 1 - 1
protocol-modbus/src/main/java/wei/yigulu/modbus/domain/FunctionCode.java

@@ -118,7 +118,7 @@ public enum FunctionCode {
 			case 0x90:
 				return WRITE_REGISTERS_ERROR;
 			default:
-				throw new IllegalArgumentException();
+				throw new IllegalArgumentException("异常传参 : "+code);
 		}
 
 	}

+ 1 - 1
protocol-modbus/src/main/java/wei/yigulu/modbus/domain/confirm/TcpModbusConfirm.java

@@ -58,7 +58,7 @@ public class TcpModbusConfirm extends AbstractModbusConfirm {
 		}
 		this.tcpExtraCode.decode(byteBuf);
 		this.setLength(new P_AB().decode(byteBuf).getValue().intValue());
-		//super.decode(byteBuf);
+		super.decode(byteBuf);
 		return this;
 	}
 

+ 1 - 0
protocol-modbus/src/main/java/wei/yigulu/modbus/netty/ModbusTcpDelimiterHandler.java

@@ -6,6 +6,7 @@ import io.netty.buffer.Unpooled;
 import io.netty.channel.ChannelHandlerContext;
 import org.joda.time.DateTime;
 import wei.yigulu.netty.AbstractDelimiterHandler;
+import wei.yigulu.utils.DataConvertor;
 
 
 /**

+ 6 - 1
protocol-modbus/src/main/java/wei/yigulu/modbus/utils/ModbusCommandDataUtils.java

@@ -9,6 +9,7 @@ import wei.yigulu.modbus.domain.command.RtuModbusCommand;
 import wei.yigulu.modbus.domain.command.TcpModbusCommand;
 import wei.yigulu.modbus.domain.confirm.AbstractModbusConfirm;
 import wei.yigulu.modbus.domain.confirm.RtuModbusConfirm;
+import wei.yigulu.modbus.domain.confirm.TcpModbusConfirm;
 import wei.yigulu.modbus.domain.datatype.RegisterValue;
 import wei.yigulu.modbus.domain.tcpextracode.TransactionIdentifier;
 import wei.yigulu.modbus.exceptiom.ModbusException;
@@ -62,7 +63,7 @@ public class ModbusCommandDataUtils {
 			modbusCommand.encode(bs);
 			masterBuilder.sendFrameToOpposite(Bytes.toArray(bs));
 			buffer = ((ModbusMasterBuilderInterface) masterBuilder).getOrCreateSynchronousWaitingRoom().getData(((TcpModbusCommand)modbusCommand).getTcpExtraCode().getTransactionIdentifier().getSeq());
-			confirm = new RtuModbusConfirm().decode(buffer);
+			confirm = new TcpModbusConfirm().decode(buffer);
 		}}catch (ModbusException e){
 			log.error("控制命令执行失败:"+e.getMsg());
 			return false;
@@ -72,10 +73,14 @@ public class ModbusCommandDataUtils {
 				if(confirm.getFunctionCode()== FunctionCode.WRITE_COIL ||confirm.getFunctionCode()== FunctionCode.WRITE_REGISTER ){
 					if(Bytes.indexOf(confirm.getB2(),modbusCommand.getDataBytes())==0){
 						return true;
+					}else{
+						log.warn("返回的确认值和输出值不同");
 					}
 				}else{
 					if (confirm.getQuantity().equals(modbusCommand.getQuantity())){
 						return true;
+					}else{
+						log.warn("返回的值数量和输出数量不同");
 					}
 				}
 			}

+ 19 - 8
protocol-modbus/src/test/java/TestTcpCommandMaster.java

@@ -9,6 +9,7 @@ import wei.yigulu.modbus.domain.datatype.numeric.ABCD;
 import wei.yigulu.modbus.domain.datatype.numeric.P_AB;
 import wei.yigulu.modbus.domain.synchronouswaitingroom.TcpSynchronousWaitingRoom;
 import wei.yigulu.modbus.exceptiom.ModbusException;
+import wei.yigulu.modbus.netty.ModbusRtuMasterBuilder;
 import wei.yigulu.modbus.netty.ModbusTcpMasterBuilder;
 import wei.yigulu.modbus.utils.ModbusCommandDataUtils;
 import wei.yigulu.modbus.utils.ModbusRequestDataUtils;
@@ -23,17 +24,27 @@ import java.util.*;
 @Slf4j
 public class TestTcpCommandMaster {
 	public static void main(String[] args) throws InterruptedException, ModbusException {
-		ModbusTcpMasterBuilder master = new ModbusTcpMasterBuilder("127.0.0.1", 5002);
+		ModbusTcpMasterBuilder master = new ModbusTcpMasterBuilder("127.0.0.1",5002);
 		master.createByUnBlock();
-		TcpSynchronousWaitingRoom.waitTime=5000L;
+		TcpSynchronousWaitingRoom.waitTime = 5000L;
 		Thread.sleep(3000L);
-		List<RegisterValue> list = new ArrayList<>();
-		for (int i = 0; i <= 0; i++) {
-			list.add(new ABCD().setValue(BigDecimal.valueOf(2*i)));
-		}
-		ModbusCommandDataUtils.commandRegister(master,1,0,list);
-		Thread.sleep(30L);
+		Random random = new Random();
+		BigDecimal val;
+		BigDecimal val1;
+		for (; ; ) {
+			val=BigDecimal.valueOf(random.nextInt(100));
+			System.out.println("数据个数:"+val);
+			List<RegisterValue> list = new ArrayList<>();
+			for (int i = 0; i <= val.intValue(); i++) {
+				val1=BigDecimal.valueOf(random.nextInt(11));
+				System.out.println("数据值:"+val1);
+				list.add(new P_AB().setValue(val1));
+			}
+			System.out.println(ModbusCommandDataUtils.commandRegister(master, 1, 0, list));
+			Thread.sleep(60000L);
 		}
+	}
+
 
 
 }