From 6c228c5935944a5673b081271f28fccfea85ea15 Mon Sep 17 00:00:00 2001 From: Gavin Date: Wed, 20 Dec 2017 22:14:13 +0800 Subject: [PATCH] update panasonic driver --- .../PanasonicDriver/PanasonicSerialReader.cs | 53 +++++++++--------- SCADA/dll/PanasonicDriver.dll | Bin 15872 -> 15872 bytes 2 files changed, 28 insertions(+), 25 deletions(-) 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 a850f88270fe103bcac33e32a46a56e20788f288..bbd2ffacd5e9db4b25c8369dfdb41ae406849fa2 100644 GIT binary patch delta 1759 zcmZXV3v5$W7{~wLIlaBN>*!iKwsl)!lfl}xW379z!2}vM9@)UT4TDYt2}Fltc+DqZ zJHcg>5hxcU5MnY6ngBjR0gWy?R0K5w1_>xA5KSQ(Gcd+PMdH`n<%01h{oU_(9^ZF* z&&j>9b+L6@d*$U7Q{tPvB7Z@A-~Dt#Cn{C8wgH8Du?Xr9P^l=Y)?c9KJvZB7TyvNL z3R><4W)uUYQ_bW=i>SBJdVRCK)l=cNK&;gOOZF}4R$NNZlU9A$?#biXR1>L$gv%MlT@s63QOAY3xXNuKt04vwr1!Sxk&p@_Y`<^Smk~v|T&1DPLL(R`y zQO-T?jN7H{E_*P4B!O^c_zD5*e{<|_T&_`W z^+(+6D@zs5a%BbW$k`m=f8^EzIjVG7e6vzL4wu6>I~8aFxHKLN;-vs}7&9NC5@;X+ zFP3&E_KZqeNlWx)|4reDAY^Hc%v;uZ%>8s9v&dG%Pi~qmiwMi8gn3c4i!gR63-!Y} z19crdrn4xOJ!wm7OW9&0Hi%_xJJLo|wI|r#F{~%ASnblc4MNDME$-BTt4b~prpXZNm6{FG5n*wy>E9GV3#*kr2D${m}Z0wkr?t7aC z#29pzrtLcI6CO19()I}*5@T_~upXSEK~aoef2uD@pQ*=02})9rjVqMXNih+p`5~vw zs4dq$|@WRrB<4x54DA|+U)Dl7R$+|omM+#ooU;(RdOnRADP#O zXXQNzh0|FcLARW4j;utVj6_YHi@2O=+9I)2Hkvk9c}>nX?FY+#ITy`F(m0me60!+h zBlZ+qGj|@o4@M8Qn%Z zDXH$D0eaW^Djh|c+{@f4_98+Tl)V_Bv)Y>!p&sQRv)}eD;?$``C{7pDBi!eOcrcldoEP=XVx|K=TpyP%C~x0c+d>k`SeDN2@P-x zfkuoG3g#GWMlQ!K@G#p^z+4C~^C665E=DnPDaJE9F@d=prOcJ^GrJIAK7(@RI#e)Y z2s1aLQbZN>qFPLX9hdl2xp9qI0M#-H>Tn3JGCCF)*{aj4IQS|Q+#(!8Bz_66mqGsWJeWE= zf`5g)o&)^ZIZzF>wl%aZdhF_twAnfT{o}(=Z@XF-NNlgxX!P}wZ%}Gh#sWrByf}w$ XCXUs3DdDL7ONzqkgsXm-;vw~4S2js2 delta 1785 zcmZXVdu$X{6o-H3-r3GRzQl8ghxt*v_c_7 zirWH`A_d$G8X%&n3F0dST@08Ylt_^9NFhAb)Djb#8q@$9{R550Gt+f~I>~-}zI*OH zcV_OLnXb;R&ewXR{bX5aw@2J>4t=nQ-qeYFwv|mln(h^O`m^K{zZUD;=;f4a%`lJo zOaUAGQ-KOEKzd>6v~Yu{uv3S=C#LbqY_|fjMFW(qe3>0^3zyQy{h~KaVzgy25FdL7 z_FRfH3KDATke$gvYJq~)dXA$x+n4=#1(#TV6li~ZyjvZ<5B(!YR*B})@`|8NNN&sL z%5M8(Gsg?zvisA3sDBSF)Aez&#ldJ-bY8}P=K1u0^8{va@g%eO`m>z%=Ni*ET#mdL zB<>0DX}i@xqAFdAf3A^gg0Q_&SogB|3!zalE!%pQ@v_=}#x;1bfAJ^zu>z-MDHC2{#5z8>L+B4H1t6 z*<-n5bXX*y)i-7j>0Ob6YX6vhLC3`txMI{CIgyEEzP-i_`E*HS z<2_ys!=lti{ZVpk@VdzP=i2D9GAwc}dsVw90+y}EZz9jK7Ld%hY!+hWWXt?Wky9*d z6j`#svL|gNve2@d%2PpEWa)yadRdI#0^5SGaORQXrwoFd5?3%h#PPc5owoaDg zN@UzFY?L#h6^>O|jjeK))w2k%$STWfutx@GTl&0sUCyzr#`d4@!MTZrMYamhaQglur&CsTEF*iMD_O;{m= zd+8vJs{5&rPDUM~bI6r_%!9n|s%Xe|1buW%d!MRkr>&paYySozYPD5Sh=$ZpxTRk^ zPu=tk_pG9HZICpipon*x2W3nz(+NL@$%#CSFbnV_vlzcH%kU`3e--@la-tF{Z(6=z z99P4^56B$2gbnje*1^qj0}`0cNMbHQ3Ue7!nakl}uEa!UE4<9L$Y8c3i`fAmb2D<7 zod__ykk8zKDI#b?4+_O(#9)Ybl^Y|>R7hnqGT>ka;AIw>EQgQd*=Bn!N;z&a+gnVo zz+!HB0o}|E*sILO7K|v{u^qP+qA~8qkTPJ#-