Browse Source

fix modbusRTU & AB driver

pull/13/merge
Gavin 8 years ago
parent
commit
358cc05b57
  1. BIN
      SCADA/Example/BatchCoreTest.exe
  2. BIN
      SCADA/Example/ClientDriver.dll
  3. BIN
      SCADA/Example/CoreTest.exe
  4. BIN
      SCADA/Example/DataHelper.dll
  5. BIN
      SCADA/Example/DataService.dll
  6. BIN
      SCADA/Example/HMIControl.dll
  7. BIN
      SCADA/Program/.vs/DataExchange/v15/.suo
  8. BIN
      SCADA/Program/.vs/DataExchange/v15/Server/sqlite3/storage.ide
  9. BIN
      SCADA/Program/.vs/DataExchange/v15/sqlite3/storage.ide
  10. 6
      SCADA/Program/ABPLCReader/ABPLCDriver.cs
  11. 2
      SCADA/Program/ABPLCReader/Tuxeip_Class.cs
  12. 8
      SCADA/Program/BatchCoreService/DAService.cs
  13. 10
      SCADA/Program/ClientDriver/ClientDriver.cs
  14. 8
      SCADA/Program/CoreTest/ClientService.cs
  15. 12
      SCADA/Program/DataService/IReader.cs
  16. 14
      SCADA/Program/FileDriver/DatabaseDriver.cs
  17. 10
      SCADA/Program/FileDriver/MemoryDriver.cs
  18. 2
      SCADA/Program/FileDriver/TagDriver.cs
  19. 210
      SCADA/Program/ModbusDriver/ModbusRTUDriver.cs
  20. 10
      SCADA/Program/ModbusDriver/ModbusTCPDriver.cs
  21. 6
      SCADA/Program/OPCDriver/OPCDriver.cs
  22. 10
      SCADA/Program/OmronPlcDriver/OmronUdpReader.cs
  23. 22
      SCADA/Program/PanasonicDriver/PanasonicSerialReader.cs
  24. 38
      SCADA/Program/SiemensPLCDriver/SiemensPLCDriver.cs
  25. BIN
      SCADA/dll/ABPLCReader.dll
  26. BIN
      SCADA/dll/DataService.dll
  27. BIN
      SCADA/dll/FileDriver.dll
  28. BIN
      SCADA/dll/ModbusDriver.dll
  29. BIN
      SCADA/dll/OPCDriver.dll
  30. BIN
      SCADA/dll/OmronPlcDriver.dll
  31. BIN
      SCADA/dll/PanasonicDriver.dll
  32. BIN
      SCADA/dll/SiemensPLCDriver.dll
  33. BIN
      SCADA/dll/Tuxeip.dll
  34. BIN
      SCADA/dll/tuxeipAB.dll

BIN
SCADA/Example/BatchCoreTest.exe

Binary file not shown.

BIN
SCADA/Example/ClientDriver.dll

Binary file not shown.

BIN
SCADA/Example/CoreTest.exe

Binary file not shown.

BIN
SCADA/Example/DataHelper.dll

Binary file not shown.

BIN
SCADA/Example/DataService.dll

Binary file not shown.

BIN
SCADA/Example/HMIControl.dll

Binary file not shown.

BIN
SCADA/Program/.vs/DataExchange/v15/.suo

Binary file not shown.

BIN
SCADA/Program/.vs/DataExchange/v15/Server/sqlite3/storage.ide

Binary file not shown.

BIN
SCADA/Program/.vs/DataExchange/v15/sqlite3/storage.ide

Binary file not shown.

6
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()
{

2
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)

8
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));
}

10
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));
}
}
}

8
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)
{

12
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);
}

14
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;
}
}

10
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)
{

2
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()
{

210
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;
/// <summary>Constant for exception send failt.</summary>
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;
}
}
}

10
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
{

6
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

10
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
{

22
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

38
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<string>(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>(string.Empty, 0, QUALITIES.QUALITY_NOT_CONNECTED);
@ -411,9 +411,9 @@ namespace SiemensPLCDriver
if (res == 0) return new ItemData<int>(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<int>(0, 0, QUALITIES.QUALITY_NOT_CONNECTED); ;
@ -430,9 +430,9 @@ namespace SiemensPLCDriver
if (res == 0) return new ItemData<uint>((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<uint>(0, 0, QUALITIES.QUALITY_NOT_CONNECTED); ;
@ -449,9 +449,9 @@ namespace SiemensPLCDriver
if (res == 0) return new ItemData<ushort>((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<ushort>(0, 0, QUALITIES.QUALITY_NOT_CONNECTED); ;
@ -468,9 +468,9 @@ namespace SiemensPLCDriver
if (res == 0) return new ItemData<short>((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<short>(0, 0, QUALITIES.QUALITY_NOT_CONNECTED); ;
@ -488,9 +488,9 @@ namespace SiemensPLCDriver
return new ItemData<byte>((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<byte>(0, 0, QUALITIES.QUALITY_NOT_CONNECTED); ;
@ -507,7 +507,7 @@ namespace SiemensPLCDriver
if (res == 0) return new ItemData<bool>(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<bool>(false, 0, QUALITIES.QUALITY_NOT_CONNECTED);
}
@ -523,9 +523,9 @@ namespace SiemensPLCDriver
if (res == 0) return new ItemData<float>(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<float>(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;
}
}

BIN
SCADA/dll/ABPLCReader.dll

Binary file not shown.

BIN
SCADA/dll/DataService.dll

Binary file not shown.

BIN
SCADA/dll/FileDriver.dll

Binary file not shown.

BIN
SCADA/dll/ModbusDriver.dll

Binary file not shown.

BIN
SCADA/dll/OPCDriver.dll

Binary file not shown.

BIN
SCADA/dll/OmronPlcDriver.dll

Binary file not shown.

BIN
SCADA/dll/PanasonicDriver.dll

Binary file not shown.

BIN
SCADA/dll/SiemensPLCDriver.dll

Binary file not shown.

BIN
SCADA/dll/Tuxeip.dll

Binary file not shown.

BIN
SCADA/dll/tuxeipAB.dll

Binary file not shown.
Loading…
Cancel
Save