From 2129204f61c29f0c17fb5cc93262b5b4837b891b Mon Sep 17 00:00:00 2001 From: Gavin <32365296+GavinYellow@users.noreply.github.com> Date: Thu, 1 Feb 2018 15:58:21 +0800 Subject: [PATCH] update modbus tcp --- SCADA/Program/.vs/DataExchange/v15/.suo | Bin 361984 -> 453632 bytes .../v15/Server/sqlite3/storage.ide | Bin 2621440 -> 2621440 bytes .../.vs/DataExchange/v15/sqlite3/storage.ide | Bin 3747840 -> 3747840 bytes SCADA/Program/ModbusDriver/ModbusRTUDriver.cs | 2 +- SCADA/Program/ModbusDriver/ModbusTCPDriver.cs | 41 ++++-------------- SCADA/dll/ModbusDriver.dll | Bin 24064 -> 24064 bytes 6 files changed, 10 insertions(+), 33 deletions(-) diff --git a/SCADA/Program/.vs/DataExchange/v15/.suo b/SCADA/Program/.vs/DataExchange/v15/.suo index b135fc59069848919eeeeee8612aa4e9216eeefe..ee1138cbbfac51d2e169f4cf5dc0fb2b13054d67 100644 GIT binary patch delta 4848 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 Ov5|PGR7<#T#`y=kZ9P>0 delta 3287 zcmeI!dr(x@9S89J-Fpvg0C~wvSaDgDL_`XX(-IqTi$)m(WK~LNr=uao#!!ok?plqH zy_#1?(ggOHJxSWhI83sjNer-tYm8~ukQ!sGL1PuEHN-SEO)NnMGSe2J-?KnU()5r1 z)BMx3^V##d_nf`Id(Pdfcc!&!kUo|?PdXHwIL+4wSZFGhYDWh~ZA5w4jM4^=dM*SisqMkh7mV$g5q(Tt$ zPakiO9naH{e+F?d1v23VMv^~M<`ZV3T~06+`8D_j#=2P!eG4kHVJ>9A#0mUR!WL@@ z8cLxI?gR&{fR(TccuC@Xtx6UiOe|R9M4=8g!X|Km8#cqwVGC@9`(YbwhaIpJJfMS& zn0}-CKSeA&GZZm-B^r*7hDeZCI}x=A)V~@vdAz(Z88w;Tgxm%bQJd(W$R~mzqbA3e z=}kloQJXHq_NAzeb&pN(4MnXz!cI*7(2>TvSHD#8M!U$x-O(P}#E0;`k-K9?|E;B- z&rgWuu?cxmG9q#yxlVXV!lfypQRT=`#`6=VYU4LP&n%n9Z~pwy?9NcXyyg5{VoAUn z-%IUD#VRjeeAsJoQC+}osVA=Aim9@zDTceVJ(2Pj%3F!_#C1yK33GbGvrwr#p#=Uh zeJhcJyJx&3=4Db2cif&3(5*VP=M@t#&a346^6&O89i%(?&{7YTa`!S%q+GIcuOjh9 zw(oKKs(2CmLoJK1UTzNPHl3Q16!R|h?v_WGBP_*xP^gDT;g|3jJPr-e2wvc@7oGqg z2zU~nf~VnEz}H7uJ9QdIbT3|mMfal=_co7c5OVA2!&<+7O1TRAe7;qR~fg|uL z9EI25H}ES|j;jEfc3~gxh6mt5cnBVbM?kJfZnayefiJWt(^39?`(jTs zI$B^q9DwKH1&{|HME(-ALL0P001m;+&;bSD?L%))DPZNgm6E{NQ<>|%SmYivi=H!WAZ#X-6~aIAO{HIcA z4cl3&NZrA*{M#5=|J!i??0*^VZ23ovs~)6Az1ttAjQA@^_ity!?N+<6?_k0IZ}o3@ ztIJ&=|4!vrpV&F$Tit)26j7Z{U$;=b1+K|UKQgrRF$9vxpGM0>@I2)io4aWbbqvrt zgqQ9C7J3i84NjSSGTR6+`SGw9QR&k1G_L!4y`d@-B}io=anChTXy*R^!&1s!Y|UwRoxgQE2!U@m4yU?X$9qIg`6w zc+=d1!|pRVO>5-DIBgR?xhQYKEE{LAMQY`{5#j+WTjMh= znw*SgWnfh%nObVb}1S%60tf=`8HE%tbAt zv0tnAZ(t;1(peG@t_~BGb!?`vJDHt7V|$XX%SbVtbu1RAfA#IAV_3x+S6pmF*xgL$ Z&U?ee@_sEvT;9xV%|SP#j;mpI`X}mi(@g*X diff --git a/SCADA/Program/.vs/DataExchange/v15/Server/sqlite3/storage.ide b/SCADA/Program/.vs/DataExchange/v15/Server/sqlite3/storage.ide index cbf7e559a6c5f259eb9380658bf4821fffd9504f..4f525f0dbdbe3741a8360efc090127abaab4336d 100644 GIT binary patch delta 11382 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 R-u`-Oa7%;TkRJTT_CH;47JvW% delta 18323 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 delta 30503 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 O6~`K_>bb0Q?f)NvU9~Cz diff --git a/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs b/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs index e7d87f1..74b85fa 100644 --- a/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs +++ b/SCADA/Program/ModbusDriver/ModbusRTUDriver.cs @@ -490,7 +490,7 @@ namespace ModbusDriver while (numBytesRead != frameBytes.Length) numBytesRead += _serialPort.Read(frameBytes, numBytesRead, frameBytes.Length - numBytesRead); Array.Copy(frameBytes, 1, data, 0, data.Length); - Thread.Sleep(10); + Thread.Sleep(20); return data; } else diff --git a/SCADA/Program/ModbusDriver/ModbusTCPDriver.cs b/SCADA/Program/ModbusDriver/ModbusTCPDriver.cs index ce91b08..cdabe91 100644 --- a/SCADA/Program/ModbusDriver/ModbusTCPDriver.cs +++ b/SCADA/Program/ModbusDriver/ModbusTCPDriver.cs @@ -358,43 +358,13 @@ namespace ModbusDriver _grps.Clear(); } - internal 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; - } + internal void CallException(int id, byte function, byte exception) { if (tcpSynCl == null) return; if (OnError != null) - OnError(this, new IOErrorEventArgs(GetErrorString(exception))); + OnError(this, new IOErrorEventArgs(Modbus.GetErrorString(exception))); } public byte[] ReadBytes(DeviceAddress address, ushort size) @@ -511,42 +481,49 @@ namespace ModbusDriver public int WriteBits(DeviceAddress address, byte bits) { + if (address.DBNumber != 3) return -1; var data = WriteSingleRegister(address.Area, address.Start, new byte[] { bits }); return data == null ? -1 : 0; } public int WriteInt16(DeviceAddress address, short value) { + if (address.DBNumber != 3) return -1; var data = WriteSingleRegister(address.Area, address.Start, BitConverter.GetBytes(IPAddress.HostToNetworkOrder(value))); return data == null ? -1 : 0; } public int WriteUInt16(DeviceAddress address, ushort value) { + if (address.DBNumber != 3) return -1; var data = WriteSingleRegister(address.Area, address.Start, BitConverter.GetBytes((ushort)IPAddress.HostToNetworkOrder((short)value))); return data == null ? -1 : 0; } public int WriteUInt32(DeviceAddress address, uint value) { + if (address.DBNumber != 3) return -1; var data = WriteMultipleRegister(address.Area, address.Start, BitConverter.GetBytes((uint)IPAddress.HostToNetworkOrder((int)value))); return data == null ? -1 : 0; } public int WriteInt32(DeviceAddress address, int value) { + if (address.DBNumber != 3) return -1; var data = WriteMultipleRegister(address.Area, address.Start, BitConverter.GetBytes(IPAddress.HostToNetworkOrder(value))); return data == null ? -1 : 0; } public int WriteFloat(DeviceAddress address, float value) { + if (address.DBNumber != 3) return -1; var data = WriteMultipleRegister(address.Area, address.Start, BitConverter.GetBytes((int)value)); return data == null ? -1 : 0; } public int WriteString(DeviceAddress address, string str) { + if (address.DBNumber != 3) return -1; var data = WriteMultipleRegister(address.Area, address.Start, Encoding.ASCII.GetBytes(str)); return data == null ? -1 : 0; } diff --git a/SCADA/dll/ModbusDriver.dll b/SCADA/dll/ModbusDriver.dll index e5d498e21bc4079b7f66bf1e1f4d86082e3db5fc..6907cbfb9c7c61c64d2d01e6fa7d3b3fa52605cb 100644 GIT binary patch delta 2638 zcma);eQZ)Lp6+vsqfajtLlCv9wtWGuoHy+E!kFk)>@(LE;+jYu{-JJCdqG}tva$|wi36qp@%Mr6BtI`oERD?uLW96-^nNWsadY3cuI`Ow37{vRt~{q)Ycr0~ z512{0&||HSlNB&Ud|AE_S(vw(=oLD=bZn&~hYnfc^&xYOkHL)^O=;gY&e5XjfUlG6-l6IB zz;^jYG&pmBdvMgw-SQ^=L-JBIm>QugwH^OrXLe!V8EuK z>=yp9LAPXc`0;QKU6ZyJv|QPHU1pPn6+vO&|D5Q=$Sjac9gt|6&oxZcQ0{nOJ~v zO;3BD5D(*`rig!yNZ_ufZr`(FF$xzrQ}$w`s69ni`Q3CAGM! z@rG}Yr~@8$#*FcUVj1F^viV{8tFj<_L;j&G813ed;rv3UPWav>`eczq>I$xesdh1K zs!+KyRabd1Z-6)Af?gp*5M8&){(|-&^zkyFQDFbdsc8%)0 z#ojW6TvFjr9TxA2=aIeC$tn+Yqfe9aKo72JQXbffgxYMWUwL2~Ue%;L(2Kj8ln46I zr1mwcR37*yrZkZU#CGJ?IcxJ$zzgAfp4Qnlk&g-PHR#g7=(M7 zQ>i?VMpBdVz)p;7QXbfizi3h(7((T8r|*Vu!yd60X^qMQ-@|21iCe|E^eVZV?3 z2D{O#ZrFop*Oc&g^AT)uh)uKKixKSClwo`%Mj_9|=gZ&3g>@s|ZdkPoPr6c#?mNtH zbhra3!C|+7G8}bt)Zk^(I`oq^;5(!%ks@uv4$>rck+$Hwr0v*4x(@qDJM6AbyK9r( zwZ-o0vAg>0u9q-Ol><0Hn#MsjbT>vx_d=5H$00hE38qfvI6LZ&U>CB@a`^F(ryR2p zA`N00X$Xy^Q9Mn$(AFikF1PcIc#iVTc4n=u&!L|(&*M00FHU)uV;Dtdsta#owb@0` zY3?GeF(>WJB*nevB|E-E@vwQ@j&D=^L(|JtmzND=(k!v#5{gfo>zSm}UC)jn&m1>Y zeBRaxuHp%<^5+98zG18BhQOG7p|XoTD&MaxNZk=Yr}1~v4qKmOpHh6*{{`t4L+M(d z(orAt04D;1^kc7|w8cM%^a|8!rQPeqC-CJ=Cx7qEdwVPWU*rlCbLekWCgzeF^k{U! z#0Gi>Wn!Zot+ME0yrQ~lPLKN^%7K*s^3@|{^?b{!p7B8DkJf!y^@FD0uGm@BF=YI7 zL&bk; zI-0217YNnNv@W)qEaO%EcTaVl?2~_Nd&n5?vp#FfVzRES)5>W7%w?QUShLpsjg7`V F{{k}r81n!C delta 2533 zcmZXWeQ;FO8OEP;bI;kk9|TBX3A3RjWRuOZVTlmU2a!eyBuLOTOEicdpx9&$Q-UE( z6wEG?hES+YJfe)EBZ@`iD+w)Uh){%Z#0BvF|zejA5ob zv(LW2_dV}>PVPQ;Z!%|C<_sGi%2~a+d*r}8YeDbGtGBcFC1VkOxCbbd#a4yfz#>+8 zn|zG*&$WA@U(KWzI0CDHgK>b#58A4;32Wap=F5IOeW#zb%3DJZlKw7KLHc>9pS5Ox zQrK+;EPP1K^MIMik?+p>(`uspN*mSmS+26yu2R6Bb(Q%H zmfC8tjL-U!{G#+AtCGECah8(D%BsBe`9MiOFe*PQ%P-Cp0actbZAqM_>obFfmo&Al zX{66_;&XC#WGU|=l5$;S4y(#O5Se4KYWZliBv!{6UJooM{mi?9R5~}4zUJIQn(?=i zuC#v77((n0`CfGYjdxP!CC|O2X;w{|($!CdT666LT2ECqCqc&pCcVdSzZ_Y(sAg^fU6x6-|TA8LNZmAW*E<4>}VTLkVBC3z zPY1$kS+DLxnL)z?aN+4B~khtuR(MWxPLxx5Go zgJKcBGxU+KBrO)BzS12t-@jN?V!%)?UnZ`@3x@9Y zHi;!TXDH%Nh$>t$^iyBExB=no+$lrYBx;Z_ltQPd!)`+r=oa-DHMACeBDx$G41Vg% zhz5O&slWGmJ|tG4l5RLf1$P1$7^ z)*DiGc@#$sDZ8X`!H}}c9t2jpeabF-(QHWB`FB%70N zv@bKiwZRS`iecNLXTl+yqaF{DHed&7BX*KDqmQ%&kB}y?n{++;N!yVjy$g?#Zqi*_ zbXTYD+N!&{b=MBv)rSFExf_F|84RWAV*o!V9l}AS5pqS)iNlWq zPaOFuCJm8k<0!!z(ik?9F4ekB>q?zpi_Mfz>dZ#1_v2y8bkT2o96dPcSqZwjPCA8` zkZ@82_c?n>>zr3~<`s&!I}{m`;J6djag^dWoXt$qaW}JP z5prIzRD4$JQLf^nT;)Fvs2J0fIyU{nKP_2JN^Y$wN`EbYE!MwCH)*|YE zP>(4G9k40WDI>L6dP@Jbwsv;P{zkcy@>8#rjMgp4uB-Fs&A2-me6sh%$rXq8-S%el zktcqY?QE&Bv&R!7mTecY+-!C7dsadJeBG(KEqWI+;B*hY+kn<&V=}t!&n>Sf53PIq z(%;Jae%o>>yQR%xdH>!qwOd{<#YH2