using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO.Ports; using Aitex.Core.RT.Log; namespace Aitex.Sorter.RT.Device { // 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) // { // 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(); // } // } }