串口扫描枪的简单实现

基于串口通讯的扫描枪的实现,主要借助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#串口扫描枪的简单实现相关推荐

  1. WinCC读取串口扫描枪案例

    目录 一 MSComm控件注册 二 准备微软脚本调试器 三 WinCC画面制作 四 创建全局脚本VBS 五 项目启动前的配置 六 关于USB扫描枪和串口扫描枪 本文以WinCC通过VBS脚本进行串口通 ...

  2. c# 获取串口扫描枪数据

    之前负责过一个机场的项目,有一个环节是扫描旅客登机牌,获取旅客信息的操作,当时是拟定了使用串口扫描枪来获取登机牌信息,后面又测试了网口的,这里记录一下当时用来测试串口使用的程序,供有需求的小伙伴们参考 ...

  3. 串口扫描枪+linux,C#读取RS232串口扫描枪

    [实例简介] C#读取RS232串口扫描枪,可以实现多线程串口扫描枪输入 [实例截图] [核心代码] 串口线程接收更新控件 └── 串口线程接收更新控件 ├── 串口线程接收更新控件 │   ├── ...

  4. 基于C#的串口扫描枪通信实战

    今天搞大事,观众们动起来,搞事的目的是 掌握串口通信及winform开发技术 硬件设备:1.串口激光扫描枪,注意是串口,不是USB口 2.USB转串口的连接线一根,如图连接所示 3.USB扩展器一个, ...

  5. C#串口通信实战开发:获取条码枪扫描枪读码器把枪的扫码结果

    扫描枪分类 市面上的条形码扫描枪按照接口类型,一般可以分为三种: PS/2接口.这个接口一般老式的条码枪才会有,现在的条码枪基本上都没有这个接口了,因为现在的电脑上,基本上也不会有这个老式接口了.这个 ...

  6. USB扫描枪设置流程 扫描枪使用

    第一步:安装驱动 将光盘放到光驱中,打开后找到Symbol+COM+Port+Emulation+Driver+v+1.8.5.zip压缩包,减压后点击安装.压缩包如下如图所示: 第二步:设置扫描枪 ...

  7. E3000Y影像二维扫描枪(配YoKo引擎开发板)的串口调试

    实现E3000Y影像二维扫描枪串口调试 概述 一.E3000Y影像二维扫描枪 二.YoKo引擎开发板 三.E3000Y识读引擎 四.串口调试控制方式步骤 1.模块安装步骤 2.串口调试步骤 3.扫描二 ...

  8. 扫描枪设置虚拟串口linux,顶码扫描枪全能王TP20Y怎么设置USB虚拟串口模式?

    顶码全能王TP20Y是一款极具性价比的二维影像手持扫描枪,可以读取所有一维.二维条码,外形小巧,价格实惠,卓越的工业保护设计,坚固耐用,适用于超市.便利店的零售收银.自动化办公与文件管理.邮件与包裹的 ...

  9. VB编写欧姆龙PLC和霍尼韦尔扫描枪 的串口调试程序,可供大家参考

    VERSION 5.00 Object = "{648A5603-2C6E-101B-82B6-000000000014}#1.1#0"; "MSCOMM32.OCX&q ...

最新文章

  1. 20100506 学习记录:grdview添加新的一行数据
  2. Centos7.2部署各类服务
  3. 5 日期范围查询_MySQL(四)——复杂查询
  4. SpringBoot集成JPA
  5. java安全编码指南之:ThreadPool的使用
  6. 实际操作之路考的这些事
  7. matlab程序svm四等级分类,支持向量机(SVM)多分类matlab程序代码
  8. dedecms织梦模板|绿色仿下载吧网站织梦dede模板源码
  9. centos7 下修改网络配置
  10. Mac Pycharm导入Pygame教程(超细)
  11. 用KMS激活了office2016之后为什么进入的时候还是提示需激活解决方案:
  12. ubuntu 安装迅雷
  13. 九、【服务器】服务器硬件名称中英文汇总2
  14. 开源问答Tipask伪静态apache和nginx设置
  15. c语言浮点数如何精确计算,浮点数精确运算的分析和解决办法
  16. Linux 创建线程 段错误,linux下线程池,出现Segmentation fault (core dumped) 问题
  17. Everything 离线搜索功能详解 – 再也不怕找不到文件!
  18. 【Spring boot 项目实践】基于Spring boot 的外卖系统
  19. GL 日记帐分录的种类(中英文对照)
  20. 把英文翻译成中文php,中文翻译成英文,英文翻译成中文(调用的有道翻译的api)示例源码...

热门文章

  1. Axmath插入交叉引用的公式编号
  2. Java游戏开发——俄罗斯方块
  3. 关于UFW防火墙应用小结
  4. javaweb的404报错
  5. STM32学习笔记一一触摸屏
  6. activity工作流调用子流程 callActivity
  7. 【C语言入门】编写程序,输入任意一个 1~7 之间的整数,将他们转换成对应的英文单词。
  8. 雷猴哇!用粤语还能写Python!
  9. Eclipse中修改Tomcat端口
  10. 编译Sophus报错: error: implicitly-declared 的参考解决方法