123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- using System;
- using System.Collections.Generic;
- using System.IO.Ports;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace MECF.Framework.Simulator.Core.Driver
- {
- public enum SerialType
- {
- ASCII=0,
- BUFFER=1
- }
- public class BaseSerialSimulator
- {
- public event Action<string> MessageIn;
- public event Action<string> MessageOut;
- public bool IsEnabled
- {
- get { return _serialPort != null && _serialPort.IsOpen; }
- }
- public string PortName
- {
- get { return _serialPort.PortName; }
- set { _serialPort.PortName = value; }
- }
- public bool IsConnected { get;set;}
- private SerialPort _serialPort;
- private SerialType _type;
- public BaseSerialSimulator(string portName, SerialType type=SerialType.ASCII)
- {
- _serialPort = new SerialPort(portName);
- _serialPort.DataReceived += SerialPort_DataReceived;
- _type = type;
- }
- public void Disable()
- {
- try
- {
- _serialPort.Close();
- }
- catch
- {
- }
- IsConnected = false;
- }
- /// <summary>
- /// 连接
- /// </summary>
- public void Enable()
- {
- try
- {
- _serialPort.Open();
- IsConnected = true;
- }
- catch
- {
- IsConnected = false;
- }
- }
- private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
- {
- int length = _serialPort.BytesToRead;
- if (length > 0)
- {
- byte[] data = new byte[length];
- _serialPort.Read(data, 0, length);
- if(_type==SerialType.ASCII)
- {
- string str=ASCIIEncoding.ASCII.GetString(data);
- MessageIn(str);
- ProcessMessageIn(str);
- }
- else
- {
- string str = MessageConvert(data);
- MessageIn(str);
- ProcessMessageBuffer(data);
- }
- }
- }
- protected virtual string MessageConvert(byte[] byt)
- {
- return BitConverter.ToString(byt).Replace("-", " ");
- }
- protected virtual void ProcessMessageIn(string msg)
- {
- }
- protected virtual void ProcessMessageBuffer(byte[] byt)
- {
- }
- public void WriteBuffer(byte[] byt)
- {
- string str=MessageConvert(byt);
- try
- {
- _serialPort.Write(byt,0,byt.Length);
- MessageOut(str);
- }
- catch
- {
- IsConnected=false;
- }
- }
- public void WriteMessage(string msg)
- {
- try
- {
- _serialPort.WriteLine(msg);
- MessageOut(msg);
- }
- catch
- {
- IsConnected=false;
- }
- }
- }
- }
|