110,537
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.IO.Ports;
using System.Text;
using System.Threading;
namespace ConfigHelper
{
/// <summary>
/// 串口控制类
/// </summary>
public class SimpleCommand
{
private SerialPort port;
private StringBuilder builder = new StringBuilder();//避免在事件处理方法中反复的创建,定义到外面。
private string _getString = "";
public string Builder
{
get { return _getString; }
}
/// <summary>
/// 初始化并打开串口
/// </summary>
/// <param name="portNum">端口名称</param>
/// <param name="baudRate">波特率</param>
/// <param name="parity">Parity奇偶校正设置</param>
/// <param name="dataBits">数据位</param>
/// <param name="stopBits">停止位初始化 SerialPort 类的新实例</param>
public SimpleCommand(string portNum, int baudRate, Parity parity, int dataBits, StopBits stopBits)
{
port = new SerialPort(portNum, baudRate, parity, dataBits, stopBits);
try
{
port.Open();
}
catch (System.Exception)
{
return;
}
port.DataReceived += comm_DataReceived;
}
void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int n = port.BytesToRead;//先记录下来,避免某种原因,人为的原因,操作几次之间时间长,缓存不一致
byte[] buf = new byte[n];//声明一个临时数组存储当前来的串口数据
port.Read(buf, 0, n);//读取缓冲数据
builder.Clear();//清除字符串构造器的内容
builder.Append(Encoding.ASCII.GetString(buf));
_getString += builder.ToString();
}
public void Write(string _pStr)
{
try
{
_getString = "";
port.Write(_pStr);
}
catch { }
Thread.Sleep(100);
}
/// <summary>
/// 向串口写入一个值 格式固定
/// </summary>
/// <param name="num">端口</param>
public void Open(int num, int inport)
{
if (port.IsOpen)
{
port.WriteLine(string.Format("O(00,{0},1)",num.ToString("000")));
}
}
/// <summary>
/// 向串口写入一个值 格式固定
/// </summary>
/// <param name="num">端口</param>
public void Close(int num, int inport)
{
if (port.IsOpen)
{
port.WriteLine(string.Format("O({0},{1},0)", inport.ToString("00"), num.ToString("000")));
}
}
public void CloseAll(int inport)
{
if (port.IsOpen)
{
port.WriteLine(string.Format("O({0},000,0)", inport.ToString("000")));
}
}
}
}