之前负责过一个机场的项目,有一个环节是扫描旅客登机牌,获取旅客信息的操作,当时是拟定了使用串口扫描枪来获取登机牌信息,后面又测试了网口的,这里记录一下当时用来测试串口使用的程序,供有需求的小伙伴们参考,
1、首先引用命名空间
using System.IO.Ports;
2、主程序代码
SerialPort serialPort = new SerialPort();
//端口名 注:设备管理器中查看一下虚拟com口的名字
serialPort.PortName = 'COM3';
serialPort.BaudRate = 115200;//波特率,默认是9600
serialPort.Parity = Parity.None;
serialPort.StopBits = StopBits.One;
serialPort.DataBits = 8;
serialPort.DiscardNull = true;
serialPort.DataReceived += serialPort_DataReceived;//监听方法,具体看下面
serialPort.Open();
3、接收消息后,自动进入此方法
void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
Logger.Warn($"DataReceived");
SerialPort serialPort = (SerialPort)sender;
Logger.Warn($"串口接收长度:{serialPort.BytesToRead}");
if (serialPort.BytesToRead == 0)
{
return;
}
else
{
Thread threadReceiveSub = new Thread(new ParameterizedThreadStart(ReceiveData));
threadReceiveSub.Start(serialPort);
}
}
catch (Exception ex)
{
Logger.Error($"开启监听异常:{ex.Message}");
}
}
private void ReceiveData(object serialPortobj)
{
try
{
SerialPort serialPort = (SerialPort)serialPortobj;
//开辟接收缓冲区
byte[] receiveData = new byte[serialPort.BytesToRead];
Logger.Warn($"缓冲区长度:{receiveData.Length}");
//从串口读取数据
serialPort.Read(receiveData, 0, receiveData.Length);
//防止数据接收不完整 线程sleep(150)
System.Threading.Thread.Sleep(150);
string str = System.Text.Encoding.UTF8.GetString(receiveData, 0, receiveData.Length);
//serialPort.ReadExisting();
if (string.IsNullOrEmpty( str ))
{
Logger.Warn($"串口结束数据转换结果为空!");
return;
}
else
{
try
{
str = str.Substring(0, 18);//只去要获取18位,这里根据你们自己的需求来
}
catch (Exception)
{
str = '000000000000';//错误码,自己拟定
}
Logger.Info($"扫描截取信息:{str}");
}
}
catch (Exception ex)
{
Logger.Error($"扫描数据失败:{ex.Message}");
}
}
这里给大家安排一个串口调试工具
链接:https://pan.baidu.com/s/1rcQBa0I3rNI643XsRyKaFA
提取码:mszd