2023-05-17 19:48:47 +08:00
|
|
|
|
using System.IO.Ports;
|
2023-04-13 11:51:03 +08:00
|
|
|
|
using MECF.Framework.Common.Communications;
|
|
|
|
|
|
|
|
|
|
namespace MECF.Framework.Simulator.Core.Driver
|
|
|
|
|
{
|
|
|
|
|
public class SerialPortDeviceSimulator : DeviceSimulator
|
|
|
|
|
{
|
2023-05-17 19:48:47 +08:00
|
|
|
|
#region Variables
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
2023-05-17 19:48:47 +08:00
|
|
|
|
private readonly AsyncSerialPort _serialPort;
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
2023-05-17 19:48:47 +08:00
|
|
|
|
#endregion
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
2023-05-17 19:48:47 +08:00
|
|
|
|
#region Constructors
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
|
|
|
|
|
2023-05-17 19:48:47 +08:00
|
|
|
|
public SerialPortDeviceSimulator(string port, int commandIndex, string lineDelimiter, char msgDelimiter,
|
|
|
|
|
bool isAscii = true)
|
|
|
|
|
: base(commandIndex, lineDelimiter, msgDelimiter)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
|
|
|
|
_serialPort = new AsyncSerialPort(port, 9600, 8, Parity.None, StopBits.One, lineDelimiter, isAscii);
|
|
|
|
|
_serialPort.OnDataChanged += OnReadMessage;
|
|
|
|
|
_serialPort.OnBinaryDataChanged += OnReadMessage;
|
2023-05-17 19:48:47 +08:00
|
|
|
|
_serialPort.OnErrorHappened += OnErrorMessage;
|
|
|
|
|
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-17 19:48:47 +08:00
|
|
|
|
public SerialPortDeviceSimulator(string port, int commandIndex, string lineDelimiter, char msgDelimiter,
|
|
|
|
|
bool isAscii, int dataBits)
|
|
|
|
|
: base(commandIndex, lineDelimiter, msgDelimiter)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
|
|
|
|
_serialPort = new AsyncSerialPort(port, 19200, dataBits, Parity.Even, StopBits.One, lineDelimiter, isAscii);
|
|
|
|
|
_serialPort.OnDataChanged += OnReadMessage;
|
|
|
|
|
_serialPort.OnBinaryDataChanged += OnReadMessage;
|
|
|
|
|
_serialPort.OnErrorHappened += OnErrorMessage;
|
|
|
|
|
}
|
2023-05-17 19:48:47 +08:00
|
|
|
|
|
|
|
|
|
public SerialPortDeviceSimulator(string port, int commandIndex, string lineDelimiter, char msgDelimiter,
|
|
|
|
|
bool isAscii, string parity)
|
|
|
|
|
: base(commandIndex, lineDelimiter, msgDelimiter)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
|
|
|
|
_serialPort = new AsyncSerialPort(port, 9600, 8, Parity.Even, StopBits.One, lineDelimiter, isAscii);
|
|
|
|
|
_serialPort.OnDataChanged += OnReadMessage;
|
|
|
|
|
_serialPort.OnBinaryDataChanged += OnReadMessage;
|
|
|
|
|
_serialPort.OnErrorHappened += OnErrorMessage;
|
|
|
|
|
}
|
|
|
|
|
|
2023-05-17 19:48:47 +08:00
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Properties
|
|
|
|
|
|
|
|
|
|
public override bool IsEnabled => _serialPort != null && _serialPort.IsOpen();
|
|
|
|
|
|
|
|
|
|
public override bool IsConnected => IsEnabled;
|
|
|
|
|
|
|
|
|
|
public string PortName
|
|
|
|
|
{
|
|
|
|
|
get => _serialPort.PortName;
|
|
|
|
|
set => _serialPort.PortName = value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public string RemoteConnection { get; set; }
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region Methods
|
|
|
|
|
|
|
|
|
|
|
2023-04-13 11:51:03 +08:00
|
|
|
|
public void Enable()
|
|
|
|
|
{
|
|
|
|
|
_serialPort.Open();
|
2023-05-17 19:48:47 +08:00
|
|
|
|
}
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
|
|
|
|
public void Disable()
|
|
|
|
|
{
|
|
|
|
|
_serialPort.Close();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void ProcessWriteMessage(string msg)
|
|
|
|
|
{
|
|
|
|
|
_serialPort.Write(msg);
|
|
|
|
|
}
|
2023-05-17 19:48:47 +08:00
|
|
|
|
|
2023-04-13 11:51:03 +08:00
|
|
|
|
protected override void ProcessWriteMessage(byte[] msg)
|
|
|
|
|
{
|
|
|
|
|
_serialPort.Write(msg);
|
|
|
|
|
}
|
2023-05-17 19:48:47 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|