diff --git a/SCADA/Program/PanasonicDriver/PanasonicSerialReader.cs b/SCADA/Program/PanasonicDriver/PanasonicSerialReader.cs index 343b486..5d59d95 100644 --- a/SCADA/Program/PanasonicDriver/PanasonicSerialReader.cs +++ b/SCADA/Program/PanasonicDriver/PanasonicSerialReader.cs @@ -5,7 +5,6 @@ using System.ComponentModel; using System.Globalization; using System.IO; using System.IO.Ports; -using System.Net; using System.Text; namespace PanasonicPLCriver @@ -43,7 +42,7 @@ namespace PanasonicPLCriver _server = server; _id = id; //spare1 = {COM3,9600,Odd,8,One} - _serialPort = new SerialPort("COM2",57600,Parity.Odd,8,StopBits.One); + _serialPort = new SerialPort("COM2", 57600, Parity.Odd, 8, StopBits.One); _devId = byte.Parse(spare2); } public bool IsClosed @@ -299,7 +298,7 @@ namespace PanasonicPLCriver /// 写入的值 /// 响应的开始帧 /// - public string CreateWDCmd(int start, short[] values, out string respBeginStr) + public string CreateWDCmd(int start, short[] values, out string respBeginStr) { string dataStr = string.Empty; int size = values.Length; @@ -330,17 +329,18 @@ namespace PanasonicPLCriver { if (!isBool(startAddress.Area))//读寄存器的情况 { - cmd = CreateRDCmd(startAddress.Start,size,out respBeginStr); + cmd = CreateRDCmd(startAddress.Start, size, out respBeginStr); } else //读触点的情况 { - cmd = CreateRCCCmd(startAddress.Start, size, startAddress.Area, out respBeginStr); + cmd = CreateRCCCmd(startAddress.Start, size, startAddress.Area, out respBeginStr); } return WriteSyncData(respBeginStr, cmd); } catch (Exception e) { - OnClose?.Invoke(this, new ShutdownRequestEventArgs(e.Message)); + if (OnClose != null) + OnClose(this, new ShutdownRequestEventArgs(e.Message)); return null; } } @@ -350,7 +350,7 @@ namespace PanasonicPLCriver byte[] writeData = Encoding.Default.GetBytes(cmd); string recv = string.Empty; lock (syncLock)//这里加锁 防止一个刚写完还没全读来 另一就去写 - //但这就会造成锁死的情况 比如循环读的时候 触发去写 这时候必须要等读完才能去写 + //但这就会造成锁死的情况 比如循环读的时候 触发去写 这时候必须要等读完才能去写 { _serialPort.Write(writeData, 0, writeData.Length); try @@ -359,14 +359,16 @@ namespace PanasonicPLCriver } catch (Exception) { - OnClose?.Invoke(this, new ShutdownRequestEventArgs("读取超时")); + if (OnClose != null) + OnClose(this, new ShutdownRequestEventArgs("读取超时")); return null; - } + } } if (recv.Substring(3, 1) == "!")//返回为错误代码 { string err = recv.Substring(4, 2); - OnClose?.Invoke(this, new ShutdownRequestEventArgs(daveStrerror(err))); + if (OnClose != null) + OnClose(this, new ShutdownRequestEventArgs(daveStrerror(err))); return null; } string needXorStr = recv.Substring(0, recv.Length - 2);//需要进行xor校验的字符串 @@ -374,14 +376,15 @@ namespace PanasonicPLCriver string checkStr = Utility.XorCheck(needXorStr); if (checkStr != recvCheck) { - OnClose?.Invoke(this, new ShutdownRequestEventArgs("校验失败")); + if (OnClose != null) + OnClose(this, new ShutdownRequestEventArgs("校验失败")); return null; } else { if (recv.Substring(4, 1) == "W")//如果是写入命令 { - return new byte[0]; + return new byte[0]; } string dataStr = Utility.Pinchstring(recv, respBeginStr, checkStr); return Utility.HexToBytes(dataStr); @@ -391,7 +394,7 @@ namespace PanasonicPLCriver { switch (code) { - case "20":return "未定义"; + case "20": return "未定义"; case "21": return "远程单元无法被正确识别,或者发生了数据错误."; case "22": return "用于远程单元的接收缓冲区已满."; case "23": return "远程单元编号(01 至16)设置与本地单元重复."; @@ -430,7 +433,7 @@ namespace PanasonicPLCriver } public ItemData ReadFloat(DeviceAddress address) { - throw new NotImplementedException(); + throw new NotImplementedException(); } public ItemData ReadInt16(DeviceAddress address) { @@ -475,10 +478,10 @@ namespace PanasonicPLCriver public int WriteBit(DeviceAddress address, bool bit) { - string respBeginStr = string.Empty; - string cmd = CreateWCSCmd(address.Start,address.Bit,address.Area,bit,out respBeginStr); - WriteSyncData(respBeginStr, cmd); - return 0; + string respBeginStr = string.Empty; + string cmd = CreateWCSCmd(address.Start, address.Bit, address.Area, bit, out respBeginStr); + WriteSyncData(respBeginStr, cmd); + return 0; } public int WriteBits(DeviceAddress address, byte bits) @@ -499,7 +502,7 @@ namespace PanasonicPLCriver public int WriteInt16(DeviceAddress address, short value) { string respBeginStr = string.Empty; - string cmd = CreateWDCmd(address.Start, new short[1] {value}, out respBeginStr); + string cmd = CreateWDCmd(address.Start, new short[1] { value }, out respBeginStr); WriteSyncData(respBeginStr, cmd); return 0; } @@ -609,12 +612,12 @@ namespace PanasonicPLCriver /// public const string WDCmd = "WD"; - public const byte Xarea = 0;//外部输入 - public const byte Yarea = 1;//外部输出 - public const byte Rarea = 2;//内部继电器 - public const byte Tarea = 3;//定时器 - public const byte Carea = 4;//计数器 不支持 - public const byte Larea = 5;//链接继电器 不支持 + public const byte Xarea = 0;//外部输入 + public const byte Yarea = 1;//外部输出 + public const byte Rarea = 2;//内部继电器 + public const byte Tarea = 3;//定时器 + public const byte Carea = 4;//计数器 不支持 + public const byte Larea = 5;//链接继电器 不支持 public const byte DTarea = 6;//数据寄存器 DT public const byte LDarea = 7;//链接寄存器 LD 不支持 diff --git a/SCADA/dll/PanasonicDriver.dll b/SCADA/dll/PanasonicDriver.dll index a850f88..bbd2ffa 100644 Binary files a/SCADA/dll/PanasonicDriver.dll and b/SCADA/dll/PanasonicDriver.dll differ