Esempio n. 1
0
 /// <summary>
 /// 回应数据
 /// </summary>
 /// <param name="msg"></param>
 public void BackMsg(Message msg)
 {
     if (msg == null)
     {
         return;
     }
     lock (this)
     {
         try
         {
             isbuzy = true;
             if ((System.DateTime.Now - LastSend).TotalMilliseconds < 6)
             {
                 System.Threading.Thread.Sleep(6);//如果连续发送需要间隔6毫秒
             }
             if (msg is ITransMsg)
             {
                 (msg as ITransMsg).TransID = LastReciveTransID;
             }
             byte[] data = msg.GetMsgData();
             OnIODebug?.Invoke(msg.ToString(), data);
             backMsg  = null;
             LastSend = System.DateTime.Now;
             serialPort.Write(data, 0, data.Length);
         }
         catch (Exception ex)
         {
             throw ex;
         }
         finally
         {
             isbuzy = false;
         }
     }
 }
Esempio n. 2
0
 /// <summary>
 /// 发送并等待回应
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="msg"></param>
 /// <param name="timeout"></param>
 /// <returns></returns>
 public T SendAndBackMsg <T>(Message msg, int timeout) where T : Message
 {
     lock (this)
     {
         try
         {
             isbuzy = true;
             if ((System.DateTime.Now - LastSend).TotalMilliseconds < 6)
             {
                 System.Threading.Thread.Sleep(6);//如果连续发送需要间隔6毫秒
             }
             if (msg is ITransMsg && !msg.MsgDataPacked)
             {
                 (msg as ITransMsg).TransID = GetNextTransID();
             }
             byte[] data = msg.GetMsgData();
             OnIODebug?.Invoke("发送\r\n" + msg.ToString(), data);
             backMsg  = null;
             LastSend = System.DateTime.Now;
             serialPort.Write(data, 0, data.Length);
             resetEvent.Reset();
             if (!resetEvent.WaitOne(timeout))
             {
                 throw new Exception("接收数据超时");
             }
             if (!(backMsg is T))
             {
                 throw new Exception("回应的数据与预期不一致");
             }
             return(backMsg as T);
         }
         catch (Exception ex)
         {
             throw ex;
         }
         finally
         {
             isbuzy = false;
         }
     }
 }