This repository has been archived on 2024-01-02. You can view files and clone it, but cannot push or open issues or pull requests.
Sic06/FrameworkLocal/SimulatorCore/Commons/SerialPortDeviceSimulator.cs

85 lines
2.8 KiB
C#

using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MECF.Framework.Common.Communications;
using MECF.Framework.Common.Communications.Tcp.Socket.Framing;
namespace MECF.Framework.Simulator.Core.Driver
{
public class SerialPortDeviceSimulator : DeviceSimulator
{
public override bool IsEnabled
{
get { return _serialPort!=null && _serialPort.IsOpen(); }
}
public override bool IsConnected
{
get { return IsEnabled; }
}
public string PortName
{
get { return _serialPort.PortName; }
set { _serialPort.PortName = value; }
}
private AsyncSerialPort _serialPort;
public string RemoteConnection { get; set; }
public SerialPortDeviceSimulator(string port, int commandIndex, string lineDelimiter, char msgDelimiter, bool isAscii=true)
:base(commandIndex, lineDelimiter, msgDelimiter)
{
_serialPort = new AsyncSerialPort(port, 9600, 8, Parity.None, StopBits.One, lineDelimiter, isAscii);
_serialPort.OnDataChanged += OnReadMessage;
_serialPort.OnBinaryDataChanged += OnReadMessage;
_serialPort.OnErrorHappened += OnErrorMessage;
}
public SerialPortDeviceSimulator(string port, int commandIndex, string lineDelimiter, char msgDelimiter, bool isAscii, int dataBits)
: base(commandIndex, lineDelimiter, msgDelimiter)
{
_serialPort = new AsyncSerialPort(port, 19200, dataBits, Parity.Even, StopBits.One, lineDelimiter, isAscii);
_serialPort.OnDataChanged += OnReadMessage;
_serialPort.OnBinaryDataChanged += OnReadMessage;
_serialPort.OnErrorHappened += OnErrorMessage;
}
public SerialPortDeviceSimulator(string port, int commandIndex, string lineDelimiter, char msgDelimiter, bool isAscii,string parity)
: base(commandIndex, lineDelimiter, msgDelimiter)
{
_serialPort = new AsyncSerialPort(port, 9600, 8, Parity.Even, StopBits.One, lineDelimiter, isAscii);
_serialPort.OnDataChanged += OnReadMessage;
_serialPort.OnBinaryDataChanged += OnReadMessage;
_serialPort.OnErrorHappened += OnErrorMessage;
}
public void Enable()
{
_serialPort.Open();
}
public void Disable()
{
_serialPort.Close();
}
protected override void ProcessWriteMessage(string msg)
{
_serialPort.Write(msg);
}
protected override void ProcessWriteMessage(byte[] msg)
{
_serialPort.Write(msg);
}
}
}