156 lines
5.3 KiB
C#
156 lines
5.3 KiB
C#
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Configuration;
|
|||
|
using System.Globalization;
|
|||
|
using System.IO;
|
|||
|
using System.IO.Ports;
|
|||
|
using System.Linq;
|
|||
|
using System.Runtime.InteropServices;
|
|||
|
using System.Text;
|
|||
|
using System.Threading;
|
|||
|
using System.Windows.Forms;
|
|||
|
|
|||
|
namespace FlyDockTool
|
|||
|
{
|
|||
|
public class SerialPortOption
|
|||
|
{
|
|||
|
/// <summary>
|
|||
|
/// 让此类创建一个串口操作的单例类
|
|||
|
/// </summary>
|
|||
|
public static SerialPortOption Instance; //申明一个EcgDrawing对象,复制Null
|
|||
|
public static int BufferBytesLength = 0;
|
|||
|
private Thread _thSerialPortDataRead; //串口数据读取线程
|
|||
|
public SerialPort DataReadSerialPort;
|
|||
|
public DateTime SerialTime;
|
|||
|
private static readonly object LockHelper = new object();
|
|||
|
public EventHandler dataOutPutShow;
|
|||
|
public static SerialPortOption CreateInstance()
|
|||
|
{
|
|||
|
if (Instance == null)
|
|||
|
lock (LockHelper)
|
|||
|
{
|
|||
|
if (Instance == null)
|
|||
|
Instance = new SerialPortOption();
|
|||
|
}
|
|||
|
return Instance;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 初始化串口
|
|||
|
/// </summary>
|
|||
|
public void IniserialPortOption()
|
|||
|
{
|
|||
|
//数据读取串口 初始化
|
|||
|
//CcgDataReadSerialPort = new SerialPort(ConfigHelper.EcgDataComPort, 1500000, Parity.None, 8, StopBits.One)
|
|||
|
|
|||
|
// string CurrentDevice = ConfigurationManager.AppSettings["CurrentDevice"];//获取设备信息URL
|
|||
|
string comName= ConfigurationManager.AppSettings[apiOptions.CurrentDevice].Split(',')[3];
|
|||
|
int baudRate= int.Parse(ConfigurationManager.AppSettings[apiOptions.CurrentDevice].Split(',')[4]);
|
|||
|
string parity1= ConfigurationManager.AppSettings[apiOptions.CurrentDevice].Split(',')[5];
|
|||
|
Parity parity = Parity.None;
|
|||
|
if (parity1.ToUpper()== "NONE")
|
|||
|
parity= Parity.None;
|
|||
|
if (parity1.ToUpper() == "EVEN")
|
|||
|
parity = Parity.Even;
|
|||
|
int databits= int.Parse(ConfigurationManager.AppSettings[apiOptions.CurrentDevice].Split(',')[6]);
|
|||
|
StopBits SB = StopBits.One;
|
|||
|
string sb1 = ConfigurationManager.AppSettings[apiOptions.CurrentDevice].Split(',')[7];
|
|||
|
if (sb1== "1")
|
|||
|
SB = StopBits.One;
|
|||
|
if (sb1.ToUpper() == "NONE")
|
|||
|
SB = StopBits.None;
|
|||
|
if (sb1.ToUpper() == "2")
|
|||
|
SB = StopBits.Two;
|
|||
|
DataReadSerialPort = new SerialPort(comName, baudRate, parity, databits, SB)
|
|||
|
{
|
|||
|
RtsEnable = false,
|
|||
|
ReadBufferSize = 4096000,
|
|||
|
ReadTimeout = 3000,
|
|||
|
ReceivedBytesThreshold = 1
|
|||
|
};
|
|||
|
SerialTime = DateTime.Now;
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 下发AD启动指令
|
|||
|
/// </summary>
|
|||
|
public void writeStartAD_Command()
|
|||
|
{
|
|||
|
byte[] EcgStart = { 0xBB, 0x44, 0xAA, 0x55, 0xCC, 0x01, 0x00, 0x00, 0xCB, 0x02 };
|
|||
|
if (!DataReadSerialPort.IsOpen)
|
|||
|
DataReadSerialPort.Open();
|
|||
|
DataReadSerialPort.Write(EcgStart, 0, EcgStart.Length);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 下发AD停止命令
|
|||
|
/// </summary>
|
|||
|
public void writeStopAD_Command()
|
|||
|
{
|
|||
|
byte[] EcgEnd = { 0xBB, 0x44, 0xAA, 0x55, 0x02, 0x00, 0x00, 0xCC, 0x02 };
|
|||
|
if (!DataReadSerialPort.IsOpen)
|
|||
|
{
|
|||
|
DataReadSerialPort.Open();
|
|||
|
}
|
|||
|
DataReadSerialPort.Write(EcgEnd, 0, EcgEnd.Length);
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 终止串口数据读取的线程
|
|||
|
/// </summary>
|
|||
|
public void StopDataReadThread()
|
|||
|
{
|
|||
|
_thSerialPortDataRead.Abort();
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 开启串口数据读取的线程
|
|||
|
/// </summary>
|
|||
|
public void StartDataReadThread()
|
|||
|
{
|
|||
|
_thSerialPortDataRead = new Thread(DataRead)
|
|||
|
{
|
|||
|
IsBackground = true,
|
|||
|
Priority = ThreadPriority.Highest
|
|||
|
};
|
|||
|
_thSerialPortDataRead.Start();
|
|||
|
}
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// 读取串口数据
|
|||
|
/// </summary>
|
|||
|
private void DataRead()
|
|||
|
{
|
|||
|
while (true)
|
|||
|
{
|
|||
|
try
|
|||
|
{
|
|||
|
if (!DataReadSerialPort.IsOpen)
|
|||
|
{
|
|||
|
DataReadSerialPort.Open();
|
|||
|
}
|
|||
|
BufferBytesLength = DataReadSerialPort.BytesToRead;
|
|||
|
if (BufferBytesLength > 0)
|
|||
|
{
|
|||
|
var buffer = new byte[BufferBytesLength];
|
|||
|
DataReadSerialPort.Read(buffer, 0, BufferBytesLength);
|
|||
|
string encodingStr = "UTF-8";
|
|||
|
try
|
|||
|
{
|
|||
|
encodingStr = ConfigurationManager.AppSettings[apiOptions.CurrentDevice].Split(',')[8];
|
|||
|
}
|
|||
|
catch { }
|
|||
|
string ReDataStr = Encoding.GetEncoding(encodingStr).GetString(buffer);
|
|||
|
dataOutPutShow(ReDataStr, null);
|
|||
|
}
|
|||
|
}
|
|||
|
catch { }
|
|||
|
Thread.Sleep(1000);//睡眠1秒
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
}
|