diff --git a/SCADA/Example/BatchCoreTest.exe b/SCADA/Example/BatchCoreTest.exe index fa667ca..9541609 100644 Binary files a/SCADA/Example/BatchCoreTest.exe and b/SCADA/Example/BatchCoreTest.exe differ diff --git a/SCADA/Example/ClientDriver.dll b/SCADA/Example/ClientDriver.dll index 248d51f..f6b4367 100644 Binary files a/SCADA/Example/ClientDriver.dll and b/SCADA/Example/ClientDriver.dll differ diff --git a/SCADA/Example/CoreTest.exe b/SCADA/Example/CoreTest.exe index 02dbcc0..dd4449b 100644 Binary files a/SCADA/Example/CoreTest.exe and b/SCADA/Example/CoreTest.exe differ diff --git a/SCADA/Example/DataHelper.dll b/SCADA/Example/DataHelper.dll index ddb3b83..fd958c9 100644 Binary files a/SCADA/Example/DataHelper.dll and b/SCADA/Example/DataHelper.dll differ diff --git a/SCADA/Example/DataService.dll b/SCADA/Example/DataService.dll index 0e82101..a7ecac4 100644 Binary files a/SCADA/Example/DataService.dll and b/SCADA/Example/DataService.dll differ diff --git a/SCADA/Example/HMIControl.dll b/SCADA/Example/HMIControl.dll index 9f47c60..046bbe6 100644 Binary files a/SCADA/Example/HMIControl.dll and b/SCADA/Example/HMIControl.dll differ diff --git a/SCADA/Program/.vs/DataExchange/v15/.suo b/SCADA/Program/.vs/DataExchange/v15/.suo index 6937e9b..a49facf 100644 Binary files a/SCADA/Program/.vs/DataExchange/v15/.suo and b/SCADA/Program/.vs/DataExchange/v15/.suo differ diff --git a/SCADA/Program/.vs/DataExchange/v15/Server/sqlite3/storage.ide b/SCADA/Program/.vs/DataExchange/v15/Server/sqlite3/storage.ide index ea1b282..0df9ca2 100644 Binary files a/SCADA/Program/.vs/DataExchange/v15/Server/sqlite3/storage.ide and b/SCADA/Program/.vs/DataExchange/v15/Server/sqlite3/storage.ide differ diff --git a/SCADA/Program/.vs/DataExchange/v15/sqlite3/storage.ide b/SCADA/Program/.vs/DataExchange/v15/sqlite3/storage.ide index 1bd5583..d04ae13 100644 Binary files a/SCADA/Program/.vs/DataExchange/v15/sqlite3/storage.ide and b/SCADA/Program/.vs/DataExchange/v15/sqlite3/storage.ide differ diff --git a/SCADA/Program/ABPLCReader/ABPLCDriver.cs b/SCADA/Program/ABPLCReader/ABPLCDriver.cs index fd558a8..39e27c9 100644 --- a/SCADA/Program/ABPLCReader/ABPLCDriver.cs +++ b/SCADA/Program/ABPLCReader/ABPLCDriver.cs @@ -125,9 +125,9 @@ namespace ABPLCDriver } catch (Exception error) { - if (OnClose != null) + if (OnError != null) { - OnClose(this, new ShutdownRequestEventArgs(error.Message)); + OnError(this, new IOErrorEventArgs(error.Message)); } return false; } @@ -158,7 +158,7 @@ namespace ABPLCDriver return _groups.Remove(grp); } - public event ShutdownRequestEventHandler OnClose; + public event IOErrorEventHandler OnError; public void Dispose() { diff --git a/SCADA/Program/ABPLCReader/Tuxeip_Class.cs b/SCADA/Program/ABPLCReader/Tuxeip_Class.cs index a563c78..9637fc9 100644 --- a/SCADA/Program/ABPLCReader/Tuxeip_Class.cs +++ b/SCADA/Program/ABPLCReader/Tuxeip_Class.cs @@ -44,7 +44,7 @@ namespace Tuxeip private const byte _Transport = 0xa3; private const sbyte _TimeOutMultiplier = 0x01; - const string PATH = @"tuxeip.dll"; + const string PATH = @"tuxeipAB.dll"; [DllImport(PATH, CallingConvention = CallingConvention.Cdecl)] private static extern Eip_Session* _OpenSession(string serveur, int port, int buffer_len, int timeout); public static Eip_Session* OpenSession(string serveur) diff --git a/SCADA/Program/BatchCoreService/DAService.cs b/SCADA/Program/BatchCoreService/DAService.cs index c605258..d364fdd 100644 --- a/SCADA/Program/BatchCoreService/DAService.cs +++ b/SCADA/Program/BatchCoreService/DAService.cs @@ -244,7 +244,7 @@ namespace BatchCoreService { foreach (var driver in Drivers) { - driver.OnClose -= this.reader_OnClose; + driver.OnError -= this.reader_OnClose; driver.Dispose(); } foreach (var condition in _conditionList) @@ -371,7 +371,7 @@ namespace BatchCoreService { foreach (IDriver reader in _drivers.Values) { - reader.OnClose += new ShutdownRequestEventHandler(reader_OnClose); + reader.OnError += new IOErrorEventHandler(reader_OnClose); if (reader.IsClosed) { //if (reader is IFileDriver) @@ -1526,9 +1526,9 @@ namespace BatchCoreService } } - void reader_OnClose(object sender, ShutdownRequestEventArgs e) + void reader_OnClose(object sender, IOErrorEventArgs e) { - Log.WriteEntry(e.shutdownReason, EventLogEntryType.Error); + Log.WriteEntry(e.Reason, EventLogEntryType.Error); //AddErrorLog(new Exception(e.shutdownReason)); } diff --git a/SCADA/Program/ClientDriver/ClientDriver.cs b/SCADA/Program/ClientDriver/ClientDriver.cs index 5cb181d..f43f990 100644 --- a/SCADA/Program/ClientDriver/ClientDriver.cs +++ b/SCADA/Program/ClientDriver/ClientDriver.cs @@ -103,8 +103,8 @@ namespace ClientDriver } catch (SocketException error) { - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs(error.Message)); + if (OnError != null) + OnError(this, new IOErrorEventArgs(error.Message)); return false; } } @@ -123,7 +123,7 @@ namespace ClientDriver return _grps.Remove(grp); } - public event ShutdownRequestEventHandler OnClose; + public event IOErrorEventHandler OnError; public void Dispose() { @@ -149,8 +149,8 @@ namespace ClientDriver } catch (SocketException err) { - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs(err.Message)); + if (OnError != null) + OnError(this, new IOErrorEventArgs(err.Message)); } } } diff --git a/SCADA/Program/CoreTest/ClientService.cs b/SCADA/Program/CoreTest/ClientService.cs index e5db56b..cde73a2 100644 --- a/SCADA/Program/CoreTest/ClientService.cs +++ b/SCADA/Program/CoreTest/ClientService.cs @@ -132,7 +132,7 @@ namespace CoreTest void InitConnection() { - reader.OnClose += new ShutdownRequestEventHandler(reader_OnClose); + reader.OnError += new IOErrorEventHandler(reader_OnClose); if (reader.IsClosed) { reader.Connect(); @@ -310,9 +310,9 @@ namespace CoreTest } } - void reader_OnClose(object sender, ShutdownRequestEventArgs e) + void reader_OnClose(object sender, IOErrorEventArgs e) { - App.AddErrorLog(new Exception((e.shutdownReason))); + App.AddErrorLog(new Exception((e.Reason))); //AddErrorLog(new Exception(e.shutdownReason)); } @@ -585,7 +585,7 @@ namespace CoreTest if (timer != null) timer.Dispose(); group.SendResetRequest(); - reader.OnClose -= this.reader_OnClose; + reader.OnError -= this.reader_OnClose; reader.Dispose(); if (_conditionList != null) { diff --git a/SCADA/Program/DataService/IReader.cs b/SCADA/Program/DataService/IReader.cs index bf37777..477c75e 100644 --- a/SCADA/Program/DataService/IReader.cs +++ b/SCADA/Program/DataService/IReader.cs @@ -56,7 +56,7 @@ namespace DataService bool Connect(); IGroup AddGroup(string name, short id, int updateRate, float deadBand = 0f, bool active = false); bool RemoveGroup(IGroup group); - event ShutdownRequestEventHandler OnClose; + event IOErrorEventHandler OnError; } public interface IPLCDriver : IDriver, IReaderWriter @@ -73,14 +73,14 @@ namespace DataService //bool RecieveData(string data); } - public class ShutdownRequestEventArgs : EventArgs + public class IOErrorEventArgs : EventArgs { - public ShutdownRequestEventArgs(string reson) + public IOErrorEventArgs(string reson) { - shutdownReason = reson; + Reason = reson; } - public string shutdownReason; + public string Reason; } - public delegate void ShutdownRequestEventHandler(object sender, ShutdownRequestEventArgs e); + public delegate void IOErrorEventHandler(object sender, IOErrorEventArgs e); } diff --git a/SCADA/Program/FileDriver/DatabaseDriver.cs b/SCADA/Program/FileDriver/DatabaseDriver.cs index 720a536..33928d4 100644 --- a/SCADA/Program/FileDriver/DatabaseDriver.cs +++ b/SCADA/Program/FileDriver/DatabaseDriver.cs @@ -123,8 +123,8 @@ namespace FileDriver } catch (Exception e) { - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs(e.Message)); + if (OnError != null) + OnError(this, new IOErrorEventArgs(e.Message)); return false; } } @@ -168,8 +168,8 @@ namespace FileDriver } catch (Exception e) { - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs(e.Message)); + if (OnError != null) + OnError(this, new IOErrorEventArgs(e.Message)); return null; } } @@ -196,8 +196,8 @@ namespace FileDriver catch (Exception e) { m_Conn.Close(); - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs(e.Message)); + if (OnError != null) + OnError(this, new IOErrorEventArgs(e.Message)); return -1; } } @@ -563,7 +563,7 @@ namespace FileDriver get { return 0x100; } } - public event ShutdownRequestEventHandler OnClose; + public event IOErrorEventHandler OnError; } } \ No newline at end of file diff --git a/SCADA/Program/FileDriver/MemoryDriver.cs b/SCADA/Program/FileDriver/MemoryDriver.cs index 466b0a1..169bb7b 100644 --- a/SCADA/Program/FileDriver/MemoryDriver.cs +++ b/SCADA/Program/FileDriver/MemoryDriver.cs @@ -195,8 +195,8 @@ namespace FileDriver } catch (Exception err) { - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs(err.Message)); + if (OnError != null) + OnError(this, new IOErrorEventArgs(err.Message)); return false; } } @@ -232,12 +232,12 @@ namespace FileDriver accessor.Dispose(); mapp.Dispose(); mapp = null; - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs("mapp file closed")); + if (OnError != null) + OnError(this, new IOErrorEventArgs("mapp file closed")); } } - public event ShutdownRequestEventHandler OnClose; + public event IOErrorEventHandler OnError; public byte[] ReadBytes(DeviceAddress address, ushort size) { diff --git a/SCADA/Program/FileDriver/TagDriver.cs b/SCADA/Program/FileDriver/TagDriver.cs index 5ba08cb..01c7d19 100644 --- a/SCADA/Program/FileDriver/TagDriver.cs +++ b/SCADA/Program/FileDriver/TagDriver.cs @@ -106,7 +106,7 @@ namespace FileDriver return _groups.Remove(group); } - public event ShutdownRequestEventHandler OnClose; + public event IOErrorEventHandler OnError; public void Dispose() { diff --git a/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs b/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs index 65d6eda..f2b4b0c 100644 --- a/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs +++ b/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs @@ -119,9 +119,9 @@ namespace ModbusDriver } catch (IOException error) { - if (OnClose != null) + if (OnError != null) { - OnClose(this, new ShutdownRequestEventArgs(error.Message)); + OnError(this, new IOErrorEventArgs(error.Message)); } return false; } @@ -139,7 +139,7 @@ namespace ModbusDriver grp.IsActive = false; return _grps.Remove(grp); } - public event ShutdownRequestEventHandler OnClose; + public event IOErrorEventHandler OnError; #endregion //自定义构造函数3 public ModbusRTUReader(IDataServer server, short id, string name) @@ -181,7 +181,7 @@ namespace ModbusDriver } #region 写单个线圈或单个离散输出 功能码:0x05 - public byte[] WriteSingleCoils(int id, int startAddress, bool OnOff) + public int WriteSingleCoils(int id, int startAddress, bool OnOff) { byte[] data = new byte[8]; data[0] = (byte)id; // Slave id high byte @@ -193,12 +193,37 @@ namespace ModbusDriver byte[] arr = Utility.CalculateCrc(data, 6); data[6] = arr[0]; data[7] = arr[1]; - return data; + lock (_async) + { + _serialPort.Write(data, 0, data.Length); + int numBytesRead = 0; + var frameBytes = new byte[5]; + while (numBytesRead != frameBytes.Length) + numBytesRead += _serialPort.Read(frameBytes, numBytesRead, frameBytes.Length - numBytesRead); + var slave = frameBytes[0]; + var code = frameBytes[1]; + if (code == 0x85)//错误则只需读5字节 + { + var errorcode = frameBytes[2]; + if (OnError != null) + { + OnError(this, new IOErrorEventArgs(Modbus.GetErrorString(errorcode))); + } + return -1; + } + else//正确需8字节 + { + numBytesRead = 0; + while (numBytesRead < 3) + numBytesRead += _serialPort.Read(frameBytes, numBytesRead, 3 - numBytesRead); + return 0; + } + } } #endregion #region 写多个线圈 功能码:0x0F 15 - public byte[] WriteMultipleCoils(int id, int startAddress, ushort numBits, byte[] values) + public int WriteMultipleCoils(int id, int startAddress, ushort numBits, byte[] values) { int len = values.Length; byte[] data = new byte[len + 9]; @@ -215,12 +240,37 @@ namespace ModbusDriver byte[] arr = Utility.CalculateCrc(data, len + 7); data[len + 7] = arr[0]; //CRC校验的低八位 data[len + 8] = arr[1]; //CRC校验的高八位 - return data; + lock (_async) + { + _serialPort.Write(data, 0, data.Length); + int numBytesRead = 0; + var frameBytes = new byte[5]; + while (numBytesRead != frameBytes.Length) + numBytesRead += _serialPort.Read(frameBytes, numBytesRead, frameBytes.Length - numBytesRead); + var slave = frameBytes[0]; + var code = frameBytes[1]; + if (code == 0x85)//错误则只需读5字节 + { + var errorcode = frameBytes[2]; + if (OnError != null) + { + OnError(this, new IOErrorEventArgs(Modbus.GetErrorString(errorcode))); + } + return -1; + } + else//正确需9字节 + { + numBytesRead = 0; + while (numBytesRead < 4) + numBytesRead += _serialPort.Read(frameBytes, numBytesRead, 3 - numBytesRead); + return 0; + } + } } #endregion #region 写单个保持寄存器 功能码:0x06 - public byte[] WriteSingleRegister(int id, int startAddress, byte[] values) + public int WriteSingleRegister(int id, int startAddress, byte[] values) { byte[] data = new byte[8]; data[0] = (byte)id; // Slave id high byte 从站地址高八位 @@ -233,12 +283,37 @@ namespace ModbusDriver byte[] arr = Utility.CalculateCrc(data, 6); data[6] = arr[0]; //CRC校验码低八位 data[7] = arr[1]; //CRC校验码高八位 - return data; + lock (_async) + { + _serialPort.Write(data, 0, data.Length); + int numBytesRead = 0; + var frameBytes = new byte[5]; + while (numBytesRead != frameBytes.Length) + numBytesRead += _serialPort.Read(frameBytes, numBytesRead, frameBytes.Length - numBytesRead); + var slave = frameBytes[0]; + var code = frameBytes[1]; + if (code == 0x85)//错误则只需读5字节 + { + var errorcode = frameBytes[2]; + if (OnError != null) + { + OnError(this, new IOErrorEventArgs(Modbus.GetErrorString(errorcode))); + } + return -1; + } + else//正确需8字节 + { + numBytesRead = 0; + while (numBytesRead < 3) + numBytesRead += _serialPort.Read(frameBytes, numBytesRead, 3 - numBytesRead); + return 0; + } + } } #endregion #region 写多个保持寄存器 功能码:0x10 16 - public byte[] WriteMultipleRegister(int id, int startAddress, byte[] values) + public int WriteMultipleRegister(int id, int startAddress, byte[] values) { int len = values.Length; if (len % 2 > 0) len++; @@ -256,7 +331,32 @@ namespace ModbusDriver byte[] arr = Utility.CalculateCrc(data, len + 7); data[len + 7] = arr[0]; //crc校验的低八位 data[len + 8] = arr[1]; //CRC校验的高八位 - return data; + lock (_async) + { + _serialPort.Write(data, 0, data.Length); + int numBytesRead = 0; + var frameBytes = new byte[5]; + while (numBytesRead != frameBytes.Length) + numBytesRead += _serialPort.Read(frameBytes, numBytesRead, frameBytes.Length - numBytesRead); + var slave = frameBytes[0]; + var code = frameBytes[1]; + if (code == 0x85)//错误则只需读5字节 + { + var errorcode = frameBytes[2]; + if (OnError != null) + { + OnError(this, new IOErrorEventArgs(Modbus.GetErrorString(errorcode))); + } + return -1; + } + else//正确需8字节 + { + numBytesRead = 0; + while (numBytesRead < 3) + numBytesRead += _serialPort.Read(frameBytes, numBytesRead, 3 - numBytesRead); + return 0; + } + } } #endregion @@ -385,8 +485,8 @@ namespace ModbusDriver } catch (Exception e) { - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs(e.Message)); + if (OnError != null) + OnError(this, new IOErrorEventArgs(e.Message)); return null; } } @@ -454,81 +554,47 @@ namespace ModbusDriver public int WriteBytes(DeviceAddress address, byte[] bit) { - var data = WriteMultipleRegister(address.Area, address.Start, bit); - _serialPort.Write(data, 0, data.Length); - _serialPort.ReadByte(); - var chr = _serialPort.ReadByte(); - return (chr & 0x80) > 0 ? -1 : 0; + return WriteMultipleRegister(address.Area, address.Start, bit); } public int WriteBit(DeviceAddress address, bool bit) { - var data = WriteSingleCoils(address.Area, address.Start + address.Bit, bit); - _serialPort.Write(data, 0, data.Length); - _serialPort.ReadByte(); - var chr = _serialPort.ReadByte(); - return (chr & 0x80) > 0 ? -1 : 0; + return WriteSingleCoils(address.Area, address.Start + address.Bit, bit); } public int WriteBits(DeviceAddress address, byte bits) { - var data = WriteSingleRegister(address.Area, address.Start, new byte[] { bits }); - _serialPort.Write(data, 0, data.Length); - _serialPort.ReadByte(); - var chr = _serialPort.ReadByte(); - return (chr & 0x80) > 0 ? -1 : 0; + return WriteSingleRegister(address.Area, address.Start, new byte[] { bits }); } public int WriteInt16(DeviceAddress address, short value) { - var data = WriteSingleRegister(address.Area, address.Start, BitConverter.GetBytes(value)); - _serialPort.Write(data, 0, data.Length); - var chr = _serialPort.ReadByte(); - return (chr & 0x80) > 0 ? -1 : 0; + return WriteSingleRegister(address.Area, address.Start, BitConverter.GetBytes(value)); } public int WriteUInt16(DeviceAddress address, ushort value) { - var data = WriteSingleRegister(address.Area, address.Start, BitConverter.GetBytes(value)); - _serialPort.Write(data, 0, data.Length); - var chr = _serialPort.ReadByte(); - return (chr & 0x80) > 0 ? -1 : 0; + return WriteSingleRegister(address.Area, address.Start, BitConverter.GetBytes(value)); } public int WriteUInt32(DeviceAddress address, uint value) { - var data = WriteMultipleRegister(address.Area, address.Start, BitConverter.GetBytes(value)); - _serialPort.Write(data, 0, data.Length); - _serialPort.ReadByte(); - var chr = _serialPort.ReadByte(); - return (chr & 0x80) > 0 ? -1 : 0; + return WriteMultipleRegister(address.Area, address.Start, BitConverter.GetBytes(value)); } public int WriteInt32(DeviceAddress address, int value) { - var data = WriteMultipleRegister(address.Area, address.Start, BitConverter.GetBytes(value)); - _serialPort.Write(data, 0, data.Length); - _serialPort.ReadByte(); - var chr = _serialPort.ReadByte(); - return (chr & 0x80) > 0 ? -1 : 0; + return WriteMultipleRegister(address.Area, address.Start, BitConverter.GetBytes(value)); } public int WriteFloat(DeviceAddress address, float value) { - var data = WriteMultipleRegister(address.Area, address.Start, BitConverter.GetBytes(value)); - _serialPort.Write(data, 0, data.Length); - _serialPort.ReadByte(); - var chr = _serialPort.ReadByte(); - return (chr & 0x80) > 0 ? -1 : 0; + return WriteMultipleRegister(address.Area, address.Start, BitConverter.GetBytes(value)); } public int WriteString(DeviceAddress address, string str) { - var data = WriteMultipleRegister(address.Area, address.Start, Encoding.ASCII.GetBytes(str)); - _serialPort.Write(data, 0, data.Length); - _serialPort.ReadByte(); - var chr = _serialPort.ReadByte(); - return chr == address.DBNumber ? -1 : 0; + return WriteMultipleRegister(address.Area, address.Start, Encoding.ASCII.GetBytes(str)); } public int WriteValue(DeviceAddress address, object value) @@ -588,5 +654,37 @@ namespace ModbusDriver public const byte excExceptionOffset = 128; /// Constant for exception send failt. public const byte excSendFailt = 100; + + public static string GetErrorString(byte exception) + { + switch (exception) + { + case Modbus.excIllegalFunction: + return "Constant for ModbusModbus.exception illegal function."; + case Modbus.excIllegalDataAdr: + return "Constant for ModbusModbus.exception illegal data address."; + case Modbus.excIllegalDataVal: + return "Constant for ModbusModbus.exception illegal data value."; + case Modbus.excSlaveDeviceFailure: + return "Constant for ModbusModbus.exception slave device failure."; + case Modbus.excAck: + return "Constant for ModbusModbus.exception acknowledge."; + case Modbus.excSlaveIsBusy: + return "Constant for ModbusModbus.exception slave is busy/booting up."; + case Modbus.excGatePathUnavailable: + return "Constant for ModbusModbus.exception gate path unavailable."; + case Modbus.excExceptionNotConnected: + return "Constant for ModbusModbus.exception not connected."; + case Modbus.excExceptionConnectionLost: + return "Constant for ModbusModbus.exception connection lost."; + case Modbus.excExceptionTimeout: + return "Constant for ModbusModbus.exception response timeout."; + case Modbus.excExceptionOffset: + return "Constant for ModbusModbus.exception wrong offset."; + case Modbus.excSendFailt: + return "Constant for ModbusModbus.exception send failt."; + } + return string.Empty; + } } } diff --git a/SCADA/Program/ModbusDriver/ModbusTCPDriver.cs b/SCADA/Program/ModbusDriver/ModbusTCPDriver.cs index 5930e6d..ce91b08 100644 --- a/SCADA/Program/ModbusDriver/ModbusTCPDriver.cs +++ b/SCADA/Program/ModbusDriver/ModbusTCPDriver.cs @@ -190,8 +190,8 @@ namespace ModbusDriver } catch (SocketException error) { - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs(error.Message)); + if (OnError != null) + OnError(this, new IOErrorEventArgs(error.Message)); return false; } } @@ -393,8 +393,8 @@ namespace ModbusDriver internal void CallException(int id, byte function, byte exception) { if (tcpSynCl == null) return; - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs(GetErrorString(exception))); + if (OnError != null) + OnError(this, new IOErrorEventArgs(GetErrorString(exception))); } public byte[] ReadBytes(DeviceAddress address, ushort size) @@ -556,7 +556,7 @@ namespace ModbusDriver return this.WriteValueEx(address, value); } - public event ShutdownRequestEventHandler OnClose; + public event IOErrorEventHandler OnError; public int Limit { diff --git a/SCADA/Program/OPCDriver/OPCDriver.cs b/SCADA/Program/OPCDriver/OPCDriver.cs index 03f9766..cfbdb4c 100644 --- a/SCADA/Program/OPCDriver/OPCDriver.cs +++ b/SCADA/Program/OPCDriver/OPCDriver.cs @@ -971,13 +971,13 @@ namespace OPCDriver #endregion #region IOPCShutdown Members - public event ShutdownRequestEventHandler OnClose; + public event IOErrorEventHandler OnError; public void ShutdownRequest(string szReason) { this.Close(); - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs(szReason)); + if (OnError != null) + OnError(this, new IOErrorEventArgs(szReason)); } #endregion diff --git a/SCADA/Program/OmronPlcDriver/OmronUdpReader.cs b/SCADA/Program/OmronPlcDriver/OmronUdpReader.cs index 12906ad..d0b75dd 100644 --- a/SCADA/Program/OmronPlcDriver/OmronUdpReader.cs +++ b/SCADA/Program/OmronPlcDriver/OmronUdpReader.cs @@ -241,8 +241,8 @@ namespace OmronPlcDriver } catch (SocketException error) { - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs(error.Message)); + if (OnError != null) + OnError(this, new IOErrorEventArgs(error.Message)); return false; } } @@ -479,8 +479,8 @@ namespace OmronPlcDriver //Console.WriteLine("OmronReader错误->" + GetErrorString(exception)); if (exception == OmronCSCJ.excExceptionConnectionLost && IsClosed == false) { - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs(GetErrorString(exception))); + if (OnError != null) + OnError(this, new IOErrorEventArgs(GetErrorString(exception))); } } @@ -685,7 +685,7 @@ namespace OmronPlcDriver return this.WriteValueEx(address, value); } - public event ShutdownRequestEventHandler OnClose; + public event IOErrorEventHandler OnError; public int Limit { diff --git a/SCADA/Program/PanasonicDriver/PanasonicSerialReader.cs b/SCADA/Program/PanasonicDriver/PanasonicSerialReader.cs index 66e9960..cf55453 100644 --- a/SCADA/Program/PanasonicDriver/PanasonicSerialReader.cs +++ b/SCADA/Program/PanasonicDriver/PanasonicSerialReader.cs @@ -90,7 +90,7 @@ namespace PanasonicPLCriver set { _timeOut = value; } } - public event ShutdownRequestEventHandler OnClose; + public event IOErrorEventHandler OnError; public IGroup AddGroup(string name, short id, int updateRate, float deadBand = 0, bool active = false) { @@ -112,9 +112,9 @@ namespace PanasonicPLCriver } catch (IOException error) { - if (OnClose != null) + if (OnError != null) { - OnClose(this, new ShutdownRequestEventArgs(error.Message)); + OnError(this, new IOErrorEventArgs(error.Message)); } return false; } @@ -342,8 +342,8 @@ namespace PanasonicPLCriver } catch (Exception e) { - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs(e.Message)); + if (OnError != null) + OnError(this, new IOErrorEventArgs(e.Message)); return null; } } @@ -362,16 +362,16 @@ namespace PanasonicPLCriver } catch (Exception) { - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs("读取超时")); + if (OnError != null) + OnError(this, new IOErrorEventArgs("读取超时")); return null; } } if (recv.Substring(3, 1) == "!")//返回为错误代码 { string err = recv.Substring(4, 2); - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs(daveStrerror(err))); + if (OnError != null) + OnError(this, new IOErrorEventArgs(daveStrerror(err))); return null; } string needXorStr = recv.Substring(0, recv.Length - 2);//需要进行xor校验的字符串 @@ -379,8 +379,8 @@ namespace PanasonicPLCriver string checkStr = Utility.XorCheck(needXorStr); if (checkStr != recvCheck) { - if (OnClose != null) - OnClose(this, new ShutdownRequestEventArgs("校验失败")); + if (OnError != null) + OnError(this, new IOErrorEventArgs("校验失败")); return null; } else diff --git a/SCADA/Program/SiemensPLCDriver/SiemensPLCDriver.cs b/SCADA/Program/SiemensPLCDriver/SiemensPLCDriver.cs index c382367..b8edc19 100644 --- a/SCADA/Program/SiemensPLCDriver/SiemensPLCDriver.cs +++ b/SCADA/Program/SiemensPLCDriver/SiemensPLCDriver.cs @@ -371,9 +371,9 @@ namespace SiemensPLCDriver if (res == 0) return buffer; _closed = true; dc = null; _closeTime = DateTime.Now; - if (OnClose != null) + if (OnError != null) { - OnClose(this, new ShutdownRequestEventArgs(daveStrerror(res))); _closeTime = DateTime.Now; + OnError(this, new IOErrorEventArgs(daveStrerror(res))); _closeTime = DateTime.Now; } } return null; @@ -392,9 +392,9 @@ namespace SiemensPLCDriver if (res == 0) return new ItemData(Utility.ConvertToString(buffer), 0, QUALITIES.QUALITY_GOOD); _closed = true; dc = null; _closeTime = DateTime.Now; - if (OnClose != null) + if (OnError != null) { - OnClose(this, new ShutdownRequestEventArgs(daveStrerror(res))); + OnError(this, new IOErrorEventArgs(daveStrerror(res))); } } return new ItemData(string.Empty, 0, QUALITIES.QUALITY_NOT_CONNECTED); @@ -411,9 +411,9 @@ namespace SiemensPLCDriver if (res == 0) return new ItemData(dc.getS32(), 0, QUALITIES.QUALITY_GOOD); } _closed = true; dc = null; _closeTime = DateTime.Now; - if (OnClose != null) + if (OnError != null) { - OnClose(this, new ShutdownRequestEventArgs(daveStrerror(res))); + OnError(this, new IOErrorEventArgs(daveStrerror(res))); } } return new ItemData(0, 0, QUALITIES.QUALITY_NOT_CONNECTED); ; @@ -430,9 +430,9 @@ namespace SiemensPLCDriver if (res == 0) return new ItemData((uint)dc.getS32(), 0, QUALITIES.QUALITY_GOOD); } _closed = true; dc = null; _closeTime = DateTime.Now; - if (OnClose != null) + if (OnError != null) { - OnClose(this, new ShutdownRequestEventArgs(daveStrerror(res))); + OnError(this, new IOErrorEventArgs(daveStrerror(res))); } } return new ItemData(0, 0, QUALITIES.QUALITY_NOT_CONNECTED); ; @@ -449,9 +449,9 @@ namespace SiemensPLCDriver if (res == 0) return new ItemData((ushort)dc.getS16(), 0, QUALITIES.QUALITY_GOOD); } _closed = true; dc = null; _closeTime = DateTime.Now; - if (OnClose != null) + if (OnError != null) { - OnClose(this, new ShutdownRequestEventArgs(daveStrerror(res))); + OnError(this, new IOErrorEventArgs(daveStrerror(res))); } } return new ItemData(0, 0, QUALITIES.QUALITY_NOT_CONNECTED); ; @@ -468,9 +468,9 @@ namespace SiemensPLCDriver if (res == 0) return new ItemData((short)dc.getS16(), 0, QUALITIES.QUALITY_GOOD); } _closed = true; dc = null; _closeTime = DateTime.Now; - if (OnClose != null) + if (OnError != null) { - OnClose(this, new ShutdownRequestEventArgs(daveStrerror(res))); + OnError(this, new IOErrorEventArgs(daveStrerror(res))); } } return new ItemData(0, 0, QUALITIES.QUALITY_NOT_CONNECTED); ; @@ -488,9 +488,9 @@ namespace SiemensPLCDriver return new ItemData((byte)dc.getS8(), 0, QUALITIES.QUALITY_GOOD); } _closed = true; dc = null; _closeTime = DateTime.Now; - if (OnClose != null) + if (OnError != null) { - OnClose(this, new ShutdownRequestEventArgs(daveStrerror(res))); + OnError(this, new IOErrorEventArgs(daveStrerror(res))); } } return new ItemData(0, 0, QUALITIES.QUALITY_NOT_CONNECTED); ; @@ -507,7 +507,7 @@ namespace SiemensPLCDriver if (res == 0) return new ItemData(dc.getS8() != 0, 0, QUALITIES.QUALITY_GOOD); } _closed = true; dc = null; _closeTime = DateTime.Now; - if (OnClose != null) { OnClose(this, new ShutdownRequestEventArgs(daveStrerror(res))); } + if (OnError != null) { OnError(this, new IOErrorEventArgs(daveStrerror(res))); } } return new ItemData(false, 0, QUALITIES.QUALITY_NOT_CONNECTED); } @@ -523,9 +523,9 @@ namespace SiemensPLCDriver if (res == 0) return new ItemData(dc.getFloat(), 0, QUALITIES.QUALITY_GOOD); } _closed = true; dc = null; _closeTime = DateTime.Now; - if (OnClose != null) + if (OnError != null) { - OnClose(this, new ShutdownRequestEventArgs(daveStrerror(res))); _closeTime = DateTime.Now; + OnError(this, new IOErrorEventArgs(daveStrerror(res))); _closeTime = DateTime.Now; } } return new ItemData(0, 0, QUALITIES.QUALITY_NOT_CONNECTED); ; @@ -789,7 +789,7 @@ namespace SiemensPLCDriver } catch (Exception err) { - if (OnClose != null) OnClose(this, new ShutdownRequestEventArgs(err.Message));//可考虑把相应地址和数值加入 + if (OnError != null) OnError(this, new IOErrorEventArgs(err.Message));//可考虑把相应地址和数值加入 } } libnodave.resultSet rs = new libnodave.resultSet(); @@ -802,7 +802,7 @@ namespace SiemensPLCDriver get { return 10; } } - public event ShutdownRequestEventHandler OnClose; + public event IOErrorEventHandler OnError; } } diff --git a/SCADA/dll/ABPLCReader.dll b/SCADA/dll/ABPLCReader.dll index 5dc67e5..962642a 100644 Binary files a/SCADA/dll/ABPLCReader.dll and b/SCADA/dll/ABPLCReader.dll differ diff --git a/SCADA/dll/DataService.dll b/SCADA/dll/DataService.dll index 238fd86..29832c8 100644 Binary files a/SCADA/dll/DataService.dll and b/SCADA/dll/DataService.dll differ diff --git a/SCADA/dll/FileDriver.dll b/SCADA/dll/FileDriver.dll index 725204d..982d4ec 100644 Binary files a/SCADA/dll/FileDriver.dll and b/SCADA/dll/FileDriver.dll differ diff --git a/SCADA/dll/ModbusDriver.dll b/SCADA/dll/ModbusDriver.dll index 025e06e..d6ae616 100644 Binary files a/SCADA/dll/ModbusDriver.dll and b/SCADA/dll/ModbusDriver.dll differ diff --git a/SCADA/dll/OPCDriver.dll b/SCADA/dll/OPCDriver.dll index aeba942..6ae5101 100644 Binary files a/SCADA/dll/OPCDriver.dll and b/SCADA/dll/OPCDriver.dll differ diff --git a/SCADA/dll/OmronPlcDriver.dll b/SCADA/dll/OmronPlcDriver.dll index 2b9f6ef..7d73d00 100644 Binary files a/SCADA/dll/OmronPlcDriver.dll and b/SCADA/dll/OmronPlcDriver.dll differ diff --git a/SCADA/dll/PanasonicDriver.dll b/SCADA/dll/PanasonicDriver.dll index 465fd83..c5998ea 100644 Binary files a/SCADA/dll/PanasonicDriver.dll and b/SCADA/dll/PanasonicDriver.dll differ diff --git a/SCADA/dll/SiemensPLCDriver.dll b/SCADA/dll/SiemensPLCDriver.dll index 10dc600..69f4e53 100644 Binary files a/SCADA/dll/SiemensPLCDriver.dll and b/SCADA/dll/SiemensPLCDriver.dll differ diff --git a/SCADA/dll/Tuxeip.dll b/SCADA/dll/Tuxeip.dll deleted file mode 100644 index 93d01a9..0000000 Binary files a/SCADA/dll/Tuxeip.dll and /dev/null differ diff --git a/SCADA/dll/tuxeipAB.dll b/SCADA/dll/tuxeipAB.dll new file mode 100644 index 0000000..f38de76 Binary files /dev/null and b/SCADA/dll/tuxeipAB.dll differ