C#串口扫描枪的简单实现
串口扫描枪的简单实现
基于串口通讯的扫描枪的实现,主要借助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 /// <summary> 29 /// 实例化串行端口资源 30 /// </summary> 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 /// <summary> 54 /// 接收数据 55 /// </summary> 56 /// <param name="sender"></param> 57 /// <param name="e"></param> 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 /// <summary> 99 /// 添加记录 100 /// </summary> 101 /// <param name="msg"></param> 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服务器略加改变就能实现
c#Socket服务器与客户端的开发(1)
源码:
链接:https://pan.baidu.com/s/1mdcj_I8W0RTi-PIs1YBdhA
提取码:xs8d
转载于:https://www.cnblogs.com/pandefu/p/10795284.html
C#串口扫描枪的简单实现相关推荐
- WinCC读取串口扫描枪案例
目录 一 MSComm控件注册 二 准备微软脚本调试器 三 WinCC画面制作 四 创建全局脚本VBS 五 项目启动前的配置 六 关于USB扫描枪和串口扫描枪 本文以WinCC通过VBS脚本进行串口通 ...
- c# 获取串口扫描枪数据
之前负责过一个机场的项目,有一个环节是扫描旅客登机牌,获取旅客信息的操作,当时是拟定了使用串口扫描枪来获取登机牌信息,后面又测试了网口的,这里记录一下当时用来测试串口使用的程序,供有需求的小伙伴们参考 ...
- 串口扫描枪+linux,C#读取RS232串口扫描枪
[实例简介] C#读取RS232串口扫描枪,可以实现多线程串口扫描枪输入 [实例截图] [核心代码] 串口线程接收更新控件 └── 串口线程接收更新控件 ├── 串口线程接收更新控件 │ ├── ...
- 基于C#的串口扫描枪通信实战
今天搞大事,观众们动起来,搞事的目的是 掌握串口通信及winform开发技术 硬件设备:1.串口激光扫描枪,注意是串口,不是USB口 2.USB转串口的连接线一根,如图连接所示 3.USB扩展器一个, ...
- C#串口通信实战开发:获取条码枪扫描枪读码器把枪的扫码结果
扫描枪分类 市面上的条形码扫描枪按照接口类型,一般可以分为三种: PS/2接口.这个接口一般老式的条码枪才会有,现在的条码枪基本上都没有这个接口了,因为现在的电脑上,基本上也不会有这个老式接口了.这个 ...
- USB扫描枪设置流程 扫描枪使用
第一步:安装驱动 将光盘放到光驱中,打开后找到Symbol+COM+Port+Emulation+Driver+v+1.8.5.zip压缩包,减压后点击安装.压缩包如下如图所示: 第二步:设置扫描枪 ...
- E3000Y影像二维扫描枪(配YoKo引擎开发板)的串口调试
实现E3000Y影像二维扫描枪串口调试 概述 一.E3000Y影像二维扫描枪 二.YoKo引擎开发板 三.E3000Y识读引擎 四.串口调试控制方式步骤 1.模块安装步骤 2.串口调试步骤 3.扫描二 ...
- 扫描枪设置虚拟串口linux,顶码扫描枪全能王TP20Y怎么设置USB虚拟串口模式?
顶码全能王TP20Y是一款极具性价比的二维影像手持扫描枪,可以读取所有一维.二维条码,外形小巧,价格实惠,卓越的工业保护设计,坚固耐用,适用于超市.便利店的零售收银.自动化办公与文件管理.邮件与包裹的 ...
- VB编写欧姆龙PLC和霍尼韦尔扫描枪 的串口调试程序,可供大家参考
VERSION 5.00 Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX&q ...
最新文章
- 20100506 学习记录:grdview添加新的一行数据
- Centos7.2部署各类服务
- 5 日期范围查询_MySQL(四)——复杂查询
- SpringBoot集成JPA
- java安全编码指南之:ThreadPool的使用
- 实际操作之路考的这些事
- matlab程序svm四等级分类,支持向量机(SVM)多分类matlab程序代码
- dedecms织梦模板|绿色仿下载吧网站织梦dede模板源码
- centos7 下修改网络配置
- Mac Pycharm导入Pygame教程(超细)
- 用KMS激活了office2016之后为什么进入的时候还是提示需激活解决方案:
- ubuntu 安装迅雷
- 九、【服务器】服务器硬件名称中英文汇总2
- 开源问答Tipask伪静态apache和nginx设置
- c语言浮点数如何精确计算,浮点数精确运算的分析和解决办法
- Linux 创建线程 段错误,linux下线程池,出现Segmentation fault (core dumped) 问题
- Everything 离线搜索功能详解 – 再也不怕找不到文件!
- 【Spring boot 项目实践】基于Spring boot 的外卖系统
- GL 日记帐分录的种类(中英文对照)
- 把英文翻译成中文php,中文翻译成英文,英文翻译成中文(调用的有道翻译的api)示例源码...