|
@@ -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>
|