146 lines
3.5 KiB
C#
146 lines
3.5 KiB
C#
|
|
using System;
|
|
using System.ComponentModel;
|
|
using System.IO.Ports;
|
|
using System.Threading.Tasks;
|
|
using System.Xml.Linq;
|
|
|
|
namespace YSDetection
|
|
{
|
|
public class SerialPortBase
|
|
{
|
|
private object _lock = new object();
|
|
|
|
/// <summary>
|
|
/// 串口对象
|
|
/// </summary>
|
|
private SerialPort _serialPort = null;
|
|
|
|
|
|
public event Action<byte[]> OnDataReceived;
|
|
|
|
|
|
public void Init(string port)
|
|
{
|
|
if (_serialPort == null)
|
|
{
|
|
lock (_lock)
|
|
{
|
|
if (_serialPort == null)
|
|
{
|
|
_serialPort = new SerialPort(port);
|
|
_serialPort.BaudRate = 115200;
|
|
_serialPort.Parity = Parity.None;
|
|
_serialPort.DataBits =8;
|
|
_serialPort.StopBits = StopBits.One;
|
|
_serialPort.DataReceived -= SerialPort_DataReceived;
|
|
_serialPort.DataReceived += SerialPort_DataReceived;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
private void SerialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
|
|
{
|
|
int count = _serialPort.BytesToRead;
|
|
byte[] buffer = new byte[count];
|
|
|
|
var rCount = Read(buffer, 0, count);
|
|
|
|
if (count != rCount)
|
|
{
|
|
return;
|
|
}
|
|
|
|
//Task.Run(async () =>
|
|
//{
|
|
// if (BytesCompare(buffer, _triggerdData))
|
|
// {
|
|
// if (IConfig.TriggerDelay > 0)
|
|
// {
|
|
// await Task.Delay(IConfig.TriggerDelay);
|
|
// }
|
|
// // OnTriggered?.Invoke();
|
|
// }
|
|
// else if (BytesCompare(buffer, _disconnectedData))
|
|
// {
|
|
// // OnDisconnected?.Invoke();
|
|
// }
|
|
//});
|
|
|
|
|
|
Task.Run(() =>
|
|
{
|
|
//if(count==9)
|
|
OnDataReceived?.Invoke(buffer);
|
|
});
|
|
|
|
|
|
}
|
|
private bool BytesCompare(byte[] b1, byte[] b2)
|
|
{
|
|
if (b1 == null || b2 == null) return false;
|
|
if (b1.Length != b2.Length) return false;
|
|
for (int i = 0; i < b1.Length; ++i)
|
|
{
|
|
if (b1[i] != b2[i]) return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public void Start()
|
|
{
|
|
try
|
|
{
|
|
_serialPort.Open();
|
|
// LogAsync(DateTime.Now, LogLevel.Assist, $"{Name}[{_serialPort.PortName}]已打开");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new Exception();
|
|
}
|
|
}
|
|
|
|
public void Stop()
|
|
{
|
|
try
|
|
{
|
|
_serialPort.Close();
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
throw new Exception();
|
|
}
|
|
}
|
|
|
|
|
|
public int Read(byte[] buffer, int offset, int count)
|
|
{
|
|
return _serialPort.Read(buffer, offset, count);
|
|
}
|
|
|
|
public void Writebty(byte[] buffer, int offset, int count)
|
|
{
|
|
_serialPort.Write(buffer, offset, count);
|
|
}
|
|
public void WriteStr(string buffer)
|
|
{
|
|
_serialPort.Write(buffer);
|
|
}
|
|
//protected void Read()
|
|
//{
|
|
// SerialPortHelper.ReadExisting(_serialPort);
|
|
//}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|