博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#串口扫描枪的简单实现
阅读量:5288 次
发布时间:2019-06-14

本文共 3578 字,大约阅读时间需要 11 分钟。

串口扫描枪的简单实现

基于串口通讯的扫描枪的实现,主要借助SerialPort类,表示串行端口资源。实现很简单:

工具:usb转RS232转接头/个,扫描枪/套,

扫描枪串口接入转接头,转接头插电脑

接下来具体代码实现

 

1 using System;  2 using System.Collections.Generic;  3 using System.ComponentModel;  4 using System.Data;  5 using System.Drawing;  6 using System.Linq;  7 using System.Text;  8 using System.Threading.Tasks;  9 using System.Windows.Forms; 10 using System.Net; 11 using System.IO.Ports; 12 using System.Threading; 13  14 namespace SerialScannerDemo 15 { 16     public partial class SerialScanner : Form 17     { 18         public SerialScanner() 19         { 20             InitializeComponent(); 21         } 22  23         private void Form1_Load(object sender, EventArgs e) 24         { 25             InstanceSerialPort(); 26         } 27  28         ///  29         /// 实例化串行端口资源 30         ///  31         private void InstanceSerialPort() 32         { 33             //实例化串行端口 34             SerialPort serialPort = new SerialPort(); 35             //端口名  注:因为使用的是USB转RS232 所以去设备管理器中查看一下虚拟com口的名字 36             serialPort.PortName = "COM5"; 37             //波特率 38             serialPort.BaudRate = 9600; 39             //奇偶校验 40             serialPort.Parity = Parity.None; 41             //停止位 42             serialPort.StopBits = StopBits.One; 43             //数据位 44             serialPort.DataBits = 8; 45             //忽略null字节 46             serialPort.DiscardNull = true; 47             //接收事件 48             serialPort.DataReceived += serialPort_DataReceived; 49             //开启串口 50             serialPort.Open(); 51         } 52  53         ///  54         /// 接收数据 55         ///  56         ///  57         ///  58         void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) 59         { 60             try 61             { 62                 SerialPort serialPort = (SerialPort)sender; 63                 //开启接收数据线程 64                 Thread threadReceiveSub = new Thread(new ParameterizedThreadStart(ReceiveData)); 65                 threadReceiveSub.Start(serialPort); 66             } 67             catch (Exception ex) 68             { 69                 SetMessage(ex.Message); 70             } 71         } 72  73         private void ReceiveData(object serialPortobj) 74         { 75             try 76             { 77                 SerialPort serialPort = (SerialPort)serialPortobj; 78  79                 //防止数据接收不完整 线程sleep(100) 80                 System.Threading.Thread.Sleep(100); 81  82                 string str = serialPort.ReadExisting(); 83  84                 if (str == string.Empty) 85                 { 86                     return; 87                 } 88                 else 89                 { 90                     SetMessage(str); 91                 } 92             } 93             catch (Exception ex) 94             { 95                 SetMessage(ex.Message); 96             } 97         } 98         ///  99         /// 添加记录100         /// 101         /// 102         private void SetMessage(string msg)103         {104             richTextBox1.Invoke(new Action(() => { richTextBox1.AppendText(msg + "\r\n"); }));105         }106     }107 }
View Code

 

注:因为使用的是USB转RS232 所以去设备管理器中查看一下虚拟com口的名字

接下来测试

找一张带有条码的包装袋或者印有条码的纸扫描

测试完成

 

这里说明一下

serialPort中有6个读的方法

Read();ReadLine(); ReadByte();ReadChar();这几个读方法是同步读

ReadExisting();ReadTo();这两个方法是异步读

在测试过程中发现 执行读方法后 从缓冲区读出的数据长度不够 会拼接到下一次的读结果中,所以代码中在读之前使用了Thread.sleep()方法使线程阻塞,使得从缓冲区读出的数据完整

 

顺便说一下,基于以太网的扫描枪的实现,其实将扫描枪当做是一个客户端,扫描完成一次相当于发送了一次基于TCP或者UDP的请求,使用的socket服务器略加改变就能实现

源码:

链接:

提取码:xs8d

 

转载于:https://www.cnblogs.com/pandefu/p/10795284.html

你可能感兴趣的文章
驱动人生后门清除方案
查看>>
IP被封检测地址
查看>>
软件漏洞-泛微OA-汇总
查看>>
应用安全-安全设备-Waf系列-软Waf-安全狗(Safedog)
查看>>
应用安全-安全设备-Waf系列-软Waf-D盾
查看>>
SqlServer 误操作如何恢复数据库
查看>>
软件做的事
查看>>
韦东山设备树课程-环境搭建【学习笔记】
查看>>
折半搜索(超大背包)
查看>>
利用数目找中位数(牛客第七场E)
查看>>
hdu5452
查看>>
2019牛客多校(第十场)F Popping Balloons —— 线段树+枚举
查看>>
2019ICPC南京网络赛B super_log(a的b塔次方)
查看>>
ccpc20190823
查看>>
优先队列及改变优先级
查看>>
主席树(可持续化线段树)
查看>>
hdu6582
查看>>
Codeforces Round #200 (Div. 1)D. Water Tree
查看>>
Cow Routing(最短路spfa)
查看>>
F. Moving On
查看>>