From f8d23dcf8d6501482db1a5180325194232afe96c Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期五, 18 七月 2025 17:30:09 +0800 Subject: [PATCH] 封装部分业务代码,继续优化日志打印流程 --- device/TcpClientHelper.cs | 146 ++++++++++++++++++++++++++++++++++++------------ 1 files changed, 110 insertions(+), 36 deletions(-) diff --git a/device/TcpClientHelper.cs b/device/TcpClientHelper.cs index 740887e..2981a95 100644 --- a/device/TcpClientHelper.cs +++ b/device/TcpClientHelper.cs @@ -26,15 +26,15 @@ public static bool Init(string ip, int port) { lock (_connectLock) { try { - // 鑻ユ鍦ㄨ繛鎺ヤ腑锛岀洿鎺ヨ繑鍥�+ // 鑻ユ鍦ㄨ繛鎺ヤ腑,鐩存帴杩斿洖 if (_isConnecting) { - LogHelper.Info("宸叉湁杩炴帴姝e湪灏濊瘯涓紝绂佹閲嶅鎿嶄綔"); + LogHelper.Info("宸叉湁杩炴帴姝e湪灏濊瘯涓�绂佹閲嶅鎿嶄綔"); return false; } _isConnecting = true; // 鏍囪涓鸿繛鎺ヤ腑 - // 閲婃斁鏃�Socket锛堜粎鍦ㄦ湭杩炴帴鏃讹級 + // 閲婃斁鏃�Socket (浠呭湪鏈繛鎺ユ椂) if (_clientSocket != null && !_clientSocket.Connected) { SafeCloseSocket(); } @@ -52,7 +52,7 @@ } catch (SocketException ex) { _isConnecting = false; - LogHelper.Error($"鍒濆鍖栬繛鎺ュけ璐� {ex.Message}", ex); + LogHelper.InfoEx(ex); return false; } } @@ -64,21 +64,25 @@ lock (_linkLock) { try { - - // 鑻ocket瀛樺湪浣嗗疄闄呭凡鏂紑锛屽己鍒舵竻鐞�+ // 鑻ocket瀛樺湪浣嗗疄闄呭凡鏂紑,寮哄埗娓呯悊 if (_clientSocket != null && (_clientSocket.Poll(0, SelectMode.SelectRead) && _clientSocket.Available == 0)) { SafeCloseSocket(); } // 鍘熸湁閫昏緫 if (_clientSocket != null && _clientSocket.Connected) { - LogHelper.Info($"鐢垫宸茶繛鎺ワ紝鏃犻渶閲嶈繛锛孖P锛歿ip}锛岀鍙o細{port}"); - return false; + //if (ip == _ip && port == _port) { + LogHelper.Info($"浜х嚎宸茶繛鎺�鏃犻渶閲嶈繛,IP:{ip},绔彛:{port}"); + return false; + //} + + //LogHelper.Info($"oldIP={_ip};newIP={ip};oldPort={_port};newPort={port}"); + //SafeCloseSocket(); } return Init(ip, port); } catch (Exception ex) { - LogHelper.Error($"鐢垫閲嶈繛澶辫触锛孖P锛歿ip}锛岀鍙o細{port}锛屽紓甯革細{ex.Message}", ex); + LogHelper.InfoEx(ex); return false; } } @@ -130,11 +134,11 @@ // 浠呭湪杩炴帴鎴愬姛鏃跺惎鍔ㄦ帴鏀� if (_clientSocket.Connected) { - LogHelper.Info($"鎴愬姛杩炴帴鍒版湇鍔$锛歿_ip}:{_port}"); + LogHelper.Info($"鎴愬姛杩炴帴鍒版湇鍔$:{_ip}:{_port}"); _clientSocket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, ReceiveCallback, null); } else { - LogHelper.Info("杩炴帴鏈垚鍔燂紝鍏抽棴Socket"); + LogHelper.Info("杩炴帴鏈垚鍔�鍏抽棴Socket"); SafeCloseSocket(); } } @@ -143,7 +147,7 @@ LogHelper.Info("杩炴帴杩囩▼涓璖ocket琚噴鏀�); } catch (Exception ex) { - LogHelper.Error($"杩炴帴澶辫触锛歿ex.Message}", ex); + LogHelper.InfoEx(ex); SafeCloseSocket(); } finally { @@ -162,16 +166,16 @@ _clientSocket.Close(); _clientSocket.Dispose(); - // 鏂紑鍚庯細娓呴櫎瀵瑰簲IP:Port鐨勬帴鏀舵暟鎹�+ // 鏂紑鍚�娓呴櫎瀵瑰簲IP:Port鐨勬帴鏀舵暟鎹� string key = $"{_ip}:{_port}"; if (_receivedDataQueue.ContainsKey(key)) { _receivedDataQueue.Remove(key); - LogHelper.Info($"宸叉竻鐞嗛槦鍒楁暟鎹紝Key锛歿key}"); + LogHelper.Info($"宸叉竻鐞嗛槦鍒楁暟鎹�Key:{key}"); } } } catch (Exception ex) { - LogHelper.Error($"閲婃斁Socket璧勬簮寮傚父锛歿ex.Message}", ex); + LogHelper.InfoEx(ex); } finally { _clientSocket = null; @@ -199,17 +203,87 @@ _clientSocket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, ReceiveCallback, null); } else { - // 鏈嶅姟绔富鍔ㄥ叧闂繛鎺ワ紝瑙﹀彂娓呯悊 + // 鏈嶅姟绔富鍔ㄥ叧闂繛鎺�瑙﹀彂娓呯悊 LogHelper.Info("杩炴帴宸茶鏈嶅姟绔叧闂�); SafeCloseSocket(); } } catch (Exception ex) { - LogHelper.Error($"鎺ユ敹鏁版嵁寮傚父锛歿ex.Message}", ex); + LogHelper.InfoEx(ex); SafeCloseSocket(); // 寮傚父鏃朵富鍔ㄥ叧闂� } } + /// <summary> + /// {\"item_code\":\"CG1001\",\"batch_no\":\"BN1001\",\"cntr_code\":\"CN2505111\"}<br/> + /// {"item_code":"CG1001","batch_no":"BN1001","cntr_code":"CN2505111"} + /// </summary> + /// <param name="read"></param> + /// <returns></returns> + public static bool TryReadProductionLine(out byte[] read) { + read = null; + try { + if (_clientSocket != null && _clientSocket?.Connected == true) { + if (!_receivedDataQueue.TryGetValue($"{_ip}:{_port}", out byte[] result)) { + LogHelper.Info($"璇讳骇绾挎墭鐩樹笅绾挎暟鎹け璐�); + //read = result; + return false; + } + LogHelper.Info($"璇讳骇绾挎墭鐩樹笅绾挎暟鎹垚鍔�{BitConverter.ToString(result)}"); + read = result; + return true; + } + else { + //LogHelper.Info($"_clientSocket={_clientSocket} connected={_clientSocket?.Connected}"); + Link(_ip, _port); + LogHelper.Info($"璇讳骇绾挎墭鐩樹笅绾挎暟鎹け璐�(鏈繛鎺� ,鍑嗗閲嶈繛"); + return false; + } + } + catch (Exception ex) { + LogHelper.InfoEx(ex); + return false; + /* 寮傚父澶勭悊 */ + } + + //return false; + } + + /// <summary> + /// 灏哅odbus瀵勫瓨鍣ㄦ暟缁勮浆鎹负瀛楄妭鏁扮粍 + /// </summary> + /// <param name="registers">Modbus瀵勫瓨鍣ㄦ暟缁�/param> + /// <returns>瀛楄妭鏁扮粍</returns> + public static byte[] ConvertRegistersToBytes(ushort[] registers) { + // 姣忎釜瀵勫瓨鍣ㄦ槸16浣�2瀛楄妭),鎵�互鎬诲瓧鑺傛暟鏄瘎瀛樺櫒鏁伴噺鐨�鍊�+ byte[] bytes = new byte[registers.Length * 2]; + + for (int i = 0; i < registers.Length; i++) { + // Modbus浣跨敤澶х搴�楂樹綅瀛楄妭鍦ㄥ墠 + bytes[i * 2] = (byte)(registers[i] >> 8); // 楂樹綅瀛楄妭 + bytes[i * 2 + 1] = (byte)(registers[i] & 0xFF); // 浣庝綅瀛楄妭 + } + + return bytes; + } + + /// <summary> + /// 灏嗗瓧鑺傛暟缁勮浆鎹负瀛楃涓�+ /// </summary> + /// <param name="bytes">瀛楄妭鏁扮粍</param> + /// <returns>杞崲鍚庣殑瀛楃涓�/returns> + public static string ConvertBytesToString(byte[] bytes) { + // 鏌ユ壘绗竴涓�x00瀛楄妭(瀛楃涓茬粨鏉熺)鐨勪綅缃�+ int length = Array.IndexOf(bytes, (byte)0); + if (length < 0) length = bytes.Length; // 濡傛灉娌℃湁缁撴潫绗�浣跨敤鍏ㄩ儴瀛楄妭 + + // 鏍规嵁璁惧浣跨敤鐨勭紪鐮佽浆鎹�甯歌鐨勬湁ASCII鎴朥TF-8) + // 杩欓噷浣跨敤ASCII缂栫爜浣滀负绀轰緥,瀹為檯搴旀牴鎹澶囨枃妗g‘瀹氱紪鐮佹柟寮�+ return Encoding.ASCII.GetString(bytes, 0, length); + + // 濡傛灉鏄疷TF-8缂栫爜,浣跨敤涓嬮潰杩欒浠f浛涓婇潰閭h + // return Encoding.UTF8.GetString(bytes, 0, length); + } public static bool WriteElevatorDownOk(byte[] sends) { try { @@ -219,12 +293,12 @@ } else { Link(_ip, _port); - LogHelper.Info($"鍐欑數姊叆璐ф暟鎹け璐ワ紙鏈繛鎺ワ級锛歿Encoding.UTF8.GetString(sends)}"); + LogHelper.Info($"鍐欑數姊叆璐ф暟鎹け璐�(鏈繛鎺� :{Encoding.UTF8.GetString(sends)}"); return false; } } catch (Exception ex) { - LogHelper.Error($"鍐欑數姊叆璐ф暟鎹け璐ワ紙鍙戦�浜嗗紓甯革級锛歿ex.Message}", ex); + LogHelper.InfoEx(ex); return false; } } @@ -233,17 +307,17 @@ try { if (_clientSocket != null && _clientSocket?.Connected == true) { _receivedDataQueue.TryGetValue($"{_ip}:{_port}", out byte[] result); - LogHelper.Info($"璇荤數姊嚭璐ф暟鎹垚鍔燂細{BitConverter.ToString(result)}"); + LogHelper.Info($"璇荤數姊嚭璐ф暟鎹垚鍔�{BitConverter.ToString(result)}"); return result; } else { Link(_ip, _port); - LogHelper.Info($"璇荤數姊嚭璐ф暟鎹け璐ワ紙鏈繛鎺ワ級锛屽噯澶囬噸杩�); + LogHelper.Info($"璇荤數姊嚭璐ф暟鎹け璐�(鏈繛鎺� ,鍑嗗閲嶈繛"); return null; } } catch (Exception ex) { - LogHelper.Error($"璇荤數姊嚭璐ф暟鎹け璐ワ紙鍙戠敓浜嗗紓甯革細{JsonConvert.SerializeObject(ex)}锛夛細{ex.Message}", ex); + LogHelper.InfoEx(ex); return null; /* 寮傚父澶勭悊 */ } @@ -251,20 +325,20 @@ public static string ChekElevator() { try { - var res = "璇诲彇鐢垫鏁版嵁鐨刴odel锛岀储寮曚粠1寮�锛屾弧瓒充互涓嬫潯浠舵墠鑳藉彂浠诲姟 \r\n " + - "瀛楁锛宨sNormal 锛屾槸鍚︽甯告ā寮忥紝1锛氭甯告ā寮忥紝绗�涓狟yte鍙充晶绗竴浣岯it \r\n" + - "瀛楁锛宨sValid锛屽綋鍓嶄綅缃槸鍚︽湁鏁堬紝1锛氭湁鏁堬紝0锛氫笉鐢ㄧ锛岀9涓狟yte鍙充晶绗竴浣岯it \r\n" + - "瀛楁锛宺unMode锛岀數姊繍琛屾ā寮忥紝9=绌洪棽娉婂仠锛�=鑷姩杩愯锛岀10涓狟yte\r\n" + - "瀛楁锛宨sLock_1_Out,涓�眰鍑哄彛鏄惁鍗犵敤锛� = 鍗犵敤锛岀14涓狟yte鍙充晶绗竴浣岯it\r\n" + - "瀛楁锛宨sLock_2_Out锛屼簩灞傚嚭鍙f槸鍚﹀崰鐢紝1 = 鍗犵敤锛岀14涓狟yte鍙充晶绗簩浣岯it\r\n" + - "瀛楁锛宼askNO锛屼换鍔″彿\r\n" + - "鍒ゆ柇鐢垫鏄惁绗﹀悎2妤煎埌1妤兼惉閫佹潯浠讹細isNormal 涓�(runMode == 9 鎴�runMode == 7) 涓�锛乮sLock_1_Out \r\n" + - "鍒ゆ柇鐢垫鏄惁绗﹀悎1妤煎埌鎴愬搧搴撳尯鏉′欢锛歩sNormal 涓�(runMode == 9 鎴�runMode == 7) 涓�isLock_1_Out\r\n"; + var res = "璇诲彇鐢垫鏁版嵁鐨刴odel,绱㈠紩浠�寮�,婊¤冻浠ヤ笅鏉′欢鎵嶈兘鍙戜换鍔�\r\n " + + "瀛楁,isNormal ,鏄惁姝e父妯″紡,1:姝e父妯″紡,绗�涓狟yte鍙充晶绗竴浣岯it \r\n" + + "瀛楁,isValid,褰撳墠浣嶇疆鏄惁鏈夋晥,1:鏈夋晥,0:涓嶇敤绠�绗�涓狟yte鍙充晶绗竴浣岯it \r\n" + + "瀛楁,runMode,鐢垫杩愯妯″紡,9=绌洪棽娉婂仠,7=鑷姩杩愯,绗�0涓狟yte\r\n" + + "瀛楁,isLock_1_Out,涓�眰鍑哄彛鏄惁鍗犵敤,1 = 鍗犵敤,绗�4涓狟yte鍙充晶绗竴浣岯it\r\n" + + "瀛楁,isLock_2_Out,浜屽眰鍑哄彛鏄惁鍗犵敤,1 = 鍗犵敤,绗�4涓狟yte鍙充晶绗簩浣岯it\r\n" + + "瀛楁,taskNO,浠诲姟鍙穃r\n" + + "鍒ゆ柇鐢垫鏄惁绗﹀悎2妤煎埌1妤兼惉閫佹潯浠�isNormal 涓�(runMode == 9 鎴�runMode == 7) 涓�!isLock_1_Out \r\n" + + "鍒ゆ柇鐢垫鏄惁绗﹀悎1妤煎埌鎴愬搧搴撳尯鏉′欢:isNormal 涓�(runMode == 9 鎴�runMode == 7) 涓�isLock_1_Out\r\n"; var isRead = ReadElevatorOutOk(); var log = BitConverter.ToString(isRead); - res += "璇诲彇鍒扮殑鐢垫byte鏁扮粍锛� + log + "\r\n"; + res += "璇诲彇鍒扮殑鐢垫byte鏁扮粍:" + log + "\r\n"; //if (isRead != null && isRead.Length >= 14) { // var elevatorReadInfo = new ElevatorReadInfo() { // isNormal = (isRead[6] & 1) == 1, @@ -278,14 +352,14 @@ // var res1 = elevatorReadInfo.is2To1Ok(); - // res += "鍒ゆ柇鐢垫鏄惁绗﹀悎2妤煎埌1妤兼惉閫佹潯浠讹紝濡傛灉绗﹀悎鍒欒繑鍥瀟rue锛岀粨鏋� + res1 + "\r\n"; + // res += "鍒ゆ柇鐢垫鏄惁绗﹀悎2妤煎埌1妤兼惉閫佹潯浠�濡傛灉绗﹀悎鍒欒繑鍥瀟rue,缁撴灉" + res1 + "\r\n"; // var res2 = elevatorReadInfo.is1ToOk(); - // res += "鍒ゆ柇鐢垫鏄惁绗﹀悎1妤煎埌鎴愬搧搴撳尯鏉′欢锛屽鏋滅鍚堝垯杩斿洖true锛岀粨鏋� + res2 + "\r\n"; + // res += "鍒ゆ柇鐢垫鏄惁绗﹀悎1妤煎埌鎴愬搧搴撳尯鏉′欢,濡傛灉绗﹀悎鍒欒繑鍥瀟rue,缁撴灉" + res2 + "\r\n"; //} //else { - // return "璇诲彇鐢垫鐘舵�澶辫触锛宐yte鏁扮粍瑕佹眰澶т簬绛変簬14涓笖涓嶄负绌�; + // return "璇诲彇鐢垫鐘舵�澶辫触,byte鏁扮粍瑕佹眰澶т簬绛変簬14涓笖涓嶄负绌�; //} return res; } @@ -315,7 +389,7 @@ return false; } catch (Exception ex) { - LogHelper.Error($"鍒ゆ柇鐢垫鏄惁鏂數锛堝彂鐢熶簡寮傚父锛歿JsonConvert.SerializeObject(ex)}锛夛細{ex.Message}", ex); + LogHelper.InfoEx(ex); return false; } } -- Gitblit v1.9.1