工控行业中大部分扫码都是自动扫码,有2种方式来读取扫码信息,A)PLC触发扫码,读到码后写入PLC地址内,上位机读取扫到的条码; B) 上位机触发,然后读取。
这是整盘自动扫码的情况,但不保证每次都能将全盘扫码都能全部扫码成功;如有扫码ERROR的,都需要配置一个工位进行人工扫码;人工扫码可以提供一个输入框,直接连上扫码枪就可以扫码了。还有一种就是不用输入框,用串口来接受扫码结果;今天分享的就是用串口读取手持扫码枪的方式;
一. 定义一个System.IO.Ports 下的SerilPort实例;
private SerialPort _serialPort = new SerialPort();
二. 初始化串口:
try
{
//手持扫码枪;
string portName = "COM4";
int baudRate = 115200;
_serialPort.PortName = portName;
_serialPort.BaudRate = baudRate;
_serialPort.Parity = Parity.Even; //奇偶校验-
_serialPort.DataBits = 8;
_serialPort.StopBits = StopBits.One;
_serialPort.DiscardNull = true;
_serialPort.ReceivedBytesThreshold = 24; //条码长度24
_serialPort.DataReceived += _serialPort_DataReceived;
_serialPort.RtsEnable = true;
_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;
_serialPort.Open();
AddLog(#34;连接手持扫码枪成功, 端口:{portName},波特率:{baudRate}");
}catch(Exception ex)
{
AddLog(#34;连接手持扫码枪失败:"+ex.Message);
}
三. 定义数据接收方法
///
/// 接收扫码枪的扫码数据
///
///
///
private void _serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
byte[] result = new byte[_serialPort.BytesToRead];
if(result.Length>0)
{
_serialPort.Read(result, 0, _serialPort.BytesToRead);
string barCode = Encoding.UTF8.GetString(result);
} else
{
AddLog(#34;扫码失败!请重试");
}
}catch(Exception ex)
{
AddLog(#34;手持扫码异常:"+ex.Message);
//判断端口是否打开,没有打开,尝试重新连接;
if(_serialPort.IsOpen()==false) {
//OpenPort();
}
}
}
代码很简单,但是一些串口的属性是需要了解熟悉的;如波特率,端口这些就不老生常谈了;
Even | 2 | 设置奇偶校验位,使位数等于偶数。 |
Mark | 3 | 将奇偶校验位保留为 1。 |
None | 0 | 不发生奇偶校验检查。 |
Odd | 1 | 设置奇偶校验位,使位数等于奇数。 |
Space | 4 | 将奇偶校验位保留为 0。 |
上面的例子里面设置的就是偶校验位,因为我们收到的条码是24的;偶校验;
指定在 SerialPort 对象上使用的停止位的数目。每个字节的标准停止位;
None | 0 | 不使用停止位。 StopBits 属性不支持此值。 |
One | 1 | 使用一个停止位。 |
OnePointFive | 3 | 使用 1.5 个停止位。 |
Two | 2 | 使用两个停止位。 |
PLC 的一个字节就是8位,所以设置为8;
因为我们接收的条码长度为24位的,所以就设置缓存区就是24字节;根据自己项目的大小自己调整;否则会在 DataReceived的方法里面接收到的数据不是完整的;这样可以少写很多拼接的代码;
RtsEnable : 串行通信中是否启用请求发送 (RTS) 信号
DtrEnable 串行通信过程中启用数据终端就绪 (DTR) 信号
写代码也跟其他事情差不多,也大多是一些套路,就看你玩的6不6。玩得溜就有更多时间摸鱼!多总结也是一个长期的投资。
页面更新:2024-03-14
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号