diff --git a/SCADA/Example/BatchCoreTest.exe b/SCADA/Example/BatchCoreTest.exe index 02781be..fa667ca 100644 Binary files a/SCADA/Example/BatchCoreTest.exe and b/SCADA/Example/BatchCoreTest.exe differ diff --git a/SCADA/Program/BatchCoreService/DAService.cs b/SCADA/Program/BatchCoreService/DAService.cs index 529bda1..c605258 100644 --- a/SCADA/Program/BatchCoreService/DAService.cs +++ b/SCADA/Program/BatchCoreService/DAService.cs @@ -1362,80 +1362,84 @@ namespace BatchCoreService for (int i = 0; i < data.Count; i++) { short id = data[i].ID; - byte[] dt = BitConverter.GetBytes(id); - sendBuffer[j++] = dt[0]; - sendBuffer[j++] = dt[1]; - switch (_list[GetItemProperties(id)].DataType) + var propid = GetItemProperties(id); + if (propid >= 0 && propid < _list.Count) { - case DataType.BOOL: - sendBuffer[j++] = 1; - sendBuffer[j++] = data[i].Value.Boolean ? (byte)1 : (byte)0; - break; - case DataType.BYTE: - sendBuffer[j++] = 1; - sendBuffer[j++] = data[i].Value.Byte; - break; - case DataType.WORD: - { - sendBuffer[j++] = 2; - byte[] bt = BitConverter.GetBytes(data[i].Value.Word); - sendBuffer[j++] = bt[0]; - sendBuffer[j++] = bt[1]; - } - break; - case DataType.SHORT: - { - sendBuffer[j++] = 2; - byte[] bt = BitConverter.GetBytes(data[i].Value.Int16); - sendBuffer[j++] = bt[0]; - sendBuffer[j++] = bt[1]; - } - break; - case DataType.DWORD: - { - sendBuffer[j++] = 4; - byte[] bt = BitConverter.GetBytes(data[i].Value.DWord); - sendBuffer[j++] = bt[0]; - sendBuffer[j++] = bt[1]; - sendBuffer[j++] = bt[2]; - sendBuffer[j++] = bt[3]; - } - break; - case DataType.INT: - { - sendBuffer[j++] = 4; - byte[] bt = BitConverter.GetBytes(data[i].Value.Int32); - sendBuffer[j++] = bt[0]; - sendBuffer[j++] = bt[1]; - sendBuffer[j++] = bt[2]; - sendBuffer[j++] = bt[3]; - } - break; - case DataType.FLOAT: - { - sendBuffer[j++] = 4; - byte[] bt = BitConverter.GetBytes(data[i].Value.Single); - sendBuffer[j++] = bt[0]; - sendBuffer[j++] = bt[1]; - sendBuffer[j++] = bt[2]; - sendBuffer[j++] = bt[3]; - } - break; - case DataType.STR: - { - byte[] bt = Encoding.ASCII.GetBytes(this[data[i].ID].ToString()); - sendBuffer[j++] = (byte)bt.Length; - for (int k = 0; k < bt.Length; k++) + byte[] dt = BitConverter.GetBytes(id); + sendBuffer[j++] = dt[0]; + sendBuffer[j++] = dt[1]; + switch (_list[propid].DataType) + { + case DataType.BOOL: + sendBuffer[j++] = 1; + sendBuffer[j++] = data[i].Value.Boolean ? (byte)1 : (byte)0; + break; + case DataType.BYTE: + sendBuffer[j++] = 1; + sendBuffer[j++] = data[i].Value.Byte; + break; + case DataType.WORD: { - sendBuffer[j++] = bt[k]; + sendBuffer[j++] = 2; + byte[] bt = BitConverter.GetBytes(data[i].Value.Word); + sendBuffer[j++] = bt[0]; + sendBuffer[j++] = bt[1]; } - } - break; - default: - break; + break; + case DataType.SHORT: + { + sendBuffer[j++] = 2; + byte[] bt = BitConverter.GetBytes(data[i].Value.Int16); + sendBuffer[j++] = bt[0]; + sendBuffer[j++] = bt[1]; + } + break; + case DataType.DWORD: + { + sendBuffer[j++] = 4; + byte[] bt = BitConverter.GetBytes(data[i].Value.DWord); + sendBuffer[j++] = bt[0]; + sendBuffer[j++] = bt[1]; + sendBuffer[j++] = bt[2]; + sendBuffer[j++] = bt[3]; + } + break; + case DataType.INT: + { + sendBuffer[j++] = 4; + byte[] bt = BitConverter.GetBytes(data[i].Value.Int32); + sendBuffer[j++] = bt[0]; + sendBuffer[j++] = bt[1]; + sendBuffer[j++] = bt[2]; + sendBuffer[j++] = bt[3]; + } + break; + case DataType.FLOAT: + { + sendBuffer[j++] = 4; + byte[] bt = BitConverter.GetBytes(data[i].Value.Single); + sendBuffer[j++] = bt[0]; + sendBuffer[j++] = bt[1]; + sendBuffer[j++] = bt[2]; + sendBuffer[j++] = bt[3]; + } + break; + case DataType.STR: + { + byte[] bt = Encoding.ASCII.GetBytes(this[data[i].ID].ToString()); + sendBuffer[j++] = (byte)bt.Length; + for (int k = 0; k < bt.Length; k++) + { + sendBuffer[j++] = bt[k]; + } + } + break; + default: + break; + } + Array.Copy(BitConverter.GetBytes((data[i].TimeStamp == DateTime.MinValue ? DateTime.Now : data[i].TimeStamp).ToFileTime()), 0, sendBuffer, j, 8); + j += 8; } - Array.Copy(BitConverter.GetBytes((data[i].TimeStamp == DateTime.MinValue ? DateTime.Now : data[i].TimeStamp).ToFileTime()), 0, sendBuffer, j, 8); - j += 8; } byte[] dt1 = BitConverter.GetBytes(j); sendBuffer[3] = dt1[0];