diff --git a/.gitignore b/.gitignore index 1c9a181..1de006c 100644 --- a/.gitignore +++ b/.gitignore @@ -240,3 +240,14 @@ ModelManifest.xml # FAKE - F# Make .fake/ + +certs/ +certs2/ + + + +*.csr +*.key +*.pem +*.pfx +*.crt diff --git a/EasyModbus.sln b/EasyModbus.sln index 2ec15b3..1c307c2 100644 --- a/EasyModbus.sln +++ b/EasyModbus.sln @@ -15,6 +15,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleAppStd", "ConsoleApp EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyModbus_V5.0", "EasyModbus_NET5\EasyModbus_V5.0.csproj", "{83AFFC60-BC95-46B1-861F-B1F80270FBFA}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyModbus_Net45_Secure", "EasyModbus_Secure\EasyModbus_Net45_Secure.csproj", "{797FC4BA-AE93-4756-8C92-9F73801BBA9E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -331,6 +333,54 @@ Global {83AFFC60-BC95-46B1-861F-B1F80270FBFA}.Release|x64.Build.0 = Release|Any CPU {83AFFC60-BC95-46B1-861F-B1F80270FBFA}.Release|x86.ActiveCfg = Release|Any CPU {83AFFC60-BC95-46B1-861F-B1F80270FBFA}.Release|x86.Build.0 = Release|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.Debug|ARM.ActiveCfg = Debug|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.Debug|ARM.Build.0 = Debug|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.Debug|x64.ActiveCfg = Debug|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.Debug|x64.Build.0 = Debug|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.Debug|x86.ActiveCfg = Debug|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.Debug|x86.Build.0 = Debug|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial|Any CPU.ActiveCfg = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial|Any CPU.Build.0 = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial|ARM.ActiveCfg = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial|ARM.Build.0 = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial|x64.ActiveCfg = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial|x64.Build.0 = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial|x86.ActiveCfg = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial|x86.Build.0 = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial1|Any CPU.ActiveCfg = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial1|Any CPU.Build.0 = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial1|ARM.ActiveCfg = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial1|ARM.Build.0 = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial1|x64.ActiveCfg = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial1|x64.Build.0 = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial1|x86.ActiveCfg = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial1|x86.Build.0 = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial2|Any CPU.ActiveCfg = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial2|Any CPU.Build.0 = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial2|ARM.ActiveCfg = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial2|ARM.Build.0 = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial2|x64.ActiveCfg = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial2|x64.Build.0 = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial2|x86.ActiveCfg = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial2|x86.Build.0 = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial3|Any CPU.ActiveCfg = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial3|Any CPU.Build.0 = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial3|ARM.ActiveCfg = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial3|ARM.Build.0 = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial3|x64.ActiveCfg = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial3|x64.Build.0 = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial3|x86.ActiveCfg = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.DebugCommercial3|x86.Build.0 = DebugCommercial|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.Release|Any CPU.Build.0 = Release|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.Release|ARM.ActiveCfg = Release|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.Release|ARM.Build.0 = Release|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.Release|x64.ActiveCfg = Release|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.Release|x64.Build.0 = Release|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.Release|x86.ActiveCfg = Release|Any CPU + {797FC4BA-AE93-4756-8C92-9F73801BBA9E}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/EasyModbus/AdvancedModbusClient.cs b/EasyModbus/AdvancedModbusClient.cs index 2c322f0..dd56d1f 100644 --- a/EasyModbus/AdvancedModbusClient.cs +++ b/EasyModbus/AdvancedModbusClient.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text; -namespace EasyModbus +namespace EasyModbusSecure { public partial class ModbusClient { diff --git a/EasyModbus/Exceptions/Exceptions.cs b/EasyModbus/Exceptions/Exceptions.cs index 8d1db4f..407996c 100644 --- a/EasyModbus/Exceptions/Exceptions.cs +++ b/EasyModbus/Exceptions/Exceptions.cs @@ -24,7 +24,7 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. using System; using System.Runtime.Serialization; -namespace EasyModbus.Exceptions +namespace EasyModbusSecure.Exceptions { /// <summary> /// Exception to be thrown if serial port is not opened diff --git a/EasyModbus/ModbusClient.cs b/EasyModbus/ModbusClient.cs index c1e8f38..b790f2f 100644 --- a/EasyModbus/ModbusClient.cs +++ b/EasyModbus/ModbusClient.cs @@ -29,7 +29,7 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. using System.Text; using System.Collections.Generic; -namespace EasyModbus +namespace EasyModbusSecure { /// <summary> /// Implements a ModbusClient. @@ -166,7 +166,7 @@ public void Connect() var success = result.AsyncWaitHandle.WaitOne(connectTimeout); if (!success) { - throw new EasyModbus.Exceptions.ConnectionException("connection timed out"); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection timed out"); } tcpClient.EndConnect(result); @@ -204,7 +204,7 @@ public void Connect(string ipAddress, int port) var success = result.AsyncWaitHandle.WaitOne(connectTimeout); if (!success) { - throw new EasyModbus.Exceptions.ConnectionException("connection timed out"); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection timed out"); } tcpClient.EndConnect(result); @@ -874,12 +874,12 @@ public bool[] ReadDiscreteInputs(int startingAddress, int quantity) if (!serialport.IsOpen) { if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); } if (tcpClient == null & !udpFlag & serialport==null) { if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ConnectionException("connection error"); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); } if (startingAddress > 65535 | quantity >2000) { @@ -996,22 +996,22 @@ public bool[] ReadDiscreteInputs(int startingAddress, int quantity) if (data[7] == 0x82 & data[8] == 0x01) { if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); } if (data[7] == 0x82 & data[8] == 0x02) { if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); } if (data[7] == 0x82 & data[8] == 0x03) { if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.QuantityInvalidException("quantity invalid"); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); } if (data[7] == 0x82 & data[8] == 0x04) { if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ModbusException("error reading"); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); } if (serialport != null) { @@ -1022,7 +1022,7 @@ public bool[] ReadDiscreteInputs(int startingAddress, int quantity) if (NumberOfRetries <= countRetries) { countRetries = 0; - throw new EasyModbus.Exceptions.CRCCheckFailedException("Response CRC check failed"); + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); } else { @@ -1070,12 +1070,12 @@ public bool[] ReadCoils(int startingAddress, int quantity) if (!serialport.IsOpen) { if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); } if (tcpClient == null & !udpFlag & serialport == null) { if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ConnectionException("connection error"); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); } if (startingAddress > 65535 | quantity >2000) { @@ -1191,22 +1191,22 @@ public bool[] ReadCoils(int startingAddress, int quantity) if (data[7] == 0x81 & data[8] == 0x01) { if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); } if (data[7] == 0x81 & data[8] == 0x02) { if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); } if (data[7] == 0x81 & data[8] == 0x03) { if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.QuantityInvalidException("quantity invalid"); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); } if (data[7] == 0x81 & data[8] == 0x04) { if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ModbusException("error reading"); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); } if (serialport != null) { @@ -1217,7 +1217,7 @@ public bool[] ReadCoils(int startingAddress, int quantity) if (NumberOfRetries <= countRetries) { countRetries = 0; - throw new EasyModbus.Exceptions.CRCCheckFailedException("Response CRC check failed"); + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); } else { @@ -1265,12 +1265,12 @@ public int[] ReadHoldingRegisters(int startingAddress, int quantity) if (!serialport.IsOpen) { if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); } if (tcpClient == null & !udpFlag & serialport == null) { if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ConnectionException("connection error"); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); } if (startingAddress > 65535 | quantity >125) { @@ -1382,22 +1382,22 @@ public int[] ReadHoldingRegisters(int startingAddress, int quantity) if (data[7] == 0x83 & data[8] == 0x01) { if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); } if (data[7] == 0x83 & data[8] == 0x02) { if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); } if (data[7] == 0x83 & data[8] == 0x03) { if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.QuantityInvalidException("quantity invalid"); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); } if (data[7] == 0x83 & data[8] == 0x04) { if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ModbusException("error reading"); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); } if (serialport != null) { @@ -1408,7 +1408,7 @@ public int[] ReadHoldingRegisters(int startingAddress, int quantity) if (NumberOfRetries <= countRetries) { countRetries = 0; - throw new EasyModbus.Exceptions.CRCCheckFailedException("Response CRC check failed"); + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); } else { @@ -1466,12 +1466,12 @@ public int[] ReadInputRegisters(int startingAddress, int quantity) if (!serialport.IsOpen) { if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); } if (tcpClient == null & !udpFlag & serialport == null) { if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ConnectionException("connection error"); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); } if (startingAddress > 65535 | quantity >125) { @@ -1585,22 +1585,22 @@ public int[] ReadInputRegisters(int startingAddress, int quantity) if (data[7] == 0x84 & data[8] == 0x01) { if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); } if (data[7] == 0x84 & data[8] == 0x02) { if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); } if (data[7] == 0x84 & data[8] == 0x03) { if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.QuantityInvalidException("quantity invalid"); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); } if (data[7] == 0x84 & data[8] == 0x04) { if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ModbusException("error reading"); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); } if (serialport != null) { @@ -1611,7 +1611,7 @@ public int[] ReadInputRegisters(int startingAddress, int quantity) if (NumberOfRetries <= countRetries) { countRetries = 0; - throw new EasyModbus.Exceptions.CRCCheckFailedException("Response CRC check failed"); + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); } else { @@ -1667,12 +1667,12 @@ public void WriteSingleCoil(int startingAddress, bool value) if (!serialport.IsOpen) { if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); } if (tcpClient == null & !udpFlag & serialport == null) { if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ConnectionException("connection error"); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); } byte[] coilValue = new byte[2]; this.transactionIdentifier = BitConverter.GetBytes((uint)transactionIdentifierInternal); @@ -1786,22 +1786,22 @@ public void WriteSingleCoil(int startingAddress, bool value) if (data[7] == 0x85 & data[8] == 0x01) { if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); } if (data[7] == 0x85 & data[8] == 0x02) { if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); } if (data[7] == 0x85 & data[8] == 0x03) { if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.QuantityInvalidException("quantity invalid"); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); } if (data[7] == 0x85 & data[8] == 0x04) { if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ModbusException("error reading"); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); } if (serialport != null) { @@ -1812,7 +1812,7 @@ public void WriteSingleCoil(int startingAddress, bool value) if (NumberOfRetries <= countRetries) { countRetries = 0; - throw new EasyModbus.Exceptions.CRCCheckFailedException("Response CRC check failed"); + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); } else { @@ -1852,12 +1852,12 @@ public void WriteSingleRegister(int startingAddress, int value) if (!serialport.IsOpen) { if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); } if (tcpClient == null & !udpFlag & serialport == null) { if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ConnectionException("connection error"); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); } byte[] registerValue = new byte[2]; this.transactionIdentifier = BitConverter.GetBytes((uint)transactionIdentifierInternal); @@ -1963,22 +1963,22 @@ public void WriteSingleRegister(int startingAddress, int value) if (data[7] == 0x86 & data[8] == 0x01) { if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); } if (data[7] == 0x86 & data[8] == 0x02) { if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); } if (data[7] == 0x86 & data[8] == 0x03) { if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.QuantityInvalidException("quantity invalid"); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); } if (data[7] == 0x86 & data[8] == 0x04) { if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ModbusException("error reading"); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); } if (serialport != null) { @@ -1989,7 +1989,7 @@ public void WriteSingleRegister(int startingAddress, int value) if (NumberOfRetries <= countRetries) { countRetries = 0; - throw new EasyModbus.Exceptions.CRCCheckFailedException("Response CRC check failed"); + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); } else { @@ -2034,12 +2034,12 @@ public void WriteMultipleCoils(int startingAddress, bool[] values) if (!serialport.IsOpen) { if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); } if (tcpClient == null & !udpFlag & serialport == null) { if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ConnectionException("connection error"); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); } this.transactionIdentifier = BitConverter.GetBytes((uint)transactionIdentifierInternal); this.protocolIdentifier = BitConverter.GetBytes((int)0x0000); @@ -2159,22 +2159,22 @@ public void WriteMultipleCoils(int startingAddress, bool[] values) if (data[7] == 0x8F & data[8] == 0x01) { if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); } if (data[7] == 0x8F & data[8] == 0x02) { if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); } if (data[7] == 0x8F & data[8] == 0x03) { if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.QuantityInvalidException("quantity invalid"); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); } if (data[7] == 0x8F & data[8] == 0x04) { if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ModbusException("error reading"); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); } if (serialport != null) { @@ -2185,7 +2185,7 @@ public void WriteMultipleCoils(int startingAddress, bool[] values) if (NumberOfRetries <= countRetries) { countRetries = 0; - throw new EasyModbus.Exceptions.CRCCheckFailedException("Response CRC check failed"); + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); } else { @@ -2229,12 +2229,12 @@ public void WriteMultipleRegisters(int startingAddress, int[] values) if (!serialport.IsOpen) { if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); } if (tcpClient == null & !udpFlag & serialport == null) { if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ConnectionException("connection error"); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); } this.transactionIdentifier = BitConverter.GetBytes((uint)transactionIdentifierInternal); this.protocolIdentifier = BitConverter.GetBytes((int)0x0000); @@ -2343,22 +2343,22 @@ public void WriteMultipleRegisters(int startingAddress, int[] values) if (data[7] == 0x90 & data[8] == 0x01) { if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); } if (data[7] == 0x90 & data[8] == 0x02) { if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); } if (data[7] == 0x90 & data[8] == 0x03) { if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.QuantityInvalidException("quantity invalid"); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); } if (data[7] == 0x90 & data[8] == 0x04) { if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ModbusException("error reading"); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); } if (serialport != null) { @@ -2369,7 +2369,7 @@ public void WriteMultipleRegisters(int startingAddress, int[] values) if (NumberOfRetries <= countRetries) { countRetries = 0; - throw new EasyModbus.Exceptions.CRCCheckFailedException("Response CRC check failed"); + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); } else { @@ -2420,12 +2420,12 @@ public int[] ReadWriteMultipleRegisters(int startingAddressRead, int quantityRea if (!serialport.IsOpen) { if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); } if (tcpClient == null & !udpFlag & serialport == null) { if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ConnectionException("connection error"); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); } if (startingAddressRead > 65535 | quantityRead > 125 | startingAddressWrite > 65535 | values.Length > 121) { @@ -2547,22 +2547,22 @@ public int[] ReadWriteMultipleRegisters(int startingAddressRead, int quantityRea if (data[7] == 0x97 & data[8] == 0x01) { if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); } if (data[7] == 0x97 & data[8] == 0x02) { if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); } if (data[7] == 0x97 & data[8] == 0x03) { if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.QuantityInvalidException("quantity invalid"); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); } if (data[7] == 0x97 & data[8] == 0x04) { if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ModbusException("error reading"); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); } response = new int[quantityRead]; for (int i = 0; i < quantityRead; i++) diff --git a/EasyModbus/ModbusServer.cs b/EasyModbus/ModbusServer.cs index 13374cd..a918843 100644 --- a/EasyModbus/ModbusServer.cs +++ b/EasyModbus/ModbusServer.cs @@ -31,7 +31,7 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. using System.Net.NetworkInformation; using System.IO.Ports; -namespace EasyModbus +namespace EasyModbusSecure { #region class ModbusProtocol /// <summary> @@ -896,7 +896,7 @@ private void ReadCoils(ModbusProtocol receiveData, ModbusProtocol sendData, Netw if (serialFlag) { if (!serialport.IsOpen) - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); //Create CRC sendData.crc = ModbusClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); byteData = BitConverter.GetBytes((int)sendData.crc); @@ -1023,7 +1023,7 @@ private void ReadDiscreteInputs(ModbusProtocol receiveData, ModbusProtocol sendD if (serialFlag) { if (!serialport.IsOpen) - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); //Create CRC sendData.crc = ModbusClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); byteData = BitConverter.GetBytes((int)sendData.crc); @@ -1139,7 +1139,7 @@ private void ReadHoldingRegisters(ModbusProtocol receiveData, ModbusProtocol sen if (serialFlag) { if (!serialport.IsOpen) - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); //Create CRC sendData.crc = ModbusClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); byteData = BitConverter.GetBytes((int)sendData.crc); @@ -1255,7 +1255,7 @@ private void ReadInputRegisters(ModbusProtocol receiveData, ModbusProtocol sendD if (serialFlag) { if (!serialport.IsOpen) - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); //Create CRC sendData.crc = ModbusClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); byteData = BitConverter.GetBytes((int)sendData.crc); @@ -1382,7 +1382,7 @@ private void WriteSingleCoil(ModbusProtocol receiveData, ModbusProtocol sendData if (serialFlag) { if (!serialport.IsOpen) - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); //Create CRC sendData.crc = ModbusClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); byteData = BitConverter.GetBytes((int)sendData.crc); @@ -1505,7 +1505,7 @@ private void WriteSingleRegister(ModbusProtocol receiveData, ModbusProtocol send if (serialFlag) { if (!serialport.IsOpen) - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); //Create CRC sendData.crc = ModbusClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); byteData = BitConverter.GetBytes((int)sendData.crc); @@ -1645,7 +1645,7 @@ private void WriteMultipleCoils(ModbusProtocol receiveData, ModbusProtocol sendD if (serialFlag) { if (!serialport.IsOpen) - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); //Create CRC sendData.crc = ModbusClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); byteData = BitConverter.GetBytes((int)sendData.crc); @@ -1769,7 +1769,7 @@ private void WriteMultipleRegisters(ModbusProtocol receiveData, ModbusProtocol s if (serialFlag) { if (!serialport.IsOpen) - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); //Create CRC sendData.crc = ModbusClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); byteData = BitConverter.GetBytes((int)sendData.crc); @@ -1900,7 +1900,7 @@ private void ReadWriteMultipleRegisters(ModbusProtocol receiveData, ModbusProtoc if (serialFlag) { if (!serialport.IsOpen) - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); //Create CRC sendData.crc = ModbusClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); byteData = BitConverter.GetBytes((int)sendData.crc); @@ -1988,7 +1988,7 @@ private void sendException(int errorCode, int exceptionCode, ModbusProtocol rece if (serialFlag) { if (!serialport.IsOpen) - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); //Create CRC sendData.crc = ModbusClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); byteData = BitConverter.GetBytes((int)sendData.crc); @@ -2181,7 +2181,7 @@ public class HoldingRegisters public Int16[] localArray = new Int16[65535]; ModbusServer modbusServer; - public HoldingRegisters(EasyModbus.ModbusServer modbusServer) + public HoldingRegisters(EasyModbusSecure.ModbusServer modbusServer) { this.modbusServer = modbusServer; } @@ -2202,7 +2202,7 @@ public class InputRegisters public Int16[] localArray = new Int16[65535]; ModbusServer modbusServer; - public InputRegisters(EasyModbus.ModbusServer modbusServer) + public InputRegisters(EasyModbusSecure.ModbusServer modbusServer) { this.modbusServer = modbusServer; } @@ -2223,7 +2223,7 @@ public class Coils public bool[] localArray = new bool[65535]; ModbusServer modbusServer; - public Coils(EasyModbus.ModbusServer modbusServer) + public Coils(EasyModbusSecure.ModbusServer modbusServer) { this.modbusServer = modbusServer; } @@ -2244,7 +2244,7 @@ public class DiscreteInputs public bool[] localArray = new bool[65535]; ModbusServer modbusServer; - public DiscreteInputs(EasyModbus.ModbusServer modbusServer) + public DiscreteInputs(EasyModbusSecure.ModbusServer modbusServer) { this.modbusServer = modbusServer; } diff --git a/EasyModbus/StoreLogData.cs b/EasyModbus/StoreLogData.cs index 3345038..c87d772 100644 --- a/EasyModbus/StoreLogData.cs +++ b/EasyModbus/StoreLogData.cs @@ -26,7 +26,7 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. using System.Collections.Generic; using System.Text; -namespace EasyModbus +namespace EasyModbusSecure { /// <summary> /// Store Log-Data in a File diff --git a/EasyModbusAdvancedClient/AddConnectionForm.cs b/EasyModbusAdvancedClient/AddConnectionForm.cs index 6b74d1e..df20cdb 100644 --- a/EasyModbusAdvancedClient/AddConnectionForm.cs +++ b/EasyModbusAdvancedClient/AddConnectionForm.cs @@ -84,12 +84,12 @@ void Button1Click(object sender, EventArgs e) easyModbusManager.AddConnection(connectionProperties); if (connectionProperties.ModbusTypeProperty == ModbusType.ModbusTCP) { - connectionProperties.modbusClient = new EasyModbus.ModbusClient(); + connectionProperties.modbusClient = new EasyModbusSecure.ModbusClient(); connectionProperties.modbusClient.UnitIdentifier = (byte)connectionProperties.SlaveID; } else { - connectionProperties.modbusClient = new EasyModbus.ModbusClient(connectionProperties.ComPort); + connectionProperties.modbusClient = new EasyModbusSecure.ModbusClient(connectionProperties.ComPort); connectionProperties.modbusClient.UnitIdentifier = (byte)connectionProperties.SlaveID; } } @@ -214,7 +214,7 @@ public System.Collections.Generic.List<FunctionProperties> FunctionPropertiesLis set { functionPropertiesList = value; } } - public EasyModbus.ModbusClient modbusClient; + public EasyModbusSecure.ModbusClient modbusClient; public System.Threading.Timer timer; } } diff --git a/EasyModbusAdvancedClient/EasyModbusManager.cs b/EasyModbusAdvancedClient/EasyModbusManager.cs index f0d8d01..560149f 100644 --- a/EasyModbusAdvancedClient/EasyModbusManager.cs +++ b/EasyModbusAdvancedClient/EasyModbusManager.cs @@ -38,7 +38,7 @@ namespace EasyModbusAdvancedClient public class EasyModbusManager { - EasyModbus.ModbusClient modbusClient = new EasyModbus.ModbusClient(); + EasyModbusSecure.ModbusClient modbusClient = new EasyModbusSecure.ModbusClient(); public List<ConnectionProperties> connectionPropertiesList = new List<ConnectionProperties>(); public EasyModbusManager() diff --git a/EasyModbusAdvancedClient/MainForm.cs b/EasyModbusAdvancedClient/MainForm.cs index 2f26e74..9c7878d 100644 --- a/EasyModbusAdvancedClient/MainForm.cs +++ b/EasyModbusAdvancedClient/MainForm.cs @@ -584,8 +584,8 @@ void StartSingleJobToolStripMenuItemClick(object sender, EventArgs e) getValuesThreadObject.connectionProperty.timer = new System.Threading.Timer(GetValuesThread, getValuesThreadObject , easyModbusManager.connectionPropertiesList[treeView1.SelectedNode.Parent.Index].CycleTime, easyModbusManager.connectionPropertiesList[treeView1.SelectedNode.Parent.Index].CycleTime); else getValuesThreadObject.connectionProperty.timer.Change(easyModbusManager.connectionPropertiesList[treeView1.SelectedNode.Parent.Index].CycleTime, easyModbusManager.connectionPropertiesList[treeView1.SelectedNode.Parent.Index].CycleTime); - getValuesThreadObject.connectionProperty.modbusClient.ReceiveDataChanged -= new EasyModbus.ModbusClient.ReceiveDataChangedHandler(UpdateTextBoxReceive); - getValuesThreadObject.connectionProperty.modbusClient.SendDataChanged -= new EasyModbus.ModbusClient.SendDataChangedHandler(UpdateTextBoxSend); + getValuesThreadObject.connectionProperty.modbusClient.ReceiveDataChanged -= new EasyModbusSecure.ModbusClient.ReceiveDataChangedHandler(UpdateTextBoxReceive); + getValuesThreadObject.connectionProperty.modbusClient.SendDataChanged -= new EasyModbusSecure.ModbusClient.SendDataChangedHandler(UpdateTextBoxSend); } @@ -622,8 +622,8 @@ void StartAllJobsToolStripMenuItemClick(object sender, EventArgs e) { foreach(ConnectionProperties connectionProperty in easyModbusManager.connectionPropertiesList) { - connectionProperty.modbusClient.ReceiveDataChanged += new EasyModbus.ModbusClient.ReceiveDataChangedHandler(UpdateTextBoxReceive); - connectionProperty.modbusClient.SendDataChanged += new EasyModbus.ModbusClient.SendDataChangedHandler(UpdateTextBoxSend); + connectionProperty.modbusClient.ReceiveDataChanged += new EasyModbusSecure.ModbusClient.ReceiveDataChangedHandler(UpdateTextBoxReceive); + connectionProperty.modbusClient.SendDataChanged += new EasyModbusSecure.ModbusClient.SendDataChangedHandler(UpdateTextBoxSend); GetValuesThreadObject getValuesThreadObject = new GetValuesThreadObject(); getValuesThreadObject.connectionProperty = connectionProperty; if (connectionProperty.timer == null) @@ -657,8 +657,8 @@ void StopAllJobsToolStripMenuItemClick(object sender, EventArgs e) { foreach(ConnectionProperties connectionProperty in easyModbusManager.connectionPropertiesList) { - connectionProperty.modbusClient.ReceiveDataChanged -= new EasyModbus.ModbusClient.ReceiveDataChangedHandler(UpdateTextBoxReceive); - connectionProperty.modbusClient.SendDataChanged -= new EasyModbus.ModbusClient.SendDataChangedHandler(UpdateTextBoxSend); + connectionProperty.modbusClient.ReceiveDataChanged -= new EasyModbusSecure.ModbusClient.ReceiveDataChangedHandler(UpdateTextBoxReceive); + connectionProperty.modbusClient.SendDataChanged -= new EasyModbusSecure.ModbusClient.SendDataChangedHandler(UpdateTextBoxSend); connectionProperty.timer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite); connectionProperty.modbusClient.Disconnect(); } @@ -680,16 +680,16 @@ private void stopCurrentJobToolStripMenuItem_Click(object sender, EventArgs e) indexJobToStop = treeView1.SelectedNode.Index; easyModbusManager.connectionPropertiesList[indexJobToStop].timer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite); easyModbusManager.connectionPropertiesList[indexJobToStop].modbusClient.Disconnect(); - easyModbusManager.connectionPropertiesList[indexJobToStop].modbusClient.ReceiveDataChanged += new EasyModbus.ModbusClient.ReceiveDataChangedHandler(UpdateTextBoxReceive); - easyModbusManager.connectionPropertiesList[indexJobToStop].modbusClient.SendDataChanged += new EasyModbus.ModbusClient.SendDataChangedHandler(UpdateTextBoxSend); + easyModbusManager.connectionPropertiesList[indexJobToStop].modbusClient.ReceiveDataChanged += new EasyModbusSecure.ModbusClient.ReceiveDataChangedHandler(UpdateTextBoxReceive); + easyModbusManager.connectionPropertiesList[indexJobToStop].modbusClient.SendDataChanged += new EasyModbusSecure.ModbusClient.SendDataChangedHandler(UpdateTextBoxSend); } if (treeView1.SelectedNode.Level == 2) { indexJobToStop = treeView1.SelectedNode.Parent.Index; easyModbusManager.connectionPropertiesList[indexJobToStop].timer.Change(System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite); easyModbusManager.connectionPropertiesList[indexJobToStop].modbusClient.Disconnect(); - easyModbusManager.connectionPropertiesList[indexJobToStop].modbusClient.ReceiveDataChanged += new EasyModbus.ModbusClient.ReceiveDataChangedHandler(UpdateTextBoxReceive); - easyModbusManager.connectionPropertiesList[indexJobToStop].modbusClient.SendDataChanged += new EasyModbus.ModbusClient.SendDataChangedHandler(UpdateTextBoxSend); + easyModbusManager.connectionPropertiesList[indexJobToStop].modbusClient.ReceiveDataChanged += new EasyModbusSecure.ModbusClient.ReceiveDataChangedHandler(UpdateTextBoxReceive); + easyModbusManager.connectionPropertiesList[indexJobToStop].modbusClient.SendDataChanged += new EasyModbusSecure.ModbusClient.SendDataChangedHandler(UpdateTextBoxSend); } UpdateNodesConnectedStatus(); @@ -714,10 +714,10 @@ private void DataGridViewLinesChanged(object sender) DataGridView1CellClick(null, null); } - delegate void UpdateReceiveDataCallback(EasyModbus.ModbusClient sender); + delegate void UpdateReceiveDataCallback(EasyModbusSecure.ModbusClient sender); void UpdateTextBoxReceive(object sender) { - EasyModbus.ModbusClient modbusClient = (EasyModbus.ModbusClient)sender; + EasyModbusSecure.ModbusClient modbusClient = (EasyModbusSecure.ModbusClient)sender; if (textBox1.InvokeRequired) { UpdateReceiveDataCallback d = new UpdateReceiveDataCallback(UpdateTextBoxReceive); @@ -734,10 +734,10 @@ void UpdateTextBoxReceive(object sender) } - delegate void UpdateSendDataCallback(EasyModbus.ModbusClient sender); + delegate void UpdateSendDataCallback(EasyModbusSecure.ModbusClient sender); void UpdateTextBoxSend(object sender) { - EasyModbus.ModbusClient modbusClient = (EasyModbus.ModbusClient)sender; + EasyModbusSecure.ModbusClient modbusClient = (EasyModbusSecure.ModbusClient)sender; if (textBox1.InvokeRequired) { UpdateSendDataCallback d = new UpdateSendDataCallback(UpdateTextBoxSend); diff --git a/EasyModbusClientExample/MainForm.cs b/EasyModbusClientExample/MainForm.cs index d374705..04abc1a 100644 --- a/EasyModbusClientExample/MainForm.cs +++ b/EasyModbusClientExample/MainForm.cs @@ -34,7 +34,7 @@ namespace EasyModbusClientExample /// </summary> public partial class MainForm : Form { - private EasyModbus.ModbusClient modbusClient; + private EasyModbusSecure.ModbusClient modbusClient; public MainForm() { // @@ -42,10 +42,10 @@ public MainForm() // InitializeComponent(); - modbusClient = new EasyModbus.ModbusClient(); - modbusClient.ReceiveDataChanged += new EasyModbus.ModbusClient.ReceiveDataChangedHandler(UpdateReceiveData); - modbusClient.SendDataChanged += new EasyModbus.ModbusClient.SendDataChangedHandler(UpdateSendData); - modbusClient.ConnectedChanged += new EasyModbus.ModbusClient.ConnectedChangedHandler(UpdateConnectedChanged); + modbusClient = new EasyModbusSecure.ModbusClient(); + modbusClient.ReceiveDataChanged += new EasyModbusSecure.ModbusClient.ReceiveDataChangedHandler(UpdateReceiveData); + modbusClient.SendDataChanged += new EasyModbusSecure.ModbusClient.SendDataChangedHandler(UpdateSendData); + modbusClient.ConnectedChanged += new EasyModbusSecure.ModbusClient.ConnectedChangedHandler(UpdateConnectedChanged); // modbusClient.LogFileFilename = "logFiletxt.txt"; //modbusClient.Baudrate = 9600; diff --git a/EasyModbusServerSimulator/MainForm.cs b/EasyModbusServerSimulator/MainForm.cs index 78f6dc5..464c64b 100644 --- a/EasyModbusServerSimulator/MainForm.cs +++ b/EasyModbusServerSimulator/MainForm.cs @@ -5,7 +5,7 @@ using System.Drawing; using System.Text; using System.Windows.Forms; -using EasyModbus; +using EasyModbusSecure; using System.Reflection; namespace EasyModbusServerSimulator @@ -13,7 +13,7 @@ namespace EasyModbusServerSimulator public partial class MainForm : Form { Settings settings = new Settings(); - EasyModbus.ModbusServer easyModbusTCPServer; + EasyModbusSecure.ModbusServer easyModbusTCPServer; private UInt16 startingAddressDiscreteInputs = 1; private UInt16 startingAddressCoils = 1; private UInt16 startingAddressHoldingRegisters = 1; @@ -29,7 +29,7 @@ public MainForm() InitializeComponent(); Assembly.GetExecutingAssembly().GetName().Version.ToString(); lblVersion.Text = "Version: " + Assembly.GetExecutingAssembly().GetName().Version.Major.ToString() +"."+ Assembly.GetExecutingAssembly().GetName().Version.Minor.ToString(); - easyModbusTCPServer = new EasyModbus.ModbusServer(); + easyModbusTCPServer = new EasyModbusSecure.ModbusServer(); easyModbusTCPServer.Listen(); diff --git a/EasyModbusServerSimulator/Program.cs b/EasyModbusServerSimulator/Program.cs index c57be66..01572ca 100644 --- a/EasyModbusServerSimulator/Program.cs +++ b/EasyModbusServerSimulator/Program.cs @@ -23,7 +23,7 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ using System; using System.Windows.Forms; -using EasyModbus; +using EasyModbusSecure; namespace EasyModbusServerSimulator { diff --git a/EasyModbus_NET5/EasyModbus.StoreLogData.cs b/EasyModbus_NET5/EasyModbus.StoreLogData.cs index 3345038..c87d772 100644 --- a/EasyModbus_NET5/EasyModbus.StoreLogData.cs +++ b/EasyModbus_NET5/EasyModbus.StoreLogData.cs @@ -26,7 +26,7 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. using System.Collections.Generic; using System.Text; -namespace EasyModbus +namespace EasyModbusSecure { /// <summary> /// Store Log-Data in a File diff --git a/EasyModbus_NET5/Exceptions/Exceptions.cs b/EasyModbus_NET5/Exceptions/Exceptions.cs index 8d1db4f..407996c 100644 --- a/EasyModbus_NET5/Exceptions/Exceptions.cs +++ b/EasyModbus_NET5/Exceptions/Exceptions.cs @@ -24,7 +24,7 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. using System; using System.Runtime.Serialization; -namespace EasyModbus.Exceptions +namespace EasyModbusSecure.Exceptions { /// <summary> /// Exception to be thrown if serial port is not opened diff --git a/EasyModbus_NET5/ModbusClient/EasyModbus.ModbusClient.Core.cs b/EasyModbus_NET5/ModbusClient/EasyModbus.ModbusClient.Core.cs index 16b6cb4..1baf062 100644 --- a/EasyModbus_NET5/ModbusClient/EasyModbus.ModbusClient.Core.cs +++ b/EasyModbus_NET5/ModbusClient/EasyModbus.ModbusClient.Core.cs @@ -33,7 +33,7 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -namespace EasyModbus +namespace EasyModbusSecure { public partial class ModbusClient @@ -100,7 +100,7 @@ public void Connect(string ipAddress, int port) var success = result.AsyncWaitHandle.WaitOne(connectTimeout); if (!success) { - throw new EasyModbus.Exceptions.ConnectionException("connection timed out"); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection timed out"); } tcpClient.EndConnect(result); @@ -160,12 +160,12 @@ public bool[] ReadDiscreteInputs(int startingAddress, int quantity) if (!serialport.IsOpen) { if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.SerialPortNotOpenedException("serial port not opened"); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); } if (tcpClient == null & !udpFlag & serialport == null) { if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ConnectionException("connection error"); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); } if (startingAddress > 65535 | quantity > 2000) { @@ -268,22 +268,22 @@ public bool[] ReadDiscreteInputs(int startingAddress, int quantity) if (data[7] == 0x82 & data[8] == 0x01) { if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); } if (data[7] == 0x82 & data[8] == 0x02) { if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); } if (data[7] == 0x82 & data[8] == 0x03) { if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.QuantityInvalidException("quantity invalid"); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); } if (data[7] == 0x82 & data[8] == 0x04) { if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); - throw new EasyModbus.Exceptions.ModbusException("error reading"); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); } if (serialport != null) { @@ -294,7 +294,7 @@ public bool[] ReadDiscreteInputs(int startingAddress, int quantity) if (NumberOfRetries <= countRetries) { countRetries = 0; - throw new EasyModbus.Exceptions.CRCCheckFailedException("Response CRC check failed"); + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); } else { diff --git a/EasyModbus_NET5/ModbusClient/EasyModbus.ModbusClient.Helpers.cs b/EasyModbus_NET5/ModbusClient/EasyModbus.ModbusClient.Helpers.cs index e9340b8..202d7b1 100644 --- a/EasyModbus_NET5/ModbusClient/EasyModbus.ModbusClient.Helpers.cs +++ b/EasyModbus_NET5/ModbusClient/EasyModbus.ModbusClient.Helpers.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace EasyModbus +namespace EasyModbusSecure { public partial class ModbusClient { diff --git a/EasyModbus_NET5/ModbusClient/EasyModbus.ModbusClient.Protocol.cs b/EasyModbus_NET5/ModbusClient/EasyModbus.ModbusClient.Protocol.cs index 161ffba..9ea4d5b 100644 --- a/EasyModbus_NET5/ModbusClient/EasyModbus.ModbusClient.Protocol.cs +++ b/EasyModbus_NET5/ModbusClient/EasyModbus.ModbusClient.Protocol.cs @@ -4,7 +4,7 @@ using System.Text; using System.Threading.Tasks; -namespace EasyModbus +namespace EasyModbusSecure { diff --git a/EasyModbus_Secure/AdvancedModbusClient.cs b/EasyModbus_Secure/AdvancedModbusClient.cs new file mode 100644 index 0000000..dd56d1f --- /dev/null +++ b/EasyModbus_Secure/AdvancedModbusClient.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace EasyModbusSecure +{ + public partial class ModbusClient + { + /* + public enum DataType { Short = 0, UShort = 1, Long = 2, ULong = 3, Float = 4, Double = 5 }; + public object[] ReadHoldingRegisters(int startingAddress, int quantity, DataType dataType, RegisterOrder registerOrder) + { + int quantityToRead = quantity; + if (dataType == DataType.Long | dataType == DataType.ULong | dataType == DataType.Float) + quantityToRead = quantity * 2; + if (dataType == DataType.Float) + quantityToRead = quantity * 4; + int[] response = this.ReadHoldingRegisters(startingAddress, quantityToRead); + switch (dataType) + { + case DataType.Short: return response.Cast<object>().ToArray(); + break; + default: return response.Cast<object>().ToArray(); + break; + + } + + + } + */ + } +} diff --git a/EasyModbus_Secure/EasyModbus_Net40.nuspec b/EasyModbus_Secure/EasyModbus_Net40.nuspec new file mode 100644 index 0000000..2e96d5a --- /dev/null +++ b/EasyModbus_Secure/EasyModbus_Net40.nuspec @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<package > + <metadata> + <id>EasyModbusTCP</id> + <version>5.6</version> + <title>EasyModbusTCP</title> + <authors>Stefan Roßmann</authors> + <requireLicenseAcceptance>false</requireLicenseAcceptance> + <license type="expression">MIT</license> + <projectUrl>http://www.EasyModbusTCP.net</projectUrl> + <iconUrl>http://easymodbustcp.net/wp-content/uploads/2020/06/medium-e1592036520465.png</iconUrl> + <description>Modbus TCP, Modbus UDP and Modbus RTU client/server library for .NET implementations</description> + <releaseNotes>Update to version 5.6</releaseNotes> + <copyright>Rossmann Engineering 2018-2020</copyright> + <tags>Modbus TCP RTU EasyModbusTCP</tags> + <dependencies> + <group targetFramework=".NETFramework4.0" /> + </dependencies> + </metadata> +</package> \ No newline at end of file diff --git a/EasyModbus_Secure/EasyModbus_Net45_Secure.csproj b/EasyModbus_Secure/EasyModbus_Net45_Secure.csproj new file mode 100644 index 0000000..ca02148 --- /dev/null +++ b/EasyModbus_Secure/EasyModbus_Net45_Secure.csproj @@ -0,0 +1,91 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build"> + <PropertyGroup> + <ProjectGuid>{797FC4BA-AE93-4756-8C92-9F73801BBA9E}</ProjectGuid> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <OutputType>Library</OutputType> + <RootNamespace>EasyModbusSecure</RootNamespace> + <AssemblyName>EasyModbusSecure</AssemblyName> + <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> + <TargetFrameworkProfile> + </TargetFrameworkProfile> + <AppDesignerFolder>Properties</AppDesignerFolder> + <FileUpgradeFlags> + </FileUpgradeFlags> + <UpgradeBackupLocation> + </UpgradeBackupLocation> + <OldToolsVersion>3.5</OldToolsVersion> + </PropertyGroup> + <PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' "> + <PlatformTarget>AnyCPU</PlatformTarget> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> + <OutputPath>bin\Debug\</OutputPath> + <DebugSymbols>True</DebugSymbols> + <DebugType>Full</DebugType> + <Optimize>False</Optimize> + <CheckForOverflowUnderflow>True</CheckForOverflowUnderflow> + <DefineConstants>DEBUG;TRACE</DefineConstants> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)' == 'Release' "> + <OutputPath>bin\Release\</OutputPath> + <DebugSymbols>False</DebugSymbols> + <DebugType>None</DebugType> + <Optimize>True</Optimize> + <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> + <DefineConstants>TRACE</DefineConstants> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'DebugCommercial|AnyCPU'"> + <DebugSymbols>true</DebugSymbols> + <OutputPath>bin\DebugCommercial\</OutputPath> + <DefineConstants>TRACE;DEBUG;COMMERCIAL</DefineConstants> + <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow> + <DebugType>Full</DebugType> + <PlatformTarget>AnyCPU</PlatformTarget> + <CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet> + <Prefer32Bit>false</Prefer32Bit> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'"> + <DefineConstants>TRACE;DEBUG;SSL</DefineConstants> + <Prefer32Bit>false</Prefer32Bit> + <WarningLevel>0</WarningLevel> + <DocumentationFile>bin\Debug\EasyModbusSecure.xml</DocumentationFile> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'"> + <Prefer32Bit>false</Prefer32Bit> + </PropertyGroup> + <ItemGroup> + <Reference Include="BouncyCastle.Crypto, Version=1.8.9.0, Culture=neutral, PublicKeyToken=0e99375e54769942"> + <HintPath>..\packages\BouncyCastle.1.8.9\lib\BouncyCastle.Crypto.dll</HintPath> + </Reference> + <Reference Include="Microsoft.CSharp" /> + <Reference Include="System" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> + <HintPath>..\packages\System.ValueTuple.4.5.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath> + </Reference> + <Reference Include="System.Xml" /> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + </ItemGroup> + <ItemGroup> + <Compile Include="AdvancedModbusClient.cs" /> + <Compile Include="Exceptions\Exceptions.cs" /> + <Compile Include="ModbusSecureClient.cs" /> + <Compile Include="ModbusSecureServer.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="StoreLogData.cs" /> + </ItemGroup> + <ItemGroup> + <WCFMetadata Include="Service References\" /> + </ItemGroup> + <ItemGroup> + <None Include="packages.config" /> + <None Include="README.MD" /> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> +</Project> \ No newline at end of file diff --git a/EasyModbus_Secure/Exceptions/Exceptions.cs b/EasyModbus_Secure/Exceptions/Exceptions.cs new file mode 100644 index 0000000..407996c --- /dev/null +++ b/EasyModbus_Secure/Exceptions/Exceptions.cs @@ -0,0 +1,211 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ +using System; +using System.Runtime.Serialization; + +namespace EasyModbusSecure.Exceptions +{ + /// <summary> + /// Exception to be thrown if serial port is not opened + /// </summary> + public class SerialPortNotOpenedException : ModbusException + { + public SerialPortNotOpenedException() + : base() + { + } + + public SerialPortNotOpenedException(string message) + : base(message) + { + } + + public SerialPortNotOpenedException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected SerialPortNotOpenedException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } + + /// <summary> + /// Exception to be thrown if Connection to Modbus device failed + /// </summary> + public class ConnectionException : ModbusException + { + public ConnectionException() + : base() + { + } + + public ConnectionException(string message) + : base(message) + { + } + + public ConnectionException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected ConnectionException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } + + /// <summary> + /// Exception to be thrown if Modbus Server returns error code "Function code not supported" + /// </summary> + public class FunctionCodeNotSupportedException : ModbusException + { + public FunctionCodeNotSupportedException() + : base() + { + } + + public FunctionCodeNotSupportedException(string message) + : base(message) + { + } + + public FunctionCodeNotSupportedException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected FunctionCodeNotSupportedException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } + + /// <summary> + /// Exception to be thrown if Modbus Server returns error code "quantity invalid" + /// </summary> + public class QuantityInvalidException : ModbusException + { + public QuantityInvalidException() + : base() + { + } + + public QuantityInvalidException(string message) + : base(message) + { + } + + public QuantityInvalidException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected QuantityInvalidException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } + + /// <summary> + /// Exception to be thrown if Modbus Server returns error code "starting adddress and quantity invalid" + /// </summary> + public class StartingAddressInvalidException : ModbusException + { + public StartingAddressInvalidException() + : base() + { + } + + public StartingAddressInvalidException(string message) + : base(message) + { + } + + public StartingAddressInvalidException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected StartingAddressInvalidException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } + + /// <summary> + /// Exception to be thrown if Modbus Server returns error code "Function Code not executed (0x04)" + /// </summary> + public class ModbusException : Exception + { + public ModbusException() + : base() + { + } + + public ModbusException(string message) + : base(message) + { + } + + public ModbusException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected ModbusException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } + + /// <summary> + /// Exception to be thrown if CRC Check failed + /// </summary> + public class CRCCheckFailedException : ModbusException + { + public CRCCheckFailedException() + : base() + { + } + + public CRCCheckFailedException(string message) + : base(message) + { + } + + public CRCCheckFailedException(string message, Exception innerException) + : base(message, innerException) + { + } + + protected CRCCheckFailedException(SerializationInfo info, StreamingContext context) + : base(info, context) + { + } + } + +} diff --git a/EasyModbus_Secure/ModbusSecureClient.cs b/EasyModbus_Secure/ModbusSecureClient.cs new file mode 100644 index 0000000..6b7c095 --- /dev/null +++ b/EasyModbus_Secure/ModbusSecureClient.cs @@ -0,0 +1,3118 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +using System; +using System.Net.Sockets; +using System.Net; +using System.IO.Ports; +using System.Reflection; +using System.Text; +using System.Collections.Generic; +using System.Net.Security; +using System.Security.Authentication; +using System.Security.Cryptography.X509Certificates; +using System.Threading; +using System.Security.Cryptography; + +namespace EasyModbusSecure +{ + /// <summary> + /// Implements a ModbusClient. + /// </summary> + public partial class ModbusSecureClient + { + public enum RegisterOrder { LowHigh = 0, HighLow = 1 }; + private bool debug=false; + private TcpClient tcpClient; + private string ipAddress = "127.0.0.1"; + private int port = 802; + private uint transactionIdentifierInternal = 0; + private byte [] transactionIdentifier = new byte[2]; + private byte [] protocolIdentifier = new byte[2]; + private byte[] crc = new byte[2]; + private byte [] length = new byte[2]; + private byte unitIdentifier = 0x01; + private byte functionCode; + private byte [] startingAddress = new byte[2]; + private byte [] quantity = new byte[2]; + private bool udpFlag = false; + private int portOut; + private int baudRate = 9600; + private int connectTimeout = 1000; + public byte[] receiveData; + public byte[] sendData; + private SerialPort serialport; + private Parity parity = Parity.Even; + private StopBits stopBits = StopBits.One; + private bool connected = false; + private X509Certificate2 remoteCertificate; + private X509CertificateCollection localCertificates; + public int NumberOfRetries { get; set; } = 3; + private int countRetries = 0; + + public delegate void ReceiveDataChangedHandler(object sender); + public event ReceiveDataChangedHandler ReceiveDataChanged; + + public delegate void SendDataChangedHandler(object sender); + public event SendDataChangedHandler SendDataChanged; + + public delegate void ConnectedChangedHandler(object sender); + public event ConnectedChangedHandler ConnectedChanged; + + SslStream stream; + + private bool mutualAuthentication { get; set; } + + /// <summary> + /// Constructor which determines the Master ip-address and the Master Port. + /// </summary> + /// <param name="ipAddress">IP-Address of the Master device</param> + /// <param name="port">Listening port of the Master device (should be 502)</param> + /// <param name="certificate">Path of the client certificate</param> + /// + + public ModbusSecureClient(string ipAddress, int port) + { + if (debug) StoreLogData.Instance.Store("EasyModbus library initialized for Modbus-TCP, IPAddress: " + ipAddress + ", Port: " + port, System.DateTime.Now); +#if (!COMMERCIAL) + Console.WriteLine("EasyModbus Client Library Version: " + Assembly.GetExecutingAssembly().GetName().Version.ToString()); + Console.WriteLine("Copyright (c) Stefan Rossmann Engineering Solutions"); + Console.WriteLine(); +#endif + this.ipAddress = ipAddress; + this.port = port; + this.remoteCertificate = null; + + // Empty certs list + this.localCertificates = new X509CertificateCollection(); + } + + public ModbusSecureClient(string ipAddress, int port, string certificate, string certificatePassword, bool mutualAuthentication) + { + + if (debug) StoreLogData.Instance.Store("EasyModbus library initialized for Modbus-TCP, IPAddress: " + ipAddress + ", Port: " + port, System.DateTime.Now); +#if (!COMMERCIAL) + Console.WriteLine("EasyModbus Client Library Version: " + Assembly.GetExecutingAssembly().GetName().Version.ToString()); + Console.WriteLine("Copyright (c) Stefan Rossmann Engineering Solutions"); + Console.WriteLine(); +#endif + + Console.WriteLine("Create client"); + X509CertificateCollection certs = new X509CertificateCollection(); + + // TODO: maybe simplify these since we send the cert, we want mutual auth? + try + { + this.remoteCertificate = new X509Certificate2(certificate, certificatePassword, X509KeyStorageFlags.MachineKeySet); + certs.Add(remoteCertificate); + } + catch (ArgumentNullException e) + { + Console.WriteLine("Certificate value cannot be null."); + if (debug) StoreLogData.Instance.Store($"Exception: {e.Message}. Certificate value cannot be null.", System.DateTime.Now); + return; + } + catch (ArgumentException e) + { + Console.WriteLine("The certificate path is not of a legal form."); + if (debug) StoreLogData.Instance.Store($"Exception: {e.Message}. The certificate path is not of a legal form.", System.DateTime.Now); + return; + } + catch(CryptographicException e) + { + Console.WriteLine("Exception: {0}", e.Message); + if (e.InnerException != null) + { + Console.WriteLine("Inner exception: {0}", e.InnerException.Message); + if (debug) StoreLogData.Instance.Store($"Exception: {e.Message}", System.DateTime.Now); + } + return; + } + + this.ipAddress = ipAddress; + this.port = port; + + this.mutualAuthentication = mutualAuthentication; + + if(this.mutualAuthentication) + { + this.localCertificates = certs; + } + else + { + // Empty certs list + this.localCertificates = new X509CertificateCollection(); + } + } + + /// <summary> + /// The following method is invoked by the RemoteCertificateValidationDelegate. + /// </summary> + public static bool ValidateServerCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) + { + + if (sslPolicyErrors == SslPolicyErrors.None) + return true; + + // Just for testing for the localhost domain that does not matches 127.0.0.1 with "localhost" + if (sslPolicyErrors == SslPolicyErrors.RemoteCertificateNameMismatch) + return true; + + Console.WriteLine("Certificate error: {0}", sslPolicyErrors); + // We should store this log even outside the debugging environment. + StoreLogData.Instance.Store("Certificate error"+ sslPolicyErrors, System.DateTime.Now); + + // Do not allow this client to communicate with unauthenticated servers. + return false; + } + + /// <summary> + /// The following method is invoked by LocalCertificateSelectionCallback. + /// </summary> + public static X509Certificate SelectLocalCertificate(object sender, string targetHost, X509CertificateCollection localCertificates, X509Certificate remoteCertificate, string[] acceptableIssuers) + { + + if (acceptableIssuers != null && + acceptableIssuers.Length > 0 && + localCertificates != null && + localCertificates.Count > 0) + { + // Use the first certificate that is from an acceptable issuer. + foreach (X509Certificate certificate in localCertificates) + { + string issuer = certificate.Issuer; + if (Array.IndexOf(acceptableIssuers, issuer) != -1) + return certificate; + } + } + if (localCertificates != null && + localCertificates.Count > 0) + { + //Console.WriteLine(localCertificates[0]); + // if (debug) StoreLogData.Instance.Store($"Local certificate information {localCertificates[0]}", System.DateTime.Now); + return localCertificates[0]; + } + return null; + } + + + + /// <summary> + /// Parameterless constructor + /// </summary> + public ModbusSecureClient() + { + if (debug) StoreLogData.Instance.Store("EasyModbus library initialized for Modbus-TCP" ,System.DateTime.Now); +#if (!COMMERCIAL) + Console.WriteLine("EasyModbus Client Library Version: " + Assembly.GetExecutingAssembly().GetName().Version.ToString()); + Console.WriteLine("Copyright (c) Stefan Rossmann Engineering Solutions"); + Console.WriteLine(); +#endif + this.remoteCertificate = null; + } + + /// <summary> + /// Establish connection to Master device in case of Modbus TCP. Opens COM-Port in case of Modbus RTU + /// </summary> + public void Connect() + { + if (serialport != null) + { + if (!serialport.IsOpen) + { + if (debug) StoreLogData.Instance.Store("Open Serial port " + serialport.PortName,System.DateTime.Now); + serialport.BaudRate = baudRate; + serialport.Parity = parity; + serialport.StopBits = stopBits; + serialport.WriteTimeout = 10000; + serialport.ReadTimeout = connectTimeout; + serialport.Open(); + connected = true; + + + } + if (ConnectedChanged != null) + try + { + ConnectedChanged(this); + } + catch + { + + } + return; + } + if (!udpFlag) + { + if (debug) StoreLogData.Instance.Store("Open TCP-Socket, IP-Address: " + ipAddress + ", Port: " + port, System.DateTime.Now); + tcpClient = new TcpClient(); + var result = tcpClient.BeginConnect(ipAddress, port, null, null); + var success = result.AsyncWaitHandle.WaitOne(connectTimeout); + if (!success) + { + throw new EasyModbusSecure.Exceptions.ConnectionException("connection timed out"); + } + tcpClient.EndConnect(result); + + if (mutualAuthentication == true && (localCertificates == null || localCertificates.Count == 0)) + { + Console.WriteLine("Mutual authentication issued but certificate was not provided"); + tcpClient.Close(); + + connected = false; + return; + } + //tcpClient = new TcpClient(ipAddress, port); + stream = new SslStream(tcpClient.GetStream(), + false, + new RemoteCertificateValidationCallback(ValidateServerCertificate), + new LocalCertificateSelectionCallback(SelectLocalCertificate) + ); // TODO: add the option for the RemoteCertificateValidation + stream.ReadTimeout = connectTimeout; + connected = true; + + if (mutualAuthentication) + { + try + { + Authentication(); + } + catch (AuthenticationException e) + { + Console.WriteLine("Exception: {0}", e.Message); + if(debug) StoreLogData.Instance.Store($"Exception: {e.Message}", System.DateTime.Now); + + if (e.InnerException != null) + { + Console.WriteLine("Inner exception: {0}", e.InnerException.Message); + if (debug) StoreLogData.Instance.Store($"Inner exception: {e.InnerException.Message}", System.DateTime.Now); + } + Console.WriteLine("Authentication failed - closing the connection."); + tcpClient.Close(); + //Disconnect(); + connected = false; + return; + } + catch (Exception e) + { + Console.WriteLine("Exception 2: {0}", e.Message); + if (debug) StoreLogData.Instance.Store($"Exception 2: {e.Message}", System.DateTime.Now); + + tcpClient.Close(); + //Disconnect(); + connected = false; + return; + } + } + else + { + try + { + Authentication(); + } + catch (AuthenticationException e) + { + Console.WriteLine("Exception: {0}", e.Message); + if (debug) StoreLogData.Instance.Store($"Exception: {e.Message}", System.DateTime.Now); + + if (e.InnerException != null) + { + Console.WriteLine("Inner exception: {0}", e.InnerException.Message); + if (debug) StoreLogData.Instance.Store($"Inner exception: {e.InnerException.Message}", System.DateTime.Now); + } + Console.WriteLine("Authentication failed - closing the connection."); + tcpClient.Close(); + connected = false; + return; + } + catch (Exception e) + { + Console.WriteLine("Exception 2: {0}", e.Message); + if (debug) StoreLogData.Instance.Store($"Exception 2: {e.Message}", System.DateTime.Now); + + tcpClient.Close(); + //Disconnect(); + connected = false; + return; + } + } + } + else + { + tcpClient = new TcpClient(); + connected = true; + } + if (ConnectedChanged != null) + try + { + ConnectedChanged(this); + } + catch + { + + } + } + + /// <summary> + /// Establish connection to Master device in case of Modbus TCP. + /// </summary> + public void Connect(string ipAddress, int port) + { + if (!udpFlag) + { + if (debug) StoreLogData.Instance.Store("Open TCP-Socket, IP-Address: " + ipAddress + ", Port: " + port, System.DateTime.Now); + tcpClient = new TcpClient(); + var result = tcpClient.BeginConnect(ipAddress, port, null, null); + var success = result.AsyncWaitHandle.WaitOne(connectTimeout); + if (!success) + { + throw new EasyModbusSecure.Exceptions.ConnectionException("connection timed out"); + } + tcpClient.EndConnect(result); + + stream = new SslStream(tcpClient.GetStream(), + false, + new RemoteCertificateValidationCallback(ValidateServerCertificate), + new LocalCertificateSelectionCallback(SelectLocalCertificate) + ); + stream.ReadTimeout = connectTimeout; + connected = true; + + if (mutualAuthentication) + { + try + { + Authentication(); + } + catch (AuthenticationException e) + { + Console.WriteLine("Exception: {0}", e.Message); + if (debug) StoreLogData.Instance.Store($"Exception: {e.Message}", System.DateTime.Now); + + if (e.InnerException != null) + { + Console.WriteLine("Inner exception: {0}", e.InnerException.Message); + if (debug) StoreLogData.Instance.Store($"Inner exception: {e.InnerException.Message}", System.DateTime.Now); + } + Console.WriteLine("Authentication failed - closing the connection."); + tcpClient.Close(); + //Disconnect(); + connected = false; + return; + } + catch (Exception e) + { + Console.WriteLine("Exception 2: {0}", e.Message); + if (debug) StoreLogData.Instance.Store($"Exception 2: {e.Message}", System.DateTime.Now); + + tcpClient.Close(); + //Disconnect(); + connected = false; + return; + } + } + else + { + try + { + Authentication(); + } + catch (AuthenticationException e) + { + Console.WriteLine("Exception: {0}", e.Message); + if (debug) StoreLogData.Instance.Store($"Exception: {e.Message}", System.DateTime.Now); + + if (e.InnerException != null) + { + Console.WriteLine("Inner exception: {0}", e.InnerException.Message); + if (debug) StoreLogData.Instance.Store($"Inner exception: {e.InnerException.Message}", System.DateTime.Now); + } + Console.WriteLine("Authentication failed - closing the connection."); + tcpClient.Close(); + connected = false; + return; + } + catch (Exception e) + { + Console.WriteLine("Exception 2: {0}", e.Message); + if (debug) StoreLogData.Instance.Store($"Exception 2: {e.Message}", System.DateTime.Now); + + tcpClient.Close(); + //Disconnect(); + connected = false; + return; + } + } + } + else + { + tcpClient = new TcpClient(); + connected = true; + } + + if (ConnectedChanged != null) + ConnectedChanged(this); + } + + public void Authentication() + { + // Enforcing TLS 1.2, in case system is configured otherwise + // Without Mutual Authentication, "localCertificates" should be empty - TODO: find a way to move it to the other Connect() + stream.AuthenticateAsClient(ipAddress, localCertificates, SslProtocols.Tls12, checkCertificateRevocation: true); + + NetworkStream networkStream = tcpClient.GetStream(); + if (tcpClient.Client.Poll(1, SelectMode.SelectRead) && !networkStream.DataAvailable) + { + // Close connection and return. + tcpClient.Close(); + connected = false; + throw new AuthenticationException("Unable to authenticate to the server"); + } + } + + /// <summary> + /// Converts two ModbusRegisters to Float - Example: EasyModbus.ModbusClient.ConvertRegistersToFloat(modbusClient.ReadHoldingRegisters(19,2)) + /// </summary> + /// <param name="registers">Two Register values received from Modbus</param> + /// <returns>Connected float value</returns> + public static float ConvertRegistersToFloat(int[] registers) + { + if (registers.Length != 2) + throw new ArgumentException("Input Array length invalid - Array langth must be '2'"); + int highRegister = registers[1]; + int lowRegister = registers[0]; + byte[] highRegisterBytes = BitConverter.GetBytes(highRegister); + byte[] lowRegisterBytes = BitConverter.GetBytes(lowRegister); + byte[] floatBytes = { + lowRegisterBytes[0], + lowRegisterBytes[1], + highRegisterBytes[0], + highRegisterBytes[1] + }; + return BitConverter.ToSingle(floatBytes, 0); + } + + /// <summary> + /// Converts two ModbusRegisters to Float, Registers can by swapped + /// </summary> + /// <param name="registers">Two Register values received from Modbus</param> + /// <param name="registerOrder">Desired Word Order (Low Register first or High Register first</param> + /// <returns>Connected float value</returns> + public static float ConvertRegistersToFloat(int[] registers, RegisterOrder registerOrder) + { + int [] swappedRegisters = {registers[0],registers[1]}; + if (registerOrder == RegisterOrder.HighLow) + swappedRegisters = new int[] {registers[1],registers[0]}; + return ConvertRegistersToFloat(swappedRegisters); + } + + /// <summary> + /// Converts two ModbusRegisters to 32 Bit Integer value + /// </summary> + /// <param name="registers">Two Register values received from Modbus</param> + /// <returns>Connected 32 Bit Integer value</returns> + public static Int32 ConvertRegistersToInt(int[] registers) + { + if (registers.Length != 2) + throw new ArgumentException("Input Array length invalid - Array langth must be '2'"); + int highRegister = registers[1]; + int lowRegister = registers[0]; + byte[] highRegisterBytes = BitConverter.GetBytes(highRegister); + byte[] lowRegisterBytes = BitConverter.GetBytes(lowRegister); + byte[] doubleBytes = { + lowRegisterBytes[0], + lowRegisterBytes[1], + highRegisterBytes[0], + highRegisterBytes[1] + }; + return BitConverter.ToInt32(doubleBytes, 0); + } + + /// <summary> + /// Converts two ModbusRegisters to 32 Bit Integer Value - Registers can be swapped + /// </summary> + /// <param name="registers">Two Register values received from Modbus</param> + /// <param name="registerOrder">Desired Word Order (Low Register first or High Register first</param> + /// <returns>Connecteds 32 Bit Integer value</returns> + public static Int32 ConvertRegistersToInt(int[] registers, RegisterOrder registerOrder) + { + int[] swappedRegisters = { registers[0], registers[1] }; + if (registerOrder == RegisterOrder.HighLow) + swappedRegisters = new int[] { registers[1], registers[0] }; + return ConvertRegistersToInt(swappedRegisters); + } + + /// <summary> + /// Convert four 16 Bit Registers to 64 Bit Integer value Register Order "LowHigh": Reg0: Low Word.....Reg3: High Word, "HighLow": Reg0: High Word.....Reg3: Low Word + /// </summary> + /// <param name="registers">four Register values received from Modbus</param> + /// <returns>64 bit value</returns> + public static Int64 ConvertRegistersToLong(int[] registers) + { + if (registers.Length != 4) + throw new ArgumentException("Input Array length invalid - Array langth must be '4'"); + int highRegister = registers[3]; + int highLowRegister = registers[2]; + int lowHighRegister = registers[1]; + int lowRegister = registers[0]; + byte[] highRegisterBytes = BitConverter.GetBytes(highRegister); + byte[] highLowRegisterBytes = BitConverter.GetBytes(highLowRegister); + byte[] lowHighRegisterBytes = BitConverter.GetBytes(lowHighRegister); + byte[] lowRegisterBytes = BitConverter.GetBytes(lowRegister); + byte[] longBytes = { + lowRegisterBytes[0], + lowRegisterBytes[1], + lowHighRegisterBytes[0], + lowHighRegisterBytes[1], + highLowRegisterBytes[0], + highLowRegisterBytes[1], + highRegisterBytes[0], + highRegisterBytes[1] + }; + return BitConverter.ToInt64(longBytes, 0); + } + + /// <summary> + /// Convert four 16 Bit Registers to 64 Bit Integer value - Registers can be swapped + /// </summary> + /// <param name="registers">four Register values received from Modbus</param> + /// <param name="registerOrder">Desired Word Order (Low Register first or High Register first</param> + /// <returns>Connected 64 Bit Integer value</returns> + public static Int64 ConvertRegistersToLong(int[] registers, RegisterOrder registerOrder) + { + if (registers.Length != 4) + throw new ArgumentException("Input Array length invalid - Array langth must be '4'"); + int[] swappedRegisters = { registers[0], registers[1], registers[2], registers[3] }; + if (registerOrder == RegisterOrder.HighLow) + swappedRegisters = new int[] { registers[3], registers[2], registers[1], registers[0] }; + return ConvertRegistersToLong(swappedRegisters); + } + + /// <summary> + /// Convert four 16 Bit Registers to 64 Bit double prec. value Register Order "LowHigh": Reg0: Low Word.....Reg3: High Word, "HighLow": Reg0: High Word.....Reg3: Low Word + /// </summary> + /// <param name="registers">four Register values received from Modbus</param> + /// <returns>64 bit value</returns> + public static double ConvertRegistersToDouble(int[] registers) + { + if (registers.Length != 4) + throw new ArgumentException("Input Array length invalid - Array langth must be '4'"); + int highRegister = registers[3]; + int highLowRegister = registers[2]; + int lowHighRegister = registers[1]; + int lowRegister = registers[0]; + byte[] highRegisterBytes = BitConverter.GetBytes(highRegister); + byte[] highLowRegisterBytes = BitConverter.GetBytes(highLowRegister); + byte[] lowHighRegisterBytes = BitConverter.GetBytes(lowHighRegister); + byte[] lowRegisterBytes = BitConverter.GetBytes(lowRegister); + byte[] longBytes = { + lowRegisterBytes[0], + lowRegisterBytes[1], + lowHighRegisterBytes[0], + lowHighRegisterBytes[1], + highLowRegisterBytes[0], + highLowRegisterBytes[1], + highRegisterBytes[0], + highRegisterBytes[1] + }; + return BitConverter.ToDouble(longBytes, 0); + } + + /// <summary> + /// Convert four 16 Bit Registers to 64 Bit double prec. value - Registers can be swapped + /// </summary> + /// <param name="registers">four Register values received from Modbus</param> + /// <param name="registerOrder">Desired Word Order (Low Register first or High Register first</param> + /// <returns>Connected double prec. float value</returns> + public static double ConvertRegistersToDouble(int[] registers, RegisterOrder registerOrder) + { + if (registers.Length != 4) + throw new ArgumentException("Input Array length invalid - Array langth must be '4'"); + int[] swappedRegisters = { registers[0], registers[1], registers[2], registers[3] }; + if (registerOrder == RegisterOrder.HighLow) + swappedRegisters = new int[] { registers[3], registers[2], registers[1], registers[0] }; + return ConvertRegistersToDouble(swappedRegisters); + } + + /// <summary> + /// Converts float to two ModbusRegisters - Example: modbusClient.WriteMultipleRegisters(24, EasyModbus.ModbusClient.ConvertFloatToTwoRegisters((float)1.22)); + /// </summary> + /// <param name="floatValue">Float value which has to be converted into two registers</param> + /// <returns>Register values</returns> + public static int[] ConvertFloatToRegisters(float floatValue) + { + byte[] floatBytes = BitConverter.GetBytes(floatValue); + byte[] highRegisterBytes = + { + floatBytes[2], + floatBytes[3], + 0, + 0 + }; + byte[] lowRegisterBytes = + { + + floatBytes[0], + floatBytes[1], + 0, + 0 + }; + int[] returnValue = + { + BitConverter.ToInt32(lowRegisterBytes,0), + BitConverter.ToInt32(highRegisterBytes,0) + }; + return returnValue; + } + + /// <summary> + /// Converts float to two ModbusRegisters Registers - Registers can be swapped + /// </summary> + /// <param name="floatValue">Float value which has to be converted into two registers</param> + /// <param name="registerOrder">Desired Word Order (Low Register first or High Register first</param> + /// <returns>Register values</returns> + public static int[] ConvertFloatToRegisters(float floatValue, RegisterOrder registerOrder) + { + int[] registerValues = ConvertFloatToRegisters(floatValue); + int[] returnValue = registerValues; + if (registerOrder == RegisterOrder.HighLow) + returnValue = new Int32[] { registerValues[1], registerValues[0] }; + return returnValue; + } + + /// <summary> + /// Converts 32 Bit Value to two ModbusRegisters + /// </summary> + /// <param name="intValue">Int value which has to be converted into two registers</param> + /// <returns>Register values</returns> + public static int[] ConvertIntToRegisters(Int32 intValue) + { + byte[] doubleBytes = BitConverter.GetBytes(intValue); + byte[] highRegisterBytes = + { + doubleBytes[2], + doubleBytes[3], + 0, + 0 + }; + byte[] lowRegisterBytes = + { + + doubleBytes[0], + doubleBytes[1], + 0, + 0 + }; + int[] returnValue = + { + BitConverter.ToInt32(lowRegisterBytes,0), + BitConverter.ToInt32(highRegisterBytes,0) + }; + return returnValue; + } + + /// <summary> + /// Converts 32 Bit Value to two ModbusRegisters Registers - Registers can be swapped + /// </summary> + /// <param name="intValue">Double value which has to be converted into two registers</param> + /// <param name="registerOrder">Desired Word Order (Low Register first or High Register first</param> + /// <returns>Register values</returns> + public static int[] ConvertIntToRegisters(Int32 intValue, RegisterOrder registerOrder) + { + int[] registerValues = ConvertIntToRegisters(intValue); + int[] returnValue = registerValues; + if (registerOrder == RegisterOrder.HighLow) + returnValue = new Int32[] { registerValues[1], registerValues[0] }; + return returnValue; + } + + /// <summary> + /// Converts 64 Bit Value to four ModbusRegisters + /// </summary> + /// <param name="longValue">long value which has to be converted into four registers</param> + /// <returns>Register values</returns> + public static int[] ConvertLongToRegisters(Int64 longValue) + { + byte[] longBytes = BitConverter.GetBytes(longValue); + byte[] highRegisterBytes = + { + longBytes[6], + longBytes[7], + 0, + 0 + }; + byte[] highLowRegisterBytes = + { + longBytes[4], + longBytes[5], + 0, + 0 + }; + byte[] lowHighRegisterBytes = + { + longBytes[2], + longBytes[3], + 0, + 0 + }; + byte[] lowRegisterBytes = + { + + longBytes[0], + longBytes[1], + 0, + 0 + }; + int[] returnValue = + { + BitConverter.ToInt32(lowRegisterBytes,0), + BitConverter.ToInt32(lowHighRegisterBytes,0), + BitConverter.ToInt32(highLowRegisterBytes,0), + BitConverter.ToInt32(highRegisterBytes,0) + }; + return returnValue; + } + + /// <summary> + /// Converts 64 Bit Value to four ModbusRegisters - Registers can be swapped + /// </summary> + /// <param name="longValue">long value which has to be converted into four registers</param> + /// <param name="registerOrder">Desired Word Order (Low Register first or High Register first</param> + /// <returns>Register values</returns> + public static int[] ConvertLongToRegisters(Int64 longValue, RegisterOrder registerOrder) + { + int[] registerValues = ConvertLongToRegisters(longValue); + int[] returnValue = registerValues; + if (registerOrder == RegisterOrder.HighLow) + returnValue = new int[] { registerValues[3], registerValues[2], registerValues[1], registerValues[0] }; + return returnValue; + } + + /// <summary> + /// Converts 64 Bit double prec Value to four ModbusRegisters + /// </summary> + /// <param name="doubleValue">double value which has to be converted into four registers</param> + /// <returns>Register values</returns> + public static int[] ConvertDoubleToRegisters(double doubleValue) + { + byte[] doubleBytes = BitConverter.GetBytes(doubleValue); + byte[] highRegisterBytes = + { + doubleBytes[6], + doubleBytes[7], + 0, + 0 + }; + byte[] highLowRegisterBytes = + { + doubleBytes[4], + doubleBytes[5], + 0, + 0 + }; + byte[] lowHighRegisterBytes = + { + doubleBytes[2], + doubleBytes[3], + 0, + 0 + }; + byte[] lowRegisterBytes = + { + + doubleBytes[0], + doubleBytes[1], + 0, + 0 + }; + int[] returnValue = + { + BitConverter.ToInt32(lowRegisterBytes,0), + BitConverter.ToInt32(lowHighRegisterBytes,0), + BitConverter.ToInt32(highLowRegisterBytes,0), + BitConverter.ToInt32(highRegisterBytes,0) + }; + return returnValue; + } + + /// <summary> + /// Converts 64 Bit double prec. Value to four ModbusRegisters - Registers can be swapped + /// </summary> + /// <param name="doubleValue">double value which has to be converted into four registers</param> + /// <param name="registerOrder">Desired Word Order (Low Register first or High Register first</param> + /// <returns>Register values</returns> + public static int[] ConvertDoubleToRegisters(double doubleValue, RegisterOrder registerOrder) + { + int[] registerValues = ConvertDoubleToRegisters(doubleValue); + int[] returnValue = registerValues; + if (registerOrder == RegisterOrder.HighLow) + returnValue = new int[] { registerValues[3], registerValues[2], registerValues[1], registerValues[0] }; + return returnValue; + } + + /// <summary> + /// Converts 16 - Bit Register values to String + /// </summary> + /// <param name="registers">Register array received via Modbus</param> + /// <param name="offset">First Register containing the String to convert</param> + /// <param name="stringLength">number of characters in String (must be even)</param> + /// <returns>Converted String</returns> + public static string ConvertRegistersToString(int[] registers, int offset, int stringLength) + { + byte[] result = new byte[stringLength]; + byte[] registerResult = new byte[2]; + + for (int i = 0; i < stringLength/2; i++) + { + registerResult = BitConverter.GetBytes(registers[offset + i]); + result[i * 2] = registerResult[0]; + result[i * 2 + 1] = registerResult[1]; + } + return System.Text.Encoding.Default.GetString(result); + } + + /// <summary> + /// Converts a String to 16 - Bit Registers + /// </summary> + /// <param name="registers">Register array received via Modbus</param> + /// <returns>Converted String</returns> + public static int[] ConvertStringToRegisters(string stringToConvert) + { + byte[] array = System.Text.Encoding.ASCII.GetBytes(stringToConvert); + int[] returnarray = new int[stringToConvert.Length / 2 + stringToConvert.Length % 2]; + for (int i = 0; i < returnarray.Length; i++) + { + returnarray[i] = array[i * 2]; + if (i*2 +1< array.Length) + { + returnarray[i] = returnarray[i] | ((int)array[i * 2 + 1] << 8); + } + } + return returnarray; + } + + + /// <summary> + /// Calculates the CRC16 for Modbus-RTU + /// </summary> + /// <param name="data">Byte buffer to send</param> + /// <param name="numberOfBytes">Number of bytes to calculate CRC</param> + /// <param name="startByte">First byte in buffer to start calculating CRC</param> + public static UInt16 calculateCRC(byte[] data, UInt16 numberOfBytes, int startByte) + { + byte[] auchCRCHi = { + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, + 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, + 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, + 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, + 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, + 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, + 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, + 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, + 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, + 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, + 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, + 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, + 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, + 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, + 0x40 + }; + + byte[] auchCRCLo = { + 0x00, 0xC0, 0xC1, 0x01, 0xC3, 0x03, 0x02, 0xC2, 0xC6, 0x06, 0x07, 0xC7, 0x05, 0xC5, 0xC4, + 0x04, 0xCC, 0x0C, 0x0D, 0xCD, 0x0F, 0xCF, 0xCE, 0x0E, 0x0A, 0xCA, 0xCB, 0x0B, 0xC9, 0x09, + 0x08, 0xC8, 0xD8, 0x18, 0x19, 0xD9, 0x1B, 0xDB, 0xDA, 0x1A, 0x1E, 0xDE, 0xDF, 0x1F, 0xDD, + 0x1D, 0x1C, 0xDC, 0x14, 0xD4, 0xD5, 0x15, 0xD7, 0x17, 0x16, 0xD6, 0xD2, 0x12, 0x13, 0xD3, + 0x11, 0xD1, 0xD0, 0x10, 0xF0, 0x30, 0x31, 0xF1, 0x33, 0xF3, 0xF2, 0x32, 0x36, 0xF6, 0xF7, + 0x37, 0xF5, 0x35, 0x34, 0xF4, 0x3C, 0xFC, 0xFD, 0x3D, 0xFF, 0x3F, 0x3E, 0xFE, 0xFA, 0x3A, + 0x3B, 0xFB, 0x39, 0xF9, 0xF8, 0x38, 0x28, 0xE8, 0xE9, 0x29, 0xEB, 0x2B, 0x2A, 0xEA, 0xEE, + 0x2E, 0x2F, 0xEF, 0x2D, 0xED, 0xEC, 0x2C, 0xE4, 0x24, 0x25, 0xE5, 0x27, 0xE7, 0xE6, 0x26, + 0x22, 0xE2, 0xE3, 0x23, 0xE1, 0x21, 0x20, 0xE0, 0xA0, 0x60, 0x61, 0xA1, 0x63, 0xA3, 0xA2, + 0x62, 0x66, 0xA6, 0xA7, 0x67, 0xA5, 0x65, 0x64, 0xA4, 0x6C, 0xAC, 0xAD, 0x6D, 0xAF, 0x6F, + 0x6E, 0xAE, 0xAA, 0x6A, 0x6B, 0xAB, 0x69, 0xA9, 0xA8, 0x68, 0x78, 0xB8, 0xB9, 0x79, 0xBB, + 0x7B, 0x7A, 0xBA, 0xBE, 0x7E, 0x7F, 0xBF, 0x7D, 0xBD, 0xBC, 0x7C, 0xB4, 0x74, 0x75, 0xB5, + 0x77, 0xB7, 0xB6, 0x76, 0x72, 0xB2, 0xB3, 0x73, 0xB1, 0x71, 0x70, 0xB0, 0x50, 0x90, 0x91, + 0x51, 0x93, 0x53, 0x52, 0x92, 0x96, 0x56, 0x57, 0x97, 0x55, 0x95, 0x94, 0x54, 0x9C, 0x5C, + 0x5D, 0x9D, 0x5F, 0x9F, 0x9E, 0x5E, 0x5A, 0x9A, 0x9B, 0x5B, 0x99, 0x59, 0x58, 0x98, 0x88, + 0x48, 0x49, 0x89, 0x4B, 0x8B, 0x8A, 0x4A, 0x4E, 0x8E, 0x8F, 0x4F, 0x8D, 0x4D, 0x4C, 0x8C, + 0x44, 0x84, 0x85, 0x45, 0x87, 0x47, 0x46, 0x86, 0x82, 0x42, 0x43, 0x83, 0x41, 0x81, 0x80, + 0x40 + }; + UInt16 usDataLen = numberOfBytes; + byte uchCRCHi = 0xFF ; + byte uchCRCLo = 0xFF ; + int i = 0; + int uIndex ; + while (usDataLen>0) + { + usDataLen--; + if ((i + startByte) < data.Length) + { + uIndex = uchCRCLo ^ data[i + startByte]; + uchCRCLo = (byte)(uchCRCHi ^ auchCRCHi[uIndex]); + uchCRCHi = auchCRCLo[uIndex]; + } + i++; + } + return (UInt16)((UInt16)uchCRCHi << 8 | uchCRCLo); + } + + private bool dataReceived = false; + private bool receiveActive = false; + private byte[] readBuffer = new byte[256]; + private int bytesToRead = 0; + private int akjjjctualPositionToRead = 0; + DateTime dateTimeLastRead; +/* + private void DataReceivedHandler(object sender, + SerialDataReceivedEventArgs e) + { + long ticksWait = TimeSpan.TicksPerMillisecond * 2000; + SerialPort sp = (SerialPort)sender; + + if (bytesToRead == 0 || sp.BytesToRead == 0) + { + actualPositionToRead = 0; + sp.DiscardInBuffer(); + dataReceived = false; + receiveActive = false; + return; + } + + if (actualPositionToRead == 0 && !dataReceived) + readBuffer = new byte[256]; + + //if ((DateTime.Now.Ticks - dateTimeLastRead.Ticks) > ticksWait) + //{ + // readBuffer = new byte[256]; + // actualPositionToRead = 0; + //} + int numberOfBytesInBuffer = sp.BytesToRead; + sp.Read(readBuffer, actualPositionToRead, ((numberOfBytesInBuffer + actualPositionToRead) > readBuffer.Length) ? 0 : numberOfBytesInBuffer); + actualPositionToRead = actualPositionToRead + numberOfBytesInBuffer; + //sp.DiscardInBuffer(); + //if (DetectValidModbusFrame(readBuffer, (actualPositionToRead < readBuffer.Length) ? actualPositionToRead : readBuffer.Length) | bytesToRead <= actualPositionToRead) + if (actualPositionToRead >= bytesToRead) + { + + dataReceived = true; + bytesToRead = 0; + actualPositionToRead = 0; + if (debug) StoreLogData.Instance.Store("Received Serial-Data: " + BitConverter.ToString(readBuffer), System.DateTime.Now); + + } + + + //dateTimeLastRead = DateTime.Now; + } + */ + + + private void DataReceivedHandler(object sender, + SerialDataReceivedEventArgs e) + { + serialport.DataReceived -= DataReceivedHandler; + + //while (receiveActive | dataReceived) + // System.Threading.Thread.Sleep(10); + receiveActive = true; + + const long ticksWait = TimeSpan.TicksPerMillisecond * 2000;//((40*10000000) / this.baudRate); + + + SerialPort sp = (SerialPort)sender; + if (bytesToRead == 0) + { + sp.DiscardInBuffer(); + receiveActive = false; + serialport.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); + return; + } + readBuffer = new byte[256]; + int numbytes=0; + int actualPositionToRead = 0; + DateTime dateTimeLastRead = DateTime.Now; + do{ + try { + dateTimeLastRead = DateTime.Now; + while ((sp.BytesToRead) == 0) + { + System.Threading.Thread.Sleep(10); + if ((DateTime.Now.Ticks - dateTimeLastRead.Ticks) > ticksWait) + break; + } + numbytes=sp.BytesToRead; + + + byte[] rxbytearray = new byte[numbytes]; + sp.Read(rxbytearray, 0, numbytes); + Array.Copy(rxbytearray,0, readBuffer,actualPositionToRead, (actualPositionToRead + rxbytearray.Length) <= bytesToRead ? rxbytearray.Length : bytesToRead - actualPositionToRead); + + actualPositionToRead = actualPositionToRead + rxbytearray.Length; + + } + catch (Exception){ + + } + + if (bytesToRead <= actualPositionToRead) + break; + + if (DetectValidModbusFrame(readBuffer, (actualPositionToRead < readBuffer.Length) ? actualPositionToRead : readBuffer.Length) | bytesToRead <= actualPositionToRead) + break; + } + while ((DateTime.Now.Ticks - dateTimeLastRead.Ticks) < ticksWait) ; + + //10.000 Ticks in 1 ms + + receiveData = new byte[actualPositionToRead]; + Array.Copy(readBuffer, 0, receiveData, 0, (actualPositionToRead < readBuffer.Length) ? actualPositionToRead: readBuffer.Length); + if (debug) StoreLogData.Instance.Store("Received Serial-Data: "+BitConverter.ToString(readBuffer) ,System.DateTime.Now); + bytesToRead = 0; + + + + + dataReceived = true; + receiveActive = false; + serialport.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); + if (ReceiveDataChanged != null) + { + + ReceiveDataChanged(this); + + } + + //sp.DiscardInBuffer(); + } + + public static bool DetectValidModbusFrame(byte[] readBuffer, int length) + { + // minimum length 6 bytes + if (length < 6) + return false; + //SlaveID correct + if ((readBuffer[0] < 1) | (readBuffer[0] > 247)) + return false; + //CRC correct? + byte[] crc = new byte[2]; + crc = BitConverter.GetBytes(calculateCRC(readBuffer, (ushort)(length-2), 0)); + if (crc[0] != readBuffer[length-2] | crc[1] != readBuffer[length-1]) + return false; + return true; + } + + + + /// <summary> + /// Read Discrete Inputs from Server device (FC2). + /// </summary> + /// <param name="startingAddress">First discrete input to read</param> + /// <param name="quantity">Number of discrete Inputs to read</param> + /// <returns>Boolean Array which contains the discrete Inputs</returns> + public bool[] ReadDiscreteInputs(int startingAddress, int quantity) + { + if (debug) StoreLogData.Instance.Store("FC2 (Read Discrete Inputs from Master device), StartingAddress: "+ startingAddress+", Quantity: " +quantity, System.DateTime.Now); + transactionIdentifierInternal ++; + if (serialport != null) + if (!serialport.IsOpen) + { + if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + } + if (tcpClient == null & !udpFlag & serialport==null) + { + if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); + } + if (startingAddress > 65535 | quantity >2000) + { + if (debug) StoreLogData.Instance.Store("ArgumentException Throwed", System.DateTime.Now); + throw new ArgumentException("Starting address must be 0 - 65535; quantity must be 0 - 2000"); + } + bool[] response; + this.transactionIdentifier = BitConverter.GetBytes((uint)transactionIdentifierInternal); + this.protocolIdentifier = BitConverter.GetBytes((int) 0x0000); + this.length = BitConverter.GetBytes((int)0x0006); + this.functionCode = 0x02; + this.startingAddress = BitConverter.GetBytes(startingAddress); + this.quantity = BitConverter.GetBytes(quantity); + Byte[] data = new byte[] + { + this.transactionIdentifier[1], + this.transactionIdentifier[0], + this.protocolIdentifier[1], + this.protocolIdentifier[0], + this.length[1], + this.length[0], + this.unitIdentifier, + this.functionCode, + this.startingAddress[1], + this.startingAddress[0], + this.quantity[1], + this.quantity[0], + this.crc[0], + this.crc[1] + }; + crc = BitConverter.GetBytes(calculateCRC(data, 6, 6)); + data[12] = crc[0]; + data[13] = crc[1]; + + if (serialport != null) + { + dataReceived = false; + if (quantity % 8 == 0) + bytesToRead = 5 + quantity / 8; + else + bytesToRead = 6 + quantity / 8; + // serialport.ReceivedBytesThreshold = bytesToRead; + serialport.Write(data, 6, 8); + if (debug) + { + byte [] debugData = new byte[8]; + Array.Copy(data, 6, debugData, 0, 8); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[8]; + Array.Copy(data, 6, sendData, 0, 8); + SendDataChanged(this); + + } + data = new byte[2100]; + readBuffer = new byte[256]; + DateTime dateTimeSend = DateTime.Now; + byte receivedUnitIdentifier = 0xFF; + + + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + { + while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + System.Threading.Thread.Sleep(1); + data = new byte[2100]; + Array.Copy(readBuffer, 0, data, 6, readBuffer.Length); + receivedUnitIdentifier = data[6]; + } + if (receivedUnitIdentifier != this.unitIdentifier) + data = new byte[2100]; + else + countRetries = 0; + } + else if (tcpClient.Client.Connected | udpFlag) + { + if (udpFlag) + { + UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), port); + udpClient.Send(data, data.Length-2, endPoint); + portOut = ((IPEndPoint)udpClient.Client.LocalEndPoint).Port; + udpClient.Client.ReceiveTimeout = 5000; + endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), portOut); + data = udpClient.Receive(ref endPoint); + } + else + { + stream.Write(data, 0, data.Length-2); + if (debug) + { + byte [] debugData = new byte[data.Length-2]; + Array.Copy(data, 0, debugData, 0, data.Length-2); + if (debug) StoreLogData.Instance.Store("Send ModbusTCP-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[data.Length-2]; + Array.Copy(data, 0, sendData, 0, data.Length-2); + SendDataChanged(this); + } + data = new Byte[2100]; + int NumberOfBytes = stream.Read(data, 0, data.Length); + if (ReceiveDataChanged != null) + { + receiveData = new byte[NumberOfBytes]; + Array.Copy(data, 0, receiveData, 0, NumberOfBytes); + if (debug) StoreLogData.Instance.Store("Receive ModbusTCP-Data: " + BitConverter.ToString(receiveData), System.DateTime.Now); + ReceiveDataChanged(this); + } + } + } + if (data[7] == 0x82 & data[8] == 0x01) + { + if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (data[7] == 0x82 & data[8] == 0x02) + { + if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + } + if (data[7] == 0x82 & data[8] == 0x03) + { + if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); + } + if (data[7] == 0x82 & data[8] == 0x04) + { + if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); + } + if (serialport != null) + { + crc = BitConverter.GetBytes(calculateCRC(data, (ushort)(data[8]+3), 6)); + if ((crc[0] != data[data[8] + 9] | crc[1] != data[data[8] + 10]) & dataReceived) + { + if (debug) StoreLogData.Instance.Store("CRCCheckFailedException Throwed", System.DateTime.Now); + if (NumberOfRetries <= countRetries) + { + countRetries = 0; + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); + } + else + { + countRetries++; + return ReadDiscreteInputs(startingAddress, quantity); + } + } + else if (!dataReceived) + { + if (debug) StoreLogData.Instance.Store("TimeoutException Throwed", System.DateTime.Now); + if (NumberOfRetries <= countRetries) + { + countRetries = 0; + throw new TimeoutException("No Response from Modbus Slave"); + } + else + { + countRetries++; + return ReadDiscreteInputs(startingAddress, quantity); + } + } + } + response = new bool[quantity]; + for (int i = 0; i < quantity; i++) + { + int intData = data[9+i/8]; + int mask = Convert.ToInt32(Math.Pow(2, (i%8))); + response[i] = Convert.ToBoolean((intData & mask)/mask); + } + return (response); + } + + + /// <summary> + /// Read Coils from Server device (FC1). + /// </summary> + /// <param name="startingAddress">First coil to read</param> + /// <param name="quantity">Numer of coils to read</param> + /// <returns>Boolean Array which contains the coils</returns> + public bool[] ReadCoils(int startingAddress, int quantity) + { + if (debug) StoreLogData.Instance.Store("FC1 (Read Coils from Master device), StartingAddress: "+ startingAddress+", Quantity: " +quantity, System.DateTime.Now); + transactionIdentifierInternal++; + if (serialport != null) + if (!serialport.IsOpen) + { + if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + } + if (tcpClient == null & !udpFlag & serialport == null) + { + if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); + } + if (startingAddress > 65535 | quantity >2000) + { + if (debug) StoreLogData.Instance.Store("ArgumentException Throwed", System.DateTime.Now); + throw new ArgumentException("Starting address must be 0 - 65535; quantity must be 0 - 2000"); + } + bool[] response; + this.transactionIdentifier = BitConverter.GetBytes((uint)transactionIdentifierInternal); + this.protocolIdentifier = BitConverter.GetBytes((int) 0x0000); + this.length = BitConverter.GetBytes((int)0x0006); + this.functionCode = 0x01; + this.startingAddress = BitConverter.GetBytes(startingAddress); + this.quantity = BitConverter.GetBytes(quantity); + Byte[] data = new byte[]{ + this.transactionIdentifier[1], + this.transactionIdentifier[0], + this.protocolIdentifier[1], + this.protocolIdentifier[0], + this.length[1], + this.length[0], + this.unitIdentifier, + this.functionCode, + this.startingAddress[1], + this.startingAddress[0], + this.quantity[1], + this.quantity[0], + this.crc[0], + this.crc[1] + }; + + crc = BitConverter.GetBytes(calculateCRC(data, 6, 6)); + data[12] = crc[0]; + data[13] = crc[1]; + if (serialport != null) + { + dataReceived = false; + if (quantity % 8 == 0) + bytesToRead = 5 + quantity/8; + else + bytesToRead = 6 + quantity/8; + // serialport.ReceivedBytesThreshold = bytesToRead; + serialport.Write(data, 6, 8); + if (debug) + { + byte [] debugData = new byte[8]; + Array.Copy(data, 6, debugData, 0, 8); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[8]; + Array.Copy(data, 6, sendData, 0, 8); + SendDataChanged(this); + + } + data = new byte[2100]; + readBuffer = new byte[256]; + DateTime dateTimeSend = DateTime.Now; + byte receivedUnitIdentifier = 0xFF; + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + { + while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + System.Threading.Thread.Sleep(1); + data = new byte[2100]; + + Array.Copy(readBuffer, 0, data, 6, readBuffer.Length); + receivedUnitIdentifier = data[6]; + } + if (receivedUnitIdentifier != this.unitIdentifier) + data = new byte[2100]; + else + countRetries = 0; + } + else if (tcpClient.Client.Connected | udpFlag) + { + if (udpFlag) + { + UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), port); + udpClient.Send(data, data.Length-2, endPoint); + portOut = ((IPEndPoint)udpClient.Client.LocalEndPoint).Port; + udpClient.Client.ReceiveTimeout = 5000; + endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), portOut); + data = udpClient.Receive(ref endPoint); + } + else + { + stream.Write(data, 0, data.Length-2); + if (debug) + { + byte [] debugData = new byte[data.Length-2]; + Array.Copy(data, 0, debugData, 0, data.Length-2); + if (debug) StoreLogData.Instance.Store("Send MocbusTCP-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[data.Length-2]; + Array.Copy(data, 0, sendData, 0, data.Length-2); + SendDataChanged(this); + + } + data = new Byte[2100]; + int NumberOfBytes = stream.Read(data, 0, data.Length); + if (ReceiveDataChanged != null) + { + receiveData = new byte[NumberOfBytes]; + Array.Copy(data, 0, receiveData, 0, NumberOfBytes); + if (debug) StoreLogData.Instance.Store("Receive ModbusTCP-Data: " + BitConverter.ToString(receiveData), System.DateTime.Now); + ReceiveDataChanged(this); + } + } + } + if (data[7] == 0x81 & data[8] == 0x01) + { + if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (data[7] == 0x81 & data[8] == 0x02) + { + if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + } + if (data[7] == 0x81 & data[8] == 0x03) + { + if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); + } + if (data[7] == 0x81 & data[8] == 0x04) + { + if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); + } + if (serialport != null) + { + crc = BitConverter.GetBytes(calculateCRC(data, (ushort)(data[8]+3), 6)); + if ((crc[0] != data[data[8]+9] | crc[1] != data[data[8]+10]) & dataReceived) + { + if (debug) StoreLogData.Instance.Store("CRCCheckFailedException Throwed", System.DateTime.Now); + if (NumberOfRetries <= countRetries) + { + countRetries = 0; + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); + } + else + { + countRetries++; + return ReadCoils(startingAddress, quantity); + } + } + else if (!dataReceived) + { + if (debug) StoreLogData.Instance.Store("TimeoutException Throwed", System.DateTime.Now); + if (NumberOfRetries <= countRetries) + { + countRetries = 0; + throw new TimeoutException("No Response from Modbus Slave"); + } + else + { + countRetries++; + return ReadCoils(startingAddress, quantity); + } + } + } + response = new bool[quantity]; + for (int i = 0; i < quantity; i++) + { + int intData = data[9+i/8]; + int mask = Convert.ToInt32(Math.Pow(2, (i%8))); + response[i] = Convert.ToBoolean((intData & mask)/mask); + } + return (response); + } + + + /// <summary> + /// Read Holding Registers from Master device (FC3). + /// </summary> + /// <param name="startingAddress">First holding register to be read</param> + /// <param name="quantity">Number of holding registers to be read</param> + /// <returns>Int Array which contains the holding registers</returns> + public int[] ReadHoldingRegisters(int startingAddress, int quantity) + { + if (debug) StoreLogData.Instance.Store("FC3 (Read Holding Registers from Master device), StartingAddress: "+ startingAddress+", Quantity: " +quantity, System.DateTime.Now); + transactionIdentifierInternal++; + if (serialport != null) + if (!serialport.IsOpen) + { + if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + } + if (tcpClient == null & !udpFlag & serialport == null) + { + if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); + } + if (startingAddress > 65535 | quantity >125) + { + if (debug) StoreLogData.Instance.Store("ArgumentException Throwed", System.DateTime.Now); + throw new ArgumentException("Starting address must be 0 - 65535; quantity must be 0 - 125"); + } + int[] response; + this.transactionIdentifier = BitConverter.GetBytes((uint)transactionIdentifierInternal); + this.protocolIdentifier = BitConverter.GetBytes((int) 0x0000); + this.length = BitConverter.GetBytes((int)0x0006); + this.functionCode = 0x03; + this.startingAddress = BitConverter.GetBytes(startingAddress); + this.quantity = BitConverter.GetBytes(quantity); + Byte[] data = new byte[]{ this.transactionIdentifier[1], + this.transactionIdentifier[0], + this.protocolIdentifier[1], + this.protocolIdentifier[0], + this.length[1], + this.length[0], + this.unitIdentifier, + this.functionCode, + this.startingAddress[1], + this.startingAddress[0], + this.quantity[1], + this.quantity[0], + this.crc[0], + this.crc[1] + }; + crc = BitConverter.GetBytes(calculateCRC(data, 6, 6)); + data[12] = crc[0]; + data[13] = crc[1]; + if (serialport != null) + { + dataReceived = false; + bytesToRead = 5 + 2 * quantity; +// serialport.ReceivedBytesThreshold = bytesToRead; + serialport.Write(data, 6, 8); + if (debug) + { + byte [] debugData = new byte[8]; + Array.Copy(data, 6, debugData, 0, 8); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[8]; + Array.Copy(data, 6, sendData, 0, 8); + SendDataChanged(this); + + } + data = new byte[2100]; + readBuffer = new byte[256]; + + DateTime dateTimeSend = DateTime.Now; + byte receivedUnitIdentifier = 0xFF; + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + { + while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + System.Threading.Thread.Sleep(1); + data = new byte[2100]; + Array.Copy(readBuffer, 0, data, 6, readBuffer.Length); + + receivedUnitIdentifier = data[6]; + } + if (receivedUnitIdentifier != this.unitIdentifier) + data = new byte[2100]; + else + countRetries = 0; + } + else if (tcpClient.Client.Connected | udpFlag) + { + if (udpFlag) + { + UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), port); + udpClient.Send(data, data.Length-2, endPoint); + portOut = ((IPEndPoint)udpClient.Client.LocalEndPoint).Port; + udpClient.Client.ReceiveTimeout = 5000; + endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), portOut); + data = udpClient.Receive(ref endPoint); + } + else + { + stream.Write(data, 0, data.Length-2); + if (debug) + { + byte [] debugData = new byte[data.Length-2]; + Array.Copy(data, 0, debugData, 0, data.Length-2); + if (debug) StoreLogData.Instance.Store("Send ModbusTCP-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[data.Length-2]; + Array.Copy(data, 0, sendData, 0, data.Length-2); + SendDataChanged(this); + + } + data = new Byte[256]; + int NumberOfBytes = stream.Read(data, 0, data.Length); + if (ReceiveDataChanged != null) + { + receiveData = new byte[NumberOfBytes]; + Array.Copy(data, 0, receiveData, 0, NumberOfBytes); + if (debug) StoreLogData.Instance.Store("Receive ModbusTCP-Data: " + BitConverter.ToString(receiveData), System.DateTime.Now); + ReceiveDataChanged(this); + } + } + } + if (data[7] == 0x83 & data[8] == 0x01) + { + if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (data[7] == 0x83 & data[8] == 0x02) + { + if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + } + if (data[7] == 0x83 & data[8] == 0x03) + { + if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); + } + if (data[7] == 0x83 & data[8] == 0x04) + { + if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); + } + if (serialport != null) + { + crc = BitConverter.GetBytes(calculateCRC(data, (ushort)(data[8]+3), 6)); + if ((crc[0] != data[data[8]+9] | crc[1] != data[data[8]+10])& dataReceived) + { + if (debug) StoreLogData.Instance.Store("CRCCheckFailedException Throwed", System.DateTime.Now); + if (NumberOfRetries <= countRetries) + { + countRetries = 0; + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); + } + else + { + countRetries++; + return ReadHoldingRegisters(startingAddress, quantity); + } + } + else if (!dataReceived) + { + if (debug) StoreLogData.Instance.Store("TimeoutException Throwed", System.DateTime.Now); + if (NumberOfRetries <= countRetries) + { + countRetries = 0; + throw new TimeoutException("No Response from Modbus Slave"); + } + else + { + countRetries++; + return ReadHoldingRegisters(startingAddress, quantity); + } + + + } + } + response = new int[quantity]; + for (int i = 0; i < quantity; i++) + { + byte lowByte; + byte highByte; + highByte = data[9+i*2]; + lowByte = data[9+i*2+1]; + + data[9+i*2] = lowByte; + data[9+i*2+1] = highByte; + + response[i] = BitConverter.ToInt16(data,(9+i*2)); + } + return (response); + } + + + + /// <summary> + /// Read Input Registers from Master device (FC4). + /// </summary> + /// <param name="startingAddress">First input register to be read</param> + /// <param name="quantity">Number of input registers to be read</param> + /// <returns>Int Array which contains the input registers</returns> + public int[] ReadInputRegisters(int startingAddress, int quantity) + { + + if (debug) StoreLogData.Instance.Store("FC4 (Read Input Registers from Master device), StartingAddress: "+ startingAddress+", Quantity: " +quantity, System.DateTime.Now); + transactionIdentifierInternal++; + if (serialport != null) + if (!serialport.IsOpen) + { + if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + } + if (tcpClient == null & !udpFlag & serialport == null) + { + if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); + } + if (startingAddress > 65535 | quantity >125) + { + if (debug) StoreLogData.Instance.Store("ArgumentException Throwed", System.DateTime.Now); + throw new ArgumentException("Starting address must be 0 - 65535; quantity must be 0 - 125"); + } + int[] response; + this.transactionIdentifier = BitConverter.GetBytes((uint)transactionIdentifierInternal); + this.protocolIdentifier = BitConverter.GetBytes((int) 0x0000); + this.length = BitConverter.GetBytes((int)0x0006); + this.functionCode = 0x04; + this.startingAddress = BitConverter.GetBytes(startingAddress); + this.quantity = BitConverter.GetBytes(quantity); + Byte[] data = new byte[]{ this.transactionIdentifier[1], + this.transactionIdentifier[0], + this.protocolIdentifier[1], + this.protocolIdentifier[0], + this.length[1], + this.length[0], + this.unitIdentifier, + this.functionCode, + this.startingAddress[1], + this.startingAddress[0], + this.quantity[1], + this.quantity[0], + this.crc[0], + this.crc[1] + }; + crc = BitConverter.GetBytes(calculateCRC(data, 6, 6)); + data[12] = crc[0]; + data[13] = crc[1]; + if (serialport != null) + { + dataReceived = false; + bytesToRead = 5 + 2 * quantity; + + + // serialport.ReceivedBytesThreshold = bytesToRead; + serialport.Write(data, 6, 8); + if (debug) + { + byte [] debugData = new byte[8]; + Array.Copy(data, 6, debugData, 0, 8); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[8]; + Array.Copy(data, 6, sendData, 0, 8); + SendDataChanged(this); + + } + data = new byte[2100]; + readBuffer = new byte[256]; + DateTime dateTimeSend = DateTime.Now; + byte receivedUnitIdentifier = 0xFF; + + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + { + while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + System.Threading.Thread.Sleep(1); + data = new byte[2100]; + Array.Copy(readBuffer, 0, data, 6, readBuffer.Length); + receivedUnitIdentifier = data[6]; + } + + if (receivedUnitIdentifier != this.unitIdentifier) + data = new byte[2100]; + else + countRetries = 0; + } + else if (tcpClient.Client.Connected | udpFlag) + { + if (udpFlag) + { + UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), port); + udpClient.Send(data, data.Length-2, endPoint); + portOut = ((IPEndPoint)udpClient.Client.LocalEndPoint).Port; + udpClient.Client.ReceiveTimeout = 5000; + endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), portOut); + data = udpClient.Receive(ref endPoint); + } + else + { + stream.Write(data, 0, data.Length-2); + if (debug) + { + byte [] debugData = new byte[data.Length-2]; + Array.Copy(data, 0, debugData, 0, data.Length-2); + if (debug) StoreLogData.Instance.Store("Send ModbusTCP-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[data.Length-2]; + Array.Copy(data, 0, sendData, 0, data.Length-2); + SendDataChanged(this); + } + data = new Byte[2100]; + int NumberOfBytes = stream.Read(data, 0, data.Length); + if (ReceiveDataChanged != null) + { + receiveData = new byte[NumberOfBytes]; + Array.Copy(data, 0, receiveData, 0, NumberOfBytes); + if (debug) StoreLogData.Instance.Store("Receive ModbusTCP-Data: " + BitConverter.ToString(receiveData), System.DateTime.Now); + ReceiveDataChanged(this); + } + + } + } + if (data[7] == 0x84 & data[8] == 0x01) + { + if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (data[7] == 0x84 & data[8] == 0x02) + { + if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + } + if (data[7] == 0x84 & data[8] == 0x03) + { + if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); + } + if (data[7] == 0x84 & data[8] == 0x04) + { + if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); + } + if (serialport != null) + { + crc = BitConverter.GetBytes(calculateCRC(data, (ushort)(data[8]+3), 6)); + if ((crc[0] != data[data[8]+9] | crc[1] != data[data[8]+10]) & dataReceived) + { + if (debug) StoreLogData.Instance.Store("CRCCheckFailedException Throwed", System.DateTime.Now); + if (NumberOfRetries <= countRetries) + { + countRetries = 0; + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); + } + else + { + countRetries++; + return ReadInputRegisters(startingAddress, quantity); + } + } + else if (!dataReceived) + { + if (debug) StoreLogData.Instance.Store("TimeoutException Throwed", System.DateTime.Now); + if (NumberOfRetries <= countRetries) + { + countRetries = 0; + throw new TimeoutException("No Response from Modbus Slave"); + + } + else + { + countRetries++; + return ReadInputRegisters(startingAddress, quantity); + } + + } + } + response = new int[quantity]; + for (int i = 0; i < quantity; i++) + { + byte lowByte; + byte highByte; + highByte = data[9+i*2]; + lowByte = data[9+i*2+1]; + + data[9+i*2] = lowByte; + data[9+i*2+1] = highByte; + + response[i] = BitConverter.ToInt16(data,(9+i*2)); + } + return (response); + } + + + /// <summary> + /// Write single Coil to Master device (FC5). + /// </summary> + /// <param name="startingAddress">Coil to be written</param> + /// <param name="value">Coil Value to be written</param> + public void WriteSingleCoil(int startingAddress, bool value) + { + + if (debug) StoreLogData.Instance.Store("FC5 (Write single coil to Master device), StartingAddress: "+ startingAddress+", Value: " + value, System.DateTime.Now); + transactionIdentifierInternal++; + if (serialport != null) + if (!serialport.IsOpen) + { + if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + } + if (tcpClient == null & !udpFlag & serialport == null) + { + if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); + } + byte[] coilValue = new byte[2]; + this.transactionIdentifier = BitConverter.GetBytes((uint)transactionIdentifierInternal); + this.protocolIdentifier = BitConverter.GetBytes((int)0x0000); + this.length = BitConverter.GetBytes((int)0x0006); + this.functionCode = 0x05; + this.startingAddress = BitConverter.GetBytes(startingAddress); + if (value == true) + { + coilValue = BitConverter.GetBytes((int)0xFF00); + } + else + { + coilValue = BitConverter.GetBytes((int)0x0000); + } + Byte[] data = new byte[]{ this.transactionIdentifier[1], + this.transactionIdentifier[0], + this.protocolIdentifier[1], + this.protocolIdentifier[0], + this.length[1], + this.length[0], + this.unitIdentifier, + this.functionCode, + this.startingAddress[1], + this.startingAddress[0], + coilValue[1], + coilValue[0], + this.crc[0], + this.crc[1] + }; + crc = BitConverter.GetBytes(calculateCRC(data, 6, 6)); + data[12] = crc[0]; + data[13] = crc[1]; + if (serialport != null) + { + dataReceived = false; + bytesToRead = 8; + // serialport.ReceivedBytesThreshold = bytesToRead; + serialport.Write(data, 6, 8); + if (debug) + { + byte [] debugData = new byte[8]; + Array.Copy(data, 6, debugData, 0, 8); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[8]; + Array.Copy(data, 6, sendData, 0, 8); + SendDataChanged(this); + + } + data = new byte[2100]; + readBuffer = new byte[256]; + DateTime dateTimeSend = DateTime.Now; + byte receivedUnitIdentifier = 0xFF; + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + { + while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + System.Threading.Thread.Sleep(1); + data = new byte[2100]; + Array.Copy(readBuffer, 0, data, 6, readBuffer.Length); + receivedUnitIdentifier = data[6]; + } + + if (receivedUnitIdentifier != this.unitIdentifier) + data = new byte[2100]; + else + countRetries = 0; + + } + else if (tcpClient.Client.Connected | udpFlag) + { + if (udpFlag) + { + UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), port); + udpClient.Send(data, data.Length - 2, endPoint); + portOut = ((IPEndPoint)udpClient.Client.LocalEndPoint).Port; + udpClient.Client.ReceiveTimeout = 5000; + endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), portOut); + data = udpClient.Receive(ref endPoint); + } + else + { + stream.Write(data, 0, data.Length - 2); + if (debug) + { + byte [] debugData = new byte[data.Length-2]; + Array.Copy(data, 0, debugData, 0, data.Length-2); + if (debug) StoreLogData.Instance.Store("Send ModbusTCP-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[data.Length-2]; + Array.Copy(data, 0, sendData, 0, data.Length-2); + SendDataChanged(this); + + } + data = new Byte[2100]; + int NumberOfBytes = stream.Read(data, 0, data.Length); + if (ReceiveDataChanged != null) + { + receiveData = new byte[NumberOfBytes]; + Array.Copy(data, 0, receiveData, 0, NumberOfBytes); + if (debug) StoreLogData.Instance.Store("Receive ModbusTCP-Data: " + BitConverter.ToString(receiveData), System.DateTime.Now); + ReceiveDataChanged(this); + } + } + } + if (data[7] == 0x85 & data[8] == 0x01) + { + if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (data[7] == 0x85 & data[8] == 0x02) + { + if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + } + if (data[7] == 0x85 & data[8] == 0x03) + { + if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); + } + if (data[7] == 0x85 & data[8] == 0x04) + { + if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); + } + if (serialport != null) + { + crc = BitConverter.GetBytes(calculateCRC(data, 6, 6)); + if ((crc[0] != data[12] | crc[1] != data[13]) & dataReceived) + { + if (debug) StoreLogData.Instance.Store("CRCCheckFailedException Throwed", System.DateTime.Now); + if (NumberOfRetries <= countRetries) + { + countRetries = 0; + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); + } + else + { + countRetries++; + WriteSingleCoil(startingAddress, value); + } + } + else if (!dataReceived) + { + if (debug) StoreLogData.Instance.Store("TimeoutException Throwed", System.DateTime.Now); + if (NumberOfRetries <= countRetries) + { + countRetries = 0; + throw new TimeoutException("No Response from Modbus Slave"); + + } + else + { + countRetries++; + WriteSingleCoil(startingAddress, value); + } + } + } + } + + + /// <summary> + /// Write single Register to Master device (FC6). + /// </summary> + /// <param name="startingAddress">Register to be written</param> + /// <param name="value">Register Value to be written</param> + public void WriteSingleRegister(int startingAddress, int value) + { + if (debug) StoreLogData.Instance.Store("FC6 (Write single register to Master device), StartingAddress: "+ startingAddress+", Value: " + value, System.DateTime.Now); + transactionIdentifierInternal++; + if (serialport != null) + if (!serialport.IsOpen) + { + if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + } + if (tcpClient == null & !udpFlag & serialport == null) + { + if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); + } + byte[] registerValue = new byte[2]; + this.transactionIdentifier = BitConverter.GetBytes((uint)transactionIdentifierInternal); + this.protocolIdentifier = BitConverter.GetBytes((int)0x0000); + this.length = BitConverter.GetBytes((int)0x0006); + this.functionCode = 0x06; + this.startingAddress = BitConverter.GetBytes(startingAddress); + registerValue = BitConverter.GetBytes((int)value); + + Byte[] data = new byte[]{ this.transactionIdentifier[1], + this.transactionIdentifier[0], + this.protocolIdentifier[1], + this.protocolIdentifier[0], + this.length[1], + this.length[0], + this.unitIdentifier, + this.functionCode, + this.startingAddress[1], + this.startingAddress[0], + registerValue[1], + registerValue[0], + this.crc[0], + this.crc[1] + }; + crc = BitConverter.GetBytes(calculateCRC(data, 6, 6)); + data[12] = crc[0]; + data[13] = crc[1]; + if (serialport != null) + { + dataReceived = false; + bytesToRead = 8; +// serialport.ReceivedBytesThreshold = bytesToRead; + serialport.Write(data, 6, 8); + if (debug) + { + byte [] debugData = new byte[8]; + Array.Copy(data, 6, debugData, 0, 8); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[8]; + Array.Copy(data, 6, sendData, 0, 8); + SendDataChanged(this); + + } + data = new byte[2100]; + readBuffer = new byte[256]; + DateTime dateTimeSend = DateTime.Now; + byte receivedUnitIdentifier = 0xFF; + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + { + while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + System.Threading.Thread.Sleep(1); + data = new byte[2100]; + Array.Copy(readBuffer, 0, data, 6, readBuffer.Length); + receivedUnitIdentifier = data[6]; + } + if (receivedUnitIdentifier != this.unitIdentifier) + data = new byte[2100]; + else + countRetries = 0; + } + else if (tcpClient.Client.Connected | udpFlag) + { + if (udpFlag) + { + UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), port); + udpClient.Send(data, data.Length - 2, endPoint); + portOut = ((IPEndPoint)udpClient.Client.LocalEndPoint).Port; + udpClient.Client.ReceiveTimeout = 5000; + endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), portOut); + data = udpClient.Receive(ref endPoint); + } + else + { + stream.Write(data, 0, data.Length - 2); + if (debug) + { + byte [] debugData = new byte[data.Length-2]; + Array.Copy(data, 0, debugData, 0, data.Length-2); + if (debug) StoreLogData.Instance.Store("Send ModbusTCP-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[data.Length-2]; + Array.Copy(data, 0, sendData, 0, data.Length-2); + SendDataChanged(this); + + } + data = new Byte[2100]; + int NumberOfBytes = stream.Read(data, 0, data.Length); + if (ReceiveDataChanged != null) + { + receiveData = new byte[NumberOfBytes]; + Array.Copy(data, 0, receiveData, 0, NumberOfBytes); + if (debug) StoreLogData.Instance.Store("Receive ModbusTCP-Data: " + BitConverter.ToString(receiveData), System.DateTime.Now); + ReceiveDataChanged(this); + } + } + } + if (data[7] == 0x86 & data[8] == 0x01) + { + if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (data[7] == 0x86 & data[8] == 0x02) + { + if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + } + if (data[7] == 0x86 & data[8] == 0x03) + { + if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); + } + if (data[7] == 0x86 & data[8] == 0x04) + { + if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); + } + if (serialport != null) + { + crc = BitConverter.GetBytes(calculateCRC(data, 6, 6)); + if ((crc[0] != data[12] | crc[1] != data[13]) & dataReceived) + { + if (debug) StoreLogData.Instance.Store("CRCCheckFailedException Throwed", System.DateTime.Now); + if (NumberOfRetries <= countRetries) + { + countRetries = 0; + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); + } + else + { + countRetries++; + WriteSingleRegister(startingAddress, value); + } + } + else if (!dataReceived) + { + if (debug) StoreLogData.Instance.Store("TimeoutException Throwed", System.DateTime.Now); + if (NumberOfRetries <= countRetries) + { + countRetries = 0; + throw new TimeoutException("No Response from Modbus Slave"); + + } + else + { + countRetries++; + WriteSingleRegister(startingAddress, value); + } + } + } + } + + /// <summary> + /// Write multiple coils to Master device (FC15). + /// </summary> + /// <param name="startingAddress">First coil to be written</param> + /// <param name="values">Coil Values to be written</param> + public void WriteMultipleCoils(int startingAddress, bool[] values) + { + string debugString = ""; + for (int i = 0; i < values.Length;i++) + debugString = debugString + values[i] + " "; + if (debug) StoreLogData.Instance.Store("FC15 (Write multiple coils to Master device), StartingAddress: "+ startingAddress+", Values: " + debugString, System.DateTime.Now); + transactionIdentifierInternal++; + byte byteCount = (byte)((values.Length % 8 != 0 ? values.Length / 8 + 1: (values.Length / 8))); + byte[] quantityOfOutputs = BitConverter.GetBytes((int)values.Length); + byte singleCoilValue = 0; + if (serialport != null) + if (!serialport.IsOpen) + { + if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + } + if (tcpClient == null & !udpFlag & serialport == null) + { + if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); + } + this.transactionIdentifier = BitConverter.GetBytes((uint)transactionIdentifierInternal); + this.protocolIdentifier = BitConverter.GetBytes((int)0x0000); + this.length = BitConverter.GetBytes((int)(7+(byteCount))); + this.functionCode = 0x0F; + this.startingAddress = BitConverter.GetBytes(startingAddress); + + + + Byte[] data = new byte[14 +2 + (values.Length % 8 != 0 ? values.Length/8 : (values.Length / 8)-1)]; + data[0] = this.transactionIdentifier[1]; + data[1] = this.transactionIdentifier[0]; + data[2] = this.protocolIdentifier[1]; + data[3] = this.protocolIdentifier[0]; + data[4] = this.length[1]; + data[5] = this.length[0]; + data[6] = this.unitIdentifier; + data[7] = this.functionCode; + data[8] = this.startingAddress[1]; + data[9] = this.startingAddress[0]; + data[10] = quantityOfOutputs[1]; + data[11] = quantityOfOutputs[0]; + data[12] = byteCount; + for (int i = 0; i < values.Length; i++) + { + if ((i % 8) == 0) + singleCoilValue = 0; + byte CoilValue; + if (values[i] == true) + CoilValue = 1; + else + CoilValue = 0; + + + singleCoilValue = (byte)((int)CoilValue<<(i%8) | (int)singleCoilValue); + + data[13 + (i / 8)] = singleCoilValue; + } + crc = BitConverter.GetBytes(calculateCRC(data, (ushort)(data.Length - 8), 6)); + data[data.Length - 2] = crc[0]; + data[data.Length - 1] = crc[1]; + if (serialport != null) + { + dataReceived = false; + bytesToRead = 8; + // serialport.ReceivedBytesThreshold = bytesToRead; + serialport.Write(data, 6, data.Length - 6); + if (debug) + { + byte [] debugData = new byte[data.Length - 6]; + Array.Copy(data, 6, debugData, 0, data.Length - 6); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[data.Length - 6]; + Array.Copy(data, 6, sendData, 0, data.Length - 6); + SendDataChanged(this); + + } + data = new byte[2100]; + readBuffer = new byte[256]; + DateTime dateTimeSend = DateTime.Now; + byte receivedUnitIdentifier = 0xFF; + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + { + while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + System.Threading.Thread.Sleep(1); + data = new byte[2100]; + Array.Copy(readBuffer, 0, data, 6, readBuffer.Length); + receivedUnitIdentifier = data[6]; + } + if (receivedUnitIdentifier != this.unitIdentifier) + data = new byte[2100]; + else + countRetries = 0; + } + else if (tcpClient.Client.Connected | udpFlag) + { + if (udpFlag) + { + UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), port); + udpClient.Send(data, data.Length-2, endPoint); + portOut = ((IPEndPoint)udpClient.Client.LocalEndPoint).Port; + udpClient.Client.ReceiveTimeout = 5000; + endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), portOut); + data = udpClient.Receive(ref endPoint); + } + else + { + stream.Write(data, 0, data.Length-2); + if (debug) + { + byte [] debugData = new byte[data.Length-2]; + Array.Copy(data, 0, debugData, 0, data.Length-2); + if (debug) StoreLogData.Instance.Store("Send ModbusTCP-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[data.Length-2]; + Array.Copy(data, 0, sendData, 0, data.Length-2); + SendDataChanged(this); + + } + data = new Byte[2100]; + int NumberOfBytes = stream.Read(data, 0, data.Length); + if (ReceiveDataChanged != null) + { + receiveData = new byte[NumberOfBytes]; + Array.Copy(data, 0, receiveData, 0, NumberOfBytes); + if (debug) StoreLogData.Instance.Store("Receive ModbusTCP-Data: " + BitConverter.ToString(receiveData), System.DateTime.Now); + ReceiveDataChanged(this); + } + } + } + if (data[7] == 0x8F & data[8] == 0x01) + { + if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (data[7] == 0x8F & data[8] == 0x02) + { + if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + } + if (data[7] == 0x8F & data[8] == 0x03) + { + if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); + } + if (data[7] == 0x8F & data[8] == 0x04) + { + if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); + } + if (serialport != null) + { + crc = BitConverter.GetBytes(calculateCRC(data, 6, 6)); + if ((crc[0] != data[12] | crc[1] != data[13]) & dataReceived) + { + if (debug) StoreLogData.Instance.Store("CRCCheckFailedException Throwed", System.DateTime.Now); + if (NumberOfRetries <= countRetries) + { + countRetries = 0; + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); + } + else + { + countRetries++; + WriteMultipleCoils(startingAddress, values); + } + } + else if (!dataReceived) + { + if (debug) StoreLogData.Instance.Store("TimeoutException Throwed", System.DateTime.Now); + if (NumberOfRetries <= countRetries) + { + countRetries = 0; + throw new TimeoutException("No Response from Modbus Slave"); + + } + else + { + countRetries++; + WriteMultipleCoils(startingAddress, values); + } + } + } + } + + /// <summary> + /// Write multiple registers to Master device (FC16). + /// </summary> + /// <param name="startingAddress">First register to be written</param> + /// <param name="values">register Values to be written</param> + public void WriteMultipleRegisters(int startingAddress, int[] values) + { + string debugString = ""; + for (int i = 0; i < values.Length;i++) + debugString = debugString + values[i] + " "; + if (debug) StoreLogData.Instance.Store("FC16 (Write multiple Registers to Server device), StartingAddress: "+ startingAddress+", Values: " + debugString, System.DateTime.Now); + transactionIdentifierInternal++; + byte byteCount = (byte)(values.Length * 2); + byte[] quantityOfOutputs = BitConverter.GetBytes((int)values.Length); + if (serialport != null) + if (!serialport.IsOpen) + { + if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + } + if (tcpClient == null & !udpFlag & serialport == null) + { + if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); + } + this.transactionIdentifier = BitConverter.GetBytes((uint)transactionIdentifierInternal); + this.protocolIdentifier = BitConverter.GetBytes((int)0x0000); + this.length = BitConverter.GetBytes((int)(7+values.Length*2)); + this.functionCode = 0x10; + this.startingAddress = BitConverter.GetBytes(startingAddress); + + Byte[] data = new byte[13+2 + values.Length*2]; + data[0] = this.transactionIdentifier[1]; + data[1] = this.transactionIdentifier[0]; + data[2] = this.protocolIdentifier[1]; + data[3] = this.protocolIdentifier[0]; + data[4] = this.length[1]; + data[5] = this.length[0]; + data[6] = this.unitIdentifier; + data[7] = this.functionCode; + data[8] = this.startingAddress[1]; + data[9] = this.startingAddress[0]; + data[10] = quantityOfOutputs[1]; + data[11] = quantityOfOutputs[0]; + data[12] = byteCount; + for (int i = 0; i < values.Length; i++) + { + byte[] singleRegisterValue = BitConverter.GetBytes((int)values[i]); + data[13 + i*2] = singleRegisterValue[1]; + data[14 + i*2] = singleRegisterValue[0]; + } + crc = BitConverter.GetBytes(calculateCRC(data, (ushort)(data.Length - 8), 6)); + data[data.Length - 2] = crc[0]; + data[data.Length - 1] = crc[1]; + if (serialport != null) + { + dataReceived = false; + bytesToRead = 8; +// serialport.ReceivedBytesThreshold = bytesToRead; + serialport.Write(data, 6, data.Length - 6); + + if (debug) + { + byte [] debugData = new byte[data.Length - 6]; + Array.Copy(data, 6, debugData, 0, data.Length - 6); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[data.Length - 6]; + Array.Copy(data, 6, sendData, 0, data.Length - 6); + SendDataChanged(this); + + } + data = new byte[2100]; + readBuffer = new byte[256]; + DateTime dateTimeSend = DateTime.Now; + byte receivedUnitIdentifier = 0xFF; + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + { + while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + System.Threading.Thread.Sleep(1); + data = new byte[2100]; + Array.Copy(readBuffer, 0, data, 6, readBuffer.Length); + receivedUnitIdentifier = data[6]; + } + if (receivedUnitIdentifier != this.unitIdentifier) + data = new byte[2100]; + else + countRetries = 0; + } + else if (tcpClient.Client.Connected | udpFlag) + { + if (udpFlag) + { + UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), port); + udpClient.Send(data, data.Length-2, endPoint); + portOut = ((IPEndPoint)udpClient.Client.LocalEndPoint).Port; + udpClient.Client.ReceiveTimeout = 5000; + endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), portOut); + data = udpClient.Receive(ref endPoint); + } + else + { + stream.Write(data, 0, data.Length-2); + if (debug) + { + byte [] debugData = new byte[data.Length-2]; + Array.Copy(data, 0, debugData, 0, data.Length-2); + if (debug) StoreLogData.Instance.Store("Send ModbusTCP-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[data.Length-2]; + Array.Copy(data, 0, sendData, 0, data.Length-2); + SendDataChanged(this); + } + data = new Byte[2100]; + int NumberOfBytes = stream.Read(data, 0, data.Length); + if (ReceiveDataChanged != null) + { + receiveData = new byte[NumberOfBytes]; + Array.Copy(data, 0, receiveData, 0, NumberOfBytes); + if (debug) StoreLogData.Instance.Store("Receive ModbusTCP-Data: " + BitConverter.ToString(receiveData), System.DateTime.Now); + ReceiveDataChanged(this); + } + } + } + if (data[7] == 0x90 & data[8] == 0x01) + { + if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (data[7] == 0x90 & data[8] == 0x02) + { + if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + } + if (data[7] == 0x90 & data[8] == 0x03) + { + if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); + } + if (data[7] == 0x90 & data[8] == 0x04) + { + if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); + } + if (serialport != null) + { + crc = BitConverter.GetBytes(calculateCRC(data, 6, 6)); + if ((crc[0] != data[12] | crc[1] != data[13]) &dataReceived) + { + if (debug) StoreLogData.Instance.Store("CRCCheckFailedException Throwed", System.DateTime.Now); + if (NumberOfRetries <= countRetries) + { + countRetries = 0; + throw new EasyModbusSecure.Exceptions.CRCCheckFailedException("Response CRC check failed"); + } + else + { + countRetries++; + WriteMultipleRegisters(startingAddress, values); + } + } + else if (!dataReceived) + { + if (debug) StoreLogData.Instance.Store("TimeoutException Throwed", System.DateTime.Now); + if (NumberOfRetries <= countRetries) + { + countRetries = 0; + throw new TimeoutException("No Response from Modbus Slave"); + + } + else + { + countRetries++; + WriteMultipleRegisters(startingAddress, values); + } + } + } + } + + /// <summary> + /// Read/Write Multiple Registers (FC23). + /// </summary> + /// <param name="startingAddressRead">First input register to read</param> + /// <param name="quantityRead">Number of input registers to read</param> + /// <param name="startingAddressWrite">First input register to write</param> + /// <param name="values">Values to write</param> + /// <returns>Int Array which contains the Holding registers</returns> + public int[] ReadWriteMultipleRegisters(int startingAddressRead, int quantityRead, int startingAddressWrite, int[] values) + { + + string debugString = ""; + for (int i = 0; i < values.Length;i++) + debugString = debugString + values[i] + " "; + if (debug) StoreLogData.Instance.Store("FC23 (Read and Write multiple Registers to Server device), StartingAddress Read: "+ startingAddressRead+ ", Quantity Read: "+quantityRead+", startingAddressWrite: " + startingAddressWrite +", Values: " + debugString, System.DateTime.Now); + transactionIdentifierInternal++; + byte [] startingAddressReadLocal = new byte[2]; + byte [] quantityReadLocal = new byte[2]; + byte[] startingAddressWriteLocal = new byte[2]; + byte[] quantityWriteLocal = new byte[2]; + byte writeByteCountLocal = 0; + if (serialport != null) + if (!serialport.IsOpen) + { + if (debug) StoreLogData.Instance.Store("SerialPortNotOpenedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + } + if (tcpClient == null & !udpFlag & serialport == null) + { + if (debug) StoreLogData.Instance.Store("ConnectionException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ConnectionException("connection error"); + } + if (startingAddressRead > 65535 | quantityRead > 125 | startingAddressWrite > 65535 | values.Length > 121) + { + if (debug) StoreLogData.Instance.Store("ArgumentException Throwed", System.DateTime.Now); + throw new ArgumentException("Starting address must be 0 - 65535; quantity must be 0 - 2000"); + } + int[] response; + this.transactionIdentifier = BitConverter.GetBytes((uint)transactionIdentifierInternal); + this.protocolIdentifier = BitConverter.GetBytes((int)0x0000); + this.length = BitConverter.GetBytes((int)11 + values.Length * 2); + this.functionCode = 0x17; + startingAddressReadLocal = BitConverter.GetBytes(startingAddressRead); + quantityReadLocal = BitConverter.GetBytes(quantityRead); + startingAddressWriteLocal = BitConverter.GetBytes(startingAddressWrite); + quantityWriteLocal = BitConverter.GetBytes(values.Length); + writeByteCountLocal = Convert.ToByte(values.Length * 2); + Byte[] data = new byte[17 +2+ values.Length*2]; + data[0] = this.transactionIdentifier[1]; + data[1] = this.transactionIdentifier[0]; + data[2] = this.protocolIdentifier[1]; + data[3] = this.protocolIdentifier[0]; + data[4] = this.length[1]; + data[5] = this.length[0]; + data[6] = this.unitIdentifier; + data[7] = this.functionCode; + data[8] = startingAddressReadLocal[1]; + data[9] = startingAddressReadLocal[0]; + data[10] = quantityReadLocal[1]; + data[11] = quantityReadLocal[0]; + data[12] = startingAddressWriteLocal[1]; + data[13] = startingAddressWriteLocal[0]; + data[14] = quantityWriteLocal[1]; + data[15] = quantityWriteLocal[0]; + data[16] = writeByteCountLocal; + + for (int i = 0; i < values.Length; i++) + { + byte[] singleRegisterValue = BitConverter.GetBytes((int)values[i]); + data[17 + i*2] = singleRegisterValue[1]; + data[18 + i*2] = singleRegisterValue[0]; + } + crc = BitConverter.GetBytes(calculateCRC(data, (ushort)(data.Length - 8), 6)); + data[data.Length - 2] = crc[0]; + data[data.Length - 1] = crc[1]; + if (serialport != null) + { + dataReceived = false; + bytesToRead = 5 + 2*quantityRead; + // serialport.ReceivedBytesThreshold = bytesToRead; + serialport.Write(data, 6, data.Length - 6); + if (debug) + { + byte [] debugData = new byte[data.Length - 6]; + Array.Copy(data, 6, debugData, 0, data.Length - 6); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[data.Length - 6]; + Array.Copy(data, 6, sendData, 0, data.Length - 6); + SendDataChanged(this); + } + data = new byte[2100]; + readBuffer = new byte[256]; + DateTime dateTimeSend = DateTime.Now; + byte receivedUnitIdentifier = 0xFF; + while (receivedUnitIdentifier != this.unitIdentifier & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + { + while (dataReceived == false & !((DateTime.Now.Ticks - dateTimeSend.Ticks) > TimeSpan.TicksPerMillisecond * this.connectTimeout)) + System.Threading.Thread.Sleep(1); + data = new byte[2100]; + Array.Copy(readBuffer, 0, data, 6, readBuffer.Length); + receivedUnitIdentifier = data[6]; + } + if (receivedUnitIdentifier != this.unitIdentifier) + data = new byte[2100]; + else + countRetries = 0; + } + else if (tcpClient.Client.Connected | udpFlag) + { + if (udpFlag) + { + UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), port); + udpClient.Send(data, data.Length-2, endPoint); + portOut = ((IPEndPoint)udpClient.Client.LocalEndPoint).Port; + udpClient.Client.ReceiveTimeout = 5000; + endPoint = new IPEndPoint(System.Net.IPAddress.Parse(ipAddress), portOut); + data = udpClient.Receive(ref endPoint); + } + else + { + stream.Write(data, 0, data.Length-2); + if (debug) + { + byte [] debugData = new byte[data.Length-2]; + Array.Copy(data, 0, debugData, 0, data.Length-2); + if (debug) StoreLogData.Instance.Store("Send ModbusTCP-Data: "+BitConverter.ToString(debugData) ,System.DateTime.Now); + } + if (SendDataChanged != null) + { + sendData = new byte[data.Length-2]; + Array.Copy(data, 0, sendData, 0, data.Length-2); + SendDataChanged(this); + + } + data = new Byte[2100]; + int NumberOfBytes = stream.Read(data, 0, data.Length); + if (ReceiveDataChanged != null) + { + receiveData = new byte[NumberOfBytes]; + Array.Copy(data, 0, receiveData, 0, NumberOfBytes); + if (debug) StoreLogData.Instance.Store("Receive ModbusTCP-Data: " + BitConverter.ToString(receiveData), System.DateTime.Now); + ReceiveDataChanged(this); + } + } + } + if (data[7] == 0x97 & data[8] == 0x01) + { + if (debug) StoreLogData.Instance.Store("FunctionCodeNotSupportedException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.FunctionCodeNotSupportedException("Function code not supported by master"); + } + if (data[7] == 0x97 & data[8] == 0x02) + { + if (debug) StoreLogData.Instance.Store("StartingAddressInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.StartingAddressInvalidException("Starting address invalid or starting address + quantity invalid"); + } + if (data[7] == 0x97 & data[8] == 0x03) + { + if (debug) StoreLogData.Instance.Store("QuantityInvalidException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.QuantityInvalidException("quantity invalid"); + } + if (data[7] == 0x97 & data[8] == 0x04) + { + if (debug) StoreLogData.Instance.Store("ModbusException Throwed", System.DateTime.Now); + throw new EasyModbusSecure.Exceptions.ModbusException("error reading"); + } + response = new int[quantityRead]; + for (int i = 0; i < quantityRead; i++) + { + byte lowByte; + byte highByte; + highByte = data[9 + i * 2]; + lowByte = data[9 + i * 2 + 1]; + + data[9 + i * 2] = lowByte; + data[9 + i * 2 + 1] = highByte; + + response[i] = BitConverter.ToInt16(data, (9 + i * 2)); + } + return (response); + } + + /// <summary> + /// Close connection to Master Device. + /// </summary> + public void Disconnect() + { + if (debug) StoreLogData.Instance.Store("Disconnect", System.DateTime.Now); + if (serialport != null) + { + if (serialport.IsOpen & !this.receiveActive) + serialport.Close(); + if (ConnectedChanged != null) + ConnectedChanged(this); + return; + } + if (stream != null) + stream.Close(); + if (tcpClient != null) + tcpClient.Close(); + connected = false; + if (ConnectedChanged != null) + ConnectedChanged(this); + + } + + /// <summary> + /// Destructor - Close connection to Master Device. + /// </summary> + ~ ModbusSecureClient() + { + if (debug) StoreLogData.Instance.Store("Destructor called - automatically disconnect", System.DateTime.Now); + if (serialport != null) + { + if (serialport.IsOpen) + serialport.Close(); + return; + } + if (tcpClient != null & !udpFlag) + { + if (stream !=null) + stream.Close(); + tcpClient.Close(); + } + } + + /// <summary> + /// Returns "TRUE" if Client is connected to Server and "FALSE" if not. In case of Modbus RTU returns if COM-Port is opened + /// </summary> + public bool Connected + { + get + { + if (serialport != null) + { + return (serialport.IsOpen); + } + + if (udpFlag & tcpClient != null) + return true; + if (tcpClient == null) + return false; + else + { + return connected; + + } + + } + } + + public bool Available(int timeout) + { + // Ping's the local machine. + System.Net.NetworkInformation.Ping pingSender = new System.Net.NetworkInformation.Ping(); + IPAddress address = System.Net.IPAddress.Parse(ipAddress); + + // Create a buffer of 32 bytes of data to be transmitted. + string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; + byte[] buffer = System.Text.Encoding.ASCII.GetBytes(data); + + // Wait 10 seconds for a reply. + System.Net.NetworkInformation.PingReply reply = pingSender.Send(address, timeout, buffer); + + if (reply.Status == System.Net.NetworkInformation.IPStatus.Success) + return true; + else + return false; + } + + /// <summary> + /// Gets or Sets the IP-Address of the Server. + /// </summary> + public string IPAddress + { + get + { + return ipAddress; + } + set + { + ipAddress = value; + } + } + + /// <summary> + /// Gets or Sets the Port were the Modbus-TCP Server is reachable (Standard is 502). + /// </summary> + public int Port + { + get + { + return port; + } + set + { + port = value; + } + } + + /// <summary> + /// Gets or Sets the UDP-Flag to activate Modbus UDP. + /// </summary> + public bool UDPFlag + { + get + { + return udpFlag; + } + set + { + udpFlag = value; + } + } + + /// <summary> + /// Gets or Sets the Unit identifier in case of serial connection (Default = 0) + /// </summary> + public byte UnitIdentifier + { + get + { + return unitIdentifier; + } + set + { + unitIdentifier = value; + } + } + + + /// <summary> + /// Gets or Sets the Baudrate for serial connection (Default = 9600) + /// </summary> + public int Baudrate + { + get + { + return baudRate; + } + set + { + baudRate = value; + } + } + + /// <summary> + /// Gets or Sets the of Parity in case of serial connection + /// </summary> + public Parity Parity + { + get + { + if (serialport != null) + return parity; + else + return Parity.Even; + } + set + { + if (serialport != null) + parity = value; + } + } + + + /// <summary> + /// Gets or Sets the number of stopbits in case of serial connection + /// </summary> + public StopBits StopBits + { + get + { + if (serialport != null) + return stopBits; + else + return StopBits.One; + } + set + { + if (serialport != null) + stopBits = value; + } + } + + /// <summary> + /// Gets or Sets the connection Timeout in case of ModbusTCP connection + /// </summary> + public int ConnectionTimeout + { + get + { + return connectTimeout; + } + set + { + connectTimeout = value; + } + } + + /// <summary> + /// Gets or Sets the serial Port + /// </summary> + public string SerialPort + { + get + { + + return serialport.PortName; + } + set + { + if (value == null) + { + serialport = null; + return; + } + if (serialport != null) + serialport.Close(); + this.serialport = new SerialPort(); + this.serialport.PortName = value; + serialport.BaudRate = baudRate; + serialport.Parity = parity; + serialport.StopBits = stopBits; + serialport.WriteTimeout = 10000; + serialport.ReadTimeout = connectTimeout; + serialport.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); + } + } + + /// <summary> + /// Gets or Sets the Filename for the LogFile + /// </summary> + public string LogFileFilename + { + get + { + return StoreLogData.Instance.Filename; + } + set + { + StoreLogData.Instance.Filename = value; + if (StoreLogData.Instance.Filename != null) + debug = true; + else + debug = false; + } + } + + } +} diff --git a/EasyModbus_Secure/ModbusSecureServer.cs b/EasyModbus_Secure/ModbusSecureServer.cs new file mode 100644 index 0000000..acb6ffa --- /dev/null +++ b/EasyModbus_Secure/ModbusSecureServer.cs @@ -0,0 +1,2779 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +using System; +using System.Collections.Generic; +using System.Text; +using System.Net.Sockets; +using System.Net; +using System.Threading; +using System.Net.NetworkInformation; +using System.IO.Ports; +using System.Security.Cryptography.X509Certificates; +using System.Net.Security; +using System.Security.Authentication; +using System.Security.Cryptography; +using System.Linq; +using System.Text.RegularExpressions; +using Org.BouncyCastle; + +namespace EasyModbusSecure +{ + #region class ModbusSecureProtocol + /// <summary> + /// Modbus Protocol informations. + /// </summary> + public class ModbusSecureProtocol + { + public enum ProtocolType { ModbusTCP = 0, ModbusUDP = 1, ModbusRTU = 2 }; + public DateTime timeStamp; + public bool request; + public bool response; + public UInt16 transactionIdentifier; + public UInt16 protocolIdentifier; + public UInt16 length; + public byte unitIdentifier; + public byte functionCode; + public UInt16 startingAdress; + public UInt16 startingAddressRead; + public UInt16 startingAddressWrite; + public UInt16 quantity; + public UInt16 quantityRead; + public UInt16 quantityWrite; + public byte byteCount; + public byte exceptionCode; + public byte errorCode; + public UInt16[] receiveCoilValues; + public UInt16[] receiveRegisterValues; + public Int16[] sendRegisterValues; + public bool[] sendCoilValues; + public UInt16 crc; + } + #endregion + + #region structs + struct NetworkConnectionParameter + { + public SslStream stream; //For TCP-Connection only + public Byte[] bytes; + public int portIn; //For UDP-Connection only + public IPAddress ipAddressIn; //For UDP-Connection only + } + #endregion + + #region TCPHandler class + internal class TCPHandler + { + private static bool debug = false; + public delegate void DataChanged(object networkConnectionParameter); + public event DataChanged dataChanged; + + public delegate void NumberOfClientsChanged(); + public event NumberOfClientsChanged numberOfClientsChanged; + + TcpListener server = null; + + + private List<Client> tcpClientLastRequestList = new List<Client>(); + + public int NumberOfConnectedClients { get; set; } + + public string ipAddress = null; + + private X509Certificate2 serverCertificate; + + private bool mutualAuthentication { get; set; } + + private List<ValueTuple<string, List<byte>>> acceptableRoles { get; set; } + + public Role role { get; set; } + + static void DisplaySecurityLevel(SslStream stream) + { + Console.WriteLine("Cipher: {0} strength {1}", stream.CipherAlgorithm, stream.CipherStrength); + Console.WriteLine("Hash: {0} strength {1}", stream.HashAlgorithm, stream.HashStrength); + Console.WriteLine("Key exchange: {0} strength {1}", stream.KeyExchangeAlgorithm, stream.KeyExchangeStrength); + Console.WriteLine("Protocol: {0}", stream.SslProtocol); + } + static void DisplaySecurityServices(SslStream stream) + { + Console.WriteLine("Is authenticated: {0} as server? {1}", stream.IsAuthenticated, stream.IsServer); + Console.WriteLine("IsSigned: {0}", stream.IsSigned); + Console.WriteLine("Is Encrypted: {0}", stream.IsEncrypted); + } + static void DisplayStreamProperties(SslStream stream) + { + Console.WriteLine("Can read: {0}, Can write: {1}", stream.CanRead, stream.CanWrite); + Console.WriteLine("Can timeout: {0}", stream.CanTimeout); + } + static void DisplayCertificateInformation(SslStream stream) + { + Console.WriteLine("Certificate revocation list checked: {0}", stream.CheckCertRevocationStatus); + + X509Certificate localCertificate = stream.LocalCertificate; + if (stream.LocalCertificate != null) + { + Console.WriteLine("Local cert was issued to {0} and is valid from {1} until {2}.", + localCertificate.Subject, + localCertificate.GetEffectiveDateString(), + localCertificate.GetExpirationDateString()); + } + else + { + Console.WriteLine("Local certificate is null."); + if (debug) StoreLogData.Instance.Store($"Local certificate is null.", System.DateTime.Now); + } + // Display the properties of the client's certificate. + X509Certificate remoteCertificate = stream.RemoteCertificate; + + + + if (stream.RemoteCertificate != null) + { + Console.WriteLine("Remote cert was issued to {0} and is valid from {1} until {2}.", + remoteCertificate.Subject, + remoteCertificate.GetEffectiveDateString(), + remoteCertificate.GetExpirationDateString()); + } + else + { + Console.WriteLine("Remote certificate is null."); + if (debug) StoreLogData.Instance.Store($"Remote certificate is null.", System.DateTime.Now); + } + } + + /// When making a server TCP listen socket, will listen to this IP address. + public IPAddress LocalIPAddress + { + get { return localIPAddress; } + } + private IPAddress localIPAddress = IPAddress.Loopback; //Change that back to .Any + + /// <summary> + /// Listen to all network interfaces. + /// </summary> + /// <param name="port">TCP port to listen</param> + public TCPHandler(int port, string certificate, string certificatePassword, List<ValueTuple<string, List<byte>>> acceptableRoles, bool debug, bool mutualAuthentication = true) + { + server = new TcpListener(LocalIPAddress, port); + serverCertificate = new X509Certificate2(certificate, certificatePassword, X509KeyStorageFlags.MachineKeySet); + + // By default everyone is denied access + this.role = new Role("0"); + + this.mutualAuthentication = mutualAuthentication; + + this.acceptableRoles = new List<ValueTuple<string, List<byte>>>(); + this.acceptableRoles.AddRange(acceptableRoles); + + TCPHandler.debug = debug; + + server.Start(); + server.BeginAcceptTcpClient(AcceptTcpClientCallback, null); + + } + + /// <summary> + /// Listen to a specific network interface. + /// </summary> + /// <param name="localIPAddress">IP address of network interface to listen</param> + /// <param name="port">TCP port to listen</param> + public TCPHandler(IPAddress localIPAddress, int port, string certificate, string certificatePassword, List<ValueTuple<string, List<byte>>> acceptableRoles, bool debug, bool mutualAuthentication = true) + { + this.localIPAddress = localIPAddress; + server = new TcpListener(LocalIPAddress, port); + serverCertificate = new X509Certificate2(certificate, certificatePassword, X509KeyStorageFlags.MachineKeySet); + + // By default everyone is denied access + this.role = new Role("0"); + + this.mutualAuthentication = mutualAuthentication; + + this.acceptableRoles = new List<ValueTuple<string, List<byte>>>(); + this.acceptableRoles.AddRange(acceptableRoles); + + TCPHandler.debug = debug; + + server.Start(); + server.BeginAcceptTcpClient(AcceptTcpClientCallback, null); + } + + public static bool ValidateClientCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) + { + //if (sslPolicyErrors == SslPolicyErrors.RemoteCertificateNotAvailable) + // return true; + + if (sslPolicyErrors == SslPolicyErrors.None) + return true; + + // Just for testing for the localhost domain that does not match 127.0.0.1 with "localhost" + // TODO: Fix that + //if (sslPolicyErrors == SslPolicyErrors.RemoteCertificateNameMismatch) + // return true; + + Console.WriteLine("Certificate error: {0}", sslPolicyErrors); + if (debug) StoreLogData.Instance.Store($"Certificate error: { sslPolicyErrors}", System.DateTime.Now); + + // Do not allow this sever to communicate with unauthenticated clients. + return false; + } + + private void AcceptTcpClientCallback(IAsyncResult asyncResult) + { + TcpClient tcpClient = new TcpClient(); + try + { + tcpClient = server.EndAcceptTcpClient(asyncResult); + tcpClient.ReceiveTimeout = 4000; + if (ipAddress != null) + { + string ipEndpoint = tcpClient.Client.RemoteEndPoint.ToString(); + ipEndpoint = ipEndpoint.Split(':')[0]; + if (ipEndpoint != ipAddress) + { + tcpClient.Client.Disconnect(false); + return; + } + } + } + catch (Exception) { } + + try + { + server.BeginAcceptTcpClient(AcceptTcpClientCallback, null); + Client client = new Client(tcpClient, mutualAuthentication); + SslStream sslStream = client.SslStream; + + //With Mutual Authentication + if (mutualAuthentication) + { + + try + { + sslStream.AuthenticateAsServer(serverCertificate, true, SslProtocols.Tls12, true); + + if (sslStream.RemoteCertificate == null) + { + Console.WriteLine("Client did not send back a certificate"); + if (debug) StoreLogData.Instance.Store($"Client did not send back a certificate", System.DateTime.Now); + //sslStream.Close(); + //tcpClient.Close(); + + throw new AuthenticationException(); + } + + // Display the properties and settings for the authenticated stream. + DisplaySecurityLevel(sslStream); + DisplaySecurityServices(sslStream); + DisplayCertificateInformation(sslStream, client); + DisplayStreamProperties(sslStream); + + CheckRoleInformation(sslStream, client); + + this.role = new Role(client.getRole()); + + } + catch (AuthenticationException e) + { + + Console.WriteLine("Exception: {0}", e.Message); + if (e.InnerException != null) + { + Console.WriteLine("Inner exception: {0}", e.InnerException.Message); + } + Console.WriteLine("Authentication failed - closing the connection."); + if (debug) StoreLogData.Instance.Store($"Authentication failed - closing the connection.", System.DateTime.Now); + sslStream.Close(); + tcpClient.Close(); + return; + + } + } + else + { + try + { + sslStream.AuthenticateAsServer(serverCertificate, false, SslProtocols.Tls12, true); + + Console.WriteLine("NO CLIENT AUTH!!!"); + if (debug) StoreLogData.Instance.Store($"Client authetication has not been enabled.", System.DateTime.Now); + + // Display the properties and settings for the authenticated stream. + DisplaySecurityLevel(sslStream); + DisplaySecurityServices(sslStream); + DisplayCertificateInformation(sslStream, client); + DisplayStreamProperties(sslStream); + + CheckRoleInformation(sslStream, client); + + this.role = new Role(client.getRole()); + + } + catch (AuthenticationException e) + { + + Console.WriteLine("Exception: {0}", e.Message); + if (e.InnerException != null) + { + Console.WriteLine("Inner exception: {0}", e.InnerException.Message); + } + + Console.WriteLine("Authentication failed - closing the connection."); + if (debug) StoreLogData.Instance.Store($"Authentication failed - closing the connection.", System.DateTime.Now); + + sslStream.Close(); + tcpClient.Close(); + return; + + } + } + + sslStream.ReadTimeout = 4000; + sslStream.BeginRead(client.Buffer, 0, client.Buffer.Length, ReadCallback, client); + } + catch (Exception e) + { + // TODO: Populate that with an exception handling + Console.WriteLine("Exception 2: {0}", e.Message); + if (debug) StoreLogData.Instance.Store($"Exception occurred: {e.Message}", System.DateTime.Now); + } + } + + private int GetAndCleanNumberOfConnectedClients(Client client) + { + lock (this) + { + int i = 0; + bool objetExists = false; + foreach (Client clientLoop in tcpClientLastRequestList) + { + if (client.Equals(clientLoop)) + objetExists = true; + } + try + { + tcpClientLastRequestList.RemoveAll(delegate (Client c) + { + return ((DateTime.Now.Ticks - c.Ticks) > 40000000); + } + + ); + } + catch (Exception) { } + if (!objetExists) + tcpClientLastRequestList.Add(client); + + + return tcpClientLastRequestList.Count; + } + } + + private void ReadCallback(IAsyncResult asyncResult) + { + NetworkConnectionParameter networkConnectionParameter = new NetworkConnectionParameter(); + Client client = asyncResult.AsyncState as Client; + client.Ticks = DateTime.Now.Ticks; + NumberOfConnectedClients = GetAndCleanNumberOfConnectedClients(client); + if (numberOfClientsChanged != null) + numberOfClientsChanged(); + if (client != null) + { + int read; + SslStream sslStream = null; + try + { + sslStream = client.SslStream; + + read = sslStream.EndRead(asyncResult); + } + catch (Exception ex) + { + return; + } + + + if (read == 0) + { + //OnClientDisconnected(client.TcpClient); + //connectedClients.Remove(client); + return; + } + byte[] data = new byte[read]; + Buffer.BlockCopy(client.Buffer, 0, data, 0, read); + networkConnectionParameter.bytes = data; + networkConnectionParameter.stream = sslStream; + if (dataChanged != null) + dataChanged(networkConnectionParameter); + try + { + sslStream.BeginRead(client.Buffer, 0, client.Buffer.Length, ReadCallback, client); + } + catch (Exception) + { + } + } + } + + public void Disconnect() + { + try + { + foreach (Client clientLoop in tcpClientLastRequestList) + { + clientLoop.SslStream.Close(); + } + } + catch (Exception) { } + server.Stop(); + + } + + public void DisplayCertificateInformation(SslStream stream, Client client) + { + // TODO: Maybe add logging here? + Console.WriteLine("Certificate revocation list checked: {0}", stream.CheckCertRevocationStatus); + + X509Certificate localCertificateX509 = stream.LocalCertificate; + X509Certificate2 localCertificateX5092 = new X509Certificate2(localCertificateX509); + if (stream.LocalCertificate != null) + { + Console.WriteLine("Local cert was issued to {0} and is valid from {1} until {2}.", + localCertificateX5092.Subject, + localCertificateX5092.GetEffectiveDateString(), + localCertificateX5092.GetExpirationDateString()); + + + if (debug) StoreLogData.Instance.Store($"Local cert was issued to {localCertificateX5092.Subject}" + + $" and is valid from {localCertificateX5092.GetEffectiveDateString()} " + + $"until {localCertificateX5092.GetExpirationDateString()}", System.DateTime.Now); + } + else + { + Console.WriteLine("Local certificate is null."); + } + + // Display the properties of the client's certificate. + X509Certificate remoteCertificateX509 = stream.RemoteCertificate; + + if (remoteCertificateX509 != null) + { + X509Certificate2 remoteCertificateX5092 = new X509Certificate2(remoteCertificateX509); + + Console.WriteLine("Remote cert was issued to {0} and is valid from {1} until {2}.", + remoteCertificateX5092.Subject, + remoteCertificateX5092.GetEffectiveDateString(), + remoteCertificateX5092.GetExpirationDateString()); + + if (debug) StoreLogData.Instance.Store($"Remote cert was issued to {remoteCertificateX5092.Subject}" + + $" and is valid from {remoteCertificateX5092.GetEffectiveDateString()} " + + $"until {remoteCertificateX5092.GetExpirationDateString()}", System.DateTime.Now); + + } + else + { + Console.WriteLine("Remote (client) certificate is null."); + if (debug) StoreLogData.Instance.Store($"Remote (client) certificate is null.", System.DateTime.Now); + } + } + + public void CheckRoleInformation(SslStream stream, Client client) + { + X509Certificate remoteCertificateX509 = stream.RemoteCertificate; + + int roleCount = 0; + if (remoteCertificateX509 != null) + { + X509Certificate2 remoteCertificateX5092 = new X509Certificate2(remoteCertificateX509); + + var bcCert = Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(remoteCertificateX5092); + + var oids = bcCert.GetNonCriticalExtensionOids(); + + foreach (var oid in oids) + { + + if (roleCount > 1) + { + Console.WriteLine("No valid role is provided - closing the connection."); + if (debug) StoreLogData.Instance.Store($"No valid role is provided - closing the connection.", System.DateTime.Now); + throw new AuthenticationException(); + } + + if (oid.Equals("1.3.6.1.4.1.50316.802.1")) + { + // We get the ASN.1 format from the data taht contains some special characters in the beggininig. + // We then remove all visilbe and invisible control characters. + + //string roleStr = Encoding.UTF8.GetString(asndata.RawData); + //roleStr = Regex.Replace(roleStr, @"\p{Cc}+", string.Empty); + + var oct = bcCert.GetExtensionValue(new Org.BouncyCastle.Asn1.DerObjectIdentifier(oid.ToString())).GetOctets(); + //var extVal = bcCert.GetExtensionValue(oid.ToString()); + //var oct = Org.BouncyCastle.Asn1.Asn1Object.FromByteArray(extVal.GetOctets()); + var aIn = new Org.BouncyCastle.Asn1.Asn1InputStream(oct); + + var roleStr = aIn.ReadObject().ToString(); + + + roleCount++; + + if(acceptableRoles.Any(roleTuple => roleTuple.Item1.Equals(roleStr))) + { + client.setRole(roleStr); + Console.WriteLine("RoleOID: {0}", client.getRole()); + } + + + if (client.getRole().Equals("0")) + { + Console.WriteLine("Attempted access with role {0}, has been identified", roleStr); + if (debug) StoreLogData.Instance.Store($"Attempted access with role {roleStr} has been identified", System.DateTime.Now); + } + } + + } + + if (roleCount == 0) + { + Console.WriteLine("No role provided. Setting role to null"); + if (debug) StoreLogData.Instance.Store($"No role provided. Setting role to null.", System.DateTime.Now); + } + } + else + { + Console.WriteLine("Remote (client) certificate is null."); + if (debug) StoreLogData.Instance.Store($"Remote (client) certificate is null.", System.DateTime.Now); + } + } + + + internal class Client + { + private readonly TcpClient tcpClient; + private readonly byte[] buffer; + private SslStream stream; + private Role role; + private bool mutualAuthentication { get; set; } + + public long Ticks { get; set; } + + public Client(TcpClient tcpClient, bool mutualAuthentication) + { + // By default everyone is denied access + this.role = new Role("0"); + this.tcpClient = tcpClient; + int bufferSize = tcpClient.ReceiveBufferSize; + buffer = new byte[bufferSize]; + + this.mutualAuthentication = mutualAuthentication; + } + + public string getRole() + { + return this.role.getRole(); + } + public void setRole(string role) + { + this.role = new Role(role); + } + + public TcpClient TcpClient + { + get { return tcpClient; } + } + + public byte[] Buffer + { + get { return buffer; } + } + + public SslStream SslStream + { + get + { + if (stream == null) + { + if (mutualAuthentication) + { + stream = new SslStream(tcpClient.GetStream(), false, new RemoteCertificateValidationCallback(ValidateClientCertificate), null); + return stream; + } + else + { + + stream = new SslStream(tcpClient.GetStream(), false, null, null); + return stream; + } + } + else + { + return stream; + } + + + } + + } + } + public class Role + { + private string val; + public Role(string val) + { + this.setRole(val); + } + public string getRole() + { + return this.val; + } + public void setRole(string role) + { + this.val = role; + } + + }; + } + #endregion + + + + /// <summary> + /// Modbus TCP Server. + /// </summary> + public class ModbusSecureServer + { + private bool debug = false; + Int32 port = 802; + ModbusSecureProtocol receiveData; + ModbusSecureProtocol sendData = new ModbusSecureProtocol(); + Byte[] bytes = new Byte[2100]; + //public Int16[] _holdingRegisters = new Int16[65535]; + public HoldingRegisters holdingRegisters; + public InputRegisters inputRegisters; + public Coils coils; + public DiscreteInputs discreteInputs; + private int numberOfConnections = 0; + private bool udpFlag; + private bool serialFlag; + private int baudrate = 9600; + private System.IO.Ports.Parity parity = Parity.Even; + private System.IO.Ports.StopBits stopBits = StopBits.One; + private string serialPort = "COM1"; + private SerialPort serialport; + private byte unitIdentifier = 1; + private int portIn; + private IPAddress ipAddressIn; + private UdpClient udpClient; + private IPEndPoint iPEndPoint; + private TCPHandler tcpHandler; + Thread listenerThread; + Thread clientConnectionThread; + private ModbusSecureProtocol[] modbusLogData = new ModbusSecureProtocol[100]; + + // TODO; Can all these be items of an array or a list? + public bool FunctionCode1Disabled { get; set; } + public bool FunctionCode2Disabled { get; set; } + public bool FunctionCode3Disabled { get; set; } + public bool FunctionCode4Disabled { get; set; } + public bool FunctionCode5Disabled { get; set; } + public bool FunctionCode6Disabled { get; set; } + public bool FunctionCode15Disabled { get; set; } + public bool FunctionCode16Disabled { get; set; } + public bool FunctionCode23Disabled { get; set; } + + public bool PortChanged { get; set; } + object lockCoils = new object(); + object lockHoldingRegisters = new object(); + private volatile bool shouldStop; + + private IPAddress localIPAddress = IPAddress.Any; + + private string certificate { get; set; } + private string certificatePassword { get; set; } + + private bool mutualAuthentication { get; set; } + + protected List<ValueTuple<string, List<byte>>> acceptableRoles { get; set; } + protected string TcpHandlerRole + { + get + { + return tcpHandler?.role?.getRole(); + } + } + + /// <summary> + /// When creating a TCP or UDP socket, the local IP address to attach to. + /// </summary> + public IPAddress LocalIPAddress + { + get { return localIPAddress; } + set { if (listenerThread == null) localIPAddress = value; } + } + + public ModbusSecureServer(string certificate, string certificatePassword, bool mutualAuthentication, List<ValueTuple<string, List<byte>>> acceptableRoles) + { + holdingRegisters = new HoldingRegisters(this); + inputRegisters = new InputRegisters(this); + coils = new Coils(this); + discreteInputs = new DiscreteInputs(this); + + this.certificate = certificate; + + this.certificatePassword = certificatePassword; + + this.mutualAuthentication = mutualAuthentication; + + this.acceptableRoles = acceptableRoles; + + } + + #region events + public delegate void CoilsChangedHandler(int coil, int numberOfCoils); + public event CoilsChangedHandler CoilsChanged; + + public delegate void HoldingRegistersChangedHandler(int register, int numberOfRegisters); + public event HoldingRegistersChangedHandler HoldingRegistersChanged; + + public delegate void NumberOfConnectedClientsChangedHandler(); + public event NumberOfConnectedClientsChangedHandler NumberOfConnectedClientsChanged; + + public delegate void LogDataChangedHandler(); + public event LogDataChangedHandler LogDataChanged; + #endregion + + public void Listen() + { + + listenerThread = new Thread(ListenerThread); + listenerThread.Start(); + } + + public void StopListening() + { + if (SerialFlag & (serialport != null)) + { + if (serialport.IsOpen) + serialport.Close(); + shouldStop = true; + } + try + { + tcpHandler.Disconnect(); + listenerThread.Abort(); + + } + catch (Exception) { } + listenerThread.Join(); + try + { + + clientConnectionThread.Abort(); + } + catch (Exception) { } + } + + private void ListenerThread() + { + if (!udpFlag & !serialFlag) + { + if (udpClient != null) + { + try + { + udpClient.Close(); + } + catch (Exception) { } + } + tcpHandler = new TCPHandler(LocalIPAddress, port, certificate, certificatePassword, acceptableRoles ,debug, mutualAuthentication); + if (debug) StoreLogData.Instance.Store($"EasyModbus Server listing for incomming data at Port {port}, local IP {LocalIPAddress}", System.DateTime.Now); + tcpHandler.dataChanged += new TCPHandler.DataChanged(ProcessReceivedData); + //tcpHandler.CheckRoleInformation(tcpHandler.) + tcpHandler.numberOfClientsChanged += new TCPHandler.NumberOfClientsChanged(numberOfClientsChanged); + } + else if (serialFlag) + { + if (serialport == null) + { + if (debug) StoreLogData.Instance.Store("EasyModbus RTU-Server listing for incomming data at Serial Port " + serialPort, System.DateTime.Now); + serialport = new SerialPort(); + serialport.PortName = serialPort; + serialport.BaudRate = this.baudrate; + serialport.Parity = this.parity; + serialport.StopBits = stopBits; + serialport.WriteTimeout = 10000; + serialport.ReadTimeout = 1000; + serialport.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler); + serialport.Open(); + } + } + else + while (!shouldStop) + { + if (udpFlag) + { + if (udpClient == null | PortChanged) + { + IPEndPoint localEndoint = new IPEndPoint(LocalIPAddress, port); + udpClient = new UdpClient(localEndoint); + if (debug) StoreLogData.Instance.Store($"EasyModbus Server listing for incomming data at Port {port}, local IP {LocalIPAddress}", System.DateTime.Now); + udpClient.Client.ReceiveTimeout = 1000; + iPEndPoint = new IPEndPoint(IPAddress.Any, port); + PortChanged = false; + } + if (tcpHandler != null) + tcpHandler.Disconnect(); + try + { + bytes = udpClient.Receive(ref iPEndPoint); + portIn = iPEndPoint.Port; + NetworkConnectionParameter networkConnectionParameter = new NetworkConnectionParameter(); + networkConnectionParameter.bytes = bytes; + ipAddressIn = iPEndPoint.Address; + networkConnectionParameter.portIn = portIn; + networkConnectionParameter.ipAddressIn = ipAddressIn; + ParameterizedThreadStart pts = new ParameterizedThreadStart(this.ProcessReceivedData); + Thread processDataThread = new Thread(pts); + processDataThread.Start(networkConnectionParameter); + } + catch (Exception) + { + } + } + + } + } + + #region SerialHandler + private bool dataReceived = false; + private byte[] readBuffer = new byte[2094]; + private DateTime lastReceive; + private int nextSign = 0; + private void DataReceivedHandler(object sender, + SerialDataReceivedEventArgs e) + { + int silence = 4000 / baudrate; + if ((DateTime.Now.Ticks - lastReceive.Ticks) > TimeSpan.TicksPerMillisecond * silence) + nextSign = 0; + + + SerialPort sp = (SerialPort)sender; + + int numbytes = sp.BytesToRead; + byte[] rxbytearray = new byte[numbytes]; + + sp.Read(rxbytearray, 0, numbytes); + + Array.Copy(rxbytearray, 0, readBuffer, nextSign, rxbytearray.Length); + lastReceive = DateTime.Now; + nextSign = numbytes + nextSign; + if (ModbusSecureClient.DetectValidModbusFrame(readBuffer, nextSign)) + { + + dataReceived = true; + nextSign = 0; + + NetworkConnectionParameter networkConnectionParameter = new NetworkConnectionParameter(); + networkConnectionParameter.bytes = readBuffer; + ParameterizedThreadStart pts = new ParameterizedThreadStart(this.ProcessReceivedData); + Thread processDataThread = new Thread(pts); + processDataThread.Start(networkConnectionParameter); + dataReceived = false; + + } + else + dataReceived = false; + } + #endregion + + #region Method numberOfClientsChanged + private void numberOfClientsChanged() + { + numberOfConnections = tcpHandler.NumberOfConnectedClients; + if (NumberOfConnectedClientsChanged != null) + NumberOfConnectedClientsChanged(); + } + #endregion + + object lockProcessReceivedData = new object(); + #region Method ProcessReceivedData + private void ProcessReceivedData(object networkConnectionParameter) + { + lock (lockProcessReceivedData) + { + Byte[] bytes = new byte[((NetworkConnectionParameter)networkConnectionParameter).bytes.Length]; + if (debug) StoreLogData.Instance.Store("Received Data: " + BitConverter.ToString(bytes), System.DateTime.Now); + SslStream sslStream = ((NetworkConnectionParameter)networkConnectionParameter).stream; + int portIn = ((NetworkConnectionParameter)networkConnectionParameter).portIn; + IPAddress ipAddressIn = ((NetworkConnectionParameter)networkConnectionParameter).ipAddressIn; + + + Array.Copy(((NetworkConnectionParameter)networkConnectionParameter).bytes, 0, bytes, 0, ((NetworkConnectionParameter)networkConnectionParameter).bytes.Length); + + ModbusSecureProtocol receiveDataThread = new ModbusSecureProtocol(); + ModbusSecureProtocol sendDataThread = new ModbusSecureProtocol(); + + try + { + UInt16[] wordData = new UInt16[1]; + byte[] byteData = new byte[2]; + receiveDataThread.timeStamp = DateTime.Now; + receiveDataThread.request = true; + if (!serialFlag) + { + //Lese Transaction identifier + byteData[1] = bytes[0]; + byteData[0] = bytes[1]; + Buffer.BlockCopy(byteData, 0, wordData, 0, 2); + receiveDataThread.transactionIdentifier = wordData[0]; + + //Lese Protocol identifier + byteData[1] = bytes[2]; + byteData[0] = bytes[3]; + Buffer.BlockCopy(byteData, 0, wordData, 0, 2); + receiveDataThread.protocolIdentifier = wordData[0]; + + //Lese length + byteData[1] = bytes[4]; + byteData[0] = bytes[5]; + Buffer.BlockCopy(byteData, 0, wordData, 0, 2); + receiveDataThread.length = wordData[0]; + } + + //Lese unit identifier + receiveDataThread.unitIdentifier = bytes[6 - 6 * Convert.ToInt32(serialFlag)]; + //Check UnitIdentifier + if ((receiveDataThread.unitIdentifier != this.unitIdentifier) & (receiveDataThread.unitIdentifier != 0)) + return; + + // Lese function code + receiveDataThread.functionCode = bytes[7 - 6 * Convert.ToInt32(serialFlag)]; + + // Lese starting address + byteData[1] = bytes[8 - 6 * Convert.ToInt32(serialFlag)]; + byteData[0] = bytes[9 - 6 * Convert.ToInt32(serialFlag)]; + Buffer.BlockCopy(byteData, 0, wordData, 0, 2); + receiveDataThread.startingAdress = wordData[0]; + + if (receiveDataThread.functionCode <= 4) + { + // Lese quantity + byteData[1] = bytes[10 - 6 * Convert.ToInt32(serialFlag)]; + byteData[0] = bytes[11 - 6 * Convert.ToInt32(serialFlag)]; + Buffer.BlockCopy(byteData, 0, wordData, 0, 2); + receiveDataThread.quantity = wordData[0]; + } + if (receiveDataThread.functionCode == 5) + { + receiveDataThread.receiveCoilValues = new ushort[1]; + // Lese Value + byteData[1] = bytes[10 - 6 * Convert.ToInt32(serialFlag)]; + byteData[0] = bytes[11 - 6 * Convert.ToInt32(serialFlag)]; + Buffer.BlockCopy(byteData, 0, receiveDataThread.receiveCoilValues, 0, 2); + } + if (receiveDataThread.functionCode == 6) + { + receiveDataThread.receiveRegisterValues = new ushort[1]; + // Lese Value + byteData[1] = bytes[10 - 6 * Convert.ToInt32(serialFlag)]; + byteData[0] = bytes[11 - 6 * Convert.ToInt32(serialFlag)]; + Buffer.BlockCopy(byteData, 0, receiveDataThread.receiveRegisterValues, 0, 2); + } + if (receiveDataThread.functionCode == 15) + { + // Lese quantity + byteData[1] = bytes[10 - 6 * Convert.ToInt32(serialFlag)]; + byteData[0] = bytes[11 - 6 * Convert.ToInt32(serialFlag)]; + Buffer.BlockCopy(byteData, 0, wordData, 0, 2); + receiveDataThread.quantity = wordData[0]; + + receiveDataThread.byteCount = bytes[12 - 6 * Convert.ToInt32(serialFlag)]; + + if ((receiveDataThread.byteCount % 2) != 0) + receiveDataThread.receiveCoilValues = new ushort[receiveDataThread.byteCount / 2 + 1]; + else + receiveDataThread.receiveCoilValues = new ushort[receiveDataThread.byteCount / 2]; + // Lese Value + Buffer.BlockCopy(bytes, 13 - 6 * Convert.ToInt32(serialFlag), receiveDataThread.receiveCoilValues, 0, receiveDataThread.byteCount); + } + if (receiveDataThread.functionCode == 16) + { + // Lese quantity + byteData[1] = bytes[10 - 6 * Convert.ToInt32(serialFlag)]; + byteData[0] = bytes[11 - 6 * Convert.ToInt32(serialFlag)]; + Buffer.BlockCopy(byteData, 0, wordData, 0, 2); + receiveDataThread.quantity = wordData[0]; + + receiveDataThread.byteCount = bytes[12 - 6 * Convert.ToInt32(serialFlag)]; + receiveDataThread.receiveRegisterValues = new ushort[receiveDataThread.quantity]; + for (int i = 0; i < receiveDataThread.quantity; i++) + { + // Lese Value + byteData[1] = bytes[13 + i * 2 - 6 * Convert.ToInt32(serialFlag)]; + byteData[0] = bytes[14 + i * 2 - 6 * Convert.ToInt32(serialFlag)]; + Buffer.BlockCopy(byteData, 0, receiveDataThread.receiveRegisterValues, i * 2, 2); + } + + } + if (receiveDataThread.functionCode == 23) + { + // Lese starting Address Read + byteData[1] = bytes[8 - 6 * Convert.ToInt32(serialFlag)]; + byteData[0] = bytes[9 - 6 * Convert.ToInt32(serialFlag)]; + Buffer.BlockCopy(byteData, 0, wordData, 0, 2); + receiveDataThread.startingAddressRead = wordData[0]; + // Lese quantity Read + byteData[1] = bytes[10 - 6 * Convert.ToInt32(serialFlag)]; + byteData[0] = bytes[11 - 6 * Convert.ToInt32(serialFlag)]; + Buffer.BlockCopy(byteData, 0, wordData, 0, 2); + receiveDataThread.quantityRead = wordData[0]; + // Lese starting Address Write + byteData[1] = bytes[12 - 6 * Convert.ToInt32(serialFlag)]; + byteData[0] = bytes[13 - 6 * Convert.ToInt32(serialFlag)]; + Buffer.BlockCopy(byteData, 0, wordData, 0, 2); + receiveDataThread.startingAddressWrite = wordData[0]; + // Lese quantity Write + byteData[1] = bytes[14 - 6 * Convert.ToInt32(serialFlag)]; + byteData[0] = bytes[15 - 6 * Convert.ToInt32(serialFlag)]; + Buffer.BlockCopy(byteData, 0, wordData, 0, 2); + receiveDataThread.quantityWrite = wordData[0]; + + receiveDataThread.byteCount = bytes[16 - 6 * Convert.ToInt32(serialFlag)]; + receiveDataThread.receiveRegisterValues = new ushort[receiveDataThread.quantityWrite]; + for (int i = 0; i < receiveDataThread.quantityWrite; i++) + { + // Lese Value + byteData[1] = bytes[17 + i * 2 - 6 * Convert.ToInt32(serialFlag)]; + byteData[0] = bytes[18 + i * 2 - 6 * Convert.ToInt32(serialFlag)]; + Buffer.BlockCopy(byteData, 0, receiveDataThread.receiveRegisterValues, i * 2, 2); + } + } + } + catch (Exception exc) + { } + this.CreateAnswer(receiveDataThread, sendDataThread, sslStream, portIn, ipAddressIn); + //this.sendAnswer(); + this.CreateLogData(receiveDataThread, sendDataThread); + + if (LogDataChanged != null) + LogDataChanged(); + } + } + #endregion + + #region Method CreateAnswer + private void CreateAnswer(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + + switch (receiveData.functionCode) + { + // Read Coils + case 1: + if (!FunctionCode1Disabled) + this.ReadCoils(receiveData, sendData, stream, portIn, ipAddressIn); + else + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, receiveData, sendData, stream, portIn, ipAddressIn); + } + break; + // Read Input Registers + case 2: + if (!FunctionCode2Disabled) + this.ReadDiscreteInputs(receiveData, sendData, stream, portIn, ipAddressIn); + else + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, receiveData, sendData, stream, portIn, ipAddressIn); + } + + break; + // Read Holding Registers + case 3: + if (!FunctionCode3Disabled) + this.ReadHoldingRegisters(receiveData, sendData, stream, portIn, ipAddressIn); + else + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, receiveData, sendData, stream, portIn, ipAddressIn); + } + + break; + // Read Input Registers + case 4: + if (!FunctionCode4Disabled) + this.ReadInputRegisters(receiveData, sendData, stream, portIn, ipAddressIn); + else + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, receiveData, sendData, stream, portIn, ipAddressIn); + } + + break; + // Write single coil + case 5: + if (!FunctionCode5Disabled) + this.WriteSingleCoil(receiveData, sendData, stream, portIn, ipAddressIn); + else + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, receiveData, sendData, stream, portIn, ipAddressIn); + } + + break; + // Write single register + case 6: + if (!FunctionCode6Disabled) + this.WriteSingleRegister(receiveData, sendData, stream, portIn, ipAddressIn); + else + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, receiveData, sendData, stream, portIn, ipAddressIn); + } + + break; + // Write Multiple coils + case 15: + if (!FunctionCode15Disabled) + this.WriteMultipleCoils(receiveData, sendData, stream, portIn, ipAddressIn); + else + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, receiveData, sendData, stream, portIn, ipAddressIn); + } + + break; + // Write Multiple registers + case 16: + if (!FunctionCode16Disabled) + this.WriteMultipleRegisters(receiveData, sendData, stream, portIn, ipAddressIn); + else + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, receiveData, sendData, stream, portIn, ipAddressIn); + } + + break; + // Error: Function Code not supported + case 23: + if (!FunctionCode23Disabled) + this.ReadWriteMultipleRegisters(receiveData, sendData, stream, portIn, ipAddressIn); + else + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, receiveData, sendData, stream, portIn, ipAddressIn); + } + + break; + // Error: Function Code not supported + default: + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + sendException(sendData.errorCode, sendData.exceptionCode, receiveData, sendData, stream, portIn, ipAddressIn); + break; + } + sendData.timeStamp = DateTime.Now; + } + #endregion + + public virtual void ReadCoils(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = this.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + if ((receiveData.quantity < 1) | (receiveData.quantity > 0x07D0)) //Invalid quantity + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 3; + } + if (((receiveData.startingAdress + 1 + receiveData.quantity) > 65535) | (receiveData.startingAdress < 0)) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 2; + } + if (sendData.exceptionCode == 0) + { + if ((receiveData.quantity % 8) == 0) + sendData.byteCount = (byte)(receiveData.quantity / 8); + else + sendData.byteCount = (byte)(receiveData.quantity / 8 + 1); + + sendData.sendCoilValues = new bool[receiveData.quantity]; + lock (lockCoils) + Array.Copy(coils.localArray, receiveData.startingAdress + 1, sendData.sendCoilValues, 0, receiveData.quantity); + } + if (true) + { + Byte[] data; + + if (sendData.exceptionCode > 0) + data = new byte[9 + 2 * Convert.ToInt32(serialFlag)]; + else + data = new byte[9 + sendData.byteCount + 2 * Convert.ToInt32(serialFlag)]; + + Byte[] byteData = new byte[2]; + + sendData.length = (byte)(data.Length - 6); + + //Send Transaction identifier + byteData = BitConverter.GetBytes((int)sendData.transactionIdentifier); + data[0] = byteData[1]; + data[1] = byteData[0]; + + //Send Protocol identifier + byteData = BitConverter.GetBytes((int)sendData.protocolIdentifier); + data[2] = byteData[1]; + data[3] = byteData[0]; + + //Send length + byteData = BitConverter.GetBytes((int)sendData.length); + data[4] = byteData[1]; + data[5] = byteData[0]; + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + //ByteCount + data[8] = sendData.byteCount; + + if (sendData.exceptionCode > 0) + { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendCoilValues = null; + } + + if (sendData.sendCoilValues != null) + for (int i = 0; i < (sendData.byteCount); i++) + { + byteData = new byte[2]; + for (int j = 0; j < 8; j++) + { + + byte boolValue; + if (sendData.sendCoilValues[i * 8 + j] == true) + boolValue = 1; + else + boolValue = 0; + byteData[1] = (byte)((byteData[1]) | (boolValue << j)); + if ((i * 8 + j + 1) >= sendData.sendCoilValues.Length) + break; + } + data[9 + i] = byteData[1]; + } + try + { + if (serialFlag) + { + if (!serialport.IsOpen) + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + //Create CRC + sendData.crc = ModbusSecureClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); + byteData = BitConverter.GetBytes((int)sendData.crc); + data[data.Length - 2] = byteData[0]; + data[data.Length - 1] = byteData[1]; + serialport.Write(data, 6, data.Length - 6); + if (debug) + { + byte[] debugData = new byte[data.Length - 6]; + Array.Copy(data, 6, debugData, 0, data.Length - 6); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: " + BitConverter.ToString(debugData), System.DateTime.Now); + } + } + else if (udpFlag) + { + //UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(ipAddressIn, portIn); + if (debug) StoreLogData.Instance.Store("Send Data: " + BitConverter.ToString(data), System.DateTime.Now); + udpClient.Send(data, data.Length, endPoint); + + } + else + { + stream.Write(data, 0, data.Length); + if (debug) StoreLogData.Instance.Store("Send Data: " + BitConverter.ToString(data), System.DateTime.Now); + } + } + catch (Exception) { } + } + } + + public virtual void ReadDiscreteInputs(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = this.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + if ((receiveData.quantity < 1) | (receiveData.quantity > 0x07D0)) //Invalid quantity + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 3; + } + if (((receiveData.startingAdress + 1 + receiveData.quantity) > 65535) | (receiveData.startingAdress < 0)) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 2; + } + if (sendData.exceptionCode == 0) + { + if ((receiveData.quantity % 8) == 0) + sendData.byteCount = (byte)(receiveData.quantity / 8); + else + sendData.byteCount = (byte)(receiveData.quantity / 8 + 1); + + sendData.sendCoilValues = new bool[receiveData.quantity]; + Array.Copy(discreteInputs.localArray, receiveData.startingAdress + 1, sendData.sendCoilValues, 0, receiveData.quantity); + } + if (true) + { + Byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9 + 2 * Convert.ToInt32(serialFlag)]; + else + data = new byte[9 + sendData.byteCount + 2 * Convert.ToInt32(serialFlag)]; + Byte[] byteData = new byte[2]; + sendData.length = (byte)(data.Length - 6); + + //Send Transaction identifier + byteData = BitConverter.GetBytes((int)sendData.transactionIdentifier); + data[0] = byteData[1]; + data[1] = byteData[0]; + + //Send Protocol identifier + byteData = BitConverter.GetBytes((int)sendData.protocolIdentifier); + data[2] = byteData[1]; + data[3] = byteData[0]; + + //Send length + byteData = BitConverter.GetBytes((int)sendData.length); + data[4] = byteData[1]; + data[5] = byteData[0]; + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + //ByteCount + data[8] = sendData.byteCount; + + + if (sendData.exceptionCode > 0) + { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendCoilValues = null; + } + + if (sendData.sendCoilValues != null) + for (int i = 0; i < (sendData.byteCount); i++) + { + byteData = new byte[2]; + for (int j = 0; j < 8; j++) + { + + byte boolValue; + if (sendData.sendCoilValues[i * 8 + j] == true) + boolValue = 1; + else + boolValue = 0; + byteData[1] = (byte)((byteData[1]) | (boolValue << j)); + if ((i * 8 + j + 1) >= sendData.sendCoilValues.Length) + break; + } + data[9 + i] = byteData[1]; + } + + try + { + if (serialFlag) + { + if (!serialport.IsOpen) + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + //Create CRC + sendData.crc = ModbusSecureClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); + byteData = BitConverter.GetBytes((int)sendData.crc); + data[data.Length - 2] = byteData[0]; + data[data.Length - 1] = byteData[1]; + serialport.Write(data, 6, data.Length - 6); + if (debug) + { + byte[] debugData = new byte[data.Length - 6]; + Array.Copy(data, 6, debugData, 0, data.Length - 6); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: " + BitConverter.ToString(debugData), System.DateTime.Now); + } + } + else if (udpFlag) + { + //UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(ipAddressIn, portIn); + udpClient.Send(data, data.Length, endPoint); + + } + else + { + stream.Write(data, 0, data.Length); + if (debug) StoreLogData.Instance.Store("Send Data: " + BitConverter.ToString(data), System.DateTime.Now); + } + } + catch (Exception) { } + } + } + + public virtual void ReadHoldingRegisters(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = this.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + if ((receiveData.quantity < 1) | (receiveData.quantity > 0x007D)) //Invalid quantity + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 3; + } + if (((receiveData.startingAdress + 1 + receiveData.quantity) > 65535) | (receiveData.startingAdress < 0)) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 2; + } + if (sendData.exceptionCode == 0) + { + sendData.byteCount = (byte)(2 * receiveData.quantity); + sendData.sendRegisterValues = new Int16[receiveData.quantity]; + lock (lockHoldingRegisters) + Buffer.BlockCopy(holdingRegisters.localArray, receiveData.startingAdress * 2 + 2, sendData.sendRegisterValues, 0, receiveData.quantity * 2); + } + if (sendData.exceptionCode > 0) + sendData.length = 0x03; + else + sendData.length = (ushort)(0x03 + sendData.byteCount); + + if (true) + { + Byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9 + 2 * Convert.ToInt32(serialFlag)]; + else + data = new byte[9 + sendData.byteCount + 2 * Convert.ToInt32(serialFlag)]; + Byte[] byteData = new byte[2]; + sendData.length = (byte)(data.Length - 6); + + //Send Transaction identifier + byteData = BitConverter.GetBytes((int)sendData.transactionIdentifier); + data[0] = byteData[1]; + data[1] = byteData[0]; + + //Send Protocol identifier + byteData = BitConverter.GetBytes((int)sendData.protocolIdentifier); + data[2] = byteData[1]; + data[3] = byteData[0]; + + //Send length + byteData = BitConverter.GetBytes((int)sendData.length); + data[4] = byteData[1]; + data[5] = byteData[0]; + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + //ByteCount + data[8] = sendData.byteCount; + + if (sendData.exceptionCode > 0) + { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendRegisterValues = null; + } + + + if (sendData.sendRegisterValues != null) + for (int i = 0; i < (sendData.byteCount / 2); i++) + { + byteData = BitConverter.GetBytes((Int16)sendData.sendRegisterValues[i]); + data[9 + i * 2] = byteData[1]; + data[10 + i * 2] = byteData[0]; + } + try + { + if (serialFlag) + { + if (!serialport.IsOpen) + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + //Create CRC + sendData.crc = ModbusSecureClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); + byteData = BitConverter.GetBytes((int)sendData.crc); + data[data.Length - 2] = byteData[0]; + data[data.Length - 1] = byteData[1]; + serialport.Write(data, 6, data.Length - 6); + if (debug) + { + byte[] debugData = new byte[data.Length - 6]; + Array.Copy(data, 6, debugData, 0, data.Length - 6); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: " + BitConverter.ToString(debugData), System.DateTime.Now); + } + } + else if (udpFlag) + { + //UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(ipAddressIn, portIn); + udpClient.Send(data, data.Length, endPoint); + + } + else + { + stream.Write(data, 0, data.Length); + if (debug) StoreLogData.Instance.Store("Send Data: " + BitConverter.ToString(data), System.DateTime.Now); + } + } + catch (Exception) { } + } + } + + public virtual void ReadInputRegisters(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = this.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + if ((receiveData.quantity < 1) | (receiveData.quantity > 0x007D)) //Invalid quantity + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 3; + } + if (((receiveData.startingAdress + 1 + receiveData.quantity) > 65535) | (receiveData.startingAdress < 0)) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 2; + } + if (sendData.exceptionCode == 0) + { + sendData.byteCount = (byte)(2 * receiveData.quantity); + sendData.sendRegisterValues = new Int16[receiveData.quantity]; + Buffer.BlockCopy(inputRegisters.localArray, receiveData.startingAdress * 2 + 2, sendData.sendRegisterValues, 0, receiveData.quantity * 2); + } + if (sendData.exceptionCode > 0) + sendData.length = 0x03; + else + sendData.length = (ushort)(0x03 + sendData.byteCount); + + if (true) + { + Byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9 + 2 * Convert.ToInt32(serialFlag)]; + else + data = new byte[9 + sendData.byteCount + 2 * Convert.ToInt32(serialFlag)]; + Byte[] byteData = new byte[2]; + sendData.length = (byte)(data.Length - 6); + + //Send Transaction identifier + byteData = BitConverter.GetBytes((int)sendData.transactionIdentifier); + data[0] = byteData[1]; + data[1] = byteData[0]; + + //Send Protocol identifier + byteData = BitConverter.GetBytes((int)sendData.protocolIdentifier); + data[2] = byteData[1]; + data[3] = byteData[0]; + + //Send length + byteData = BitConverter.GetBytes((int)sendData.length); + data[4] = byteData[1]; + data[5] = byteData[0]; + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + //ByteCount + data[8] = sendData.byteCount; + + + if (sendData.exceptionCode > 0) + { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendRegisterValues = null; + } + + + if (sendData.sendRegisterValues != null) + for (int i = 0; i < (sendData.byteCount / 2); i++) + { + byteData = BitConverter.GetBytes((Int16)sendData.sendRegisterValues[i]); + data[9 + i * 2] = byteData[1]; + data[10 + i * 2] = byteData[0]; + } + try + { + if (serialFlag) + { + if (!serialport.IsOpen) + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + //Create CRC + sendData.crc = ModbusSecureClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); + byteData = BitConverter.GetBytes((int)sendData.crc); + data[data.Length - 2] = byteData[0]; + data[data.Length - 1] = byteData[1]; + serialport.Write(data, 6, data.Length - 6); + if (debug) + { + byte[] debugData = new byte[data.Length - 6]; + Array.Copy(data, 6, debugData, 0, data.Length - 6); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: " + BitConverter.ToString(debugData), System.DateTime.Now); + } + + } + else if (udpFlag) + { + //UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(ipAddressIn, portIn); + udpClient.Send(data, data.Length, endPoint); + + } + else + { + stream.Write(data, 0, data.Length); + if (debug) StoreLogData.Instance.Store("Send Data: " + BitConverter.ToString(data), System.DateTime.Now); + } + } + catch (Exception) { } + } + } + + public virtual void WriteSingleCoil(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = this.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + sendData.startingAdress = receiveData.startingAdress; + sendData.receiveCoilValues = receiveData.receiveCoilValues; + if ((receiveData.receiveCoilValues[0] != 0x0000) & (receiveData.receiveCoilValues[0] != 0xFF00)) //Invalid Value + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 3; + } + if (((receiveData.startingAdress + 1) > 65535) | (receiveData.startingAdress < 0)) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 2; + } + if (sendData.exceptionCode == 0) + { + if (receiveData.receiveCoilValues[0] == 0xFF00) + { + lock (lockCoils) + coils[receiveData.startingAdress + 1] = true; + } + if (receiveData.receiveCoilValues[0] == 0x0000) + { + lock (lockCoils) + coils[receiveData.startingAdress + 1] = false; + } + } + if (sendData.exceptionCode > 0) + sendData.length = 0x03; + else + sendData.length = 0x06; + + if (true) + { + Byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9 + 2 * Convert.ToInt32(serialFlag)]; + else + data = new byte[12 + 2 * Convert.ToInt32(serialFlag)]; + + Byte[] byteData = new byte[2]; + sendData.length = (byte)(data.Length - 6); + + //Send Transaction identifier + byteData = BitConverter.GetBytes((int)sendData.transactionIdentifier); + data[0] = byteData[1]; + data[1] = byteData[0]; + + //Send Protocol identifier + byteData = BitConverter.GetBytes((int)sendData.protocolIdentifier); + data[2] = byteData[1]; + data[3] = byteData[0]; + + //Send length + byteData = BitConverter.GetBytes((int)sendData.length); + data[4] = byteData[1]; + data[5] = byteData[0]; + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + + + if (sendData.exceptionCode > 0) + { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendRegisterValues = null; + } + else + { + byteData = BitConverter.GetBytes((int)receiveData.startingAdress); + data[8] = byteData[1]; + data[9] = byteData[0]; + byteData = BitConverter.GetBytes((int)receiveData.receiveCoilValues[0]); + data[10] = byteData[1]; + data[11] = byteData[0]; + } + + + try + { + if (serialFlag) + { + if (!serialport.IsOpen) + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + //Create CRC + sendData.crc = ModbusSecureClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); + byteData = BitConverter.GetBytes((int)sendData.crc); + data[data.Length - 2] = byteData[0]; + data[data.Length - 1] = byteData[1]; + serialport.Write(data, 6, data.Length - 6); + if (debug) + { + byte[] debugData = new byte[data.Length - 6]; + Array.Copy(data, 6, debugData, 0, data.Length - 6); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: " + BitConverter.ToString(debugData), System.DateTime.Now); + } + + } + else if (udpFlag) + { + //UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(ipAddressIn, portIn); + udpClient.Send(data, data.Length, endPoint); + + } + else + { + stream.Write(data, 0, data.Length); + if (debug) StoreLogData.Instance.Store("Send Data: " + BitConverter.ToString(data), System.DateTime.Now); + } + } + catch (Exception) { } + if (CoilsChanged != null) + CoilsChanged(receiveData.startingAdress + 1, 1); + } + } + + public virtual void WriteSingleRegister(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = this.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + sendData.startingAdress = receiveData.startingAdress; + sendData.receiveRegisterValues = receiveData.receiveRegisterValues; + + if ((receiveData.receiveRegisterValues[0] < 0x0000) | (receiveData.receiveRegisterValues[0] > 0xFFFF)) //Invalid Value + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 3; + } + if (((receiveData.startingAdress + 1) > 65535) | (receiveData.startingAdress < 0)) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 2; + } + if (sendData.exceptionCode == 0) + { + lock (lockHoldingRegisters) + holdingRegisters[receiveData.startingAdress + 1] = unchecked((short)receiveData.receiveRegisterValues[0]); + } + if (sendData.exceptionCode > 0) + sendData.length = 0x03; + else + sendData.length = 0x06; + + if (true) + { + Byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9 + 2 * Convert.ToInt32(serialFlag)]; + else + data = new byte[12 + 2 * Convert.ToInt32(serialFlag)]; + + Byte[] byteData = new byte[2]; + sendData.length = (byte)(data.Length - 6); + + + //Send Transaction identifier + byteData = BitConverter.GetBytes((int)sendData.transactionIdentifier); + data[0] = byteData[1]; + data[1] = byteData[0]; + + //Send Protocol identifier + byteData = BitConverter.GetBytes((int)sendData.protocolIdentifier); + data[2] = byteData[1]; + data[3] = byteData[0]; + + //Send length + byteData = BitConverter.GetBytes((int)sendData.length); + data[4] = byteData[1]; + data[5] = byteData[0]; + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + + + if (sendData.exceptionCode > 0) + { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendRegisterValues = null; + } + else + { + byteData = BitConverter.GetBytes((int)receiveData.startingAdress); + data[8] = byteData[1]; + data[9] = byteData[0]; + byteData = BitConverter.GetBytes((int)receiveData.receiveRegisterValues[0]); + data[10] = byteData[1]; + data[11] = byteData[0]; + } + + + try + { + if (serialFlag) + { + if (!serialport.IsOpen) + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + //Create CRC + sendData.crc = ModbusSecureClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); + byteData = BitConverter.GetBytes((int)sendData.crc); + data[data.Length - 2] = byteData[0]; + data[data.Length - 1] = byteData[1]; + serialport.Write(data, 6, data.Length - 6); + if (debug) + { + byte[] debugData = new byte[data.Length - 6]; + Array.Copy(data, 6, debugData, 0, data.Length - 6); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: " + BitConverter.ToString(debugData), System.DateTime.Now); + } + + } + else if (udpFlag) + { + //UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(ipAddressIn, portIn); + udpClient.Send(data, data.Length, endPoint); + + } + else + { + stream.Write(data, 0, data.Length); + if (debug) StoreLogData.Instance.Store("Send Data: " + BitConverter.ToString(data), System.DateTime.Now); + } + } + catch (Exception) { } + if (HoldingRegistersChanged != null) + HoldingRegistersChanged(receiveData.startingAdress + 1, 1); + } + } + + public virtual void WriteMultipleCoils(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = this.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + sendData.startingAdress = receiveData.startingAdress; + sendData.quantity = receiveData.quantity; + + if ((receiveData.quantity == 0x0000) | (receiveData.quantity > 0x07B0)) //Invalid Quantity + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 3; + } + if ((((int)receiveData.startingAdress + 1 + (int)receiveData.quantity) > 65535) | (receiveData.startingAdress < 0)) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 2; + } + if (sendData.exceptionCode == 0) + { + lock (lockCoils) + for (int i = 0; i < receiveData.quantity; i++) + { + int shift = i % 16; + /* if ((i == receiveData.quantity - 1) & (receiveData.quantity % 2 != 0)) + { + if (shift < 8) + shift = shift + 8; + else + shift = shift - 8; + }*/ + int mask = 0x1; + mask = mask << (shift); + if ((receiveData.receiveCoilValues[i / 16] & (ushort)mask) == 0) + + coils[receiveData.startingAdress + i + 1] = false; + else + + coils[receiveData.startingAdress + i + 1] = true; + + } + } + if (sendData.exceptionCode > 0) + sendData.length = 0x03; + else + sendData.length = 0x06; + if (true) + { + Byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9 + 2 * Convert.ToInt32(serialFlag)]; + else + data = new byte[12 + 2 * Convert.ToInt32(serialFlag)]; + + Byte[] byteData = new byte[2]; + sendData.length = (byte)(data.Length - 6); + + //Send Transaction identifier + byteData = BitConverter.GetBytes((int)sendData.transactionIdentifier); + data[0] = byteData[1]; + data[1] = byteData[0]; + + //Send Protocol identifier + byteData = BitConverter.GetBytes((int)sendData.protocolIdentifier); + data[2] = byteData[1]; + data[3] = byteData[0]; + + //Send length + byteData = BitConverter.GetBytes((int)sendData.length); + data[4] = byteData[1]; + data[5] = byteData[0]; + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + + + if (sendData.exceptionCode > 0) + { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendRegisterValues = null; + } + else + { + byteData = BitConverter.GetBytes((int)receiveData.startingAdress); + data[8] = byteData[1]; + data[9] = byteData[0]; + byteData = BitConverter.GetBytes((int)receiveData.quantity); + data[10] = byteData[1]; + data[11] = byteData[0]; + } + + + try + { + if (serialFlag) + { + if (!serialport.IsOpen) + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + //Create CRC + sendData.crc = ModbusSecureClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); + byteData = BitConverter.GetBytes((int)sendData.crc); + data[data.Length - 2] = byteData[0]; + data[data.Length - 1] = byteData[1]; + serialport.Write(data, 6, data.Length - 6); + if (debug) + { + byte[] debugData = new byte[data.Length - 6]; + Array.Copy(data, 6, debugData, 0, data.Length - 6); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: " + BitConverter.ToString(debugData), System.DateTime.Now); + } + + } + else if (udpFlag) + { + //UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(ipAddressIn, portIn); + udpClient.Send(data, data.Length, endPoint); + + } + else + { + stream.Write(data, 0, data.Length); + if (debug) StoreLogData.Instance.Store("Send Data: " + BitConverter.ToString(data), System.DateTime.Now); + } + } + catch (Exception) { } + if (CoilsChanged != null) + CoilsChanged(receiveData.startingAdress + 1, receiveData.quantity); + } + } + + public virtual void WriteMultipleRegisters(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = this.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + sendData.startingAdress = receiveData.startingAdress; + sendData.quantity = receiveData.quantity; + + if ((receiveData.quantity == 0x0000) | (receiveData.quantity > 0x07B0)) //Invalid Quantity + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 3; + } + if ((((int)receiveData.startingAdress + 1 + (int)receiveData.quantity) > 65535) | (receiveData.startingAdress < 0)) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 2; + } + if (sendData.exceptionCode == 0) + { + lock (lockHoldingRegisters) + for (int i = 0; i < receiveData.quantity; i++) + { + holdingRegisters[receiveData.startingAdress + i + 1] = unchecked((short)receiveData.receiveRegisterValues[i]); + } + } + if (sendData.exceptionCode > 0) + sendData.length = 0x03; + else + sendData.length = 0x06; + if (true) + { + Byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9 + 2 * Convert.ToInt32(serialFlag)]; + else + data = new byte[12 + 2 * Convert.ToInt32(serialFlag)]; + + Byte[] byteData = new byte[2]; + sendData.length = (byte)(data.Length - 6); + + //Send Transaction identifier + byteData = BitConverter.GetBytes((int)sendData.transactionIdentifier); + data[0] = byteData[1]; + data[1] = byteData[0]; + + //Send Protocol identifier + byteData = BitConverter.GetBytes((int)sendData.protocolIdentifier); + data[2] = byteData[1]; + data[3] = byteData[0]; + + //Send length + byteData = BitConverter.GetBytes((int)sendData.length); + data[4] = byteData[1]; + data[5] = byteData[0]; + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + + + if (sendData.exceptionCode > 0) + { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendRegisterValues = null; + } + else + { + byteData = BitConverter.GetBytes((int)receiveData.startingAdress); + data[8] = byteData[1]; + data[9] = byteData[0]; + byteData = BitConverter.GetBytes((int)receiveData.quantity); + data[10] = byteData[1]; + data[11] = byteData[0]; + } + + + try + { + if (serialFlag) + { + if (!serialport.IsOpen) + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + //Create CRC + sendData.crc = ModbusSecureClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); + byteData = BitConverter.GetBytes((int)sendData.crc); + data[data.Length - 2] = byteData[0]; + data[data.Length - 1] = byteData[1]; + serialport.Write(data, 6, data.Length - 6); + if (debug) + { + byte[] debugData = new byte[data.Length - 6]; + Array.Copy(data, 6, debugData, 0, data.Length - 6); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: " + BitConverter.ToString(debugData), System.DateTime.Now); + } + + } + else if (udpFlag) + { + //UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(ipAddressIn, portIn); + udpClient.Send(data, data.Length, endPoint); + + } + else + { + stream.Write(data, 0, data.Length); + if (debug) StoreLogData.Instance.Store("Send Data: " + BitConverter.ToString(data), System.DateTime.Now); + } + } + catch (Exception) { } + if (HoldingRegistersChanged != null) + HoldingRegistersChanged(receiveData.startingAdress + 1, receiveData.quantity); + } + } + + public virtual void ReadWriteMultipleRegisters(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = this.unitIdentifier; + sendData.functionCode = receiveData.functionCode; + + + if ((receiveData.quantityRead < 0x0001) | (receiveData.quantityRead > 0x007D) | (receiveData.quantityWrite < 0x0001) | (receiveData.quantityWrite > 0x0079) | (receiveData.byteCount != (receiveData.quantityWrite * 2))) //Invalid Quantity + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 3; + } + if ((((int)receiveData.startingAddressRead + 1 + (int)receiveData.quantityRead) > 65535) | (((int)receiveData.startingAddressWrite + 1 + (int)receiveData.quantityWrite) > 65535) | (receiveData.quantityWrite < 0) | (receiveData.quantityRead < 0)) //Invalid Starting adress or Starting address + quantity + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 2; + } + if (sendData.exceptionCode == 0) + { + sendData.sendRegisterValues = new Int16[receiveData.quantityRead]; + lock (lockHoldingRegisters) + Buffer.BlockCopy(holdingRegisters.localArray, receiveData.startingAddressRead * 2 + 2, sendData.sendRegisterValues, 0, receiveData.quantityRead * 2); + + lock (holdingRegisters) + for (int i = 0; i < receiveData.quantityWrite; i++) + { + holdingRegisters[receiveData.startingAddressWrite + i + 1] = unchecked((short)receiveData.receiveRegisterValues[i]); + } + sendData.byteCount = (byte)(2 * receiveData.quantityRead); + } + if (sendData.exceptionCode > 0) + sendData.length = 0x03; + else + sendData.length = Convert.ToUInt16(3 + 2 * receiveData.quantityRead); + if (true) + { + Byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9 + 2 * Convert.ToInt32(serialFlag)]; + else + data = new byte[9 + sendData.byteCount + 2 * Convert.ToInt32(serialFlag)]; + + Byte[] byteData = new byte[2]; + + //Send Transaction identifier + byteData = BitConverter.GetBytes((int)sendData.transactionIdentifier); + data[0] = byteData[1]; + data[1] = byteData[0]; + + //Send Protocol identifier + byteData = BitConverter.GetBytes((int)sendData.protocolIdentifier); + data[2] = byteData[1]; + data[3] = byteData[0]; + + //Send length + byteData = BitConverter.GetBytes((int)sendData.length); + data[4] = byteData[1]; + data[5] = byteData[0]; + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + //Function Code + data[7] = sendData.functionCode; + + //ByteCount + data[8] = sendData.byteCount; + + + if (sendData.exceptionCode > 0) + { + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + sendData.sendRegisterValues = null; + } + else + { + if (sendData.sendRegisterValues != null) + for (int i = 0; i < (sendData.byteCount / 2); i++) + { + byteData = BitConverter.GetBytes((Int16)sendData.sendRegisterValues[i]); + data[9 + i * 2] = byteData[1]; + data[10 + i * 2] = byteData[0]; + } + + } + + + try + { + if (serialFlag) + { + if (!serialport.IsOpen) + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + //Create CRC + sendData.crc = ModbusSecureClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); + byteData = BitConverter.GetBytes((int)sendData.crc); + data[data.Length - 2] = byteData[0]; + data[data.Length - 1] = byteData[1]; + serialport.Write(data, 6, data.Length - 6); + if (debug) + { + byte[] debugData = new byte[data.Length - 6]; + Array.Copy(data, 6, debugData, 0, data.Length - 6); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: " + BitConverter.ToString(debugData), System.DateTime.Now); + } + + } + else if (udpFlag) + { + //UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(ipAddressIn, portIn); + udpClient.Send(data, data.Length, endPoint); + + } + else + { + stream.Write(data, 0, data.Length); + if (debug) StoreLogData.Instance.Store("Send Data: " + BitConverter.ToString(data), System.DateTime.Now); + } + } + catch (Exception) { } + if (HoldingRegistersChanged != null) + HoldingRegistersChanged(receiveData.startingAddressWrite + 1, receiveData.quantityWrite); + } + } + + protected void sendException(int errorCode, int exceptionCode, ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + sendData.response = true; + + sendData.transactionIdentifier = receiveData.transactionIdentifier; + sendData.protocolIdentifier = receiveData.protocolIdentifier; + + sendData.unitIdentifier = receiveData.unitIdentifier; + sendData.errorCode = (byte)errorCode; + sendData.exceptionCode = (byte)exceptionCode; + + if (sendData.exceptionCode > 0) + sendData.length = 0x03; + else + sendData.length = (ushort)(0x03 + sendData.byteCount); + + if (true) + { + Byte[] data; + if (sendData.exceptionCode > 0) + data = new byte[9 + 2 * Convert.ToInt32(serialFlag)]; + else + data = new byte[9 + sendData.byteCount + 2 * Convert.ToInt32(serialFlag)]; + Byte[] byteData = new byte[2]; + sendData.length = (byte)(data.Length - 6); + + //Send Transaction identifier + byteData = BitConverter.GetBytes((int)sendData.transactionIdentifier); + data[0] = byteData[1]; + data[1] = byteData[0]; + + //Send Protocol identifier + byteData = BitConverter.GetBytes((int)sendData.protocolIdentifier); + data[2] = byteData[1]; + data[3] = byteData[0]; + + //Send length + byteData = BitConverter.GetBytes((int)sendData.length); + data[4] = byteData[1]; + data[5] = byteData[0]; + + //Unit Identifier + data[6] = sendData.unitIdentifier; + + + data[7] = sendData.errorCode; + data[8] = sendData.exceptionCode; + + + try + { + if (serialFlag) + { + if (!serialport.IsOpen) + throw new EasyModbusSecure.Exceptions.SerialPortNotOpenedException("serial port not opened"); + //Create CRC + sendData.crc = ModbusSecureClient.calculateCRC(data, Convert.ToUInt16(data.Length - 8), 6); + byteData = BitConverter.GetBytes((int)sendData.crc); + data[data.Length - 2] = byteData[0]; + data[data.Length - 1] = byteData[1]; + serialport.Write(data, 6, data.Length - 6); + if (debug) + { + byte[] debugData = new byte[data.Length - 6]; + Array.Copy(data, 6, debugData, 0, data.Length - 6); + if (debug) StoreLogData.Instance.Store("Send Serial-Data: " + BitConverter.ToString(debugData), System.DateTime.Now); + } + } + else if (udpFlag) + { + //UdpClient udpClient = new UdpClient(); + IPEndPoint endPoint = new IPEndPoint(ipAddressIn, portIn); + udpClient.Send(data, data.Length, endPoint); + + } + else + { + stream.Write(data, 0, data.Length); + if (debug) StoreLogData.Instance.Store("Send Data: " + BitConverter.ToString(data), System.DateTime.Now); + } + } + catch (Exception) { } + } + } + + private void CreateLogData(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData) + { + for (int i = 0; i < 98; i++) + { + modbusLogData[99 - i] = modbusLogData[99 - i - 2]; + + } + modbusLogData[0] = receiveData; + modbusLogData[1] = sendData; + + } + + + + public int NumberOfConnections + { + get + { + return numberOfConnections; + } + } + + public ModbusSecureProtocol[] ModbusLogData + { + get + { + return modbusLogData; + } + } + + public int Port + { + get + { + return port; + } + set + { + port = value; + + + } + } + + public bool UDPFlag + { + get + { + return udpFlag; + } + set + { + udpFlag = value; + } + } + + public bool SerialFlag + { + get + { + return serialFlag; + } + set + { + serialFlag = value; + } + } + + public int Baudrate + { + get + { + return baudrate; + } + set + { + baudrate = value; + } + } + + public System.IO.Ports.Parity Parity + { + get + { + return parity; + } + set + { + parity = value; + } + } + + public System.IO.Ports.StopBits StopBits + { + get + { + return stopBits; + } + set + { + stopBits = value; + } + } + + public string SerialPort + { + get + { + return serialPort; + } + set + { + serialPort = value; + if (serialPort != null) + serialFlag = true; + else + serialFlag = false; + } + } + + public byte UnitIdentifier + { + get + { + return unitIdentifier; + } + set + { + unitIdentifier = value; + } + } + + + + + /// <summary> + /// Gets or Sets the Filename for the LogFile + /// </summary> + public string LogFileFilename + { + get + { + return StoreLogData.Instance.Filename; + } + set + { + StoreLogData.Instance.Filename = value; + if (StoreLogData.Instance.Filename != null) + debug = true; + else + debug = false; + } + } + + + + + public class HoldingRegisters + { + public Int16[] localArray = new Int16[65535]; + ModbusSecureServer ModbusSecureServer; + + public HoldingRegisters(EasyModbusSecure.ModbusSecureServer ModbusSecureServer) + { + this.ModbusSecureServer = ModbusSecureServer; + } + + public Int16 this[int x] + { + get { return this.localArray[x]; } + set + { + this.localArray[x] = value; + + } + } + } + + public class InputRegisters + { + public Int16[] localArray = new Int16[65535]; + ModbusSecureServer ModbusSecureServer; + + public InputRegisters(EasyModbusSecure.ModbusSecureServer ModbusSecureServer) + { + this.ModbusSecureServer = ModbusSecureServer; + } + + public Int16 this[int x] + { + get { return this.localArray[x]; } + set + { + this.localArray[x] = value; + + } + } + } + + public class Coils + { + public bool[] localArray = new bool[65535]; + ModbusSecureServer ModbusSecureServer; + + public Coils(EasyModbusSecure.ModbusSecureServer ModbusSecureServer) + { + this.ModbusSecureServer = ModbusSecureServer; + } + + public bool this[int x] + { + get { return this.localArray[x]; } + set + { + this.localArray[x] = value; + + } + } + } + + public class DiscreteInputs + { + public bool[] localArray = new bool[65535]; + ModbusSecureServer ModbusSecureServer; + + public DiscreteInputs(EasyModbusSecure.ModbusSecureServer ModbusSecureServer) + { + this.ModbusSecureServer = ModbusSecureServer; + } + + public bool this[int x] + { + get { return this.localArray[x]; } + set + { + this.localArray[x] = value; + + } + } + + + } + } + + public class ModbusSecureServerAuthZ : ModbusSecureServer + { + public bool FunctionCode1AuthZDisabled { get; set; } + public bool FunctionCode2AuthZDisabled { get; set; } + public bool FunctionCode3AuthZDisabled { get; set; } + public bool FunctionCode4AuthZDisabled { get; set; } + public bool FunctionCode5AuthZDisabled { get; set; } + public bool FunctionCode6AuthZDisabled { get; set; } + public bool FunctionCode15AuthZDisabled { get; set; } + public bool FunctionCode16AuthZDisabled { get; set; } + public bool FunctionCode23AuthZDisabled { get; set; } + + public ModbusSecureServerAuthZ(string certificate, string certificatePassword, bool mutualAuthentication, List<ValueTuple<string, List<byte>>> acceptableRoles) + : base(certificate, certificatePassword, mutualAuthentication, acceptableRoles) + { + + //secureServer = new ModbusSecureServer(certificate,certificatePassword, mutualAuthentication, acceptableRoles); + } + + + #region Method CheckRoleAccess + private Boolean CheckRoleAccess(SslStream stream, string roleStr, byte functionCode) + { + // TODO: Maybe Modbus functions accessiblity should be checked + + //if (!this.acceptableRoles.Contains(ValueTuple.Create(roleStr, functionCode))) + //{ + // return false; + //} + //else if (this.acceptableRoles.Contains(ValueTuple.Create(roleStr, functionCode))) + //{ + // return true; + //} + + if(acceptableRoles.Any(roleTuple => roleTuple.Item1.Equals(roleStr) && roleTuple.Item2.Contains(functionCode))) + { + return true; + } + + return false; + } + #endregion + + + public void HandleRoleCheck(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn, bool FunctionCodeNAuthZDisabled, + Action<ModbusSecureProtocol, ModbusSecureProtocol, SslStream, int, IPAddress> ModbusFunction) + { + if (CheckRoleAccess(stream, this.TcpHandlerRole, receiveData.functionCode) && !FunctionCodeNAuthZDisabled) + { + //ModbusFunction(receiveData, sendData, stream, portIn, ipAddressIn); + ModbusFunction(receiveData, sendData, stream, portIn, ipAddressIn); + } + else + { + sendData.errorCode = (byte)(receiveData.functionCode + 0x80); + sendData.exceptionCode = 1; + base.sendException(sendData.errorCode, sendData.exceptionCode, receiveData, sendData, stream, portIn, ipAddressIn); + //TODO: Should this exception beeing logged as a client might try to access non-assigned functions? + } + } + + public override void ReadCoils(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + HandleRoleCheck(receiveData, sendData, stream, portIn, ipAddressIn, FunctionCode1AuthZDisabled, base.ReadCoils); + } + + public override void ReadDiscreteInputs(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + HandleRoleCheck(receiveData, sendData, stream, portIn, ipAddressIn, FunctionCode2AuthZDisabled, base.ReadDiscreteInputs); + } + + public override void ReadHoldingRegisters(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + HandleRoleCheck(receiveData, sendData, stream, portIn, ipAddressIn, FunctionCode3AuthZDisabled, base.ReadHoldingRegisters); + } + + public override void ReadInputRegisters(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + HandleRoleCheck(receiveData, sendData, stream, portIn, ipAddressIn, FunctionCode4AuthZDisabled, base.ReadInputRegisters); + } + + public override void WriteSingleCoil(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + HandleRoleCheck(receiveData, sendData, stream, portIn, ipAddressIn, FunctionCode5AuthZDisabled, base.WriteSingleCoil); + } + + public override void WriteSingleRegister(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + HandleRoleCheck(receiveData, sendData, stream, portIn, ipAddressIn, FunctionCode6AuthZDisabled, base.WriteSingleRegister); + } + + public override void WriteMultipleCoils(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + HandleRoleCheck(receiveData, sendData, stream, portIn, ipAddressIn, FunctionCode15AuthZDisabled, base.WriteMultipleCoils); + } + + public override void WriteMultipleRegisters(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + HandleRoleCheck(receiveData, sendData, stream, portIn, ipAddressIn, FunctionCode16AuthZDisabled, base.WriteMultipleRegisters); + } + + public override void ReadWriteMultipleRegisters(ModbusSecureProtocol receiveData, ModbusSecureProtocol sendData, SslStream stream, int portIn, IPAddress ipAddressIn) + { + HandleRoleCheck(receiveData, sendData, stream, portIn, ipAddressIn, FunctionCode23AuthZDisabled, base.ReadWriteMultipleRegisters); + } + } + +} diff --git a/EasyModbus_Secure/Properties/AssemblyInfo.cs b/EasyModbus_Secure/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..87e63ce --- /dev/null +++ b/EasyModbus_Secure/Properties/AssemblyInfo.cs @@ -0,0 +1,31 @@ +#region Using directives + +using System; +using System.Reflection; +using System.Runtime.InteropServices; + +#endregion + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("EasyModbus")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Stefan Rossmann Engineering Solutions")] +[assembly: AssemblyProduct("EasyModbus")] +[assembly: AssemblyCopyright("Copyright 2017-2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// This sets the default COM visibility of types in the assembly to invisible. +// If you need to expose a type to COM, use [ComVisible(true)] on that type. +[assembly: ComVisible(false)] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all the values or you can use the default the Revision and +// Build Numbers by using the '*' as shown below: +[assembly: AssemblyVersion("5.6.0")] diff --git a/EasyModbus_Secure/README.MD b/EasyModbus_Secure/README.MD new file mode 100644 index 0000000..49ec514 --- /dev/null +++ b/EasyModbus_Secure/README.MD @@ -0,0 +1,70 @@ +# Requirements Listing and Implementation Description + +|Requirement| Description | +| ------------- |:-------------:| +| R-01: The TLS Protocol v1.2 as defined in [RFC5246] or newer MUST be used as the secure transport protocol to an mbaps Device.|Supported +| R-02: Secure communications to an mbaps Device MUST use Mutual client/server authentication as provided by the TLS Handshake Protocol|Supported, see Demo Client [](https://github.com/georgemakrakis/EasyModbusTCP.NET/blob/master/EasySecureModbus_Demo/README.md) and [](https://github.com/georgemakrakis/EasyModbusTCP.NET/blob/master/EasyModbus_Secure/Specs_vs_Packet_Capture.PNG) +| R-03: x.509v3 Certificates as defined in [RFC5280] MUST be used as mbaps device credentials for Identity/Authentication by the TLS protocol.|Supported +| R-04: If the Authorization function is enforced it MUST use the role transferred via x.509v3 certificate extensions|Supported +| R-05: There MUST be no change to the mbap protocol as a consequence of it being encapsulated by the secure transport|Supported +| R-06: mbaps end devices MUST provide mutual authentication when executing the TLS Handshake Protocol to create the TLS session.|Supported +| R-07: The TlsServer MUST send the CertificateRequest extension as part of its ServerHello message.|Supported, see [](https://github.com/georgemakrakis/EasyModbusTCP.NET/blob/master/EasyModbus_Secure/Specs_vs_Packet_Capture.PNG) +| R-08: The TlsClient MUST send a ClientCertificate message upon receiving a request containing the Client Certificate Request.|Supported, see [](https://github.com/georgemakrakis/EasyModbusTCP.NET/blob/master/EasyModbus_Secure/Specs_vs_Packet_Capture.PNG) +| R-09: If the TlsServer does not send a CertificateRequest message, then the TlsClient MUST send a ‘fatal alert’ message to the TlsServer and terminate the connection.|Supported +| R-10: If the TlsClient does not send a ClientCertificate message, then the TlsServer MUST send a ‘fatal alert’ message to TlsClient and terminate the connection.|Supported +| R-11: Per RFC5246-7.2.2, the TLS connection MUST NOT be resumed after a ‘fatal alert’.|Supported +| R-12: Cipher suites used with TLS for mbaps MUST be listed at the IANA Registry found @ http://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml .|Supported, see https://docs.microsoft.com/en-us/dotnet/api/system.net.security.tlsciphersuite?view=net-6.0&viewFallbackFrom=net-4.5 +| R-13: The cipher allowed for TLS with mbaps MUST accommodate the use of x.509v3 certificates.|Supported +| R-14: mbaps Devices MUST provide at minimum the following TLS v1.2 cipher suites: <ul><li> TLS_RSA_WITH_AES_128_CBC_SHA256, {0x00, 0x3C}</li> <li>TLS_RSA_WITH_NULL_SHA256, {0x00, 0x3B} </li></ul>|Can be set, see https://docs.microsoft.com/en-us/windows-server/security/tls/manage-tls#configuring-tls-cipher-suite-order-by-using-group-policy +| R-15: The default cipher suite for both mbaps client and server Devices SHOULD be TLS_RSA_WITH_AES_128_CBC_SHA256, {0x00, 0x3C}|Can be set, see https://docs.microsoft.com/en-us/windows-server/security/tls/manage-tls#configuring-tls-cipher-suite-order-by-using-group-policy +| R-66: Client devices with bulk transport encryption and NULL bulk encryption SHOULD always place NULL bulk transport cipher suites last in cipher suite priority|Can be set, see https://docs.microsoft.com/en-us/windows-server/security/tls/manage-tls#configuring-tls-cipher-suite-order-by-using-group-policy +| R-16: A mbaps Server Device SHOULD provide the role-based client AuthZ as described in this section.|Supported +| R-17: If a mbaps Server Device provides role-based client AuthZ, it MUST comply with the requirements identified in this section.|Supported +| R-18: To provide mbaps role-based client authorization capability the following elements are REQUIRED: <ul><li>x.509v3 client domain certificate ‘Role’ extension </li><li>mbaps server AuthZ algorithm</li><li> mbaps server Roles-to-Rights Rules Database </li></ul>|Supported +| R-19: The mbaps client device MUST be provisioned with its x.509v3 domain certificate.|Supported, see Demo Client [](https://github.com/georgemakrakis/EasyModbusTCP.NET/blob/master/EasySecureModbus_Demo/README.md) +| R-20: The x.509v3 client domain certificate MUST include the Role extension.is section.|Supported, see Demo Client [](https://github.com/georgemakrakis/EasyModbusTCP.NET/blob/master/EasySecureModbus_Demo/README.md) +| R-21: The Role in the X.509v3 certificate MUST use the Modbus.org PEM OID 1.3.6.1.4.1.50316.802.1|Supported, see Demo Client [](https://github.com/georgemakrakis/EasyModbusTCP.NET/blob/master/EasySecureModbus_Demo/README.md) +| R-22: The Role in the x.509v3 certificate MUST use ASN1:UTF8String encoding|Supported, see Demo Client [](https://github.com/georgemakrakis/EasyModbusTCP.NET/blob/master/EasySecureModbus_Demo/README.md) +| R-65: There MUST only be one role defined per certificate. The entire string will be treated as one role.|Supported +| R-23: If no Role is specified in the X.509v3 certificate, the mbaps server MUST provide a NULL role to the AuthZ algorithm.|Supported, see Demo Server [](https://github.com/georgemakrakis/EasyModbusTCP.NET/blob/master/EasySecureModbus_Demo_Server/README.md) +| R-24: The mbaps AuthZ Algorithm MUST be defined and provided by the device vendor.|Supported +| R-25: The Roles-to-Rights Rules Database design, both syntax and semantics, MUST be defined by the device vendor.|Supported +| R-26: The Roles-to-Rights Rules Database for a particular application MUST be configured according to the device vendor’s design, and provisioned in the mbaps Server by the end user|Supported, see Demo Server [](https://github.com/georgemakrakis/EasyModbusTCP.NET/blob/master/EasySecureModbus_Demo_Server/README.md) +| R-27: The Roles-to-Rights Rules Database for a particular application MUST be configurable by the end user.|Supported, see Demo Server [](https://github.com/georgemakrakis/EasyModbusTCP.NET/blob/master/EasySecureModbus_Demo_Server/README.md) +| R-28: The Roles-to-Rights Rules Database for a particular application MUST NOT have hardcoded default roles that are unchangeable|Supported +| R-29: The Role values used in the x.509v3 client domain certificates MUST be consistent with the device vendor’s design of the Roles-to-Rights Rules Database.|Supported +| R-30: The mbaps server MUST extract the client Role from the received x.509v3 client domain certificate.|Supported +| R-31: If the MBAP protocol handler for authorization rejects a request it MUST use the exception code 01 – Illegal function code|Supported +| R-32: mbaps devices MUST provide TLS v1.2 or better|Supported +| R-33: mbaps Devices MUST conform to the requirements of [RFC5246]|Supported +| R-34: mbaps devices MUST NOT negotiate down to TLS v1.1, TLS v1.0, or SSL V3.0.|Supported by default, see https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls +| R-35: mbaps devices MUST NOT negotiate the use SSL v2.0 and SSL v1.0 in conformance with [RFC6176]|Supported by default, see https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls +| R-36: mbaps Devices SHOULD provide a counter mode cipher suite. Counter mode cipher suites include <ul><li>TLS_RSA_WITH_AES_128_GCM_SHA256, {0x00, 0x9C} </li><li> TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, {0xC0, 0x2B} </li></ul> |Can be set, see https://docs.microsoft.com/en-us/windows-server/security/tls/manage-tls#configuring-tls-cipher-suite-order-by-using-group-policy +| R-37: mbaps Devices MUST NOT negotiate the cipher suite, TLS_NULL_WITH_NULL_NULL |Supported +| R-38: Any cipher suite used by mbaps Devices and negotiated in a TLS Handshake Protocol exchange MUST be listed at IANA’s TLS Cipher Suite Registry in the [TLS-PARAMS].|Supported +| R-39: mbaps Devices MUST provide TLS Client-Server key exchange based-on RSA technology as specified by the mandatory cipher suite and described in [RFC5246]|Supported +| R-40 mbaps Devices SHOULD provide TLS Client-Server key exchange based on ECC technology.|Supported +| R-61 mbaps Devices using ECC technology MUST support at least P-256 NIST curve|Supported, see https://docs.microsoft.com/en-us/windows/win32/secauthn/tls-elliptic-curves-in-windows-10-1607-and-later +| R-62 mbaps Devices using ECC technology MUST support at least the minimum cipher suite of TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256|Supported, see https://docs.microsoft.com/en-us/windows/win32/secauthn/tls-cipher-suites-in-windows-10-v1809 +| R-63 mbaps Devices using ECC technology MUST specify the curves used in their Client Hello using the Supported Elliptic Curves extension in [RFC4492]|Supported +| R-64 mbaps Devices using ECC technology MUST specify the point format used in their Client Hello using the Supported Point Format extension in [RFC4492]|Supported +| R-41: mbaps Devices MUST support the TLS Client-Server Mutual Authentication Handshake.|Supported +| R-42: mbaps Device SHOULD support the TLS Resumed Session Handshake on Client and Server.|Supported, see https://docs.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings +| R-43: mbaps Device MAY support the TLS Session Ticket resumption on Client and Server|Partially supported, see https://docs.microsoft.com/en-us/windows-server/security/tls/tls-registry-settings +| R-44: mbaps Servers MUST reject a TLS Handshake where the Client has not responded to a Client Certificate request with certificate.|Supported +| R-45: mbaps Devices SHOULD provide x.509v3 Certificates signed by a Certificate Authority.|Supported +| R-46: mbaps Devices MUST send the entire certificate chain down to the root CA when sending their certificate|Supported +| R-47: x.509v3 Certificates provided by mbaps Devices MUST conform to the requirements of [RFC5280].|Supported +| R-48: If an mbaps Device is to be used in a scenario where encryption is required, then a cipher suite with the required encryption indicator MUST be chosen from the list at IANA’s TLS Cipher Suite Registry in the [TLS-PARAMS].|Supported +| R-49: If an mbaps Device is to be used in a scenario where encryption is not required, then a cipher suite with a NULL bulk encryption indicator MUST be chosen from the list at IANA’s TLS Cipher Suite Registry in the [TLS-PARAMS]|Supported +| R-50: mbaps Devices MUST NOT use the HMAC-MD5 hash algorithm.|Supported +| R-51: mbaps Devices MUST NOT use the HMAC-SHA-1 hash algorithm.|Supported +| R-52: mbaps Devices MUST provide the HMAC-SHA-256 hash algorithm.|Supported +| R-53: mbaps Device MUST NOT use a NULL HMAC hash algorithm.|Supported +| R-54: mbaps Devices MUST NOT provide the HMAC-SHA-1 hash algorithm for use in the PRF function to calculate the key block as defined in [RFC5246] sections 5, 6.3 and 8.1.|Supported +| R-55: mbaps Devices MUST provide the HMAC-SHA-256 hash algorithm for use in the PRF function to calculate the key block as defined in [RFC5246] sections 5, 6.3 and 8.1.|Supports HMAC-SHA-512, see https://devblogs.microsoft.com/dotnet/cryptographic-improvements-in-asp-net-4-5-pt-2/ +| R-56: As early as possible in their development cycle, mbaps devices MUST determine that they comply with the import/export conformance policies of their respective countries for the cryptography they provide.| +| R-57: mbaps devices MUST provide the Maximum Fragment Length Negotiation Extension as defined in [RFC6066].|Propably supported on Windows, see https://github.com/dotnet/runtime/issues/44241 +| R-58: mbaps devices MUST provide the ability to negotiate a Maximum Fragment Length of 29 (512) bytes as defined in [RFC6066].|Propably supported on Windows, see https://github.com/dotnet/runtime/issues/44241 +| R-59: mbaps devices MUST set the TLS CompressionMethod field of the ClientHello message to the value of NULL.|Supported +| R-60: mbaps devices MUST provide the TLS Renegotiation Indication Extension defined in [RFC5746] to provide the secure renegotiation of TLS sessions.|Supported diff --git a/EasyModbus_Secure/Specs_vs_Packet_Capture.PNG b/EasyModbus_Secure/Specs_vs_Packet_Capture.PNG new file mode 100644 index 0000000..5f7ea09 Binary files /dev/null and b/EasyModbus_Secure/Specs_vs_Packet_Capture.PNG differ diff --git a/EasyModbus_Secure/StoreLogData.cs b/EasyModbus_Secure/StoreLogData.cs new file mode 100644 index 0000000..c87d772 --- /dev/null +++ b/EasyModbus_Secure/StoreLogData.cs @@ -0,0 +1,120 @@ +/* +Copyright (c) 2018-2020 Rossmann-Engineering +Permission is hereby granted, free of charge, +to any person obtaining a copy of this software +and associated documentation files (the "Software"), +to deal in the Software without restriction, +including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission +notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +using System; +using System.Collections.Generic; +using System.Text; + +namespace EasyModbusSecure +{ + /// <summary> + /// Store Log-Data in a File + /// </summary> + public sealed class StoreLogData + { + private String filename = null; + private static volatile StoreLogData instance; + private static object syncObject = new Object(); + + /// <summary> + /// Private constructor; Ensures the access of the class only via "instance" + /// </summary> + private StoreLogData() + { + } + + /// <summary> + /// Returns the instance of the class (singleton) + /// </summary> + /// <returns>instance (Singleton)</returns> + public static StoreLogData Instance + { + get + { + if (instance == null) + { + lock (syncObject) + { + if (instance == null) + instance = new StoreLogData(); + } + } + + return instance; + } + } + + /// <summary> + /// Store message in Log-File + /// </summary> + /// <param name="message">Message to append to the Log-File</param> + public void Store(String message) + { + if (this.filename == null) + return; + + using (System.IO.StreamWriter file = + new System.IO.StreamWriter(Filename, true)) + { + file.WriteLine(message); + } + } + + /// <summary> + /// Store message in Log-File including Timestamp + /// </summary> + /// <param name="message">Message to append to the Log-File</param> + /// <param name="timestamp">Timestamp to add to the same Row</param> + public void Store(String message, DateTime timestamp) + { + try + { + using (System.IO.StreamWriter file = + new System.IO.StreamWriter(Filename, true)) + { + file.WriteLine(timestamp.ToString("dd.MM.yyyy H:mm:ss.ff ") + message); + } + } + catch (Exception e) + { + + } + } + + /// <summary> + /// Gets or Sets the Filename to Store Strings in a File + /// </summary> + public string Filename + { + get + { + return filename; + } + set + { + filename = value; + } + } + } +} diff --git a/EasyModbus_Secure/nuget.exe b/EasyModbus_Secure/nuget.exe new file mode 100644 index 0000000..ad35fa4 Binary files /dev/null and b/EasyModbus_Secure/nuget.exe differ diff --git a/EasyModbus_Secure/packages.config b/EasyModbus_Secure/packages.config new file mode 100644 index 0000000..fb0e4f8 --- /dev/null +++ b/EasyModbus_Secure/packages.config @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="BouncyCastle" version="1.8.9" targetFramework="net45" /> + <package id="System.ValueTuple" version="4.5.0" targetFramework="net45" /> +</packages> \ No newline at end of file diff --git a/EasySecureModbus_Demo/App.config b/EasySecureModbus_Demo/App.config new file mode 100644 index 0000000..d1428ad --- /dev/null +++ b/EasySecureModbus_Demo/App.config @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<configuration> + <startup> + <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/> + </startup> +</configuration> diff --git a/EasySecureModbus_Demo/EasyModbusSecure_Demo.csproj b/EasySecureModbus_Demo/EasyModbusSecure_Demo.csproj new file mode 100644 index 0000000..a219996 --- /dev/null +++ b/EasySecureModbus_Demo/EasyModbusSecure_Demo.csproj @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProjectGuid>{EC330A89-9EDF-4C4E-8261-39994E4C3CA5}</ProjectGuid> + <OutputType>Exe</OutputType> + <RootNamespace>EasuySecureModbus_Demo</RootNamespace> + <AssemblyName>EasuySecureModbus_Demo</AssemblyName> + <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + <Deterministic>true</Deterministic> + <TargetFrameworkProfile /> + <IsWebBootstrapper>false</IsWebBootstrapper> + <PublishUrl>publish\</PublishUrl> + <Install>true</Install> + <InstallFrom>Disk</InstallFrom> + <UpdateEnabled>false</UpdateEnabled> + <UpdateMode>Foreground</UpdateMode> + <UpdateInterval>7</UpdateInterval> + <UpdateIntervalUnits>Days</UpdateIntervalUnits> + <UpdatePeriodically>false</UpdatePeriodically> + <UpdateRequired>false</UpdateRequired> + <MapFileExtensions>true</MapFileExtensions> + <ApplicationRevision>0</ApplicationRevision> + <ApplicationVersion>1.0.0.%2a</ApplicationVersion> + <UseApplicationTrust>false</UseApplicationTrust> + <BootstrapperEnabled>true</BootstrapperEnabled> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <PlatformTarget>AnyCPU</PlatformTarget> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup> + <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> + </PropertyGroup> + <ItemGroup> + <Reference Include="EasyModbusSecure, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\EasyModbus_Secure\bin\Debug\EasyModbusSecure.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Core" /> + <Reference Include="System.Xml.Linq" /> + <Reference Include="System.Data.DataSetExtensions" /> + <Reference Include="Microsoft.CSharp" /> + <Reference Include="System.Data" /> + <Reference Include="System.Net.Http" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Program.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + </ItemGroup> + <ItemGroup> + <None Include="App.config" /> + <None Include="README.md" /> + </ItemGroup> + <ItemGroup> + <WCFMetadata Include="Connected Services\" /> + </ItemGroup> + <ItemGroup> + <BootstrapperPackage Include=".NETFramework,Version=v4.7.2"> + <Visible>False</Visible> + <ProductName>Microsoft .NET Framework 4.7.2 %28x86 and x64%29</ProductName> + <Install>true</Install> + </BootstrapperPackage> + <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1"> + <Visible>False</Visible> + <ProductName>.NET Framework 3.5 SP1</ProductName> + <Install>false</Install> + </BootstrapperPackage> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <PropertyGroup> + <PreBuildEvent>if exist "$(TargetPath).locked" del "$(TargetPath).locked" +if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"</PreBuildEvent> + </PropertyGroup> +</Project> \ No newline at end of file diff --git a/EasySecureModbus_Demo/EasyModbusSecure_Demo.sln b/EasySecureModbus_Demo/EasyModbusSecure_Demo.sln new file mode 100644 index 0000000..23db249 --- /dev/null +++ b/EasySecureModbus_Demo/EasyModbusSecure_Demo.sln @@ -0,0 +1,26 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29613.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyModbusSecure_Demo", "EasyModbusSecure_Demo.csproj", "{EC330A89-9EDF-4C4E-8261-39994E4C3CA5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + ok|Any CPU = ok|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {EC330A89-9EDF-4C4E-8261-39994E4C3CA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EC330A89-9EDF-4C4E-8261-39994E4C3CA5}.ok|Any CPU.ActiveCfg = Debug|Any CPU + {EC330A89-9EDF-4C4E-8261-39994E4C3CA5}.ok|Any CPU.Build.0 = Debug|Any CPU + {EC330A89-9EDF-4C4E-8261-39994E4C3CA5}.Release|Any CPU.ActiveCfg = Debug|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {ECF7CA0C-8453-4CE1-95C9-04BA3716BBC3} + EndGlobalSection +EndGlobal diff --git a/EasySecureModbus_Demo/Program.cs b/EasySecureModbus_Demo/Program.cs new file mode 100644 index 0000000..18dc3bf --- /dev/null +++ b/EasySecureModbus_Demo/Program.cs @@ -0,0 +1,85 @@ +using EasyModbusSecure; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace EasuySecureModbus_Demo +{ + class Program + { + static void Main(string[] args) // For now we pass only the password, later can be cert path as well + { + ModbusSecureClient modbusClient = new ModbusSecureClient("127.0.0.1", 802, args[0], args[1], true); //Ip-Address and Port of Modbus-TCP-Server + //ModbusSecureClient modbusClient = new ModbusSecureClient("127.0.0.1", 802, "..\\..\\certs2\\client.pfx", args[0], true); //Ip-Address and Port of Modbus-TCP-Server + //ModbusSecureClient modbusClient = new ModbusSecureClient("127.0.0.1", 802); //Ip-Address and Port of Modbus-TCP-Server + //ModbusSecureClient modbusClient = new ModbusSecureClient("127.0.0.1", 802, null, args[0], true); //Ip-Address and Port of Modbus-TCP-Server + //ModbusSecureClient modbusClient = new ModbusSecureClient("127.0.0.1", 802, "", args[0], true); //Ip-Address and Port of Modbus-TCP-Server + //ModbusSecureClient modbusClient = new ModbusSecureClient("127.0.0.1", 802, "..\\..\\certs\\something.pfx", args[0], true); //Ip-Address and Port of Modbus-TCP-Server + + modbusClient.LogFileFilename = "..\\..\\logs\\ClientLogs.txt"; + modbusClient.Connect(); //Connect to Server + + if(modbusClient.Connected == false) + { + Console.WriteLine("Connection could not be established "); + Console.WriteLine("Press any key to continue . . . "); + Console.ReadKey(true); + return; + } + + + modbusClient.WriteMultipleCoils(4, new bool[] { true, true, true, true, true, true, true, true, true, true }); //Write Coils starting with Address 5 + modbusClient.WriteSingleRegister(0, 5); + + bool[] readCoils = modbusClient.ReadCoils(9, 2); //Read 10 Coils from Server, starting with address 10 + int[] readHoldingRegisters = modbusClient.ReadHoldingRegisters(0, 10); //Read 2 Holding Registers from Server, starting with Address 1 + + // Console Output + for (int i = 0; i < readCoils.Length; i++) + Console.WriteLine("Value of Coil " + (9 + i + 1) + " " + readCoils[i].ToString()); + + + modbusClient.WriteMultipleCoils(4, new bool[] { true, false, true, true, true, false, true, true, true, true }); //Write Coils starting with Address 1 + + readCoils = modbusClient.ReadCoils(0, 2); + // Console Output 2 + for (int i = 0; i < readCoils.Length; i++) + Console.WriteLine("Value of Coil " + (9 + i + 1) + " " + readCoils[i].ToString()); + + for (int i = 0; i < readHoldingRegisters.Length; i++) + Console.WriteLine("Value of HoldingRegister " + (i + 1) + " " + readHoldingRegisters[i].ToString()); + + + modbusClient.WriteSingleRegister(0, 7); + int[] readHoldingRegister = modbusClient.ReadHoldingRegisters(0, 1); + for (int i = 0; i < readHoldingRegister.Length; i++) + Console.WriteLine("Value of HoldingRegister " + (i + 1) + " " + readHoldingRegister[i].ToString()); + + modbusClient.Disconnect(); //Disconnect from Server + + + // Second attempt to check session caching + //modbusClient.Connect(); + + //if (modbusClient.Connected == false) + //{ + // Console.WriteLine("Connection could not be established "); + // Console.WriteLine("Press any key to continue . . . "); + // Console.ReadKey(true); + // return; + //} + + //readCoils = modbusClient.ReadCoils(0, 2); + //// Console Output 2 + //for (int i = 0; i < readCoils.Length; i++) + // Console.WriteLine("Value of Coil " + (9 + i + 1) + " " + readCoils[i].ToString()); + + //modbusClient.Disconnect(); + + Console.Write("Press any key to continue . . . "); + Console.ReadKey(true); + } + } +} diff --git a/EasySecureModbus_Demo/Properties/AssemblyInfo.cs b/EasySecureModbus_Demo/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..c8777b5 --- /dev/null +++ b/EasySecureModbus_Demo/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("EasuySecureModbus_Demo")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("EasuySecureModbus_Demo")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("ec330a89-9edf-4c4e-8261-39994e4c3ca5")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/EasySecureModbus_Demo/README.md b/EasySecureModbus_Demo/README.md new file mode 100644 index 0000000..22fc947 --- /dev/null +++ b/EasySecureModbus_Demo/README.md @@ -0,0 +1,127 @@ +# EasyModbusSecure - Client Example + +The Client performs the same functionality as in the original Modbus version. There are no changes to the Modbus application protocol as a consequence of it being encapsulated by a secure transport. + +The use of TLS provides confidential transport of the data, data integrity, anti-replay protection, endpoint authentication via certificates, and authorization via information embedded in the certificate +such as user and device roles. + +The additional functionality that is included concerns only the TLS operations as defined in the Modbus/TCP Security Protocol Specification. For example, the client must provide the path of a x.509v3 +certificate as part of the TLS Handshake as well as the password for it as CLI options as below. + +``` +ModbusSecureClient modbusClient = new ModbusSecureClient("127.0.0.1", 802, args[0], args[1] true); +``` + +Such a certificate must be issued by signed by a Trusted Third Party (TTP) and validated during the TLS handshake for the server to verify it. + +If the server does not require to authenticate the client, the communication can be initiated as before. However, the standard specifies that is **REQUIRED** for both end devices to provide +mutual authentication when executing the TLS Handshake to create the TLS session (R-06). + +``` +ModbusSecureClient modbusClient = new ModbusSecureClient("127.0.0.1", 802); +``` + +The authorization functionality is implemented with the use of RoleIDs. Each certificate must provide one of these RoleOIDs in their extension section. Only one role is allowed per client certificate. +After the session initiation and when the client and the server communicate, the provided RoleOID is extracted from the x.509v3 certificate and cached. For every client request it then must be checked from +the server against the actions that are allowed to be performed. The RoleOID is defined in the Modbus.org PEM as OID 1.3.6.1.4.1.50316.802.1. The RoleOID can be user or device-specific. + +## Regarding x.509v3 certificates + +A common method to create x.509v3 certificates is by utilizing the OpenSSL library. These certificates can then be converted into other formats that suit the operating system and the libraries that are used. + +The process used to create the certificates for the .NET 4.5 version of the library and test its functionality, is described as follows. However, this is not an exhaustive tutorial on how to perform this operation. +The x.509v3 certificate creation process should be performed based on the needs of the organization and the devices in use. + +### Root CA Creation + +This first command in OpenSSL, generates a Private Key for the Root CA: + +``` +openssl genrsa -out ca.key 4096 +``` + +Then you can generate the Root CA certificate using: + +``` +openssl req -new -x509 -days 1826 -key ca.key -out ca.crt +``` + +The .p12 file must generated and certified: + +``` +openssl pkcs12 -export -out ca.p12 -inkey ca.key -in ca.crt +``` + +Now you have to generate a Certificate Revocation List (CRL) to be used with the CA. First we perform the configuaration: + +``` +openssl ca -config ca.conf -gencrl -keyfile ca.key -cert ca.crt -out root.crl.pem +``` + +Then create the CRL: + +``` +openssl crl -inform PEM -in root.crl.pem -outform DER -out root.crl +``` + +### Client certificate using the Root CA + +The Client certificate creation can be summarized in one bash script to speed up the setup: + +``` + +#!/bin/bash + +set -e + +openssl genrsa -out client.key 4096 + +openssl req -sha256 -new -key client.key -out client.csr -config openssl_client.cnf + +openssl x509 -req -days 1000 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -CAserial certserial -out client.crt -extensions v3_req -extfile client_ext.cnf + +openssl x509 -in client.crt -text -noout + +openssl pkcs12 -export -out client.pfx -inkey client.key -in client.crt + +``` + +The required **openssl_client.cnf** should include the RoleOID reference and can be structured as follows: + +``` +# +# openssl_client.cnf +# + +[ req ] +prompt = no +distinguished_name = server_distinguished_name +req_extensions = v3_req + +[ server_distinguished_name ] +commonName = ClientCert +stateOrProvinceName = NY +countryName = US +emailAddress = my@email.com +organizationName = Here +organizationalUnitName = Here here + +[ v3_req ] +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment +subjectAltName = @alt_names +1.3.6.1.4.1.50316.802.1 = ASN1:UTF8String:Operator + +[ alt_names ] +DNS.0 = localhost + +``` + +To import all the required certificateds, the use of the Certificate Manager on Windows for the current user is needed. The client certificate should be under **Personal**. If a custom Root CA is used, +its certificate should be under **Trusted Root Certification Authorities**. The CRL should be placed under **Intermediate Certification Authorities**. +More information abou the Certificate Manager tool can be found [here](https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-view-certificates-with-the-mmc-snap-in#to-view-certificates-for-the-current-user). + +Acks: To @ZacharyHale for his assistance to the creation process of the certificates + +## Notes regarding the Modbus/TCP Security Protocol Specification + diff --git a/EasySecureModbus_Demo/logs/ClientLogs.txt b/EasySecureModbus_Demo/logs/ClientLogs.txt new file mode 100644 index 0000000..d9b4627 --- /dev/null +++ b/EasySecureModbus_Demo/logs/ClientLogs.txt @@ -0,0 +1,1915 @@ +06.06.2021 12:02:24.26 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 12:05:31.13 Destructor called - automatically disconnect +06.06.2021 12:07:30.69 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 12:08:50.48 Destructor called - automatically disconnect +06.06.2021 12:10:30.30 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 12:12:45.38 Destructor called - automatically disconnect +06.06.2021 12:30:50.09 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 12:30:50.27 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +06.06.2021 12:30:50.27 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +06.06.2021 12:41:24.89 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 12:41:25.07 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +06.06.2021 12:41:25.07 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +06.06.2021 12:53:21.31 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 12:53:35.07 Destructor called - automatically disconnect +06.06.2021 18:02:24.34 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 18:02:36.71 Destructor called - automatically disconnect +06.06.2021 18:03:14.79 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 18:12:40.89 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 18:22:00.83 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 18:22:11.34 Destructor called - automatically disconnect +06.06.2021 18:27:28.11 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 18:28:16.84 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 18:28:29.01 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 18:33:23.97 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 18:34:04.68 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 18:34:14.64 Destructor called - automatically disconnect +06.06.2021 18:35:55.13 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 18:36:00.45 Destructor called - automatically disconnect +06.06.2021 18:45:43.99 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 18:45:44.09 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +06.06.2021 18:45:44.09 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +06.06.2021 18:47:59.88 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 18:47:59.97 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +06.06.2021 18:47:59.98 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +06.06.2021 18:49:01.72 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 18:49:01.82 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +06.06.2021 18:49:01.82 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +06.06.2021 18:51:05.27 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +06.06.2021 18:51:08.05 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +06.06.2021 18:51:08.05 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +13.06.2021 20:19:35.27 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +13.06.2021 20:19:35.40 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +13.06.2021 20:19:35.40 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +13.06.2021 20:22:58.63 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +13.06.2021 20:22:58.74 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +13.06.2021 20:22:58.74 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +13.06.2021 21:09:33.04 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +13.06.2021 21:12:17.76 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +13.06.2021 21:12:25.71 Destructor called - automatically disconnect +14.06.2021 18:53:59.12 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.06.2021 18:53:59.35 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.06.2021 18:53:59.35 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.06.2021 18:54:04.45 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +14.06.2021 18:54:04.45 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +14.06.2021 18:54:04.45 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +14.06.2021 18:54:04.45 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +14.06.2021 18:54:04.46 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +14.06.2021 18:54:04.46 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +14.06.2021 18:54:04.46 Disconnect +14.06.2021 19:16:00.30 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.06.2021 19:16:00.45 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.06.2021 19:16:00.45 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.06.2021 19:16:04.01 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +14.06.2021 19:16:04.01 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +14.06.2021 19:16:04.01 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +14.06.2021 19:16:04.02 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +14.06.2021 19:16:04.02 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +14.06.2021 19:16:04.02 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +14.06.2021 19:16:04.02 Disconnect +14.06.2021 19:16:13.70 Destructor called - automatically disconnect +04.08.2021 17:02:17.73 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +04.08.2021 17:02:17.97 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +04.08.2021 17:02:17.97 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +04.08.2021 17:02:22.05 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +04.08.2021 17:02:22.06 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +04.08.2021 17:02:22.06 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +04.08.2021 17:02:22.06 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +04.08.2021 17:02:22.06 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +04.08.2021 17:02:22.06 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +04.08.2021 17:02:22.06 Disconnect +04.08.2021 17:04:10.70 Destructor called - automatically disconnect +04.08.2021 17:16:52.09 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +04.08.2021 17:16:52.24 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +04.08.2021 17:16:52.24 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +04.08.2021 17:16:52.26 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +04.08.2021 17:16:52.26 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +04.08.2021 17:16:52.26 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +04.08.2021 17:16:52.26 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +04.08.2021 17:16:52.26 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +04.08.2021 17:16:52.26 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +04.08.2021 17:16:52.26 Disconnect +04.08.2021 17:19:15.41 Destructor called - automatically disconnect +04.08.2021 18:54:32.72 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +04.08.2021 18:54:32.95 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +04.08.2021 18:54:32.95 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +04.08.2021 18:54:32.97 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +04.08.2021 18:54:32.97 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +04.08.2021 18:54:32.98 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +04.08.2021 18:54:32.98 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +04.08.2021 18:54:32.98 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +04.08.2021 18:54:32.98 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +04.08.2021 18:54:32.98 Disconnect +04.08.2021 18:54:42.36 Destructor called - automatically disconnect +08.08.2021 21:10:31.08 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +08.08.2021 21:10:31.34 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +08.08.2021 21:10:31.34 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +08.08.2021 21:10:31.38 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +08.08.2021 21:10:31.38 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +08.08.2021 21:10:31.39 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +08.08.2021 21:10:31.39 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +08.08.2021 21:10:31.40 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +08.08.2021 21:10:31.40 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +08.08.2021 21:10:31.40 Disconnect +08.08.2021 21:10:36.64 Destructor called - automatically disconnect +08.08.2021 21:14:38.12 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +08.08.2021 21:14:38.30 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +08.08.2021 21:14:38.30 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +08.08.2021 21:14:38.31 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +08.08.2021 21:14:38.31 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +08.08.2021 21:14:38.32 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +08.08.2021 21:14:38.32 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +08.08.2021 21:14:38.32 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +08.08.2021 21:14:38.32 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +08.08.2021 21:14:38.32 Disconnect +08.08.2021 21:14:40.88 Destructor called - automatically disconnect +08.08.2021 21:23:37.20 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +08.08.2021 21:23:37.39 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +08.08.2021 21:23:37.39 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +08.08.2021 21:23:37.41 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +08.08.2021 21:23:37.41 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +08.08.2021 21:23:37.41 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +08.08.2021 21:23:37.41 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +08.08.2021 21:23:37.41 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +08.08.2021 21:23:37.41 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +08.08.2021 21:23:37.41 Disconnect +08.08.2021 21:23:41.01 Destructor called - automatically disconnect +08.08.2021 21:25:33.01 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +08.08.2021 21:25:33.23 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +08.08.2021 21:25:33.23 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +08.08.2021 21:25:33.25 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +08.08.2021 21:25:33.25 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +08.08.2021 21:25:33.25 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +08.08.2021 21:25:33.25 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +08.08.2021 21:25:33.26 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +08.08.2021 21:25:33.26 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +08.08.2021 21:25:33.26 Disconnect +08.08.2021 21:25:34.56 Destructor called - automatically disconnect +08.08.2021 21:27:24.83 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +08.08.2021 21:27:25.01 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +08.08.2021 21:27:25.01 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +08.08.2021 21:27:25.02 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +08.08.2021 21:27:25.02 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +08.08.2021 21:27:25.03 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +08.08.2021 21:27:25.03 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +08.08.2021 21:27:25.03 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +08.08.2021 21:27:25.03 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +08.08.2021 21:27:25.03 Disconnect +08.08.2021 21:27:26.35 Destructor called - automatically disconnect +10.08.2021 9:26:35.09 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 9:26:35.35 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 9:26:35.35 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 9:26:35.37 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +10.08.2021 9:26:35.37 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +10.08.2021 9:26:35.39 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +10.08.2021 9:26:35.39 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +10.08.2021 9:26:35.39 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +10.08.2021 9:26:35.39 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +10.08.2021 9:26:35.40 Disconnect +10.08.2021 9:26:57.05 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 11:14:04.19 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 11:14:35.46 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 11:15:55.67 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 11:41:51.76 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 11:41:58.87 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 11:42:29.78 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 11:42:31.68 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 11:42:31.68 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 11:55:32.37 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 11:55:33.95 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 11:55:33.95 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:14:08.71 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:14:11.29 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:14:11.29 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:16:09.99 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:16:39.09 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:16:39.27 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:16:39.27 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:19:23.71 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:19:23.88 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:19:23.88 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:21:11.10 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:21:11.26 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:21:11.26 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:22:06.34 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:22:06.50 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:22:06.50 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:32:36.11 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:32:36.27 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:32:36.27 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:36:43.55 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:36:43.71 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:36:43.71 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:37:14.17 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:37:14.34 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:37:14.35 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:40:27.49 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:40:27.65 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:40:27.65 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:43:33.40 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:43:33.64 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:43:33.64 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:46:32.81 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:46:32.97 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:46:32.97 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:47:24.85 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:47:25.01 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:47:25.01 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:49:47.67 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:49:47.83 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:49:47.83 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:49:47.84 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +10.08.2021 12:49:47.84 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +10.08.2021 12:49:47.85 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +10.08.2021 12:49:47.85 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +10.08.2021 12:49:47.85 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +10.08.2021 12:49:47.85 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +10.08.2021 12:49:47.85 Disconnect +10.08.2021 12:49:54.31 Destructor called - automatically disconnect +10.08.2021 12:51:09.29 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:51:09.43 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:51:09.43 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:51:09.45 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +10.08.2021 12:51:09.45 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +10.08.2021 12:51:09.45 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +10.08.2021 12:51:09.45 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +10.08.2021 12:51:09.45 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +10.08.2021 12:51:09.46 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +10.08.2021 12:51:09.46 Disconnect +10.08.2021 12:51:11.36 Destructor called - automatically disconnect +10.08.2021 12:52:18.00 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:52:18.20 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:52:18.20 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:52:32.26 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:52:32.43 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:52:32.43 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 12:53:16.24 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 12:53:16.39 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 12:53:16.39 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 13:25:43.02 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 13:25:43.20 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 13:25:43.20 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 13:30:14.59 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 13:30:14.72 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 13:30:14.72 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 16:25:56.91 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 16:25:57.14 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 16:25:57.14 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 16:26:57.98 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 16:27:29.90 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 16:27:29.90 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 16:36:06.35 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 16:36:09.56 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 16:36:09.56 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 16:36:33.41 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 16:36:33.55 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 16:36:33.55 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 16:53:52.04 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 16:53:52.21 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 16:53:52.22 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 16:54:07.17 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 16:54:07.30 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 16:54:07.31 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 16:59:40.86 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 16:59:41.00 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 16:59:41.00 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:01:36.34 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:01:36.48 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:01:36.49 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:02:21.68 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:02:21.82 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:02:21.82 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:02:58.27 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:02:58.41 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:02:58.41 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:03:37.17 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:03:38.20 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:03:38.20 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:04:14.67 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:04:16.19 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:04:16.20 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:04:57.21 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:05:00.49 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:05:00.49 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:08:26.83 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:08:29.03 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:08:29.04 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:09:15.08 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:09:15.25 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:09:15.25 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:09:37.11 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:09:50.90 Destructor called - automatically disconnect +10.08.2021 17:10:14.13 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:10:39.38 Destructor called - automatically disconnect +10.08.2021 17:15:19.11 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:15:33.03 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:16:11.79 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:16:39.13 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:16:52.43 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:16:56.05 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:16:56.05 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:22:15.27 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:23:29.86 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:23:32.57 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:23:32.57 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:32:23.79 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:32:23.95 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:32:23.96 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:32:58.63 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:33:00.98 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:33:00.98 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:33:22.02 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:35:51.90 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:35:54.80 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:35:54.81 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:41:36.03 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:41:38.23 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:41:38.23 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:46:15.64 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:46:34.50 Destructor called - automatically disconnect +10.08.2021 17:46:42.35 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:51:43.12 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:52:38.67 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:52:40.04 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:52:40.04 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:54:38.74 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:54:40.18 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:54:40.19 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 17:55:18.49 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 17:55:19.57 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 17:55:19.58 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 18:05:12.14 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 18:05:12.31 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 18:05:12.31 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 18:05:45.48 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 18:05:47.16 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 18:05:47.16 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 18:06:40.64 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 18:06:41.74 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 18:06:41.74 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 18:08:13.81 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 18:08:28.87 Destructor called - automatically disconnect +10.08.2021 18:12:40.75 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 18:12:52.35 Destructor called - automatically disconnect +10.08.2021 18:14:17.24 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 18:18:20.76 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 18:18:48.63 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 18:18:58.34 Destructor called - automatically disconnect +10.08.2021 18:27:33.14 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 18:27:36.99 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 18:27:36.99 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 18:27:37.01 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +10.08.2021 18:27:37.01 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +10.08.2021 18:27:37.02 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +10.08.2021 18:27:37.02 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +10.08.2021 18:27:37.02 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +10.08.2021 18:27:37.02 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +10.08.2021 18:27:37.02 Disconnect +10.08.2021 18:27:39.22 Destructor called - automatically disconnect +10.08.2021 18:27:57.06 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 18:28:19.54 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 18:28:21.14 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 18:28:21.14 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +10.08.2021 18:29:53.16 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +10.08.2021 18:29:54.53 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +10.08.2021 18:29:54.53 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 13:51:48.95 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 13:51:50.39 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 13:51:50.39 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 14:00:03.91 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 14:00:04.85 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 14:00:04.85 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 14:16:05.78 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 14:18:08.20 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 14:18:30.67 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 14:18:39.23 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 14:19:06.28 Destructor called - automatically disconnect +12.08.2021 14:19:09.14 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 14:19:09.33 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 14:19:09.34 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 14:19:44.41 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 14:19:44.58 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 14:19:44.58 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 14:26:09.58 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 14:26:09.76 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 14:26:09.76 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 14:26:44.50 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 14:26:44.71 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 14:26:44.71 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 14:27:31.58 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 14:27:31.75 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 14:27:31.76 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 14:34:48.71 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 14:34:48.89 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 14:34:48.89 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 14:38:36.66 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 14:38:36.83 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 14:38:36.84 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 14:42:44.08 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 14:42:46.30 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 14:42:46.31 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 14:55:45.66 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 14:55:45.84 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 14:55:45.84 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 14:59:33.40 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 14:59:34.89 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 14:59:34.89 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 15:09:10.87 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 15:09:17.97 Destructor called - automatically disconnect +12.08.2021 15:10:45.47 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 15:10:46.95 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 15:10:46.95 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 15:11:39.93 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 15:11:40.12 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 15:11:40.13 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 15:33:40.34 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 15:33:40.52 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 15:33:40.52 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 15:56:13.43 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 15:56:18.64 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 15:56:18.64 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 15:59:48.96 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 15:59:49.18 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 15:59:49.18 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 16:01:53.21 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 16:01:53.43 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 16:01:53.43 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 16:10:16.82 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 16:11:24.51 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 16:11:24.70 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 16:11:24.70 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 16:20:45.77 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 16:20:51.48 Destructor called - automatically disconnect +12.08.2021 16:21:01.20 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 16:21:02.38 Destructor called - automatically disconnect +12.08.2021 16:21:48.55 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 16:21:48.70 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 16:21:48.70 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 16:21:48.71 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +12.08.2021 16:21:48.71 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +12.08.2021 16:21:48.72 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +12.08.2021 16:21:48.72 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +12.08.2021 16:21:48.72 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +12.08.2021 16:21:48.72 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +12.08.2021 16:21:48.72 Disconnect +12.08.2021 16:21:52.15 Destructor called - automatically disconnect +12.08.2021 16:22:14.05 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 16:22:14.95 Destructor called - automatically disconnect +12.08.2021 16:22:25.74 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +12.08.2021 16:22:25.87 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +12.08.2021 16:22:25.87 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +12.08.2021 16:22:25.88 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +12.08.2021 16:22:25.88 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +12.08.2021 16:22:25.88 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +12.08.2021 16:22:25.88 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +12.08.2021 16:22:25.89 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +12.08.2021 16:22:25.89 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +12.08.2021 16:22:25.89 Disconnect +12.08.2021 16:22:32.22 Destructor called - automatically disconnect +14.08.2021 14:46:03.06 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 14:46:03.36 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.08.2021 14:46:03.36 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.08.2021 14:46:03.37 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +14.08.2021 14:46:03.38 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +14.08.2021 14:46:03.38 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +14.08.2021 14:46:03.38 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +14.08.2021 14:46:03.39 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +14.08.2021 14:46:03.39 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +14.08.2021 14:46:03.39 Disconnect +14.08.2021 14:46:07.16 Destructor called - automatically disconnect +14.08.2021 14:46:18.25 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 14:46:18.42 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.08.2021 14:46:18.42 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.08.2021 14:56:33.50 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 14:56:33.71 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.08.2021 14:56:33.72 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.08.2021 15:04:32.69 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 15:04:32.89 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.08.2021 15:04:32.89 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.08.2021 15:34:01.20 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 15:34:01.44 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.08.2021 15:34:01.44 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.08.2021 15:34:39.38 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 15:34:40.77 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.08.2021 15:34:40.77 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.08.2021 15:36:15.48 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 15:36:25.35 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 15:36:25.55 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.08.2021 15:36:25.55 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.08.2021 15:42:58.69 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 15:43:42.15 Destructor called - automatically disconnect +14.08.2021 16:16:14.14 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 16:16:17.32 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.08.2021 16:16:17.32 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.08.2021 16:19:13.59 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 16:19:13.77 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.08.2021 16:19:13.77 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.08.2021 16:22:49.85 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 16:22:50.04 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.08.2021 16:22:50.04 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.08.2021 16:37:34.78 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 16:37:34.98 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.08.2021 16:37:34.98 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.08.2021 16:38:18.05 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 16:38:18.25 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.08.2021 16:38:18.25 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.08.2021 16:55:12.72 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 16:55:12.91 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.08.2021 16:55:12.91 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.08.2021 17:02:46.84 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 17:02:53.17 Destructor called - automatically disconnect +14.08.2021 17:03:33.22 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 17:03:37.25 Destructor called - automatically disconnect +14.08.2021 17:07:19.71 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +14.08.2021 17:07:19.82 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +19.08.2021 8:08:21.55 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +19.08.2021 8:08:21.78 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +19.08.2021 8:08:21.78 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +19.08.2021 8:08:29.53 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +19.08.2021 8:08:29.66 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +19.08.2021 8:08:29.66 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +19.08.2021 21:49:42.38 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +19.08.2021 21:49:42.58 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +19.08.2021 21:49:42.58 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +19.08.2021 21:59:59.86 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +19.08.2021 22:00:00.06 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +19.08.2021 22:00:00.07 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +19.08.2021 22:01:52.20 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +19.08.2021 22:01:52.39 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +19.08.2021 22:01:52.40 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +19.08.2021 22:13:28.12 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +19.08.2021 22:13:28.31 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +19.08.2021 22:13:28.32 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +19.08.2021 22:17:29.25 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +19.08.2021 22:17:30.37 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +19.08.2021 22:17:30.37 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +19.08.2021 22:29:29.21 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +19.08.2021 22:29:29.40 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +19.08.2021 22:29:29.40 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +19.08.2021 22:31:11.39 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +19.08.2021 22:31:11.55 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +19.08.2021 22:31:11.56 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +19.08.2021 22:31:43.48 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +19.08.2021 22:38:50.89 Destructor called - automatically disconnect +20.08.2021 14:21:54.30 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +20.08.2021 14:21:54.50 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +20.08.2021 14:21:54.50 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +20.08.2021 14:23:16.14 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +20.08.2021 14:23:17.72 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +20.08.2021 14:23:17.72 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +24.08.2021 22:53:28.97 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 22:53:29.25 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +24.08.2021 22:53:29.26 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +24.08.2021 22:53:29.27 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +24.08.2021 22:53:29.27 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +24.08.2021 22:53:29.28 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +24.08.2021 22:53:29.28 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +24.08.2021 22:53:29.28 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +24.08.2021 22:53:29.28 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +24.08.2021 22:53:29.29 Disconnect +24.08.2021 22:53:32.82 Destructor called - automatically disconnect +24.08.2021 22:53:46.73 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 22:53:46.92 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +24.08.2021 22:53:46.92 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +24.08.2021 22:55:06.50 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 22:55:13.89 Destructor called - automatically disconnect +24.08.2021 22:55:48.17 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 22:55:53.95 Destructor called - automatically disconnect +24.08.2021 22:56:04.77 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 22:56:04.96 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +24.08.2021 22:56:04.97 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +24.08.2021 22:56:04.98 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +24.08.2021 22:56:04.98 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +24.08.2021 22:56:04.99 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +24.08.2021 22:56:04.99 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +24.08.2021 22:56:04.99 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +24.08.2021 22:56:04.99 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +24.08.2021 22:56:04.99 Disconnect +24.08.2021 22:56:06.44 Destructor called - automatically disconnect +24.08.2021 22:56:14.46 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 22:56:21.22 Destructor called - automatically disconnect +24.08.2021 23:00:48.40 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 23:01:00.45 Destructor called - automatically disconnect +24.08.2021 23:04:45.74 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 23:04:57.72 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 23:04:57.92 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +24.08.2021 23:04:57.92 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +24.08.2021 23:04:57.93 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +24.08.2021 23:04:57.93 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +24.08.2021 23:04:57.94 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +24.08.2021 23:04:57.94 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +24.08.2021 23:04:57.94 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +24.08.2021 23:04:57.94 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +24.08.2021 23:04:57.95 Disconnect +24.08.2021 23:05:31.57 Destructor called - automatically disconnect +24.08.2021 23:05:59.67 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 23:05:59.82 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +24.08.2021 23:05:59.82 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +24.08.2021 23:05:59.83 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +24.08.2021 23:05:59.83 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +24.08.2021 23:05:59.84 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +24.08.2021 23:05:59.84 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +24.08.2021 23:05:59.84 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +24.08.2021 23:05:59.84 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +24.08.2021 23:05:59.84 Disconnect +24.08.2021 23:06:05.88 Destructor called - automatically disconnect +24.08.2021 23:06:12.92 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 23:06:13.10 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +24.08.2021 23:06:13.10 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +24.08.2021 23:06:13.11 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +24.08.2021 23:06:13.11 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +24.08.2021 23:06:13.11 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +24.08.2021 23:06:13.11 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +24.08.2021 23:06:13.11 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +24.08.2021 23:06:13.11 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +24.08.2021 23:06:13.12 Disconnect +24.08.2021 23:06:21.15 Destructor called - automatically disconnect +24.08.2021 23:13:35.21 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 23:13:35.38 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +24.08.2021 23:13:35.38 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +24.08.2021 23:13:35.39 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +24.08.2021 23:13:35.39 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +24.08.2021 23:13:35.40 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +24.08.2021 23:13:35.40 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +24.08.2021 23:13:35.40 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +24.08.2021 23:13:35.40 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +24.08.2021 23:13:35.40 Disconnect +24.08.2021 23:13:47.02 Destructor called - automatically disconnect +24.08.2021 23:13:53.40 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 23:13:53.63 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +24.08.2021 23:13:53.63 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +24.08.2021 23:13:53.64 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +24.08.2021 23:13:53.64 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +24.08.2021 23:13:53.64 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +24.08.2021 23:13:53.64 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +24.08.2021 23:13:53.65 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +24.08.2021 23:13:53.65 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +24.08.2021 23:13:53.65 Disconnect +24.08.2021 23:18:15.32 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 23:18:39.38 Destructor called - automatically disconnect +24.08.2021 23:36:35.76 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 23:36:51.91 Destructor called - automatically disconnect +24.08.2021 23:37:45.33 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 23:39:36.77 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 23:39:47.63 Destructor called - automatically disconnect +24.08.2021 23:45:47.76 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +24.08.2021 23:45:53.11 Destructor called - automatically disconnect +25.08.2021 0:01:08.67 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +25.08.2021 0:01:08.87 Exception: Unable to authenticate to the server +25.08.2021 0:01:12.18 Destructor called - automatically disconnect +25.08.2021 0:02:12.16 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +25.08.2021 0:02:12.38 Exception: Unable to authenticate to the server +25.08.2021 0:02:13.17 Destructor called - automatically disconnect +26.08.2021 20:54:13.21 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +26.08.2021 20:54:38.24 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +26.08.2021 20:56:38.90 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 502 +26.08.2021 20:56:48.52 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.08.2021 20:56:48.88 Exception: Unable to authenticate to the server +26.08.2021 20:56:50.04 Destructor called - automatically disconnect +26.08.2021 20:57:06.11 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.08.2021 20:57:06.32 Exception: Unable to authenticate to the server +26.08.2021 20:57:13.57 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.08.2021 20:57:13.81 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +26.08.2021 20:57:13.81 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +26.08.2021 20:57:13.84 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +26.08.2021 20:57:13.84 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +26.08.2021 20:57:13.84 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +26.08.2021 20:57:13.84 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +26.08.2021 20:57:13.84 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +26.08.2021 20:57:13.84 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +26.08.2021 20:57:13.85 Disconnect +26.08.2021 20:57:17.22 Destructor called - automatically disconnect +26.08.2021 20:59:53.34 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.08.2021 20:59:53.63 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +26.08.2021 20:59:53.63 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +26.08.2021 20:59:53.65 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +26.08.2021 20:59:53.65 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +26.08.2021 20:59:53.65 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +26.08.2021 20:59:53.65 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +26.08.2021 20:59:53.65 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +26.08.2021 20:59:53.66 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +26.08.2021 20:59:53.66 Disconnect +26.08.2021 20:59:55.56 Destructor called - automatically disconnect +26.08.2021 21:25:23.53 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.08.2021 21:25:23.97 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +26.08.2021 21:25:23.97 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +26.08.2021 21:25:23.99 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +26.08.2021 21:25:23.99 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +26.08.2021 21:25:24.01 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +26.08.2021 21:25:24.01 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +26.08.2021 21:25:24.01 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +26.08.2021 21:25:24.01 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +26.08.2021 21:25:24.01 Disconnect +26.08.2021 21:25:25.25 Destructor called - automatically disconnect +26.08.2021 21:25:27.63 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.08.2021 21:25:27.86 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +26.08.2021 21:25:27.86 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +26.08.2021 21:25:27.87 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +26.08.2021 21:25:27.87 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +26.08.2021 21:25:27.87 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +26.08.2021 21:25:27.87 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +26.08.2021 21:25:27.87 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +26.08.2021 21:25:27.88 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +26.08.2021 21:25:27.88 Disconnect +26.08.2021 21:25:28.67 Destructor called - automatically disconnect +26.08.2021 21:32:50.00 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.08.2021 21:32:50.34 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +26.08.2021 21:32:50.34 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +26.08.2021 21:32:50.36 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +26.08.2021 21:32:50.36 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +26.08.2021 21:32:50.37 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +26.08.2021 21:32:50.37 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +26.08.2021 21:32:50.37 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +26.08.2021 21:32:50.37 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +26.08.2021 21:32:50.38 Disconnect +26.08.2021 21:32:50.38 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.08.2021 21:32:50.40 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +26.08.2021 21:32:50.40 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +26.08.2021 21:32:50.40 Disconnect +26.08.2021 21:32:54.95 Destructor called - automatically disconnect +26.08.2021 21:33:38.97 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.08.2021 21:33:39.19 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +26.08.2021 21:33:39.19 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +26.08.2021 21:33:39.20 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +26.08.2021 21:33:39.20 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +26.08.2021 21:33:39.20 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +26.08.2021 21:33:39.20 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +26.08.2021 21:33:39.20 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +26.08.2021 21:33:39.20 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +26.08.2021 21:33:39.20 Disconnect +26.08.2021 21:33:39.21 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.08.2021 21:33:39.23 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +26.08.2021 21:33:39.23 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +26.08.2021 21:33:39.23 Disconnect +26.08.2021 21:33:48.31 Destructor called - automatically disconnect +05.09.2021 20:08:21.92 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.09.2021 20:08:22.22 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.09.2021 20:08:22.22 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.09.2021 20:08:22.24 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +05.09.2021 20:08:22.24 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +05.09.2021 20:08:22.24 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +05.09.2021 20:08:22.24 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +05.09.2021 20:08:22.24 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +05.09.2021 20:08:22.24 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +05.09.2021 20:08:22.25 Disconnect +05.09.2021 20:08:22.25 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.09.2021 20:08:22.26 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +05.09.2021 20:08:22.26 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +05.09.2021 20:08:22.26 Disconnect +05.09.2021 20:26:50.50 Destructor called - automatically disconnect +05.09.2021 20:50:57.78 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.09.2021 20:50:57.99 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.09.2021 20:50:57.99 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.09.2021 20:50:58.01 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +05.09.2021 20:50:58.01 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +05.09.2021 20:50:58.01 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +05.09.2021 20:50:58.01 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +05.09.2021 20:50:58.01 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +05.09.2021 20:50:58.02 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +05.09.2021 20:50:58.02 Disconnect +05.09.2021 20:50:58.02 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.09.2021 20:50:58.03 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +05.09.2021 20:50:58.03 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +05.09.2021 20:50:58.03 Disconnect +05.09.2021 20:52:49.46 Destructor called - automatically disconnect +09.09.2021 21:08:36.86 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.09.2021 21:08:37.09 Certificate errorRemoteCertificateChainErrors +09.09.2021 21:08:37.11 Exception: The remote certificate is invalid according to the validation procedure. +09.09.2021 21:08:45.97 Destructor called - automatically disconnect +09.09.2021 23:32:37.91 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.09.2021 23:32:38.12 Certificate errorRemoteCertificateChainErrors +09.09.2021 23:32:38.13 Exception: The remote certificate is invalid according to the validation procedure. +09.09.2021 23:33:29.57 Destructor called - automatically disconnect +09.09.2021 23:33:44.35 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.09.2021 23:33:44.67 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +09.09.2021 23:33:44.67 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +09.09.2021 23:33:44.69 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +09.09.2021 23:33:44.69 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +09.09.2021 23:33:44.70 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +09.09.2021 23:33:44.70 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +09.09.2021 23:33:44.70 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +09.09.2021 23:33:44.70 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +09.09.2021 23:33:44.71 Disconnect +09.09.2021 23:33:44.71 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.09.2021 23:33:44.73 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +09.09.2021 23:33:44.73 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +09.09.2021 23:33:44.73 Disconnect +09.09.2021 23:33:49.52 Destructor called - automatically disconnect +09.09.2021 23:34:05.15 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.09.2021 23:34:05.35 Certificate errorRemoteCertificateChainErrors +09.09.2021 23:34:05.37 Exception: The remote certificate is invalid according to the validation procedure. +09.09.2021 23:34:08.96 Destructor called - automatically disconnect +09.09.2021 23:38:50.80 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.09.2021 23:38:51.07 Certificate errorRemoteCertificateNameMismatch, RemoteCertificateChainErrors +09.09.2021 23:38:51.08 Exception: The remote certificate is invalid according to the validation procedure. +09.09.2021 23:39:00.12 Destructor called - automatically disconnect +09.09.2021 23:47:24.13 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.09.2021 23:47:24.34 Certificate errorRemoteCertificateNameMismatch, RemoteCertificateChainErrors +09.09.2021 23:47:24.36 Exception: The remote certificate is invalid according to the validation procedure. +09.09.2021 23:48:30.82 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.09.2021 23:48:31.01 Certificate errorRemoteCertificateNameMismatch, RemoteCertificateChainErrors +09.09.2021 23:48:31.02 Exception: The remote certificate is invalid according to the validation procedure. +09.09.2021 23:48:37.70 Destructor called - automatically disconnect +09.09.2021 23:48:53.56 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.09.2021 23:48:53.78 Certificate errorRemoteCertificateNameMismatch, RemoteCertificateChainErrors +09.09.2021 23:48:53.79 Exception: The remote certificate is invalid according to the validation procedure. +09.09.2021 23:55:02.98 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.09.2021 23:55:03.20 Certificate errorRemoteCertificateNameMismatch, RemoteCertificateChainErrors +09.09.2021 23:55:03.21 Exception: The remote certificate is invalid according to the validation procedure. +09.09.2021 23:55:04.89 Destructor called - automatically disconnect +09.09.2021 23:57:31.66 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.09.2021 23:57:31.88 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +09.09.2021 23:57:31.88 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +09.09.2021 23:57:31.90 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +09.09.2021 23:57:31.90 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +09.09.2021 23:57:31.90 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +09.09.2021 23:57:31.90 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +09.09.2021 23:57:31.91 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +09.09.2021 23:57:31.91 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +09.09.2021 23:57:31.91 Disconnect +09.09.2021 23:57:31.91 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.09.2021 23:57:31.93 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +09.09.2021 23:57:31.93 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +09.09.2021 23:57:31.93 Disconnect +09.09.2021 23:57:47.64 Destructor called - automatically disconnect +09.09.2021 23:58:17.54 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.09.2021 23:58:17.73 Certificate errorRemoteCertificateNameMismatch, RemoteCertificateChainErrors +09.09.2021 23:58:17.74 Exception: The remote certificate is invalid according to the validation procedure. +09.09.2021 23:58:18.65 Destructor called - automatically disconnect +09.09.2021 23:58:55.79 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.09.2021 23:58:56.00 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +09.09.2021 23:58:56.00 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +09.09.2021 23:58:56.02 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +09.09.2021 23:58:56.02 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +09.09.2021 23:58:56.02 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +09.09.2021 23:58:56.02 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +09.09.2021 23:58:56.03 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +09.09.2021 23:58:56.03 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +09.09.2021 23:58:56.03 Disconnect +09.09.2021 23:58:56.03 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.09.2021 23:58:56.05 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +09.09.2021 23:58:56.05 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +09.09.2021 23:58:56.05 Disconnect +09.09.2021 23:58:58.53 Destructor called - automatically disconnect +16.09.2021 21:52:07.16 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 21:52:07.43 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 21:52:07.43 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 21:52:07.47 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 21:52:07.47 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 21:52:07.48 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 21:52:07.48 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 21:52:07.48 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 21:52:07.48 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 21:52:07.49 Disconnect +16.09.2021 21:52:07.49 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 21:52:07.50 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 21:52:07.50 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 21:52:07.50 Disconnect +16.09.2021 21:53:45.31 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 21:53:45.50 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 21:53:45.51 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 21:53:45.52 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 21:53:45.52 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 21:53:45.53 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 21:53:45.53 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 21:53:45.53 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 21:53:45.53 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 21:53:45.53 Disconnect +16.09.2021 21:53:45.53 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 21:53:45.55 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 21:53:45.55 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 21:53:45.55 Disconnect +16.09.2021 21:57:32.02 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 21:57:32.23 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 21:57:32.23 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 21:57:32.24 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 21:57:32.24 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 21:57:32.26 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 21:57:32.26 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 21:57:32.26 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 21:57:32.26 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 21:57:32.26 Disconnect +16.09.2021 21:57:32.26 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 21:57:32.28 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 21:57:32.28 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 21:57:32.28 Disconnect +16.09.2021 21:58:14.86 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 21:58:15.05 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 21:58:15.05 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 21:58:15.07 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 21:58:15.07 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 21:58:15.07 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 21:58:15.07 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 21:58:15.08 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 21:58:15.08 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 21:58:15.08 Disconnect +16.09.2021 21:58:15.08 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 21:58:15.09 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 21:58:15.09 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 21:58:15.09 Disconnect +16.09.2021 22:02:49.72 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:02:49.96 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 22:02:49.96 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 22:02:49.98 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 22:02:49.98 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 22:02:49.98 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 22:02:49.99 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 22:02:49.99 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:02:49.99 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:02:50.00 Disconnect +16.09.2021 22:02:50.00 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:02:50.02 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:02:50.02 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:02:50.02 Disconnect +16.09.2021 22:04:26.40 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:04:26.62 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 22:04:26.62 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 22:04:26.64 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 22:04:26.64 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 22:04:26.65 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 22:04:26.65 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 22:04:26.66 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:04:26.66 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:04:26.66 Disconnect +16.09.2021 22:04:26.66 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:04:26.68 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:04:26.68 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:04:26.69 Disconnect +16.09.2021 22:05:33.78 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:05:33.99 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 22:05:33.99 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 22:05:34.01 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 22:05:34.01 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 22:05:34.01 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 22:05:34.01 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 22:05:34.01 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:05:34.01 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:05:34.02 Disconnect +16.09.2021 22:05:34.02 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:05:34.03 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:05:34.03 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:05:34.03 Disconnect +16.09.2021 22:11:13.24 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:11:13.43 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 22:11:13.43 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 22:11:13.45 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 22:11:13.45 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 22:11:13.46 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 22:11:13.46 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 22:11:13.46 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:11:13.46 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:11:13.46 Disconnect +16.09.2021 22:11:13.46 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:11:13.47 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:11:13.47 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:11:13.47 Disconnect +16.09.2021 22:20:02.74 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:20:02.93 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 22:20:02.93 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 22:20:02.95 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 22:20:02.95 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 22:20:02.95 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 22:20:02.96 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 22:20:02.96 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:20:02.96 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:20:02.96 Disconnect +16.09.2021 22:20:02.96 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:20:02.98 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:20:02.98 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:20:02.98 Disconnect +16.09.2021 22:21:22.38 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:21:22.61 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 22:21:22.61 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 22:21:22.63 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 22:21:22.63 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 22:21:22.64 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 22:21:22.64 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 22:21:22.64 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:21:22.64 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:21:22.64 Disconnect +16.09.2021 22:21:22.65 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:21:22.67 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:21:22.67 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:21:22.67 Disconnect +16.09.2021 22:27:11.72 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:27:11.97 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 22:27:11.98 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 22:27:11.99 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 22:27:11.99 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 22:27:12.00 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 22:27:12.00 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 22:27:12.00 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:27:12.00 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:27:12.00 Disconnect +16.09.2021 22:27:12.00 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:27:12.03 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:27:12.03 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:27:12.03 Disconnect +16.09.2021 22:28:46.25 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:28:46.48 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 22:28:46.49 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 22:28:46.51 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 22:28:46.51 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 22:28:46.51 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 22:28:46.51 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 22:28:46.51 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:28:46.51 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:28:46.51 Disconnect +16.09.2021 22:28:46.51 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:28:46.53 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:28:46.53 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:28:46.54 Disconnect +16.09.2021 22:33:08.19 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:33:08.42 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 22:33:08.43 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 22:33:08.44 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 22:33:08.44 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 22:33:08.45 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 22:33:08.45 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 22:33:08.45 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:33:08.45 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:33:08.46 Disconnect +16.09.2021 22:33:08.46 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:33:08.46 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:33:08.46 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:33:08.47 Disconnect +16.09.2021 22:34:21.33 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:34:21.53 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 22:34:21.54 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 22:34:21.55 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 22:34:21.55 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 22:34:21.56 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 22:34:21.56 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 22:34:21.56 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:34:21.56 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:34:21.56 Disconnect +16.09.2021 22:34:21.56 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:34:21.58 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:34:21.58 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:34:21.58 Disconnect +16.09.2021 22:38:22.43 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:38:22.66 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 22:38:22.66 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 22:38:22.67 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 22:38:22.67 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 22:38:22.68 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 22:38:22.68 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 22:38:22.68 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:38:22.68 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:38:22.68 Disconnect +16.09.2021 22:38:22.69 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:38:22.69 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:38:22.69 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:38:22.70 Disconnect +16.09.2021 22:43:52.41 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:43:52.63 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 22:43:52.63 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 22:43:52.64 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 22:43:52.64 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 22:43:52.65 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 22:43:52.65 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 22:43:52.66 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:43:52.66 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:43:52.66 Disconnect +16.09.2021 22:43:52.66 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:43:52.67 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:43:52.67 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:43:52.67 Disconnect +16.09.2021 22:45:14.82 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:45:15.02 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 22:45:15.02 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 22:45:15.03 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 22:45:15.03 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 22:45:15.04 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 22:45:15.04 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 22:45:15.04 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:45:15.04 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:45:15.06 Disconnect +16.09.2021 22:45:15.06 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:45:15.08 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:45:15.08 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:45:15.10 Disconnect +16.09.2021 22:47:10.47 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:47:10.72 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 22:47:10.72 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 22:47:10.73 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 22:47:10.73 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 22:47:10.74 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 22:47:10.74 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 22:47:10.75 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:47:10.75 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:47:10.75 Disconnect +16.09.2021 22:47:10.75 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:47:10.77 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:47:10.77 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:47:10.78 Disconnect +16.09.2021 22:50:11.87 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:50:12.11 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 22:50:12.11 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 22:50:12.13 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 22:50:12.13 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 22:50:12.13 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 22:50:12.14 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 22:50:12.14 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:50:12.14 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:50:12.14 Disconnect +16.09.2021 22:50:12.14 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:50:12.16 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:50:12.16 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:50:12.16 Disconnect +16.09.2021 22:52:40.10 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:52:40.35 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +16.09.2021 22:52:40.36 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +16.09.2021 22:52:40.38 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +16.09.2021 22:52:40.38 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +16.09.2021 22:52:40.39 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +16.09.2021 22:52:40.39 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +16.09.2021 22:52:40.40 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:52:40.40 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:52:40.40 Disconnect +16.09.2021 22:52:40.40 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +16.09.2021 22:52:40.41 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +16.09.2021 22:52:40.41 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +16.09.2021 22:52:40.42 Disconnect +30.09.2021 20:50:31.59 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +30.09.2021 20:50:31.86 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +30.09.2021 20:50:31.86 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +30.09.2021 20:50:31.88 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +30.09.2021 20:50:31.88 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +30.09.2021 20:50:31.88 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +30.09.2021 20:50:31.89 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +30.09.2021 20:50:31.89 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +30.09.2021 20:50:31.89 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +30.09.2021 20:50:31.89 Disconnect +30.09.2021 20:50:31.89 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +30.09.2021 20:50:31.90 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +30.09.2021 20:50:31.91 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +30.09.2021 20:50:31.91 Disconnect +30.09.2021 21:20:40.19 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +30.09.2021 21:20:40.53 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +30.09.2021 21:20:40.53 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +30.09.2021 21:20:40.68 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +30.09.2021 21:20:40.68 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +30.09.2021 21:20:40.69 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +30.09.2021 21:20:40.69 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +30.09.2021 21:20:40.69 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +30.09.2021 21:20:40.69 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +30.09.2021 21:20:40.70 Disconnect +30.09.2021 21:20:40.70 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +30.09.2021 21:20:40.71 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +30.09.2021 21:20:40.71 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +30.09.2021 21:20:40.71 Disconnect +30.09.2021 21:20:44.46 Destructor called - automatically disconnect +30.09.2021 21:21:40.08 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +30.09.2021 21:21:40.30 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +30.09.2021 21:21:40.30 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +30.09.2021 21:21:40.44 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +30.09.2021 21:21:40.44 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +30.09.2021 21:21:40.45 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +30.09.2021 21:21:40.45 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +30.09.2021 21:21:40.45 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +30.09.2021 21:21:40.45 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +30.09.2021 21:21:40.46 Disconnect +30.09.2021 21:21:40.46 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +30.09.2021 21:21:40.48 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +30.09.2021 21:21:40.48 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +30.09.2021 21:21:40.48 Disconnect +30.09.2021 21:23:40.00 Destructor called - automatically disconnect +30.09.2021 21:24:53.94 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +30.09.2021 21:24:54.15 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +30.09.2021 21:24:54.15 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +30.09.2021 21:24:54.27 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +30.09.2021 21:24:54.27 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +30.09.2021 21:24:54.27 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +30.09.2021 21:24:54.28 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +30.09.2021 21:24:54.28 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +30.09.2021 21:24:54.28 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +30.09.2021 21:24:54.28 Disconnect +30.09.2021 21:24:54.28 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +30.09.2021 21:24:54.30 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +30.09.2021 21:24:54.30 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +30.09.2021 21:24:54.30 Disconnect +30.09.2021 21:29:24.99 Destructor called - automatically disconnect +05.10.2021 21:29:19.58 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.10.2021 21:29:19.85 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.10.2021 21:29:19.85 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.10.2021 21:29:20.14 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +05.10.2021 21:29:20.14 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +05.10.2021 21:29:20.14 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +05.10.2021 21:29:20.14 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +05.10.2021 21:29:20.14 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +05.10.2021 21:29:20.14 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +05.10.2021 21:29:20.14 Disconnect +05.10.2021 21:29:20.14 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.10.2021 21:29:20.17 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +05.10.2021 21:29:20.17 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +05.10.2021 21:29:20.17 Disconnect +05.10.2021 21:29:34.43 Destructor called - automatically disconnect +09.10.2021 15:41:03.62 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.10.2021 15:41:03.88 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +09.10.2021 15:41:03.88 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +09.10.2021 15:42:40.74 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.10.2021 15:42:40.96 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +09.10.2021 15:42:40.97 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +09.10.2021 15:42:41.06 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +09.10.2021 15:42:41.06 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +09.10.2021 15:42:41.08 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +09.10.2021 15:42:41.08 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +09.10.2021 15:42:41.08 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +09.10.2021 15:42:41.08 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +09.10.2021 15:42:41.08 Disconnect +09.10.2021 15:42:41.09 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.10.2021 15:42:41.10 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +09.10.2021 15:42:41.10 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +09.10.2021 15:42:41.10 Disconnect +09.10.2021 15:42:52.57 Destructor called - automatically disconnect +09.10.2021 15:46:09.38 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +09.10.2021 15:46:09.62 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +09.10.2021 15:46:09.62 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +09.10.2021 15:46:09.70 FunctionCodeNotSupportedException Throwed +14.10.2021 21:40:27.80 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +14.10.2021 21:40:28.02 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.10.2021 21:40:28.02 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.10.2021 21:40:28.26 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +14.10.2021 21:40:28.26 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +14.10.2021 21:40:28.27 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +14.10.2021 21:40:28.27 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +14.10.2021 21:40:28.27 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +14.10.2021 21:40:28.27 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +14.10.2021 21:40:28.28 Disconnect +14.10.2021 21:40:28.28 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +14.10.2021 21:40:28.30 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +14.10.2021 21:40:28.30 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +14.10.2021 21:40:28.30 Disconnect +14.10.2021 21:40:31.90 Destructor called - automatically disconnect +14.10.2021 21:43:15.83 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +14.10.2021 21:43:16.02 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.10.2021 21:43:16.03 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.10.2021 21:43:16.25 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +14.10.2021 21:43:16.25 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +14.10.2021 21:43:41.92 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +14.10.2021 21:43:42.11 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +14.10.2021 21:43:42.11 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +14.10.2021 21:43:42.22 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +14.10.2021 21:43:42.22 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +14.10.2021 21:43:42.22 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +14.10.2021 21:43:42.22 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +14.10.2021 21:43:42.22 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +14.10.2021 21:43:42.23 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +14.10.2021 21:43:42.23 Disconnect +14.10.2021 21:43:42.23 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +14.10.2021 21:43:42.25 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +14.10.2021 21:43:42.25 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +14.10.2021 21:43:42.26 Disconnect +19.10.2021 21:34:44.28 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +19.10.2021 21:34:44.55 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +19.10.2021 21:34:44.55 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +19.10.2021 21:34:57.27 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +19.10.2021 21:34:57.50 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +19.10.2021 21:34:57.50 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +19.10.2021 21:34:57.64 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +19.10.2021 21:34:57.64 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +19.10.2021 21:34:57.64 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +19.10.2021 21:34:57.65 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +19.10.2021 21:34:57.65 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +19.10.2021 21:34:57.65 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +19.10.2021 21:34:57.65 Disconnect +19.10.2021 21:34:57.65 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +19.10.2021 21:34:57.67 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +19.10.2021 21:34:57.67 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +19.10.2021 21:34:57.67 Disconnect +19.10.2021 21:35:10.73 Destructor called - automatically disconnect +19.10.2021 21:35:45.11 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +19.10.2021 21:35:45.30 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +19.10.2021 21:35:45.30 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +19.10.2021 21:35:45.39 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +19.10.2021 21:35:45.39 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +19.10.2021 21:35:45.40 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +19.10.2021 21:35:45.40 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +19.10.2021 21:35:45.40 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +19.10.2021 21:35:45.40 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +19.10.2021 21:35:45.40 Disconnect +19.10.2021 21:35:45.40 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +19.10.2021 21:35:45.42 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +19.10.2021 21:35:45.42 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +19.10.2021 21:35:45.42 Disconnect +19.10.2021 21:38:41.71 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +19.10.2021 21:38:41.97 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +19.10.2021 21:38:41.97 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +19.10.2021 21:38:42.19 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +19.10.2021 21:38:42.19 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +19.10.2021 21:38:42.19 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +19.10.2021 21:38:42.19 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +19.10.2021 21:38:42.20 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +19.10.2021 21:38:42.20 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +19.10.2021 21:38:42.20 Disconnect +19.10.2021 21:38:42.20 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +19.10.2021 21:38:42.22 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +19.10.2021 21:38:42.22 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +19.10.2021 21:38:42.22 Disconnect +19.10.2021 21:40:40.49 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +19.10.2021 21:40:40.71 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +19.10.2021 21:40:40.71 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +19.10.2021 21:40:40.94 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +19.10.2021 21:40:40.94 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +19.10.2021 21:40:40.96 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +19.10.2021 21:40:40.96 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +19.10.2021 21:40:40.96 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +19.10.2021 21:40:40.96 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +19.10.2021 21:40:40.96 Disconnect +19.10.2021 21:40:40.96 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +19.10.2021 21:40:40.98 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +19.10.2021 21:40:40.98 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +19.10.2021 21:40:40.98 Disconnect +19.10.2021 21:41:02.77 Destructor called - automatically disconnect +19.10.2021 21:41:41.50 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +19.10.2021 21:41:41.72 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +19.10.2021 21:41:41.72 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +19.10.2021 21:41:41.94 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +19.10.2021 21:41:41.94 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +19.10.2021 21:41:41.95 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +19.10.2021 21:41:41.95 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +19.10.2021 21:41:41.95 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +19.10.2021 21:41:41.95 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +19.10.2021 21:41:41.96 Disconnect +19.10.2021 21:41:41.96 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +19.10.2021 21:41:41.96 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +19.10.2021 21:41:41.96 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +19.10.2021 21:41:41.97 Disconnect +22.10.2021 9:14:46.37 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +22.10.2021 9:14:46.66 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +22.10.2021 9:14:46.66 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +22.10.2021 9:14:46.92 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +22.10.2021 9:14:46.92 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +23.10.2021 20:07:12.53 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +23.10.2021 20:07:12.79 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +23.10.2021 20:07:12.80 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +23.10.2021 20:07:13.07 FunctionCodeNotSupportedException Throwed +23.10.2021 20:08:58.45 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +23.10.2021 20:08:58.64 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +23.10.2021 20:08:58.64 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +23.10.2021 20:08:58.73 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +23.10.2021 20:08:58.73 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +23.10.2021 20:08:58.73 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +23.10.2021 20:08:58.73 Send ModbusTCP-Data: 00-03-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +23.10.2021 20:08:58.74 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +23.10.2021 20:08:58.74 Send MocbusTCP-Data: 00-04-00-00-00-06-01-01-00-00-00-02 +23.10.2021 20:08:58.74 Disconnect +23.10.2021 20:08:58.74 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +23.10.2021 20:08:58.75 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +23.10.2021 20:08:58.75 Send MocbusTCP-Data: 00-05-00-00-00-06-01-01-00-00-00-02 +23.10.2021 20:08:58.75 Disconnect +23.10.2021 20:09:01.40 Destructor called - automatically disconnect +23.10.2021 20:09:41.63 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +23.10.2021 20:09:41.80 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +23.10.2021 20:09:41.80 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +23.10.2021 20:09:41.88 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +23.10.2021 20:09:41.88 Send MocbusTCP-Data: 00-02-00-00-00-06-01-01-00-09-00-02 +23.10.2021 20:09:41.88 FunctionCodeNotSupportedException Throwed +26.10.2021 23:44:26.29 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.10.2021 23:44:26.66 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +26.10.2021 23:44:26.66 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +26.10.2021 23:44:26.94 FunctionCodeNotSupportedException Throwed +26.10.2021 23:45:29.36 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.10.2021 23:45:29.57 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +26.10.2021 23:45:29.57 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +26.10.2021 23:45:29.71 FunctionCodeNotSupportedException Throwed +26.10.2021 23:47:31.79 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.10.2021 23:47:40.42 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.10.2021 23:47:40.63 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +26.10.2021 23:47:40.63 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +26.10.2021 23:47:40.81 FunctionCodeNotSupportedException Throwed +26.10.2021 23:48:26.83 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.10.2021 23:48:27.03 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +26.10.2021 23:48:27.03 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +26.10.2021 23:49:53.92 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.10.2021 23:49:54.11 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +26.10.2021 23:49:54.11 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +26.10.2021 23:50:07.32 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.10.2021 23:50:07.46 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +26.10.2021 23:50:07.46 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +26.10.2021 23:50:07.46 FunctionCodeNotSupportedException Throwed +26.10.2021 23:50:48.86 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.10.2021 23:50:48.98 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +26.10.2021 23:50:48.99 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +26.10.2021 23:52:22.38 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +26.10.2021 23:52:22.63 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +26.10.2021 23:52:22.64 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +26.10.2021 23:52:22.83 Disconnect +28.10.2021 20:49:16.93 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 20:49:20.80 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 20:49:20.80 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 20:49:21.08 FunctionCodeNotSupportedException Throwed +28.10.2021 20:57:21.46 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 20:57:21.62 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 20:57:21.62 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 20:57:21.94 Disconnect +28.10.2021 20:57:47.94 Destructor called - automatically disconnect +28.10.2021 21:06:32.99 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:06:33.19 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:06:33.19 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:06:33.30 Disconnect +28.10.2021 21:08:06.24 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:08:06.42 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:08:06.42 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:08:06.58 Disconnect +28.10.2021 21:10:28.84 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:10:29.00 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:10:29.00 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:10:57.84 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:10:58.01 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:10:58.01 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:13:00.40 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:13:00.61 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:13:00.61 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:13:00.75 FunctionCodeNotSupportedException Throwed +28.10.2021 21:13:58.65 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:13:58.84 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:13:58.84 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:13:59.03 Disconnect +28.10.2021 21:14:00.18 Destructor called - automatically disconnect +28.10.2021 21:16:15.93 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:16:16.10 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:16:16.10 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:16:16.23 Disconnect +28.10.2021 21:16:17.26 Destructor called - automatically disconnect +28.10.2021 21:16:49.71 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:16:49.88 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:16:49.88 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:16:50.00 FunctionCodeNotSupportedException Throwed +28.10.2021 21:27:30.49 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:27:30.67 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:27:30.67 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:27:30.78 FunctionCodeNotSupportedException Throwed +28.10.2021 21:28:14.11 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:28:14.28 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:28:14.28 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:28:14.47 Disconnect +28.10.2021 21:28:17.75 Destructor called - automatically disconnect +28.10.2021 21:36:12.35 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:36:12.52 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:36:12.52 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:36:12.62 FunctionCodeNotSupportedException Throwed +28.10.2021 21:41:58.99 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:41:59.17 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:41:59.17 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:41:59.27 Disconnect +28.10.2021 21:42:09.27 Destructor called - automatically disconnect +28.10.2021 21:42:19.75 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:42:19.93 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:42:19.94 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:42:20.07 FunctionCodeNotSupportedException Throwed +28.10.2021 21:42:49.61 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:42:49.78 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:42:49.78 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:42:49.91 Disconnect +28.10.2021 21:42:52.85 Destructor called - automatically disconnect +28.10.2021 21:44:46.43 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:44:46.60 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:44:46.60 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:44:46.72 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +28.10.2021 21:44:46.72 Send ModbusTCP-Data: 00-02-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +28.10.2021 21:44:46.72 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +28.10.2021 21:44:46.72 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-00-00-02 +28.10.2021 21:44:46.72 Disconnect +28.10.2021 21:46:20.64 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:46:20.82 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:46:20.82 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:46:20.95 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +28.10.2021 21:46:20.95 Send ModbusTCP-Data: 00-02-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +28.10.2021 21:46:20.95 FunctionCodeNotSupportedException Throwed +28.10.2021 21:46:38.83 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +28.10.2021 21:46:38.99 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +28.10.2021 21:46:38.99 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +28.10.2021 21:46:39.11 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +28.10.2021 21:46:39.11 Send ModbusTCP-Data: 00-02-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +28.10.2021 21:46:39.12 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +28.10.2021 21:46:39.12 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-00-00-02 +28.10.2021 21:46:39.12 Disconnect +28.10.2021 21:46:40.21 Destructor called - automatically disconnect +24.11.2021 21:45:32.18 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +24.11.2021 21:45:32.41 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +24.11.2021 21:45:32.41 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +24.11.2021 21:45:32.65 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +24.11.2021 21:45:32.65 Send ModbusTCP-Data: 00-02-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +24.11.2021 21:45:32.66 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +24.11.2021 21:45:32.66 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-00-00-02 +24.11.2021 21:45:32.67 Disconnect +24.11.2021 21:45:37.36 Destructor called - automatically disconnect +24.11.2021 21:45:56.97 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +24.11.2021 21:45:57.18 Exception: Unable to authenticate to the server +30.11.2021 23:10:04.81 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +30.11.2021 23:10:05.09 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +30.11.2021 23:10:05.09 Send MocbusTCP-Data: 00-01-00-00-00-06-01-01-00-09-00-02 +17.02.2022 22:13:48.47 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +17.02.2022 22:13:48.60 Certificate errorRemoteCertificateNameMismatch, RemoteCertificateChainErrors +17.02.2022 22:13:48.61 Exception: The remote certificate is invalid according to the validation procedure. +17.02.2022 22:13:57.28 Destructor called - automatically disconnect +17.02.2022 22:41:19.69 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +17.02.2022 22:41:19.80 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +17.02.2022 22:41:19.80 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +17.02.2022 22:41:19.96 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +17.02.2022 22:41:19.96 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +17.02.2022 22:41:19.96 FunctionCodeNotSupportedException Throwed +17.02.2022 22:45:12.19 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +17.02.2022 22:45:12.28 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +17.02.2022 22:45:12.29 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +17.02.2022 22:45:12.34 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +17.02.2022 22:45:12.34 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +17.02.2022 22:45:12.34 FunctionCodeNotSupportedException Throwed +17.02.2022 22:45:48.69 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +17.02.2022 22:45:48.79 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +17.02.2022 22:45:48.79 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +17.02.2022 22:45:48.85 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +17.02.2022 22:45:48.85 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +17.02.2022 22:45:48.86 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +17.02.2022 22:45:48.86 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +17.02.2022 22:46:13.42 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +17.02.2022 22:46:13.53 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +17.02.2022 22:46:13.53 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +17.02.2022 22:46:13.58 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +17.02.2022 22:46:13.58 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +17.02.2022 22:46:13.59 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +17.02.2022 22:46:13.59 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +17.02.2022 22:46:13.59 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +17.02.2022 22:46:13.59 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +17.02.2022 22:46:13.59 FunctionCodeNotSupportedException Throwed +17.02.2022 22:46:56.16 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +17.02.2022 22:46:56.25 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +17.02.2022 22:46:56.26 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +17.02.2022 22:46:56.31 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +17.02.2022 22:46:56.31 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +17.02.2022 22:46:56.32 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +17.02.2022 22:46:56.32 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +17.02.2022 22:46:56.32 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +17.02.2022 22:46:56.32 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +17.02.2022 22:46:56.33 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +17.02.2022 22:46:56.33 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +17.02.2022 22:46:56.33 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +17.02.2022 22:46:56.33 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +17.02.2022 22:46:56.33 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +17.02.2022 22:46:56.33 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +17.02.2022 22:46:56.33 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +17.02.2022 22:46:56.33 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +17.02.2022 22:46:56.33 Disconnect +17.02.2022 22:47:12.58 Destructor called - automatically disconnect +17.02.2022 22:48:07.33 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +17.02.2022 22:48:07.43 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +17.02.2022 22:48:07.43 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +17.02.2022 22:48:07.50 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +17.02.2022 22:48:07.50 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +17.02.2022 22:48:07.51 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +17.02.2022 22:48:07.51 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +17.02.2022 22:48:07.51 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +17.02.2022 22:48:07.51 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +17.02.2022 22:48:07.51 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +17.02.2022 22:48:07.51 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +17.02.2022 22:48:07.51 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +17.02.2022 22:48:07.51 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +17.02.2022 22:48:07.52 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +17.02.2022 22:48:07.52 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +17.02.2022 22:48:07.52 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +17.02.2022 22:48:07.52 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +17.02.2022 22:48:07.52 Disconnect +17.02.2022 22:48:09.14 Destructor called - automatically disconnect +15.03.2022 19:10:49.89 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +15.03.2022 19:15:06.55 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +15.03.2022 19:15:06.68 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +15.03.2022 19:15:06.68 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +15.03.2022 19:15:06.81 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +15.03.2022 19:15:06.81 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +15.03.2022 19:15:06.82 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +15.03.2022 19:15:06.82 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +15.03.2022 19:15:06.82 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +15.03.2022 19:15:06.82 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +15.03.2022 19:15:06.82 FunctionCodeNotSupportedException Throwed +15.03.2022 19:15:47.46 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +15.03.2022 19:15:47.54 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +15.03.2022 19:15:47.55 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +15.03.2022 19:15:47.60 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +15.03.2022 19:15:47.60 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +15.03.2022 19:15:47.61 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +15.03.2022 19:15:47.61 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +15.03.2022 19:15:47.61 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +15.03.2022 19:15:47.61 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +15.03.2022 19:15:47.61 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +15.03.2022 19:15:47.61 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +15.03.2022 19:15:47.61 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +15.03.2022 19:15:47.61 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +15.03.2022 19:15:47.61 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +15.03.2022 19:15:47.61 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +15.03.2022 19:15:47.61 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +15.03.2022 19:15:47.61 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +15.03.2022 19:15:47.61 Disconnect +15.03.2022 19:15:48.99 Destructor called - automatically disconnect +15.03.2022 19:24:30.63 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +15.03.2022 19:24:30.73 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +15.03.2022 19:24:30.73 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +15.03.2022 19:24:30.78 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +15.03.2022 19:24:30.78 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +15.03.2022 19:24:30.78 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +15.03.2022 19:24:30.78 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +15.03.2022 19:24:30.78 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +15.03.2022 19:24:30.78 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +15.03.2022 19:24:30.79 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +15.03.2022 19:24:30.79 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +15.03.2022 19:24:30.79 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +15.03.2022 19:24:30.79 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +15.03.2022 19:24:30.79 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +15.03.2022 19:24:30.79 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +15.03.2022 19:24:30.79 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +15.03.2022 19:24:30.79 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +15.03.2022 19:24:30.79 Disconnect +15.03.2022 19:25:08.67 Destructor called - automatically disconnect +15.03.2022 19:25:13.12 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +15.03.2022 19:25:13.19 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +15.03.2022 19:25:13.19 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +15.03.2022 19:25:13.19 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +15.03.2022 19:25:13.19 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +15.03.2022 19:25:13.19 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +15.03.2022 19:25:13.19 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +15.03.2022 19:25:13.20 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +15.03.2022 19:25:13.20 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +15.03.2022 19:25:13.20 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +15.03.2022 19:25:13.20 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +15.03.2022 19:25:13.20 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +15.03.2022 19:25:13.20 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +15.03.2022 19:25:13.20 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +15.03.2022 19:25:13.20 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +15.03.2022 19:25:13.20 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +15.03.2022 19:25:13.20 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +15.03.2022 19:25:13.20 Disconnect +20.03.2022 16:36:15.27 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +20.03.2022 16:36:15.39 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +20.03.2022 16:36:15.39 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +20.03.2022 16:36:15.46 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +20.03.2022 16:36:15.46 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +20.03.2022 16:36:15.46 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +20.03.2022 16:36:15.46 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +20.03.2022 16:36:15.47 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +20.03.2022 16:36:15.47 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +20.03.2022 16:36:15.47 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +20.03.2022 16:36:15.47 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +20.03.2022 16:36:15.47 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +20.03.2022 16:36:15.47 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +20.03.2022 16:36:15.47 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +20.03.2022 16:36:15.47 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +20.03.2022 16:36:15.47 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +20.03.2022 16:36:15.47 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +20.03.2022 16:36:15.47 Disconnect +20.03.2022 16:36:16.97 Destructor called - automatically disconnect +20.03.2022 16:36:34.16 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +20.03.2022 16:36:34.25 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +20.03.2022 16:36:34.25 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +20.03.2022 16:36:34.32 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +20.03.2022 16:36:34.32 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +20.03.2022 16:36:34.33 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +20.03.2022 16:36:34.33 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +20.03.2022 16:36:34.33 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +20.03.2022 16:36:34.33 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +20.03.2022 16:36:34.33 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +20.03.2022 16:36:34.33 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +20.03.2022 16:36:34.33 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +20.03.2022 16:36:34.33 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +20.03.2022 16:36:34.33 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +20.03.2022 16:36:34.33 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +20.03.2022 16:36:34.34 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +20.03.2022 16:36:34.34 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +20.03.2022 16:36:34.34 Disconnect +20.03.2022 16:37:09.65 Destructor called - automatically disconnect +23.03.2022 18:52:57.85 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +23.03.2022 18:52:57.95 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +23.03.2022 18:52:57.95 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +23.03.2022 18:52:58.11 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +23.03.2022 18:52:58.11 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +23.03.2022 18:52:58.11 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +23.03.2022 18:52:58.11 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +23.03.2022 18:52:58.12 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +23.03.2022 18:52:58.12 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +23.03.2022 18:52:58.12 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +23.03.2022 18:52:58.12 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +23.03.2022 18:52:58.12 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +23.03.2022 18:52:58.12 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +23.03.2022 18:52:58.12 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +23.03.2022 18:52:58.12 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +23.03.2022 18:52:58.12 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +23.03.2022 18:52:58.12 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +23.03.2022 18:52:58.12 Disconnect +23.03.2022 18:52:59.65 Destructor called - automatically disconnect +31.03.2022 21:25:58.10 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +31.03.2022 21:25:58.21 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +31.03.2022 21:25:58.22 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +31.03.2022 21:25:58.37 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +31.03.2022 21:25:58.37 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +31.03.2022 21:25:58.38 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +31.03.2022 21:25:58.38 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +31.03.2022 21:25:58.38 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +31.03.2022 21:25:58.38 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +31.03.2022 21:25:58.38 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +31.03.2022 21:25:58.38 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +31.03.2022 21:25:58.38 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +31.03.2022 21:25:58.39 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +31.03.2022 21:25:58.39 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +31.03.2022 21:25:58.39 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +31.03.2022 21:25:58.39 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +31.03.2022 21:25:58.39 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +31.03.2022 21:25:58.39 Disconnect +31.03.2022 21:26:04.71 Destructor called - automatically disconnect +31.03.2022 21:26:20.25 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +31.03.2022 21:26:20.35 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +31.03.2022 21:26:20.35 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +31.03.2022 21:26:20.46 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +31.03.2022 21:26:20.46 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +31.03.2022 21:26:20.47 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +31.03.2022 21:26:20.47 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +31.03.2022 21:26:20.47 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +31.03.2022 21:26:20.47 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +31.03.2022 21:26:20.47 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +31.03.2022 21:26:20.47 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +31.03.2022 21:26:20.47 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +31.03.2022 21:26:20.47 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +31.03.2022 21:26:20.47 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +31.03.2022 21:26:20.47 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +31.03.2022 21:26:20.47 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +31.03.2022 21:26:20.47 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +31.03.2022 21:26:20.48 Disconnect +05.04.2022 19:58:36.75 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.04.2022 19:58:36.85 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.04.2022 19:58:36.85 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.04.2022 19:58:36.98 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +05.04.2022 19:58:36.98 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 19:58:36.99 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +05.04.2022 19:58:36.99 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +05.04.2022 19:58:36.99 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +05.04.2022 19:58:36.99 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +05.04.2022 19:58:36.99 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +05.04.2022 19:58:36.99 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +05.04.2022 19:58:37.00 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +05.04.2022 19:58:37.00 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +05.04.2022 19:58:37.00 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +05.04.2022 19:58:37.00 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +05.04.2022 19:58:37.00 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +05.04.2022 19:58:37.00 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +05.04.2022 19:58:37.00 Disconnect +05.04.2022 20:00:52.11 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.04.2022 20:00:52.21 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.04.2022 20:00:52.21 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.04.2022 20:01:41.29 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.04.2022 20:01:41.38 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.04.2022 20:01:41.39 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.04.2022 20:01:53.28 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.04.2022 20:01:53.37 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.04.2022 20:01:53.37 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.04.2022 20:02:54.81 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.04.2022 20:02:54.90 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.04.2022 20:02:54.91 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.04.2022 20:02:55.02 FunctionCodeNotSupportedException Throwed +05.04.2022 20:03:09.25 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.04.2022 20:03:09.33 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.04.2022 20:03:09.33 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.04.2022 20:03:09.39 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +05.04.2022 20:03:09.39 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 20:03:09.40 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +05.04.2022 20:03:09.40 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +05.04.2022 20:03:09.40 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +05.04.2022 20:03:09.40 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +05.04.2022 20:03:09.40 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +05.04.2022 20:03:09.40 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +05.04.2022 20:03:09.40 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +05.04.2022 20:03:09.40 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +05.04.2022 20:03:09.40 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +05.04.2022 20:03:09.40 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +05.04.2022 20:03:09.40 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +05.04.2022 20:03:09.40 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +05.04.2022 20:03:09.41 Disconnect +05.04.2022 20:03:11.66 Destructor called - automatically disconnect +05.04.2022 20:08:12.06 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.04.2022 20:08:12.15 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.04.2022 20:08:12.15 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.04.2022 20:08:12.27 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +05.04.2022 20:08:12.27 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 20:08:12.27 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +05.04.2022 20:08:12.27 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +05.04.2022 20:08:12.28 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +05.04.2022 20:08:12.28 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +05.04.2022 20:08:12.28 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +05.04.2022 20:08:12.28 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +05.04.2022 20:08:12.28 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +05.04.2022 20:08:12.28 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +05.04.2022 20:08:12.28 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +05.04.2022 20:08:12.28 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +05.04.2022 20:08:12.28 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +05.04.2022 20:08:12.28 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +05.04.2022 20:08:12.28 Disconnect +05.04.2022 20:08:17.53 Destructor called - automatically disconnect +05.04.2022 20:31:01.11 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.04.2022 20:31:01.20 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.04.2022 20:31:01.20 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.04.2022 20:31:01.32 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +05.04.2022 20:31:01.32 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 20:31:01.32 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +05.04.2022 20:31:01.32 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +05.04.2022 20:31:01.33 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +05.04.2022 20:31:01.33 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +05.04.2022 20:31:01.33 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +05.04.2022 20:31:01.33 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +05.04.2022 20:31:01.33 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +05.04.2022 20:31:01.33 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +05.04.2022 20:31:01.33 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +05.04.2022 20:31:01.33 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +05.04.2022 20:31:01.33 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +05.04.2022 20:31:01.33 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +05.04.2022 20:31:01.33 Disconnect +05.04.2022 20:46:49.43 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.04.2022 20:46:49.52 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.04.2022 20:46:49.52 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.04.2022 20:46:49.64 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +05.04.2022 20:46:49.64 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 20:46:49.65 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +05.04.2022 20:46:49.65 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +05.04.2022 20:46:49.65 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +05.04.2022 20:46:49.65 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +05.04.2022 20:46:49.65 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +05.04.2022 20:46:49.66 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +05.04.2022 20:46:49.66 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +05.04.2022 20:46:49.66 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +05.04.2022 20:46:49.66 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +05.04.2022 20:46:49.66 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +05.04.2022 20:46:49.66 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +05.04.2022 20:46:49.66 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +05.04.2022 20:46:49.66 Disconnect +05.04.2022 20:46:51.59 Destructor called - automatically disconnect +05.04.2022 20:47:12.28 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.04.2022 20:47:12.38 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.04.2022 20:47:12.38 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.04.2022 20:47:12.44 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +05.04.2022 20:47:12.44 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 20:47:12.44 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +05.04.2022 20:47:12.44 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +05.04.2022 20:47:12.45 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +05.04.2022 20:47:12.45 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +05.04.2022 20:47:12.45 FunctionCodeNotSupportedException Throwed +05.04.2022 21:05:49.42 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.04.2022 21:05:49.52 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.04.2022 21:05:49.52 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.04.2022 21:05:49.64 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +05.04.2022 21:05:49.64 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 21:05:49.64 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +05.04.2022 21:05:49.64 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +05.04.2022 21:05:49.65 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +05.04.2022 21:05:49.65 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +05.04.2022 21:05:49.65 FunctionCodeNotSupportedException Throwed +05.04.2022 21:06:12.99 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.04.2022 21:06:13.11 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.04.2022 21:06:13.11 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.04.2022 21:06:13.16 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +05.04.2022 21:06:13.16 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 21:06:13.16 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +05.04.2022 21:06:13.16 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +05.04.2022 21:06:13.17 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +05.04.2022 21:06:13.17 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +05.04.2022 21:06:13.17 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +05.04.2022 21:06:13.17 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +05.04.2022 21:06:13.17 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +05.04.2022 21:06:13.17 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +05.04.2022 21:06:13.18 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +05.04.2022 21:06:13.18 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +05.04.2022 21:06:13.18 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +05.04.2022 21:06:13.18 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +05.04.2022 21:06:13.18 Disconnect +05.04.2022 21:10:04.91 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.04.2022 21:10:05.02 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.04.2022 21:10:05.02 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.04.2022 21:10:05.15 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +05.04.2022 21:10:05.15 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 21:10:05.15 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +05.04.2022 21:10:05.15 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +05.04.2022 21:10:05.16 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +05.04.2022 21:10:05.16 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +05.04.2022 21:10:05.16 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +05.04.2022 21:10:05.16 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +05.04.2022 21:10:05.16 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +05.04.2022 21:10:05.16 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +05.04.2022 21:10:05.16 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +05.04.2022 21:10:05.16 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +05.04.2022 21:10:05.16 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +05.04.2022 21:10:05.16 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +05.04.2022 21:10:05.16 Disconnect +05.04.2022 21:10:14.79 Open TCP-Socket, IP-Address: 127.0.0.1, Port: 802 +05.04.2022 21:10:14.87 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True True True True True True True True True True +05.04.2022 21:10:14.87 Send ModbusTCP-Data: 00-01-00-00-00-09-01-0F-00-04-00-0A-02-FF-03 +05.04.2022 21:10:14.87 FC6 (Write single register to Master device), StartingAddress: 0, Value: 5 +05.04.2022 21:10:14.87 Send ModbusTCP-Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 21:10:14.88 FC1 (Read Coils from Master device), StartingAddress: 9, Quantity: 2 +05.04.2022 21:10:14.88 Send MocbusTCP-Data: 00-03-00-00-00-06-01-01-00-09-00-02 +05.04.2022 21:10:14.88 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 10 +05.04.2022 21:10:14.88 Send ModbusTCP-Data: 00-04-00-00-00-06-01-03-00-00-00-0A +05.04.2022 21:10:14.88 FC15 (Write multiple coils to Master device), StartingAddress: 4, Values: True False True True True False True True True True +05.04.2022 21:10:14.88 Send ModbusTCP-Data: 00-05-00-00-00-09-01-0F-00-04-00-0A-02-DD-03 +05.04.2022 21:10:14.88 FC1 (Read Coils from Master device), StartingAddress: 0, Quantity: 2 +05.04.2022 21:10:14.88 Send MocbusTCP-Data: 00-06-00-00-00-06-01-01-00-00-00-02 +05.04.2022 21:10:14.88 FC6 (Write single register to Master device), StartingAddress: 0, Value: 7 +05.04.2022 21:10:14.88 Send ModbusTCP-Data: 00-07-00-00-00-06-01-06-00-00-00-07 +05.04.2022 21:10:14.88 FC3 (Read Holding Registers from Master device), StartingAddress: 0, Quantity: 1 +05.04.2022 21:10:14.88 Send ModbusTCP-Data: 00-08-00-00-00-06-01-03-00-00-00-01 +05.04.2022 21:10:14.88 Disconnect diff --git a/EasySecureModbus_Demo_Server/EasyModbusSecure_Demo_Server.csproj b/EasySecureModbus_Demo_Server/EasyModbusSecure_Demo_Server.csproj new file mode 100644 index 0000000..494faa0 --- /dev/null +++ b/EasySecureModbus_Demo_Server/EasyModbusSecure_Demo_Server.csproj @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProjectGuid>{9E87DF38-4733-431C-A175-47423B37762C}</ProjectGuid> + <OutputType>Exe</OutputType> + <RootNamespace>EasuySecureModbus_Demo_Server</RootNamespace> + <AssemblyName>EasuySecureModbus_Demo_Server</AssemblyName> + <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + <Deterministic>true</Deterministic> + <TargetFrameworkProfile /> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <PlatformTarget>AnyCPU</PlatformTarget> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + <Prefer32Bit>false</Prefer32Bit> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <PlatformTarget>AnyCPU</PlatformTarget> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + <Prefer32Bit>false</Prefer32Bit> + </PropertyGroup> + <PropertyGroup> + <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> + </PropertyGroup> + <PropertyGroup> + <StartupObject>EasySecureModbus_Demo_Server.Program</StartupObject> + </PropertyGroup> + <ItemGroup> + <Reference Include="EasyModbusSecure, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\EasyModbus_Secure\bin\Debug\EasyModbusSecure.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Core" /> + <Reference Include="System.ValueTuple, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL"> + <HintPath>packages\System.ValueTuple.4.5.0\lib\netstandard1.0\System.ValueTuple.dll</HintPath> + </Reference> + <Reference Include="System.Xml.Linq" /> + <Reference Include="System.Data.DataSetExtensions" /> + <Reference Include="Microsoft.CSharp" /> + <Reference Include="System.Data" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Program.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + </ItemGroup> + <ItemGroup> + <Folder Include="certs\" /> + </ItemGroup> + <ItemGroup> + <None Include="app.config" /> + <None Include="packages.config" /> + <None Include="README.md" /> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <PropertyGroup> + <PreBuildEvent>if exist "$(TargetPath).locked" del "$(TargetPath).locked" +if exist "$(TargetPath)" if not exist "$(TargetPath).locked" move "$(TargetPath)" "$(TargetPath).locked"</PreBuildEvent> + </PropertyGroup> +</Project> \ No newline at end of file diff --git a/EasySecureModbus_Demo_Server/EasyModbusSecure_Demo_Server.sln b/EasySecureModbus_Demo_Server/EasyModbusSecure_Demo_Server.sln new file mode 100644 index 0000000..9a19c13 --- /dev/null +++ b/EasySecureModbus_Demo_Server/EasyModbusSecure_Demo_Server.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29613.14 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyModbusSecure_Demo_Server", "EasyModbusSecure_Demo_Server.csproj", "{9E87DF38-4733-431C-A175-47423B37762C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {9E87DF38-4733-431C-A175-47423B37762C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9E87DF38-4733-431C-A175-47423B37762C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E87DF38-4733-431C-A175-47423B37762C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9E87DF38-4733-431C-A175-47423B37762C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {A25C68A3-B869-4535-9491-0229CC9FEC3C} + EndGlobalSection +EndGlobal diff --git a/EasySecureModbus_Demo_Server/Program.cs b/EasySecureModbus_Demo_Server/Program.cs new file mode 100644 index 0000000..6c71fd4 --- /dev/null +++ b/EasySecureModbus_Demo_Server/Program.cs @@ -0,0 +1,52 @@ +using EasyModbusSecure; +using System; +using System.Collections.Generic; + +namespace EasySecureModbus_Demo_Server +{ + class Program + { + static void Main(string[] args) + { + Program application = new Program(); + application.startServer(args[0], args[1]); // For now we pass only the password, later can be cert path as well + } + + public void startServer(string certPath, string certPass) + { + //convert that to use CLI argument + List<ValueTuple<string, List<byte>>> roles = new List<ValueTuple<string, List<byte>>> + { + //ValueTuple.Create("Maintainer", (byte)0x01), + //ValueTuple.Create("Operator", new List<byte> { (byte)0x01, (byte)0x0F, (byte)0x06} ), + ValueTuple.Create("Operator", new List<byte> { (byte)0x01, (byte)0x0F, (byte)0x06, (byte)0x03 } ), + ValueTuple.Create("Engineer", new List<byte> { (byte)0x01 }) + }; + ModbusSecureServerAuthZ modbusServer = new ModbusSecureServerAuthZ(certPath, certPass, true, roles); + //ModbusSecureServer modbusServer = new ModbusSecureServer("..\\..\\certs2\\server.pfx", certPass, true, roles); + //ModbusSecureServer modbusServer = new ModbusSecureServer("..\\..\\certs\\server.pfx", certPass, false); + + modbusServer.FunctionCode1AuthZDisabled = false; + modbusServer.LogFileFilename = "..\\..\\logs\\ServerLogs.txt"; + modbusServer.Listen(); + + modbusServer.HoldingRegistersChanged += new ModbusSecureServer.HoldingRegistersChangedHandler(holdingRegistersChanged); + modbusServer.CoilsChanged += new ModbusSecureServer.CoilsChangedHandler(coilsChanged); + Console.ReadKey(); + + modbusServer.StopListening(); + } + + public static void holdingRegistersChanged(int startingAddress, int quantity) + { + Console.WriteLine(startingAddress); + Console.WriteLine(quantity); + } + + public static void coilsChanged(int startingAddress, int quantity) + { + Console.WriteLine(startingAddress); + Console.WriteLine(quantity); + } + } +} diff --git a/EasySecureModbus_Demo_Server/Properties/AssemblyInfo.cs b/EasySecureModbus_Demo_Server/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..e33a5e4 --- /dev/null +++ b/EasySecureModbus_Demo_Server/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("EasuySecureModbus_Demo_Server")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("EasuySecureModbus_Demo_Server")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("9e87df38-4733-431c-a175-47423b37762c")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/EasySecureModbus_Demo_Server/README.md b/EasySecureModbus_Demo_Server/README.md new file mode 100644 index 0000000..aeccd32 --- /dev/null +++ b/EasySecureModbus_Demo_Server/README.md @@ -0,0 +1,96 @@ +# EasyModbusSecure - Server Example + +The Server performs the same functionality as in the original Modbus version. There are no changes to the Modbus application protocol as a consequence of it being encapsulated by a secure transport. +The only changes concern the requirements of the Modbus/TCP Security Protocol Specification. + +The use of TLS provides confidentiality to the transported data, data integrity, anti-replay protection, endpoint authentication via certificates, and authorization via information embedded in the certificate +such as user and device roles. + +Similar to HTTPS, the server must provide to each client an x.509v3 certificate (certPath) as part of the TLS Handshake along with the password as below (certPass). + +``` +ModbusSecureServerAuthZ modbusServer = new ModbusSecureServerAuthZ(certPath, certPass, true, roles); +``` + +Such a certificate must be issued by signed by a Trusted Third Party (TTP) and validated during the TLS handshake. The client should validate the provided server certificate path to a trusted root certificate. + +If the server does not require to authenticate the client, the communication can be initiated by using the **false** option. However, the standard specifies that is **REQUIRED** for both end devices to provide +mutual authentication when executing the TLS Handshake to create the TLS session (R-06). Therefore it is highly recommended that the mutual authentication option be activated all the time. + +The authorization functionality is implemented with the use of RoleIDs. Each client certificate must provide one of these RoleOIDs in their extension section. Notice that if the client does not provide a Role, +the server sets it to NULL ("0", zero string). That role is proveides, it should match the Roles-to-Rights Rules Database of the server in order for the client to perform specific actions. This database can be +stored locally on the device or be acquired from a remote source. The functionality of extracting the ASN1:UTF8String encoded RoleOID from the client certificate is performed via the use of the BouncyCastle library. +An example of a Roles-to-Rights Rules Database can be as follows + +``` +List<ValueTuple<string, List<byte>>> roles = new List<ValueTuple<string, List<byte>>> +{ + ValueTuple.Create("Operator", new List<byte> { (byte)0x01, (byte)0x0F, (byte)0x06} ), + ValueTuple.Create("Engineer", new List<byte> { (byte)0x01 }) +}; +``` + +Therefore the Operator can perform "Read Coils, Write Single Holding Register, Write Multiple Holding Registers", while the Engineer can only "Read Coils". If the provided RoleOID is not matched to the +Modbus Function Codes an exception is raised and an "exception code 01 – Illegal Function Code" is returned to the client. + +## Regarding x.509v3 certificates + +A common method to create x.509v3 certificates is by utilizing the OpenSSL library. These certificates can then be converted into other formats that suit the operating system and the libraries that are used. + +The same process described in [Client Example README](../EasySecureModbus_Demo/README.md), is used to create a RootCA. Below the similar process for the Server certificates is presented. + +### Server certificate using the Root CA + +The Server certificate creation can once again be summarized in one bash script to speed up the setup: + +``` + +#!/bin/bash + +set -e + +openssl genrsa -out server.key 4096 + +openssl req -sha256 -new -key server.key -out server.csr -config openssl_server.cnf + +openssl x509 -req -days 1000 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -extensions v3_req -extfile openssl_server.cnf + +openssl x509 -in server.crt -text -noout + +openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt + +``` + +The required **openssl_server.cnf** should include the RoleOID reference and can be structured as follows: + +``` +# +# openssl_server.cnf +# + +[ req ] +prompt = no +distinguished_name = server_distinguished_name + +[ server_distinguished_name ] +# IP address or Domain of the machine +commonName = 127.0.0.1 +stateOrProvinceName = NY +countryName = US +emailAddress = you@email.com +organizationName = Here +organizationalUnitName = Here here + +[ v3_req ] +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment +subjectAltName = @alt_names + +[ alt_names ] +DNS.0 = localhost + +``` + +To import all the required certificateds, the use of the Certificate Manager on Windows for the current user is needed. The server certificate should be under **Personal**. If a custom Root CA is used, +its certificate should be under **Trusted Root Certification Authorities**. The CRL should be placed under **Intermediate Certification Authorities**. +More information abou the Certificate Manager tool can be found [here](https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-view-certificates-with-the-mmc-snap-in#to-view-certificates-for-the-current-user). \ No newline at end of file diff --git a/EasySecureModbus_Demo_Server/app.config b/EasySecureModbus_Demo_Server/app.config new file mode 100644 index 0000000..51278a4 --- /dev/null +++ b/EasySecureModbus_Demo_Server/app.config @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?> +<configuration> +<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup></configuration> diff --git a/EasySecureModbus_Demo_Server/logs/ServerLogs.txt b/EasySecureModbus_Demo_Server/logs/ServerLogs.txt new file mode 100644 index 0000000..7314608 --- /dev/null +++ b/EasySecureModbus_Demo_Server/logs/ServerLogs.txt @@ -0,0 +1,1351 @@ +06.06.2021 12:02:16.44 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 12:07:24.30 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 12:10:26.14 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 12:30:35.88 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 12:37:20.91 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 12:39:14.24 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 12:52:44.25 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 18:02:07.19 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 18:03:11.60 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 18:12:34.13 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 18:21:52.71 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 18:27:23.49 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 18:28:24.03 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 18:33:09.02 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 18:33:55.95 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 18:35:44.70 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 18:45:38.77 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 18:47:54.75 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 18:48:54.83 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 18:49:29.66 EasyModbusSecure Server listing for incomming data at Port 502 +06.06.2021 18:50:49.47 EasyModbusSecure Server listing for incomming data at Port 502 +13.06.2021 20:19:30.12 EasyModbusSecure Server listing for incomming data at Port 502 +13.06.2021 20:22:56.75 EasyModbusSecure Server listing for incomming data at Port 502 +13.06.2021 21:09:27.42 EasyModbusSecure Server listing for incomming data at Port 502 +13.06.2021 21:11:58.24 EasyModbusSecure Server listing for incomming data at Port 502 +14.06.2021 18:53:55.50 EasyModbusSecure Server listing for incomming data at Port 502 +14.06.2021 18:54:04.44 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +14.06.2021 18:54:04.45 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +14.06.2021 18:54:04.45 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +14.06.2021 18:54:04.45 Send Data: 00-02-00-00-00-04-01-01-01-03 +14.06.2021 18:54:04.45 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +14.06.2021 18:54:04.46 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +14.06.2021 18:54:04.46 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +14.06.2021 18:54:04.46 Send Data: 00-04-00-00-00-04-01-01-01-00 +14.06.2021 19:15:49.60 EasyModbusSecure Server listing for incomming data at Port 502 +14.06.2021 19:16:04.00 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +14.06.2021 19:16:04.01 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +14.06.2021 19:16:04.01 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +14.06.2021 19:16:04.01 Send Data: 00-02-00-00-00-04-01-01-01-03 +14.06.2021 19:16:04.02 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +14.06.2021 19:16:04.02 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +14.06.2021 19:16:04.02 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +14.06.2021 19:16:04.02 Send Data: 00-04-00-00-00-04-01-01-01-00 +04.08.2021 17:02:10.68 EasyModbusSecure Server listing for incomming data at Port 502 +04.08.2021 17:02:22.05 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +04.08.2021 17:02:22.05 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +04.08.2021 17:02:22.06 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +04.08.2021 17:02:22.06 Send Data: 00-02-00-00-00-04-01-01-01-03 +04.08.2021 17:02:22.06 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +04.08.2021 17:02:22.06 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +04.08.2021 17:02:22.06 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +04.08.2021 17:02:22.06 Send Data: 00-04-00-00-00-04-01-01-01-00 +04.08.2021 17:15:31.32 EasyModbusSecure Server listing for incomming data at Port 502 +04.08.2021 17:16:52.25 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +04.08.2021 17:16:52.25 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +04.08.2021 17:16:52.26 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +04.08.2021 17:16:52.26 Send Data: 00-02-00-00-00-04-01-01-01-03 +04.08.2021 17:16:52.26 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +04.08.2021 17:16:52.26 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +04.08.2021 17:16:52.26 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +04.08.2021 17:16:52.26 Send Data: 00-04-00-00-00-04-01-01-01-00 +04.08.2021 18:54:19.01 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +04.08.2021 18:54:32.96 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +04.08.2021 18:54:32.97 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +04.08.2021 18:54:32.97 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +04.08.2021 18:54:32.97 Send Data: 00-02-00-00-00-04-01-01-01-03 +04.08.2021 18:54:32.98 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +04.08.2021 18:54:32.98 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +04.08.2021 18:54:32.98 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +04.08.2021 18:54:32.98 Send Data: 00-04-00-00-00-04-01-01-01-00 +08.08.2021 21:10:21.71 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +08.08.2021 21:10:31.38 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:10:31.38 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +08.08.2021 21:10:31.39 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:10:31.39 Send Data: 00-02-00-00-00-04-01-01-01-03 +08.08.2021 21:10:31.39 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:10:31.40 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +08.08.2021 21:10:31.40 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:10:31.40 Send Data: 00-04-00-00-00-04-01-01-01-00 +08.08.2021 21:14:28.26 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +08.08.2021 21:14:38.31 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:14:38.31 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +08.08.2021 21:14:38.31 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:14:38.32 Send Data: 00-02-00-00-00-04-01-01-01-03 +08.08.2021 21:14:38.32 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:14:38.32 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +08.08.2021 21:14:38.32 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:14:38.32 Send Data: 00-04-00-00-00-04-01-01-01-00 +08.08.2021 21:23:28.80 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +08.08.2021 21:23:37.40 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:23:37.40 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +08.08.2021 21:23:37.41 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:23:37.41 Send Data: 00-02-00-00-00-04-01-01-01-03 +08.08.2021 21:23:37.41 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:23:37.41 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +08.08.2021 21:23:37.41 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:23:37.41 Send Data: 00-04-00-00-00-04-01-01-01-00 +08.08.2021 21:25:31.57 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +08.08.2021 21:25:33.24 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:25:33.24 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +08.08.2021 21:25:33.25 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:25:33.25 Send Data: 00-02-00-00-00-04-01-01-01-03 +08.08.2021 21:25:33.26 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:25:33.26 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +08.08.2021 21:25:33.26 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:25:33.26 Send Data: 00-04-00-00-00-04-01-01-01-00 +08.08.2021 21:27:20.45 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +08.08.2021 21:27:25.02 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:27:25.02 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +08.08.2021 21:27:25.02 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:27:25.03 Send Data: 00-02-00-00-00-04-01-01-01-03 +08.08.2021 21:27:25.03 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:27:25.03 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +08.08.2021 21:27:25.03 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +08.08.2021 21:27:25.03 Send Data: 00-04-00-00-00-04-01-01-01-00 +10.08.2021 9:26:30.50 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 9:26:35.36 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +10.08.2021 9:26:35.36 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +10.08.2021 9:26:35.38 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +10.08.2021 9:26:35.39 Send Data: 00-02-00-00-00-04-01-01-01-03 +10.08.2021 9:26:35.39 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +10.08.2021 9:26:35.39 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +10.08.2021 9:26:35.40 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +10.08.2021 9:26:35.40 Send Data: 00-04-00-00-00-04-01-01-01-00 +10.08.2021 11:14:00.69 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 11:41:42.83 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 11:55:10.15 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 12:13:56.46 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 12:16:07.66 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 12:16:35.95 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 12:19:16.77 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 12:21:06.03 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 12:22:02.88 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 12:32:32.31 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 12:36:36.88 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 12:37:10.24 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 12:40:24.93 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 12:43:29.21 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 12:46:28.65 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 12:47:21.27 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 12:49:41.29 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 12:49:47.84 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +10.08.2021 12:49:47.84 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +10.08.2021 12:49:47.84 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +10.08.2021 12:49:47.85 Send Data: 00-02-00-00-00-04-01-01-01-03 +10.08.2021 12:49:47.85 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +10.08.2021 12:49:47.85 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +10.08.2021 12:49:47.85 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +10.08.2021 12:49:47.85 Send Data: 00-04-00-00-00-04-01-01-01-00 +10.08.2021 12:51:03.44 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 12:51:09.44 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +10.08.2021 12:51:09.44 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +10.08.2021 12:51:09.45 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +10.08.2021 12:51:09.45 Send Data: 00-02-00-00-00-04-01-01-01-03 +10.08.2021 12:51:09.45 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +10.08.2021 12:51:09.45 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +10.08.2021 12:51:09.46 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +10.08.2021 12:51:09.46 Send Data: 00-04-00-00-00-04-01-01-01-00 +10.08.2021 12:52:08.92 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 16:25:20.44 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 16:53:48.54 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 17:10:09.75 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 17:15:10.14 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 17:15:59.40 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 17:32:14.72 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 17:33:16.71 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 17:35:48.37 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 17:46:40.10 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 17:54:27.33 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 18:04:49.99 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 18:05:05.07 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 18:06:31.08 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 18:08:01.38 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 18:17:55.77 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 18:27:23.38 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +10.08.2021 18:27:37.00 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +10.08.2021 18:27:37.00 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +10.08.2021 18:27:37.01 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +10.08.2021 18:27:37.02 Send Data: 00-02-00-00-00-04-01-01-01-03 +10.08.2021 18:27:37.02 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +10.08.2021 18:27:37.02 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +10.08.2021 18:27:37.02 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +10.08.2021 18:27:37.02 Send Data: 00-04-00-00-00-04-01-01-01-00 +10.08.2021 18:29:39.06 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 13:51:30.91 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 13:59:55.06 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 14:15:56.90 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 14:18:05.44 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 14:18:24.17 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 14:19:01.65 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 14:19:40.14 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 14:26:04.80 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 14:26:31.47 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 14:27:25.32 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 14:34:04.15 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 14:34:13.02 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 14:34:39.18 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 14:38:24.87 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 14:42:17.03 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 14:55:40.82 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 14:59:20.94 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 15:09:04.65 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 15:10:38.88 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 15:11:32.85 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 15:33:35.84 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 15:56:06.13 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 15:59:42.27 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 16:01:47.17 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 16:11:18.09 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 16:20:20.09 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +12.08.2021 16:21:48.71 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +12.08.2021 16:21:48.71 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +12.08.2021 16:21:48.71 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +12.08.2021 16:21:48.72 Send Data: 00-02-00-00-00-04-01-01-01-03 +12.08.2021 16:21:48.72 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +12.08.2021 16:21:48.72 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +12.08.2021 16:21:48.72 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +12.08.2021 16:21:48.72 Send Data: 00-04-00-00-00-04-01-01-01-00 +12.08.2021 16:22:25.88 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +12.08.2021 16:22:25.88 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +12.08.2021 16:22:25.88 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +12.08.2021 16:22:25.88 Send Data: 00-02-00-00-00-04-01-01-01-03 +12.08.2021 16:22:25.88 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +12.08.2021 16:22:25.89 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +12.08.2021 16:22:25.89 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +12.08.2021 16:22:25.89 Send Data: 00-04-00-00-00-04-01-01-01-00 +14.08.2021 14:45:07.45 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +14.08.2021 14:46:03.37 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +14.08.2021 14:46:03.37 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +14.08.2021 14:46:03.38 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +14.08.2021 14:46:03.38 Send Data: 00-02-00-00-00-04-01-01-01-03 +14.08.2021 14:46:03.39 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +14.08.2021 14:46:03.39 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +14.08.2021 14:46:03.39 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +14.08.2021 14:46:03.39 Send Data: 00-04-00-00-00-04-01-01-01-00 +14.08.2021 14:56:23.28 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +14.08.2021 15:04:21.50 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +14.08.2021 15:33:44.33 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +14.08.2021 15:33:54.65 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +14.08.2021 15:36:23.08 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +14.08.2021 15:42:36.41 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +14.08.2021 16:16:00.83 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +14.08.2021 16:19:04.46 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +14.08.2021 16:22:42.21 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +14.08.2021 16:37:25.56 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +14.08.2021 16:38:11.53 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +14.08.2021 16:55:09.50 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +14.08.2021 17:02:29.13 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +14.08.2021 17:02:38.06 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +14.08.2021 17:03:28.56 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +14.08.2021 17:07:12.27 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +19.08.2021 8:08:17.37 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +19.08.2021 21:49:39.34 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +19.08.2021 21:59:57.05 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +19.08.2021 22:01:50.07 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +19.08.2021 22:13:22.78 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +19.08.2021 22:17:00.43 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +19.08.2021 22:17:10.65 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +19.08.2021 22:29:24.56 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +19.08.2021 22:31:06.02 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +20.08.2021 14:21:44.66 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +24.08.2021 22:53:15.53 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +24.08.2021 22:53:29.27 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 22:53:29.27 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +24.08.2021 22:53:29.28 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 22:53:29.28 Send Data: 00-02-00-00-00-04-01-01-01-03 +24.08.2021 22:53:29.28 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 22:53:29.28 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +24.08.2021 22:53:29.28 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 22:53:29.28 Send Data: 00-04-00-00-00-04-01-01-01-00 +24.08.2021 22:54:58.97 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +24.08.2021 22:56:04.97 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 22:56:04.98 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +24.08.2021 22:56:04.98 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 22:56:04.99 Send Data: 00-02-00-00-00-04-01-01-01-03 +24.08.2021 22:56:04.99 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 22:56:04.99 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +24.08.2021 22:56:04.99 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 22:56:04.99 Send Data: 00-04-00-00-00-04-01-01-01-00 +24.08.2021 23:00:38.65 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +24.08.2021 23:04:56.09 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +24.08.2021 23:04:57.92 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:04:57.93 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +24.08.2021 23:04:57.94 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:04:57.94 Send Data: 00-02-00-00-00-04-01-01-01-03 +24.08.2021 23:04:57.94 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:04:57.94 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +24.08.2021 23:04:57.95 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:04:57.95 Send Data: 00-04-00-00-00-04-01-01-01-00 +24.08.2021 23:05:55.47 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +24.08.2021 23:05:59.82 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:05:59.83 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +24.08.2021 23:05:59.84 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:05:59.84 Send Data: 00-02-00-00-00-04-01-01-01-03 +24.08.2021 23:05:59.84 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:05:59.84 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +24.08.2021 23:05:59.84 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:05:59.84 Send Data: 00-04-00-00-00-04-01-01-01-00 +24.08.2021 23:06:13.10 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:06:13.11 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +24.08.2021 23:06:13.11 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:06:13.11 Send Data: 00-02-00-00-00-04-01-01-01-03 +24.08.2021 23:06:13.11 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:06:13.11 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +24.08.2021 23:06:13.11 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:06:13.12 Send Data: 00-04-00-00-00-04-01-01-01-00 +24.08.2021 23:13:24.14 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +24.08.2021 23:13:35.38 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:13:35.39 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +24.08.2021 23:13:35.39 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:13:35.39 Send Data: 00-02-00-00-00-04-01-01-01-03 +24.08.2021 23:13:35.40 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:13:35.40 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +24.08.2021 23:13:35.40 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:13:35.40 Send Data: 00-04-00-00-00-04-01-01-01-00 +24.08.2021 23:13:51.64 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +24.08.2021 23:13:53.63 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:13:53.64 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +24.08.2021 23:13:53.64 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:13:53.64 Send Data: 00-02-00-00-00-04-01-01-01-03 +24.08.2021 23:13:53.65 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:13:53.65 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +24.08.2021 23:13:53.65 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +24.08.2021 23:13:53.65 Send Data: 00-04-00-00-00-04-01-01-01-00 +24.08.2021 23:14:52.72 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +24.08.2021 23:18:04.45 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +24.08.2021 23:27:48.95 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +24.08.2021 23:36:23.89 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +24.08.2021 23:38:54.54 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +24.08.2021 23:39:29.95 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +25.08.2021 0:00:59.27 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +25.08.2021 0:02:05.43 EasyModbus Server listing for incomming data at Port 502, local IP 0.0.0.0 +26.08.2021 20:54:00.58 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +26.08.2021 20:54:32.95 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +26.08.2021 20:56:38.13 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +26.08.2021 20:57:13.82 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 20:57:13.83 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +26.08.2021 20:57:13.84 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 20:57:13.84 Send Data: 00-02-00-00-00-04-01-01-01-03 +26.08.2021 20:57:13.84 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 20:57:13.84 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +26.08.2021 20:57:13.85 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 20:57:13.85 Send Data: 00-04-00-00-00-04-01-01-01-00 +26.08.2021 20:59:29.27 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +26.08.2021 20:59:53.63 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 20:59:53.64 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +26.08.2021 20:59:53.65 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 20:59:53.65 Send Data: 00-02-00-00-00-04-01-01-01-03 +26.08.2021 20:59:53.65 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 20:59:53.65 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +26.08.2021 20:59:53.66 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 20:59:53.66 Send Data: 00-04-00-00-00-04-01-01-01-00 +26.08.2021 21:25:11.22 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +26.08.2021 21:25:23.98 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:25:23.99 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +26.08.2021 21:25:24.00 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:25:24.00 Send Data: 00-02-00-00-00-04-01-01-01-03 +26.08.2021 21:25:24.01 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:25:24.01 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +26.08.2021 21:25:24.01 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:25:24.01 Send Data: 00-04-00-00-00-04-01-01-01-00 +26.08.2021 21:25:27.86 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:25:27.87 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +26.08.2021 21:25:27.87 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:25:27.87 Send Data: 00-02-00-00-00-04-01-01-01-03 +26.08.2021 21:25:27.87 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:25:27.87 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +26.08.2021 21:25:27.88 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:25:27.88 Send Data: 00-04-00-00-00-04-01-01-01-00 +26.08.2021 21:32:45.38 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +26.08.2021 21:32:50.35 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:32:50.36 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +26.08.2021 21:32:50.36 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:32:50.37 Send Data: 00-02-00-00-00-04-01-01-01-03 +26.08.2021 21:32:50.37 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:32:50.37 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +26.08.2021 21:32:50.37 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:32:50.38 Send Data: 00-04-00-00-00-04-01-01-01-00 +26.08.2021 21:32:50.40 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:32:50.40 Send Data: 00-05-00-00-00-04-01-01-01-00 +26.08.2021 21:33:39.19 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:33:39.19 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +26.08.2021 21:33:39.20 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:33:39.20 Send Data: 00-02-00-00-00-04-01-01-01-03 +26.08.2021 21:33:39.20 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:33:39.20 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +26.08.2021 21:33:39.20 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:33:39.20 Send Data: 00-04-00-00-00-04-01-01-01-00 +26.08.2021 21:33:39.23 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.08.2021 21:33:39.23 Send Data: 00-05-00-00-00-04-01-01-01-00 +05.09.2021 20:08:15.35 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.09.2021 20:08:22.23 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.09.2021 20:08:22.23 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +05.09.2021 20:08:22.24 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.09.2021 20:08:22.24 Send Data: 00-02-00-00-00-04-01-01-01-03 +05.09.2021 20:08:22.24 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.09.2021 20:08:22.24 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +05.09.2021 20:08:22.24 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.09.2021 20:08:22.24 Send Data: 00-04-00-00-00-04-01-01-01-00 +05.09.2021 20:08:22.26 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.09.2021 20:08:22.26 Send Data: 00-05-00-00-00-04-01-01-01-00 +05.09.2021 20:50:50.75 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.09.2021 20:50:58.00 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.09.2021 20:50:58.00 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +05.09.2021 20:50:58.01 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.09.2021 20:50:58.01 Send Data: 00-02-00-00-00-04-01-01-01-03 +05.09.2021 20:50:58.01 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.09.2021 20:50:58.01 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +05.09.2021 20:50:58.02 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.09.2021 20:50:58.02 Send Data: 00-04-00-00-00-04-01-01-01-00 +05.09.2021 20:50:58.03 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.09.2021 20:50:58.03 Send Data: 00-05-00-00-00-04-01-01-01-00 +09.09.2021 21:08:32.74 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +09.09.2021 23:32:35.14 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +09.09.2021 23:33:43.19 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +09.09.2021 23:33:44.68 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +09.09.2021 23:33:44.69 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +09.09.2021 23:33:44.70 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +09.09.2021 23:33:44.70 Send Data: 00-02-00-00-00-04-01-01-01-03 +09.09.2021 23:33:44.70 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +09.09.2021 23:33:44.70 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +09.09.2021 23:33:44.70 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +09.09.2021 23:33:44.70 Send Data: 00-04-00-00-00-04-01-01-01-00 +09.09.2021 23:33:44.73 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +09.09.2021 23:33:44.73 Send Data: 00-05-00-00-00-04-01-01-01-00 +09.09.2021 23:34:02.89 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +09.09.2021 23:38:44.15 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +09.09.2021 23:47:18.43 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +09.09.2021 23:48:25.33 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +09.09.2021 23:48:51.90 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +09.09.2021 23:54:57.33 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +09.09.2021 23:57:29.77 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +09.09.2021 23:57:31.89 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +09.09.2021 23:57:31.89 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +09.09.2021 23:57:31.90 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +09.09.2021 23:57:31.90 Send Data: 00-02-00-00-00-04-01-01-01-03 +09.09.2021 23:57:31.91 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +09.09.2021 23:57:31.91 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +09.09.2021 23:57:31.91 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +09.09.2021 23:57:31.91 Send Data: 00-04-00-00-00-04-01-01-01-00 +09.09.2021 23:57:31.93 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +09.09.2021 23:57:31.93 Send Data: 00-05-00-00-00-04-01-01-01-00 +09.09.2021 23:58:14.55 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +09.09.2021 23:58:52.68 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +09.09.2021 23:58:56.01 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +09.09.2021 23:58:56.01 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +09.09.2021 23:58:56.02 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +09.09.2021 23:58:56.02 Send Data: 00-02-00-00-00-04-01-01-01-03 +09.09.2021 23:58:56.03 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +09.09.2021 23:58:56.03 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +09.09.2021 23:58:56.03 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +09.09.2021 23:58:56.03 Send Data: 00-04-00-00-00-04-01-01-01-00 +09.09.2021 23:58:56.05 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +09.09.2021 23:58:56.05 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 21:51:57.07 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 21:52:07.46 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:52:07.47 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 21:52:07.48 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:52:07.48 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 21:52:07.48 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:52:07.48 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 21:52:07.49 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:52:07.49 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 21:52:07.50 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:52:07.50 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 21:53:43.58 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 21:53:45.51 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:53:45.52 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 21:53:45.53 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:53:45.53 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 21:53:45.53 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:53:45.53 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 21:53:45.53 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:53:45.53 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 21:53:45.55 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:53:45.55 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 21:55:01.37 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 21:55:09.87 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 21:56:32.99 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 21:57:20.93 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 21:57:32.24 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:57:32.24 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 21:57:32.25 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:57:32.26 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 21:57:32.26 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:57:32.26 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 21:57:32.26 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:57:32.26 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 21:57:32.28 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:57:32.28 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 21:58:06.97 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 21:58:15.06 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:58:15.07 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 21:58:15.07 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:58:15.07 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 21:58:15.08 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:58:15.08 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 21:58:15.08 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:58:15.08 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 21:58:15.09 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 21:58:15.09 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 22:02:39.73 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:02:49.97 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:02:49.97 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:02:49.98 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:02:49.98 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 22:02:49.99 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:02:49.99 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:02:50.00 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:02:50.00 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 22:02:50.02 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:02:50.02 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 22:04:20.19 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:04:26.64 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:04:26.64 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:04:26.64 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:04:26.65 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 22:04:26.65 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:04:26.66 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:04:26.66 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:04:26.66 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 22:04:26.68 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:04:26.68 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 22:05:31.14 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:05:34.00 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:05:34.00 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:05:34.01 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:05:34.01 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 22:05:34.01 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:05:34.01 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:05:34.01 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:05:34.01 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 22:05:34.03 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:05:34.03 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 22:11:08.23 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:11:13.44 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:11:13.45 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:11:13.45 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:11:13.46 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 22:11:13.46 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:11:13.46 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:11:13.46 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:11:13.46 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 22:11:13.47 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:11:13.47 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 22:19:52.58 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:20:02.94 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:20:02.94 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:20:02.95 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:20:02.95 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 22:20:02.96 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:20:02.96 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:20:02.96 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:20:02.96 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 22:20:02.98 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:20:02.98 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 22:21:16.65 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:21:22.62 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:21:22.63 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:21:22.63 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:21:22.64 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 22:21:22.64 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:21:22.64 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:21:22.64 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:21:22.64 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 22:21:22.67 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:21:22.67 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 22:27:00.62 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:27:11.98 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:27:11.99 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:27:11.99 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:27:12.00 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 22:27:12.00 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:27:12.00 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:27:12.00 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:27:12.00 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 22:27:12.03 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:27:12.03 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 22:28:38.57 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:28:46.49 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:28:46.50 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:28:46.51 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:28:46.51 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 22:28:46.51 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:28:46.51 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:28:46.51 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:28:46.51 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 22:28:46.54 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:28:46.54 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 22:33:01.62 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:33:08.43 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:33:08.44 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:33:08.45 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:33:08.45 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 22:33:08.45 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:33:08.45 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:33:08.45 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:33:08.46 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 22:33:08.47 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:33:08.47 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 22:34:14.98 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:34:21.54 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:34:21.55 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:34:21.55 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:34:21.56 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 22:34:21.56 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:34:21.56 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:34:21.56 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:34:21.56 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 22:34:21.58 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:34:21.58 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 22:38:14.71 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:38:22.66 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:38:22.67 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:38:22.67 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:38:22.68 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 22:38:22.68 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:38:22.68 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:38:22.68 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:38:22.68 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 22:38:22.70 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:38:22.70 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 22:43:28.12 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:43:45.70 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:43:52.63 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:43:52.64 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:43:52.65 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:43:52.65 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 22:43:52.65 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:43:52.66 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:43:52.66 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:43:52.66 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 22:43:52.67 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:43:52.67 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 22:45:03.78 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:45:15.03 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:45:15.03 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:45:15.03 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:45:15.04 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 22:45:15.04 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:45:15.04 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:45:15.06 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:45:15.06 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 22:45:15.09 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:45:15.10 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 22:47:03.36 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:47:10.73 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:47:10.73 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:47:10.74 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:47:10.74 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 22:47:10.75 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:47:10.75 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:47:10.75 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:47:10.75 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 22:47:10.77 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:47:10.77 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 22:50:03.98 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:50:12.12 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:50:12.12 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:50:12.13 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:50:12.13 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 22:50:12.14 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:50:12.14 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:50:12.14 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:50:12.14 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 22:50:12.16 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:50:12.16 Send Data: 00-05-00-00-00-04-01-01-01-00 +16.09.2021 22:52:32.76 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +16.09.2021 22:52:40.37 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:52:40.37 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:52:40.39 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:52:40.39 Send Data: 00-02-00-00-00-04-01-01-01-03 +16.09.2021 22:52:40.39 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:52:40.39 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +16.09.2021 22:52:40.40 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:52:40.40 Send Data: 00-04-00-00-00-04-01-01-01-00 +16.09.2021 22:52:40.41 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +16.09.2021 22:52:40.41 Send Data: 00-05-00-00-00-04-01-01-01-00 +30.09.2021 20:50:27.67 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +30.09.2021 20:50:31.87 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 20:50:31.88 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +30.09.2021 20:50:31.88 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 20:50:31.88 Send Data: 00-02-00-00-00-04-01-01-01-03 +30.09.2021 20:50:31.89 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 20:50:31.89 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +30.09.2021 20:50:31.89 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 20:50:31.89 Send Data: 00-04-00-00-00-04-01-01-01-00 +30.09.2021 20:50:31.91 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 20:50:31.91 Send Data: 00-05-00-00-00-04-01-01-01-00 +30.09.2021 21:20:37.38 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +30.09.2021 21:20:40.67 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 21:20:40.68 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +30.09.2021 21:20:40.69 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 21:20:40.69 Send Data: 00-02-00-00-00-04-01-01-01-03 +30.09.2021 21:20:40.69 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 21:20:40.69 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +30.09.2021 21:20:40.69 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 21:20:40.69 Send Data: 00-04-00-00-00-04-01-01-01-00 +30.09.2021 21:20:40.71 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 21:20:40.71 Send Data: 00-05-00-00-00-04-01-01-01-00 +30.09.2021 21:21:32.94 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +30.09.2021 21:21:40.43 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 21:21:40.43 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +30.09.2021 21:21:40.44 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 21:21:40.45 Send Data: 00-02-00-00-00-04-01-01-01-03 +30.09.2021 21:21:40.45 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 21:21:40.45 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +30.09.2021 21:21:40.46 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 21:21:40.46 Send Data: 00-04-00-00-00-04-01-01-01-00 +30.09.2021 21:21:40.48 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 21:21:40.48 Send Data: 00-05-00-00-00-04-01-01-01-00 +30.09.2021 21:24:52.44 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +30.09.2021 21:24:54.26 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 21:24:54.27 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +30.09.2021 21:24:54.27 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 21:24:54.27 Send Data: 00-02-00-00-00-04-01-01-01-03 +30.09.2021 21:24:54.28 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 21:24:54.28 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +30.09.2021 21:24:54.28 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 21:24:54.28 Send Data: 00-04-00-00-00-04-01-01-01-00 +30.09.2021 21:24:54.30 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +30.09.2021 21:24:54.30 Send Data: 00-05-00-00-00-04-01-01-01-00 +05.10.2021 21:29:09.36 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.10.2021 21:29:20.13 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.10.2021 21:29:20.13 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +05.10.2021 21:29:20.14 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.10.2021 21:29:20.14 Send Data: 00-02-00-00-00-04-01-01-01-03 +05.10.2021 21:29:20.14 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.10.2021 21:29:20.14 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +05.10.2021 21:29:20.14 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.10.2021 21:29:20.14 Send Data: 00-04-00-00-00-04-01-01-01-00 +05.10.2021 21:29:20.17 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.10.2021 21:29:20.17 Send Data: 00-05-00-00-00-04-01-01-01-00 +09.10.2021 15:40:59.37 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +09.10.2021 15:42:31.65 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +09.10.2021 15:42:36.90 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +09.10.2021 15:42:41.06 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +09.10.2021 15:42:41.06 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +09.10.2021 15:42:41.07 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +09.10.2021 15:42:41.07 Send Data: 00-02-00-00-00-04-01-01-01-03 +09.10.2021 15:42:41.08 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +09.10.2021 15:42:41.08 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +09.10.2021 15:42:41.08 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +09.10.2021 15:42:41.08 Send Data: 00-04-00-00-00-04-01-01-01-00 +09.10.2021 15:42:41.10 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +09.10.2021 15:42:41.10 Send Data: 00-05-00-00-00-04-01-01-01-00 +09.10.2021 15:45:50.82 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +09.10.2021 15:46:09.70 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +09.10.2021 15:46:09.70 Send Data: 00-01-00-00-00-03-01-8F-01 +14.10.2021 21:40:25.73 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +14.10.2021 21:40:28.25 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +14.10.2021 21:40:28.26 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +14.10.2021 21:40:28.27 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +14.10.2021 21:40:28.27 Send Data: 00-02-00-00-00-04-01-01-01-03 +14.10.2021 21:40:28.27 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +14.10.2021 21:40:28.27 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +14.10.2021 21:40:28.27 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +14.10.2021 21:40:28.27 Send Data: 00-04-00-00-00-04-01-01-01-00 +14.10.2021 21:40:28.30 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +14.10.2021 21:40:28.30 Send Data: 00-05-00-00-00-04-01-01-01-00 +14.10.2021 21:43:11.39 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +14.10.2021 21:43:16.24 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +14.10.2021 21:43:16.25 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +14.10.2021 21:43:16.25 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +14.10.2021 21:43:39.60 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +14.10.2021 21:43:42.21 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +14.10.2021 21:43:42.21 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +14.10.2021 21:43:42.22 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +14.10.2021 21:43:42.22 Send Data: 00-02-00-00-00-04-01-01-01-03 +14.10.2021 21:43:42.22 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +14.10.2021 21:43:42.22 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +14.10.2021 21:43:42.23 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +14.10.2021 21:43:42.23 Send Data: 00-04-00-00-00-04-01-01-01-00 +14.10.2021 21:43:42.25 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +14.10.2021 21:43:42.25 Send Data: 00-05-00-00-00-04-01-01-01-00 +19.10.2021 21:34:35.05 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +19.10.2021 21:34:51.75 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +19.10.2021 21:34:57.63 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:34:57.64 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +19.10.2021 21:34:57.64 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:34:57.64 Send Data: 00-02-00-00-00-04-01-01-01-03 +19.10.2021 21:34:57.65 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:34:57.65 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +19.10.2021 21:34:57.65 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:34:57.65 Send Data: 00-04-00-00-00-04-01-01-01-00 +19.10.2021 21:34:57.67 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:34:57.67 Send Data: 00-05-00-00-00-04-01-01-01-00 +19.10.2021 21:35:41.27 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +19.10.2021 21:35:45.38 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:35:45.38 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +19.10.2021 21:35:45.39 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:35:45.39 Send Data: 00-02-00-00-00-04-01-01-01-03 +19.10.2021 21:35:45.40 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:35:45.40 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +19.10.2021 21:35:45.40 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:35:45.40 Send Data: 00-04-00-00-00-04-01-01-01-00 +19.10.2021 21:35:45.42 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:35:45.42 Send Data: 00-05-00-00-00-04-01-01-01-00 +19.10.2021 21:37:40.84 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +19.10.2021 21:38:30.45 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +19.10.2021 21:38:42.18 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:38:42.18 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +19.10.2021 21:38:42.19 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:38:42.19 Send Data: 00-02-00-00-00-04-01-01-01-03 +19.10.2021 21:38:42.20 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:38:42.20 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +19.10.2021 21:38:42.20 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:38:42.20 Send Data: 00-04-00-00-00-04-01-01-01-00 +19.10.2021 21:38:42.22 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:38:42.22 Send Data: 00-05-00-00-00-04-01-01-01-00 +19.10.2021 21:40:32.97 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +19.10.2021 21:40:40.93 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:40:40.93 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +19.10.2021 21:40:40.95 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:40:40.95 Send Data: 00-02-00-00-00-04-01-01-01-03 +19.10.2021 21:40:40.96 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:40:40.96 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +19.10.2021 21:40:40.96 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:40:40.96 Send Data: 00-04-00-00-00-04-01-01-01-00 +19.10.2021 21:40:40.98 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:40:40.98 Send Data: 00-05-00-00-00-04-01-01-01-00 +19.10.2021 21:41:29.14 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +19.10.2021 21:41:41.93 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:41:41.94 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +19.10.2021 21:41:41.94 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:41:41.95 Send Data: 00-02-00-00-00-04-01-01-01-03 +19.10.2021 21:41:41.95 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:41:41.95 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +19.10.2021 21:41:41.95 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:41:41.96 Send Data: 00-04-00-00-00-04-01-01-01-00 +19.10.2021 21:41:41.97 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +19.10.2021 21:41:41.97 Send Data: 00-05-00-00-00-04-01-01-01-00 +22.10.2021 9:14:38.06 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +22.10.2021 9:14:46.91 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +22.10.2021 9:14:46.92 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +22.10.2021 9:14:46.93 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +23.10.2021 20:07:03.80 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +23.10.2021 20:07:13.07 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +23.10.2021 20:07:13.07 Send Data: 00-01-00-00-00-03-01-8F-01 +23.10.2021 20:08:51.19 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +23.10.2021 20:08:58.72 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +23.10.2021 20:08:58.73 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +23.10.2021 20:08:58.73 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +23.10.2021 20:08:58.73 Send Data: 00-02-00-00-00-04-01-01-01-03 +23.10.2021 20:08:58.74 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +23.10.2021 20:08:58.74 Send Data: 00-03-00-00-00-06-01-0F-00-04-00-0A +23.10.2021 20:08:58.74 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +23.10.2021 20:08:58.74 Send Data: 00-04-00-00-00-04-01-01-01-00 +23.10.2021 20:08:58.75 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +23.10.2021 20:08:58.75 Send Data: 00-05-00-00-00-04-01-01-01-00 +23.10.2021 20:09:32.01 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +23.10.2021 20:09:41.87 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +23.10.2021 20:09:41.88 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +23.10.2021 20:09:41.88 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +23.10.2021 20:09:41.88 Send Data: 00-02-00-00-00-03-01-81-01 +26.10.2021 23:44:00.75 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +26.10.2021 23:44:26.93 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +26.10.2021 23:44:26.94 Send Data: 00-01-00-00-00-03-01-8F-01 +26.10.2021 23:45:25.65 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +26.10.2021 23:45:29.70 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +26.10.2021 23:45:29.71 Send Data: 00-01-00-00-00-03-01-8F-01 +26.10.2021 23:47:37.68 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +26.10.2021 23:47:40.79 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.10.2021 23:47:40.81 Send Data: 00-01-00-00-00-03-01-81-01 +26.10.2021 23:48:20.61 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +26.10.2021 23:48:27.18 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.10.2021 23:49:51.53 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +26.10.2021 23:49:54.26 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.10.2021 23:50:03.57 Send Data: 00-01-00-00-00-03-01-81-01 +26.10.2021 23:50:07.46 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.10.2021 23:50:07.46 Send Data: 00-01-00-00-00-03-01-81-01 +26.10.2021 23:50:48.99 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.10.2021 23:51:39.05 Send Data: 00-01-00-00-00-03-01-81-01 +26.10.2021 23:52:21.05 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +26.10.2021 23:52:22.82 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +26.10.2021 23:52:22.83 Send Data: 00-01-00-00-00-04-01-01-01-00 +28.10.2021 20:49:18.23 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 20:49:21.07 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 20:49:21.08 Send Data: 00-01-00-00-00-03-01-81-01 +28.10.2021 20:57:15.24 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 20:57:21.93 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 20:57:21.94 Send Data: 00-01-00-00-00-04-01-01-01-00 +28.10.2021 21:06:25.58 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:06:33.29 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:06:33.30 Send Data: 00-01-00-00-00-04-01-01-01-00 +28.10.2021 21:07:50.82 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:08:04.37 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:08:06.55 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:08:06.56 Send Data: 00-01-00-00-00-04-01-01-01-00 +28.10.2021 21:10:19.50 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:10:49.26 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:12:59.18 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:13:00.74 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:13:00.75 Send Data: 00-01-00-00-00-03-01-81-01 +28.10.2021 21:13:57.30 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:13:59.02 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:13:59.03 Send Data: 00-01-00-00-00-04-01-01-01-00 +28.10.2021 21:16:08.11 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:16:16.22 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:16:16.23 Send Data: 00-01-00-00-00-04-01-01-01-00 +28.10.2021 21:16:31.37 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:16:46.14 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:16:49.99 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:16:50.00 Send Data: 00-01-00-00-00-03-01-81-01 +28.10.2021 21:27:21.40 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:27:30.77 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:27:30.78 Send Data: 00-01-00-00-00-03-01-81-01 +28.10.2021 21:28:13.07 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:28:14.45 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:28:14.46 Send Data: 00-01-00-00-00-04-01-01-01-00 +28.10.2021 21:36:08.29 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:36:12.61 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:36:12.62 Send Data: 00-01-00-00-00-03-01-81-01 +28.10.2021 21:41:47.33 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:41:59.26 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:41:59.27 Send Data: 00-01-00-00-00-04-01-01-01-00 +28.10.2021 21:42:18.75 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:42:20.06 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:42:20.07 Send Data: 00-01-00-00-00-03-01-81-01 +28.10.2021 21:42:47.69 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:42:49.91 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:42:49.91 Send Data: 00-01-00-00-00-04-01-01-01-00 +28.10.2021 21:44:42.15 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:44:46.71 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:44:46.71 Send Data: 00-01-00-00-00-04-01-01-01-00 +28.10.2021 21:44:46.72 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:44:46.72 Send Data: 00-02-00-00-00-06-01-0F-00-04-00-0A +28.10.2021 21:44:46.72 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:44:46.72 Send Data: 00-03-00-00-00-04-01-01-01-00 +28.10.2021 21:46:18.67 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:46:20.94 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:46:20.94 Send Data: 00-01-00-00-00-04-01-01-01-00 +28.10.2021 21:46:20.95 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:46:20.95 Send Data: 00-02-00-00-00-03-01-8F-01 +28.10.2021 21:46:37.00 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +28.10.2021 21:46:39.10 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:46:39.11 Send Data: 00-01-00-00-00-04-01-01-01-00 +28.10.2021 21:46:39.12 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:46:39.12 Send Data: 00-02-00-00-00-06-01-0F-00-04-00-0A +28.10.2021 21:46:39.12 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +28.10.2021 21:46:39.12 Send Data: 00-03-00-00-00-04-01-01-01-00 +24.11.2021 21:44:44.00 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +24.11.2021 21:45:32.64 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +24.11.2021 21:45:32.64 Send Data: 00-01-00-00-00-04-01-01-01-00 +24.11.2021 21:45:32.65 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +24.11.2021 21:45:32.66 Send Data: 00-02-00-00-00-06-01-0F-00-04-00-0A +24.11.2021 21:45:32.66 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +24.11.2021 21:45:32.67 Send Data: 00-03-00-00-00-04-01-01-01-00 +24.11.2021 21:45:57.11 Certificate error: RemoteCertificateNotAvailable +24.11.2021 21:45:57.14 Authentication failed - closing the connection. +30.11.2021 23:09:59.72 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +30.11.2021 23:10:05.34 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:13:41.24 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +17.02.2022 22:13:48.58 Certificate error: RemoteCertificateChainErrors +17.02.2022 22:13:48.60 Authentication failed - closing the connection. +17.02.2022 22:41:06.82 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +17.02.2022 22:41:19.96 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:41:19.96 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +17.02.2022 22:41:19.96 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:41:19.96 Send Data: 00-02-00-00-00-03-01-86-01 +17.02.2022 22:45:08.63 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +17.02.2022 22:45:12.34 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:45:12.34 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +17.02.2022 22:45:12.34 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:45:12.34 Send Data: 00-02-00-00-00-03-01-86-01 +17.02.2022 22:45:47.70 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +17.02.2022 22:45:48.85 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:45:48.85 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +17.02.2022 22:45:48.86 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:45:48.86 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +17.02.2022 22:45:48.86 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:46:11.05 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +17.02.2022 22:46:13.58 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:46:13.58 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +17.02.2022 22:46:13.58 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:46:13.58 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +17.02.2022 22:46:13.59 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:46:13.59 Send Data: 00-03-00-00-00-04-01-01-01-03 +17.02.2022 22:46:13.59 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:46:13.59 Send Data: 00-04-00-00-00-03-01-83-01 +17.02.2022 22:46:53.03 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +17.02.2022 22:46:56.31 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:46:56.31 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +17.02.2022 22:46:56.31 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:46:56.32 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +17.02.2022 22:46:56.32 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:46:56.32 Send Data: 00-03-00-00-00-04-01-01-01-03 +17.02.2022 22:46:56.33 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:46:56.33 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:46:56.33 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:46:56.33 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +17.02.2022 22:46:56.33 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:46:56.33 Send Data: 00-06-00-00-00-04-01-01-01-00 +17.02.2022 22:46:56.33 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:46:56.33 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +17.02.2022 22:46:56.33 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:46:56.33 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +17.02.2022 22:48:00.06 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +17.02.2022 22:48:07.49 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:48:07.50 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +17.02.2022 22:48:07.50 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:48:07.50 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +17.02.2022 22:48:07.51 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:48:07.51 Send Data: 00-03-00-00-00-04-01-01-01-03 +17.02.2022 22:48:07.51 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:48:07.51 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:48:07.51 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:48:07.51 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +17.02.2022 22:48:07.51 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:48:07.52 Send Data: 00-06-00-00-00-04-01-01-01-00 +17.02.2022 22:48:07.52 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:48:07.52 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +17.02.2022 22:48:07.52 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +17.02.2022 22:48:07.52 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +15.03.2022 19:14:47.48 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +15.03.2022 19:15:06.81 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:15:06.81 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +15.03.2022 19:15:06.81 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:15:06.82 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +15.03.2022 19:15:06.82 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:15:06.82 Send Data: 00-03-00-00-00-04-01-01-01-03 +15.03.2022 19:15:06.82 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:15:06.82 Send Data: 00-04-00-00-00-03-01-83-01 +15.03.2022 19:15:41.12 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +15.03.2022 19:15:47.60 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:15:47.60 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +15.03.2022 19:15:47.60 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:15:47.60 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +15.03.2022 19:15:47.61 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:15:47.61 Send Data: 00-03-00-00-00-04-01-01-01-03 +15.03.2022 19:15:47.61 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:15:47.61 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:15:47.61 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:15:47.61 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +15.03.2022 19:15:47.61 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:15:47.61 Send Data: 00-06-00-00-00-04-01-01-01-00 +15.03.2022 19:15:47.61 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:15:47.61 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +15.03.2022 19:15:47.61 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:15:47.61 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +15.03.2022 19:23:45.51 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +15.03.2022 19:23:53.48 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +15.03.2022 19:24:25.20 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +15.03.2022 19:24:30.77 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:24:30.78 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +15.03.2022 19:24:30.78 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:24:30.78 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +15.03.2022 19:24:30.78 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:24:30.78 Send Data: 00-03-00-00-00-04-01-01-01-03 +15.03.2022 19:24:30.78 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:24:30.79 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:24:30.79 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:24:30.79 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +15.03.2022 19:24:30.79 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:24:30.79 Send Data: 00-06-00-00-00-04-01-01-01-00 +15.03.2022 19:24:30.79 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:24:30.79 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +15.03.2022 19:24:30.79 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:24:30.79 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +15.03.2022 19:25:13.19 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:25:13.19 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +15.03.2022 19:25:13.19 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:25:13.19 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +15.03.2022 19:25:13.19 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:25:13.19 Send Data: 00-03-00-00-00-04-01-01-01-03 +15.03.2022 19:25:13.20 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:25:13.20 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:25:13.20 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:25:13.20 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +15.03.2022 19:25:13.20 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:25:13.20 Send Data: 00-06-00-00-00-04-01-01-01-00 +15.03.2022 19:25:13.20 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:25:13.20 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +15.03.2022 19:25:13.20 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +15.03.2022 19:25:13.20 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +20.03.2022 16:36:05.79 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +20.03.2022 16:36:15.45 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:15.46 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +20.03.2022 16:36:15.46 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:15.46 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +20.03.2022 16:36:15.46 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:15.46 Send Data: 00-03-00-00-00-04-01-01-01-03 +20.03.2022 16:36:15.47 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:15.47 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:15.47 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:15.47 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +20.03.2022 16:36:15.47 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:15.47 Send Data: 00-06-00-00-00-04-01-01-01-00 +20.03.2022 16:36:15.47 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:15.47 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +20.03.2022 16:36:15.47 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:15.47 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +20.03.2022 16:36:31.05 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +20.03.2022 16:36:34.32 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:34.32 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +20.03.2022 16:36:34.32 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:34.32 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +20.03.2022 16:36:34.33 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:34.33 Send Data: 00-03-00-00-00-04-01-01-01-03 +20.03.2022 16:36:34.33 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:34.33 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:34.33 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:34.33 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +20.03.2022 16:36:34.33 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:34.33 Send Data: 00-06-00-00-00-04-01-01-01-00 +20.03.2022 16:36:34.33 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:34.34 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +20.03.2022 16:36:34.34 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +20.03.2022 16:36:34.34 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +20.03.2022 16:37:10.30 Exception occurred: Not listening. You must call the Start() method before calling this method. +23.03.2022 18:52:49.10 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +23.03.2022 18:52:58.10 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +23.03.2022 18:52:58.11 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +23.03.2022 18:52:58.11 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +23.03.2022 18:52:58.11 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +23.03.2022 18:52:58.11 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +23.03.2022 18:52:58.12 Send Data: 00-03-00-00-00-04-01-01-01-03 +23.03.2022 18:52:58.12 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +23.03.2022 18:52:58.12 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +23.03.2022 18:52:58.12 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +23.03.2022 18:52:58.12 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +23.03.2022 18:52:58.12 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +23.03.2022 18:52:58.12 Send Data: 00-06-00-00-00-04-01-01-01-00 +23.03.2022 18:52:58.12 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +23.03.2022 18:52:58.12 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +23.03.2022 18:52:58.12 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +23.03.2022 18:52:58.12 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +31.03.2022 21:25:56.96 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +31.03.2022 21:25:58.36 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:25:58.36 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +31.03.2022 21:25:58.37 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:25:58.37 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +31.03.2022 21:25:58.38 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:25:58.38 Send Data: 00-03-00-00-00-04-01-01-01-03 +31.03.2022 21:25:58.38 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:25:58.38 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:25:58.38 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:25:58.38 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +31.03.2022 21:25:58.39 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:25:58.39 Send Data: 00-06-00-00-00-04-01-01-01-00 +31.03.2022 21:25:58.39 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:25:58.39 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +31.03.2022 21:25:58.39 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:25:58.39 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +31.03.2022 21:26:17.73 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +31.03.2022 21:26:20.46 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:26:20.46 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +31.03.2022 21:26:20.46 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:26:20.46 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +31.03.2022 21:26:20.47 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:26:20.47 Send Data: 00-03-00-00-00-04-01-01-01-03 +31.03.2022 21:26:20.47 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:26:20.47 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:26:20.47 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:26:20.47 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +31.03.2022 21:26:20.47 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:26:20.47 Send Data: 00-06-00-00-00-04-01-01-01-00 +31.03.2022 21:26:20.47 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:26:20.47 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +31.03.2022 21:26:20.47 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +31.03.2022 21:26:20.48 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +05.04.2022 19:58:32.33 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.04.2022 19:58:36.98 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 19:58:36.98 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 19:58:36.98 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 19:58:36.99 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 19:58:36.99 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 19:58:36.99 Send Data: 00-03-00-00-00-04-01-01-01-03 +05.04.2022 19:58:36.99 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 19:58:36.99 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 19:58:36.99 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 19:58:37.00 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 19:58:37.00 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 19:58:37.00 Send Data: 00-06-00-00-00-04-01-01-01-00 +05.04.2022 19:58:37.00 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 19:58:37.00 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +05.04.2022 19:58:37.00 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 19:58:37.00 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +05.04.2022 20:00:41.01 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.04.2022 20:00:52.19 Local cert was issued to OU=CS, O=UoI, E=gmakrakis8@.uidaho.edu, C=US, S=Idaho, CN=127.0.0.1 and is valid from 9/9/2021 11:51:55 PM until 6/5/2024 11:51:55 PM +05.04.2022 20:00:52.19 Remote cert was issued to OU=CS, O=UoI, E=makr7178@uidaho.edu, C=US, S=ID, CN=localhost2 and is valid from 9/9/2021 11:52:18 PM until 6/5/2024 11:52:18 PM +05.04.2022 20:01:31.07 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.04.2022 20:01:37.89 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.04.2022 20:01:41.37 Local cert was issued to OU=CS, O=UoI, E=gmakrakis8@.uidaho.edu, C=US, S=Idaho, CN=127.0.0.1 and is valid from 9/9/2021 11:51:55 PM until 6/5/2024 11:51:55 PM +05.04.2022 20:01:41.37 Remote cert was issued to OU=CS, O=UoI, E=makr7178@uidaho.edu, C=US, S=ID, CN=localhost2 and is valid from 9/9/2021 11:52:18 PM until 6/5/2024 11:52:18 PM +05.04.2022 20:01:43.45 Attempted access with role Operator has been identified +05.04.2022 20:01:43.46 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:01:43.46 Send Data: 00-01-00-00-00-03-01-8F-01 +05.04.2022 20:01:51.14 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.04.2022 20:01:53.36 Local cert was issued to OU=CS, O=UoI, E=gmakrakis8@.uidaho.edu, C=US, S=Idaho, CN=127.0.0.1 and is valid from 9/9/2021 11:51:55 PM until 6/5/2024 11:51:55 PM +05.04.2022 20:01:53.36 Remote cert was issued to OU=CS, O=UoI, E=makr7178@uidaho.edu, C=US, S=ID, CN=localhost2 and is valid from 9/9/2021 11:52:18 PM until 6/5/2024 11:52:18 PM +05.04.2022 20:02:53.12 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.04.2022 20:02:54.90 Local cert was issued to OU=CS, O=UoI, E=gmakrakis8@.uidaho.edu, C=US, S=Idaho, CN=127.0.0.1 and is valid from 9/9/2021 11:51:55 PM until 6/5/2024 11:51:55 PM +05.04.2022 20:02:54.90 Remote cert was issued to OU=CS, O=UoI, E=makr7178@uidaho.edu, C=US, S=ID, CN=localhost2 and is valid from 9/9/2021 11:52:18 PM until 6/5/2024 11:52:18 PM +05.04.2022 20:02:55.02 Attempted access with role Operator has been identified +05.04.2022 20:02:55.02 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:02:55.02 Send Data: 00-01-00-00-00-03-01-8F-01 +05.04.2022 20:03:07.12 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.04.2022 20:03:09.33 Local cert was issued to OU=CS, O=UoI, E=gmakrakis8@.uidaho.edu, C=US, S=Idaho, CN=127.0.0.1 and is valid from 9/9/2021 11:51:55 PM until 6/5/2024 11:51:55 PM +05.04.2022 20:03:09.33 Remote cert was issued to OU=CS, O=UoI, E=makr7178@uidaho.edu, C=US, S=ID, CN=localhost2 and is valid from 9/9/2021 11:52:18 PM until 6/5/2024 11:52:18 PM +05.04.2022 20:03:09.39 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:03:09.39 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 20:03:09.39 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:03:09.40 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 20:03:09.40 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:03:09.40 Send Data: 00-03-00-00-00-04-01-01-01-03 +05.04.2022 20:03:09.40 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:03:09.40 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:03:09.40 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:03:09.40 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 20:03:09.40 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:03:09.40 Send Data: 00-06-00-00-00-04-01-01-01-00 +05.04.2022 20:03:09.40 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:03:09.40 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +05.04.2022 20:03:09.40 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:03:09.40 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +05.04.2022 20:08:10.56 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.04.2022 20:08:12.14 Local cert was issued to OU=CS, O=UoI, E=gmakrakis8@.uidaho.edu, C=US, S=Idaho, CN=127.0.0.1 and is valid from 9/9/2021 11:51:55 PM until 6/5/2024 11:51:55 PM +05.04.2022 20:08:12.14 Remote cert was issued to OU=CS, O=UoI, E=makr7178@uidaho.edu, C=US, S=ID, CN=localhost2 and is valid from 9/9/2021 11:52:18 PM until 6/5/2024 11:52:18 PM +05.04.2022 20:08:12.26 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:08:12.27 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 20:08:12.27 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:08:12.27 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 20:08:12.27 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:08:12.27 Send Data: 00-03-00-00-00-04-01-01-01-03 +05.04.2022 20:08:12.28 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:08:12.28 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:08:12.28 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:08:12.28 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 20:08:12.28 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:08:12.28 Send Data: 00-06-00-00-00-04-01-01-01-00 +05.04.2022 20:08:12.28 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:08:12.28 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +05.04.2022 20:08:12.28 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:08:12.28 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +05.04.2022 20:30:58.47 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.04.2022 20:31:01.19 Local cert was issued to OU=CS, O=UoI, E=gmakrakis8@.uidaho.edu, C=US, S=Idaho, CN=127.0.0.1 and is valid from 9/9/2021 11:51:55 PM until 6/5/2024 11:51:55 PM +05.04.2022 20:31:01.19 Remote cert was issued to OU=CS, O=UoI, E=makr7178@uidaho.edu, C=US, S=ID, CN=localhost2 and is valid from 9/9/2021 11:52:18 PM until 6/5/2024 11:52:18 PM +05.04.2022 20:31:01.31 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:31:01.32 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 20:31:01.32 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:31:01.32 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 20:31:01.32 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:31:01.33 Send Data: 00-03-00-00-00-04-01-01-01-03 +05.04.2022 20:31:01.33 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:31:01.33 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:31:01.33 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:31:01.33 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 20:31:01.33 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:31:01.33 Send Data: 00-06-00-00-00-04-01-01-01-00 +05.04.2022 20:31:01.33 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:31:01.33 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +05.04.2022 20:31:01.33 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:31:01.33 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +05.04.2022 20:46:47.29 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.04.2022 20:46:49.51 Local cert was issued to OU=CS, O=UoI, E=gmakrakis8@.uidaho.edu, C=US, S=Idaho, CN=127.0.0.1 and is valid from 9/9/2021 11:51:55 PM until 6/5/2024 11:51:55 PM +05.04.2022 20:46:49.51 Remote cert was issued to OU=CS, O=UoI, E=makr7178@uidaho.edu, C=US, S=ID, CN=localhost2 and is valid from 9/9/2021 11:52:18 PM until 6/5/2024 11:52:18 PM +05.04.2022 20:46:49.64 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:46:49.64 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 20:46:49.65 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:46:49.65 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 20:46:49.65 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:46:49.65 Send Data: 00-03-00-00-00-04-01-01-01-03 +05.04.2022 20:46:49.65 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:46:49.65 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:46:49.66 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:46:49.66 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 20:46:49.66 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:46:49.66 Send Data: 00-06-00-00-00-04-01-01-01-00 +05.04.2022 20:46:49.66 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:46:49.66 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +05.04.2022 20:46:49.66 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:46:49.66 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +05.04.2022 20:47:10.45 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.04.2022 20:47:12.37 Local cert was issued to OU=CS, O=UoI, E=gmakrakis8@.uidaho.edu, C=US, S=Idaho, CN=127.0.0.1 and is valid from 9/9/2021 11:51:55 PM until 6/5/2024 11:51:55 PM +05.04.2022 20:47:12.37 Remote cert was issued to OU=CS, O=UoI, E=makr7178@uidaho.edu, C=US, S=ID, CN=localhost2 and is valid from 9/9/2021 11:52:18 PM until 6/5/2024 11:52:18 PM +05.04.2022 20:47:12.44 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:47:12.44 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 20:47:12.44 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:47:12.44 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 20:47:12.44 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:47:12.44 Send Data: 00-03-00-00-00-04-01-01-01-03 +05.04.2022 20:47:12.45 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 20:47:12.45 Send Data: 00-04-00-00-00-03-01-83-01 +05.04.2022 21:05:47.23 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.04.2022 21:05:49.50 Local cert was issued to OU=CS, O=UoI, E=gmakrakis8@.uidaho.edu, C=US, S=Idaho, CN=127.0.0.1 and is valid from 9/9/2021 11:51:55 PM until 6/5/2024 11:51:55 PM +05.04.2022 21:05:49.50 Remote cert was issued to OU=CS, O=UoI, E=makr7178@uidaho.edu, C=US, S=ID, CN=localhost2 and is valid from 9/9/2021 11:52:18 PM until 6/5/2024 11:52:18 PM +05.04.2022 21:05:49.63 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:05:49.64 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 21:05:49.64 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:05:49.64 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 21:05:49.64 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:05:49.64 Send Data: 00-03-00-00-00-04-01-01-01-03 +05.04.2022 21:05:49.65 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:05:49.65 Send Data: 00-04-00-00-00-03-01-83-01 +05.04.2022 21:06:11.35 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.04.2022 21:06:13.09 Local cert was issued to OU=CS, O=UoI, E=gmakrakis8@.uidaho.edu, C=US, S=Idaho, CN=127.0.0.1 and is valid from 9/9/2021 11:51:55 PM until 6/5/2024 11:51:55 PM +05.04.2022 21:06:13.09 Remote cert was issued to OU=CS, O=UoI, E=makr7178@uidaho.edu, C=US, S=ID, CN=localhost2 and is valid from 9/9/2021 11:52:18 PM until 6/5/2024 11:52:18 PM +05.04.2022 21:06:13.16 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:06:13.16 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 21:06:13.16 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:06:13.16 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 21:06:13.16 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:06:13.17 Send Data: 00-03-00-00-00-04-01-01-01-03 +05.04.2022 21:06:13.17 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:06:13.17 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:06:13.17 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:06:13.17 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 21:06:13.17 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:06:13.17 Send Data: 00-06-00-00-00-04-01-01-01-00 +05.04.2022 21:06:13.18 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:06:13.18 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +05.04.2022 21:06:13.18 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:06:13.18 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +05.04.2022 21:09:56.52 EasyModbus Server listing for incomming data at Port 802, local IP 0.0.0.0 +05.04.2022 21:10:05.00 Local cert was issued to OU=CS, O=UoI, E=gmakrakis8@.uidaho.edu, C=US, S=Idaho, CN=127.0.0.1 and is valid from 9/9/2021 11:51:55 PM until 6/5/2024 11:51:55 PM +05.04.2022 21:10:05.00 Remote cert was issued to OU=CS, O=UoI, E=makr7178@uidaho.edu, C=US, S=ID, CN=localhost2 and is valid from 9/9/2021 11:52:18 PM until 6/5/2024 11:52:18 PM +05.04.2022 21:10:05.14 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:05.15 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 21:10:05.15 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:05.15 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 21:10:05.15 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:05.16 Send Data: 00-03-00-00-00-04-01-01-01-03 +05.04.2022 21:10:05.16 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:05.16 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:05.16 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:05.16 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 21:10:05.16 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:05.16 Send Data: 00-06-00-00-00-04-01-01-01-00 +05.04.2022 21:10:05.16 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:05.16 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +05.04.2022 21:10:05.16 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:05.16 Send Data: 00-08-00-00-00-05-01-03-02-00-07 +05.04.2022 21:10:14.84 Local cert was issued to OU=CS, O=UoI, E=gmakrakis8@.uidaho.edu, C=US, S=Idaho, CN=127.0.0.1 and is valid from 9/9/2021 11:51:55 PM until 6/5/2024 11:51:55 PM +05.04.2022 21:10:14.84 Remote cert was issued to OU=CS, O=UoI, E=makr7178@uidaho.edu, C=US, S=ID, CN=localhost2 and is valid from 9/9/2021 11:52:18 PM until 6/5/2024 11:52:18 PM +05.04.2022 21:10:14.87 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:14.87 Send Data: 00-01-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 21:10:14.87 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:14.88 Send Data: 00-02-00-00-00-06-01-06-00-00-00-05 +05.04.2022 21:10:14.88 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:14.88 Send Data: 00-03-00-00-00-04-01-01-01-03 +05.04.2022 21:10:14.88 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:14.88 Send Data: 00-04-00-00-00-17-01-03-14-00-05-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:14.88 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:14.88 Send Data: 00-05-00-00-00-06-01-0F-00-04-00-0A +05.04.2022 21:10:14.88 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:14.88 Send Data: 00-06-00-00-00-04-01-01-01-00 +05.04.2022 21:10:14.88 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:14.88 Send Data: 00-07-00-00-00-06-01-06-00-00-00-07 +05.04.2022 21:10:14.88 Received Data: 00-00-00-00-00-00-00-00-00-00-00-00 +05.04.2022 21:10:14.88 Send Data: 00-08-00-00-00-05-01-03-02-00-07 diff --git a/EasySecureModbus_Demo_Server/packages.config b/EasySecureModbus_Demo_Server/packages.config new file mode 100644 index 0000000..6f8a680 --- /dev/null +++ b/EasySecureModbus_Demo_Server/packages.config @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<packages> + <package id="System.ValueTuple" version="4.5.0" targetFramework="net45" /> +</packages> \ No newline at end of file