C#读取RS232串口扫描枪
来源:互联网 发布:linux退出vi不保存 编辑:程序博客网 时间:2024/05/16 20:28
扫描对于工业商业的主要输入设备很常见,与扫描枪的通讯也非常简单。之前看到网上有很多人问,但大多说人没有给出确切的回答,其实也就是源代码啦。
我刚好做了一个项目用到了这种扫描枪,现在把做的步骤和代码上传上来,跟大家分享一下。
RS232串口的扫描枪不会像USB的扫描枪自动的吧数据输入的光标焦点所在的位置,因此,需要我们手动的将扫描的数据添加到对应的位置。这也给我们 的软件开发增加了一丢丢工作。
如果是USB,则只需把鼠标光标定位到需要输入的位置上去。
如果是RS232的则需要一些额外的操作。
下面来看看实现的步骤。
环境:VS2015 C#,SerialPort类
首先熟悉,serialPort类,这个类是C#自带的一个串口通讯,使用非常方便,性能还算稳定,因为我用着目前没发现什么问题。不知道实时性如何。
表1 SerialPort类的常用属性
名 称
说 明
BaseStream
获取 SerialPort 对象的基础 Stream 对象
BaudRate
获取或设置串行波特率
BreakState
获取或设置中断信号状态
BytesToRead
获取接收缓冲区中数据的字节数
BytesToWrite
获取发送缓冲区中数据的字节数
CDHolding
获取端口的载波检测行的状态
CtsHolding
获取“可以发送”行的状态
DataBits
获取或设置每个字节的标准数据位长度
DiscardNull
获取或设置一个值,该值指示 Null 字节在端口和接收缓冲区之间传输时是否被忽略
DsrHolding
获取数据设置就绪 (DSR) 信号的状态
DtrEnable
获取或设置一个值,该值在串行通信过程中启用数据终端就绪 (DTR) 信号
Encoding
获取或设置传输前后文本转换的字节编码
Handshake
获取或设置串行端口数据传输的握手协议
IsOpen
获取一个值,该值指示 SerialPort 对象的打开或关闭状态
NewLine
获取或设置用于解释 ReadLine( )和WriteLine( )方法调用结束的值
Parity
获取或设置奇偶校验检查协议
续表
名 称
说 明
ParityReplace
获取或设置一个字节,该字节在发生奇偶校验错误时替换数据流中的无效字节
PortName
获取或设置通信端口,包括但不限于所有可用的 COM 端口
ReadBufferSize
获取或设置 SerialPort 输入缓冲区的大小
ReadTimeout
获取或设置读取操作未完成时发生超时之前的毫秒数
ReceivedBytesThreshold
获取或设置 DataReceived 事件发生前内部输入缓冲区中的字节数
RtsEnable
获取或设置一个值,该值指示在串行通信中是否启用请求发送 (RTS) 信号
StopBits
获取或设置每个字节的标准停止位数
WriteBufferSize
获取或设置串行端口输出缓冲区的大小
WriteTimeout
获取或设置写入操作未完成时发生超时之前的毫秒数
表2 SerialPort类的常用方法
方 法 名 称
说 明
Close
关闭端口连接,将 IsOpen 属性设置为False,并释放内部 Stream 对象
Open
打开一个新的串行端口连接
Read
从 SerialPort 输入缓冲区中读取
ReadByte
从 SerialPort 输入缓冲区中同步读取一个字节
ReadChar
从 SerialPort 输入缓冲区中同步读取一个字符
ReadLine
一直读取到输入缓冲区中的 NewLine 值
ReadTo
一直读取到输入缓冲区中指定 value 的字符串
Write
已重载。将数据写入串行端口输出缓冲区
WriteLine
将指定的字符串和 NewLine 值写入输出缓冲区
SerialPort使用方法:using System.IO;
{
int n = myComPort.BytesToRead;
byte[] buf = new byte[n];
myComPort.Read(buf, 0, n);
textBox2.Invoke
(
new EventHandler(
delegate
{
textBox2.Text = textBox2.Text + Encoding.ASCII.GetString(buf);
}
)
);
}
(new EventHandler(
delegate
{
textBox2.Text = textBox2.Text + Encoding.ASCII.GetString(buf);
}
)
);
接下来就是写接收到扫描码的数据处理,
这个需要在根据你把数据写入到什么地方,这里是写入到了一个TEXTBOX里。
所以需要用textbox的数据更新事件来处理,
举例如:如果输入的条码,二维码以ENTER结束,则在收到ENTER后处理接收的数据
private void textBox2_TextChanged(object sender, EventArgs e)
{
MessageBox.Show("KEY DOWN!");
if (textBox2.Text[textBox2.TextLength - 2] == 0x0D && textBox2.Text[textBox2.TextLength - 1] == 0x0A)
{
MessageBox.Show("input the ENTER!");
}
}
串口接收也可以写成一个线程,不需要使用它的串口接收函数。如如下:
private void ReadPort()
{
while( _keepReading && myComPort.IsOpen )
{
int n = myComPort.BytesToRead;
byte[] buf = new byte[n];
myComPort.Read(buf, 0, n);
textBox2.Invoke
(
new EventHandler(
delegate
{
textBox2.Text = textBox2.Text + Encoding.ASCII.GetString(buf);
}
)
);
}
}
另外增加:
_keepReading = true;
_readThread = new Thread(ReceiveData);
_readThread.Start();
结束
源代码传送门:
http://download.csdn.net/detail/u011518659/9748676
- C#读取RS232串口扫描枪
- c# RS232结合OpenFileDialog串口传输文件
- Tony.SerialPorts.RS232串口参数配置模块:扫描事件例程
- RS232串口
- Java--串口之间的通信及扫描枪的读取
- C#:通过串口读取扫描枪里的值
- c#串口自动扫描程序
- c#读取串口
- C#读取计算机串口
- 串口通讯-RS232详解
- 串口 RS232 TTL 电平
- RS232串口通信详解
- 搭建RS232串口
- RS232串口通信协议 TIPS
- RS232串口线
- RS232 串口通信
- RS232串口 小记
- rs232串口通信原理
- jquery-EasyUI datagrid 换行
- 视频电商网站实战 - 构建视频提交页面:视频封面上传(上)
- 设计模式之十:责任链模式
- 【JAVA SE】1.Java概述
- springBoot笔记
- C#读取RS232串口扫描枪
- 关于用户痛点
- How to Train a ChatBot with the TensorFlow and Google Cloud ML
- SAP ML 物料分类账详解(含取消激活物料帐方法)
- structs图解(一)
- jquery属性操作
- 卡尔曼滤波原理及实例
- mysql数据库的安装与配置
- 分布式缓存memcache