From 53d582ad41d8450b21045b2d862a532ecc57a9ba Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期一, 26 五月 2025 17:29:57 +0800
Subject: [PATCH] 抽检移库基本测完,添加TCP模拟测试输送线产品下线的逻辑

---
 device/TcpClientHelper.cs |   83 +++++++++++++++++++++++++++++++++++++++--
 1 files changed, 79 insertions(+), 4 deletions(-)

diff --git a/device/TcpClientHelper.cs b/device/TcpClientHelper.cs
index 740887e..bfdcc2c 100644
--- a/device/TcpClientHelper.cs
+++ b/device/TcpClientHelper.cs
@@ -64,7 +64,6 @@
             lock (_linkLock) {
                 try {
 
-
                     // 鑻ocket瀛樺湪浣嗗疄闄呭凡鏂紑锛屽己鍒舵竻鐞�                     if (_clientSocket != null && (_clientSocket.Poll(0, SelectMode.SelectRead) && _clientSocket.Available == 0)) {
                         SafeCloseSocket();
@@ -72,13 +71,18 @@
 
                     // 鍘熸湁閫昏緫
                     if (_clientSocket != null && _clientSocket.Connected) {
-                        LogHelper.Info($"鐢垫宸茶繛鎺ワ紝鏃犻渶閲嶈繛锛孖P锛歿ip}锛岀鍙o細{port}");
-                        return false;
+                        //if (ip == _ip && port == _port) {
+                            LogHelper.Info($"浜х嚎宸茶繛鎺ワ紝鏃犻渶閲嶈繛锛孖P锛歿ip}锛岀鍙o細{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.Error($"浜х嚎閲嶈繛澶辫触锛孖P锛歿ip}锛岀鍙o細{port}锛屽紓甯革細{ex.Message}", ex);
                     return false;
                 }
             }
@@ -210,6 +214,77 @@
             }
         }
 
+        /// <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.Error($"璇讳骇绾挎墭鐩樹笅绾挎暟鎹け璐ワ紙鍙戠敓浜嗗紓甯革細{JsonConvert.SerializeObject(ex)}锛夛細{ex.Message}", 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瀛楄妭)锛屾墍浠ユ�瀛楄妭鏁版槸瀵勫瓨鍣ㄦ暟閲忕殑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缂栫爜浣滀负绀轰緥锛屽疄闄呭簲鏍规嵁璁惧鏂囨。纭畾缂栫爜鏂瑰紡
+            return Encoding.ASCII.GetString(bytes, 0, length);
+
+            // 濡傛灉鏄疷TF-8缂栫爜锛屼娇鐢ㄤ笅闈㈣繖琛屼唬鏇夸笂闈㈤偅琛�+            // return Encoding.UTF8.GetString(bytes, 0, length);
+        }
 
         public static bool WriteElevatorDownOk(byte[] sends) {
             try {

--
Gitblit v1.9.1