Shun 2 rokov pred
rodič
commit
ffd10aee91

+ 4 - 52
src/YSAI.DAQ/YSAI.Core/serialport/SerialPortOperate.cs

@@ -8,6 +8,7 @@ using System.Text;
 using static YSAI.Core.data.OperateResult;
 using YSAI.Core.@enum;
 using YSAI.Core.@interface;
+using System;
 
 namespace YSAI.Core.serialport
 {
@@ -68,11 +69,6 @@ namespace YSAI.Core.serialport
         /// </summary>
         private SerialPort serialPort;
 
-        /// <summary>
-        /// 定时器
-        /// </summary>
-        private System.Timers.Timer ComResponseDataTimer = new System.Timers.Timer();
-
         /// <summary>
         /// 响应状态
         /// </summary>
@@ -222,7 +218,7 @@ namespace YSAI.Core.serialport
         /// <summary>
         /// 线程安全字典
         /// </summary>
-        private ConcurrentQueue<byte> Data_buffer = new ConcurrentQueue<byte>();
+        private ConcurrentQueue<byte[]> Data_buffer = new ConcurrentQueue<byte[]>();
 
         /// <summary>
         /// 响应数据
@@ -240,11 +236,8 @@ namespace YSAI.Core.serialport
                         {
                             byte[] Byte = new byte[BufSize];
                             serialPort.Read(Byte, 0, BufSize);
-                            //沾包处理
-                            foreach (var item in Byte)
-                            {
-                                Data_buffer.Enqueue(item);
-                            }
+                            OnEventHandler?.Invoke(this, new EventResult(true, $"接收数据成功", ByteTool.ByteTrimEnd(Byte), ResultType.Bytes));
+
                         }
                         else
                         {
@@ -259,41 +252,6 @@ namespace YSAI.Core.serialport
             }
         }
 
-        /// <summary>
-        /// 用于判断  是否还在处理
-        /// </summary>
-        bool Busy = false;
-        //数据粘包处理定时器
-        private void ResponseDataTimer_ElapsedEventHandler(object sender, EventArgs e)
-        {
-            try
-            {
-                if (Busy)
-                {
-                    return;
-                }
-                Busy = true;
-                List<byte> buffer = new List<byte>();
-                if (Data_buffer.Count > 0)
-                {
-                    foreach (var item in Data_buffer)
-                    {
-                        buffer.Add(item);
-                    }
-
-                    OnEventHandler?.Invoke(this, new EventResult(true, $"[ {SerialPortData.Steps.粘包处理} ]成功", buffer.ToArray(), ResultType.Bytes));
-
-                    byte result;
-                    while (Data_buffer.TryDequeue(out result)) { }
-                }
-                Busy = false;
-            }
-            catch (Exception ex)
-            {
-                OnEventHandler?.Invoke(this, new EventResult(false, $"[ {SerialPortData.Steps.粘包处理} ]异常:{ex.Message}"));
-            }
-        }
-
         /// <summary>
         /// 获取可用的串口集合
         /// </summary>
@@ -336,11 +294,6 @@ namespace YSAI.Core.serialport
                 //起线程,获取数据
                 Task.Factory.StartNew(()=> ResponseData());
 
-                //启动定时器,解决数据粘包问题
-                ComResponseDataTimer.Interval = 100;   //设置毫秒间隔
-                ComResponseDataTimer.Start();  //启动
-                ComResponseDataTimer.Elapsed += ResponseDataTimer_ElapsedEventHandler;  //绑定事件
-
                 return Break("On", true);
             }
             catch (Exception ex)
@@ -364,7 +317,6 @@ namespace YSAI.Core.serialport
                         serialPort.Close();
                         serialPort.Dispose();
                         ResponseState = false;
-                        ComResponseDataTimer.Stop();
                         return Break("Off", true);
                     }
                 }

+ 10 - 0
src/YSAI.DAQ/YSAI.Core/socket/tcp/client/SocketTcpClientData.cs

@@ -41,6 +41,16 @@ namespace YSAI.Core.socket.tcp.client
             /// </summary>
             public bool IsInterruptReconnection { get; set; }
 
+            /// <summary>
+            /// 连接超时时间
+            /// </summary>
+            public int ConnectTimeout { get; set; } = 1000;
+
+            /// <summary>
+            /// 发送超时时间
+            /// </summary>
+            public int SendTimeout { get; set; } = 1000;
+
             /// <summary>
             /// 重写基类中的Equals方法
             /// </summary>

+ 7 - 3
src/YSAI.DAQ/YSAI.Core/socket/tcp/client/SocketTcpClientOperate.cs

@@ -186,7 +186,7 @@ namespace YSAI.Core.socket.tcp.client
 
         public Task<OperateResult> OnAsync()
         {
-            throw new NotImplementedException();
+            return Task.Run(() => On());
         }
 
         public OperateResult On()
@@ -200,8 +200,12 @@ namespace YSAI.Core.socket.tcp.client
                     ServerDataMonitorSwitch = new CancellationTokenSource();
                     Client_SK = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                     IPEndPoint IpPort = new IPEndPoint(IPAddress.Parse(basics.ServerIP), basics.ServerPort);
-                    Client_SK.SendTimeout = 1000;
-                    Client_SK.Connect(IpPort);
+                    Client_SK.SendTimeout = basics.SendTimeout;
+                    if (!Client_SK.ConnectAsync(IpPort).Wait(basics.ConnectTimeout))
+                    {
+                        Off();
+                        return Break("On", false, "连接超时");
+                    }
                     if (basics.IsInterruptReconnection)
                     {
                         Task.Run(() => { ThreadMonitorConnectState(); });

+ 6 - 3
src/YSAI.DAQ/YSAI.Core/socket/tcpClient/Operate.cs

@@ -215,9 +215,12 @@ namespace YSAI.Core.socket.tcpClient
                     ServerDataMonitorSwitch = new CancellationTokenSource();
                     Client_SK = new TcpClient();
                     IPEndPoint IpPort = new IPEndPoint(IPAddress.Parse(basics.ServerIP), basics.ServerPort);
-
-                    Client_SK.SendTimeout = 1000;
-                    Client_SK.Connect(IpPort);
+                    Client_SK.SendTimeout = basics.SendTimeout;
+                    if (!Client_SK.ConnectAsync(IpPort).Wait(basics.ConnectTimeout))
+                    {
+                        Off();
+                        return Break("On", false, "连接超时");
+                    }
                     if (Client_SK.Connected)
                     {
                         networkStream = Client_SK.GetStream();