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