diff --git a/SCADA/Program/DataService/CacheReader.cs b/SCADA/Program/DataService/CacheReader.cs index 84e88346..131af79d 100644 --- a/SCADA/Program/DataService/CacheReader.cs +++ b/SCADA/Program/DataService/CacheReader.cs @@ -389,7 +389,7 @@ public ItemData ReadInt32(DeviceAddress address) } else { - result = (_cache[startIndex + 1] << 16) | ((ushort)_cache[startIndex]); + result = (_cache[startIndex] << 16) | ((ushort)_cache[startIndex + 1]); } return new ItemData(result, 0, QUALITIES.QUALITY_GOOD); } diff --git a/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs b/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs index 86f807eb..52ac7d72 100644 --- a/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs +++ b/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs @@ -414,6 +414,17 @@ public DeviceAddress GetDeviceAddress(string address) dv.Bit--; } break; + case '5': + { + dv.DBNumber = Modbus.fctWriteSingleCoil; + int st; + int.TryParse(address.Substring(1), out st); + dv.Bit = (byte)(st % 16); + st /= 16; + dv.Start = st; + dv.Bit--; + } + break; case '1': { dv.DBNumber = Modbus.fctReadDiscreteInputs; @@ -457,6 +468,22 @@ public DeviceAddress GetDeviceAddress(string address) dv.ByteOrder = ByteOrder.BigEndian; } break; + case 'F': + { + int index = address.IndexOf('.'); + dv.DBNumber = Modbus.fctWriteMultipleRegister; + if (index > 0) + { + dv.Start = int.Parse(address.Substring(1, index - 1)); + dv.Bit = byte.Parse(address.Substring(index + 1)); + } + else + dv.Start = int.Parse(address.Substring(1)); + dv.Start--; + dv.Bit--; + dv.ByteOrder = ByteOrder.BigEndian; + } + break; } return dv; }