串口通讯
需要注意COM端口和波特率的设置保持一致
调用
public void RunCompareBarCode()
{
try
{
string comPort = "COM3"//需要根据设备连接串口
commBar = new CommBar();
commBar.SerialPortValue(comPort, 115200);
if (commBar.Open())
commBar.serialPort.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort_DataReceived);
}
catch (Exception ex)
{
commBar.Close();
}
}
//串口连接并获取数据
public void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
System.Threading.Thread.Sleep(100);
byte[] m_recvBytes = new byte[commBar.serialPort.BytesToRead];
int result = commBar.serialPort.Read(m_recvBytes, 0, m_recvBytes.Length);
if (result <= 0)
return;
commBar.Code = Encoding.ASCII.GetString(m_recvBytes, 0, m_recvBytes.Length);
codeTxt = commBar.Code;
if (!string.IsNullOrEmpty(codeTxt) && codeTxt.Length >= 8)
{
//codeTxt为获取串口传的数据
}
commBar.serialPort.DiscardInBuffer();
}
工具类
class CommBar
{
//串口引用
public SerialPort serialPort;
//存储转换的数据值
public string Code { get; set; }
public CommBar()
{
serialPort = new SerialPort();
}
//串口状态
public bool IsOpen
{
get
{
return serialPort.IsOpen;
}
}
//打开串口
public bool Open()
{
if (serialPort.IsOpen)
{
Close();
}
serialPort.Open();
if (serialPort.IsOpen)
{
return true;
}
else
{
Console.WriteLine("串口打开失败!");
return false;
}
}
//关闭串口
public void Close()
{
serialPort.Close();
}
//定入数据,这里没有用到
public void WritePort(byte[] send, int offSet, int count)
{
if (IsOpen)
{
serialPort.Write(send, offSet, count);
}
}
//获取可用串口
public string[] GetComName()
{
string[] names = null;
try
{
names = SerialPort.GetPortNames();
}
catch (Exception)
{
Console.WriteLine("找不到串口");
}
return names;
}
//注册一个串口
public void SerialPortValue(string portName, int baudRate)
{
serialPort.PortName = portName;
serialPort.BaudRate = baudRate;
serialPort.DataBits = 8;
serialPort.StopBits = System.IO.Ports.StopBits.One;
serialPort.Parity = System.IO.Ports.Parity.None;
serialPort.ReadTimeout = 100;
//commBar.serialPort.WriteTimeout = -1;
}
}