Pārlūkot izejas kodu

add wago simulator address error response

chenzk 2 mēneši atpakaļ
vecāks
revīzija
48b6c5ee73
1 mainītis faili ar 15 papildinājumiem un 0 dzēšanām
  1. 15 0
      CyberX8_Simulator/Devices/WagoSocketSimulator.cs

+ 15 - 0
CyberX8_Simulator/Devices/WagoSocketSimulator.cs

@@ -158,6 +158,13 @@ namespace CyberX8_Simulator.Devices
             else if (command == 0x05)//写DO
             {
                 short startAddress = byteTransform.TransInt16(data, 8);
+                if (startAddress > 0x03FF || startAddress < WRITE_DO_STARTADDRESS)
+                {
+                    short flag = byteTransform.TransInt16(data, 0);
+                    byte channel = data[6];
+                    OnWriteMessage(CreateError(flag, channel, command, 0x02)); //地址错误
+                    return;
+                }
                 int position = startAddress - WRITE_DO_STARTADDRESS;
                 bool status = data[10] == 0xFF ? true : false;
                 lock (_writeDOLocker)
@@ -170,6 +177,13 @@ namespace CyberX8_Simulator.Devices
             else if (command == 0x06)//写AO
             {
                 short startAddress = byteTransform.TransInt16(data, 8);
+                if(startAddress > 0x02FF || startAddress < WRITE_AO_STARTADDRESS)
+                {
+                    short flag = byteTransform.TransInt16(data, 0);
+                    byte channel = data[6];
+                    OnWriteMessage(CreateError(flag, channel, command, 0x02)); //地址错误
+                    return;
+                }
                 int position = startAddress - WRITE_AO_STARTADDRESS;
                 short value = byteTransform.TransInt16(data, 10);
                 lock (_writeAOLocker)
@@ -184,6 +198,7 @@ namespace CyberX8_Simulator.Devices
                 short flag = byteTransform.TransInt16(data, 0);
                 byte channel = data[6];
                 OnWriteMessage(CreateError(flag, channel, command, 0x01)); //指令错误
+                return;
             }
         }
         /// <summary>