| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 | 
							- using System;
 
- using System.IO.Ports;
 
- using Aitex.Core.RT.Log;
 
- namespace MECF.Framework.RT.EquipmentLibrary.HardwareUnits.LoadPorts
 
- {  
 
-     public class AsyncSerial : ICommunication, IDisposable
 
-     {
 
-         public delegate void ErrorHandler(ErrorEventArgs args);
 
-         public event ErrorHandler OnErrorHappened;
 
-         
 
-         public delegate void MessageHandler(string message);
 
-         public event MessageHandler OnDataChanged;
 
-         private static Object _locker = new Object();
 
-         private SerialPort _port;
 
-         private string _buff = "";
 
-         
 
-         public AsyncSerial(string name, int baudRate, int dataBits, Parity parity = Parity.None, StopBits stopBits = StopBits.One, string newline ="\r")
 
-         {
 
-             _port = new SerialPort();
 
-             _port.PortName = name;
 
-             _port.BaudRate = baudRate;
 
-             _port.DataBits = dataBits;
 
-             _port.Parity   = parity;
 
-             _port.StopBits = stopBits;
 
-             _port.RtsEnable = false;
 
-             _port.DtrEnable = false;
 
-             _port.ReadTimeout  = 1000;
 
-             _port.WriteTimeout = 1000;
 
-             _port.NewLine = newline;
 
-             _port.Handshake = Handshake.None;
 
-             _port.DataReceived  += new SerialDataReceivedEventHandler(DataReceived);
 
-             _port.ErrorReceived += new SerialErrorReceivedEventHandler(ErrorReceived);
 
-         }
 
-         public void Dispose()
 
-         {
 
-             Close();
 
-         }
 
-         public bool Open()
 
-         {
 
-             if (_port.IsOpen)  Close();
 
-             try
 
-             {
 
-                 _port.Open();
 
-                 _port.DiscardInBuffer();
 
-                 _port.DiscardOutBuffer();
 
-                 _buff = "";
 
-             }
 
-             catch (Exception e)
 
-             {
 
-                // LOG.Write($"Port open failed, {e.Message}");
 
-                 string reason = _port.PortName + " port open failed,please check configuration。" + e.Message;
 
-                 //OnErrorHappened(new ErrorEventArgs(reason));
 
-                 LOG.Write(reason);
 
-                 return false;
 
-             }
 
-             return true;
 
-         }
 
-         public bool Open(int retryTime, int delayTime )
 
-         {
 
-             if (_port.IsOpen) Close();
 
-             try
 
-             {
 
-                 _port.Open();
 
-                 _port.DiscardInBuffer();
 
-                 _port.DiscardOutBuffer();
 
-                 _buff = "";
 
-             }
 
-             catch (Exception e)
 
-             {
 
-                 LOG.Write($"Port open failed, {e.Message}");
 
-                 string reason = _port.PortName + " port open failed,please check configuration。" + e.Message;
 
-                 OnErrorHappened(new ErrorEventArgs(reason));
 
-                 return false;
 
-             }
 
-             return true;
 
-         }
 
-         public bool IsOpen()
 
-         {
 
-             return _port.IsOpen;
 
-         }
 
-         public bool Close()
 
-         {
 
-             if (_port.IsOpen)
 
-             {
 
-                 try
 
-                 {
 
-                     _port.Close();
 
-                 }
 
-                 catch (Exception e)
 
-                 {
 
-                     string reason = _port.PortName + " port close failed。" + e.Message;
 
-                     OnErrorHappened(new ErrorEventArgs(reason));
 
-                     return false;
 
-                 }
 
-             }
 
-             return true;
 
-         }
 
-         public bool Write(string msg)
 
-         {
 
-             try
 
-             {
 
-                 lock (_locker)
 
-                 {
 
-                     if (_port.IsOpen)
 
-                     {
 
-                         _port.Write(msg);
 
-                         LOG.Info(string.Format("Communication {0} Send {1} successed.", _port.PortName, msg));
 
-                     }
 
-                 }
 
-                 return true;
 
-             }
 
-             catch (Exception e)
 
-             {
 
-                 string reason = string.Format("Communication {0} Send {1} failed. {2}.", _port.PortName, msg, e.Message);
 
-                 LOG.Info(reason);
 
-                 OnErrorHappened(new ErrorEventArgs(reason));
 
-                 return false;
 
-             }
 
-         }
 
-         
 
-         public void DataReceived(object sender, SerialDataReceivedEventArgs e)
 
-         {
 
-             if (_port.IsOpen)     
 
-             {
 
-                 string str = _port.ReadExisting();//字符串方式读
 
-                 _buff += str;
 
-                 int index = _buff.LastIndexOf(_port.NewLine);
 
-                 if (index > 0)
 
-                 {
 
-                     index += _port.NewLine.Length;
 
-                     string msg = _buff.Substring(0,index);
 
-                     _buff = _buff.Substring(index);
 
-                     LOG.Info(string.Format("Communication {0} Receive {1}.", _port.PortName, msg));
 
-                     OnDataChanged(msg);
 
-                 }
 
-             }   
 
-         }
 
-         void ErrorReceived(object sender, SerialErrorReceivedEventArgs e)
 
-         {
 
- 			string reason = string.Format("Communication {0} {1}.", _port.PortName, e.EventType.ToString());
 
-             LOG.Error(reason);
 
-             OnErrorHappened(new ErrorEventArgs(reason));
 
-         }
 
-         public void ClearPortBuffer()
 
-         {
 
-             _port.DiscardInBuffer();
 
-             _port.DiscardOutBuffer();
 
-         }
 
-     }
 
- }
 
 
  |