首页 > 编程语言 >C#串口扫描枪的简单实现

C#串口扫描枪的简单实现

时间:2023-07-21 15:45:05浏览次数:48  
标签:扫描枪 C# System serialPort 串口 using SerialPort

串口扫描枪的简单实现

基于串口通讯的扫描枪的实现,主要借助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#,System,serialPort,串口,using,SerialPort
From: https://www.cnblogs.com/mq0036/p/17571556.html

相关文章

  • C#原生Socket服务器与客户端的实现
    上个项目中用到了Socket通讯,项目中直接借助SuperSocket实现,但是我觉得这毕竟是一个我没接触过的东西,所以也顺便学习了一下原生socket的使用,做了一个socket服务器与客户端的开发.本人菜鸟一枚,只做了一个简单的实现,希望有看到我博客的大佬不吝指点,抱拳!socket通讯......
  • Linux - Check If File Is Empty Or Not Using Shell Script
    Linux-CheckIfFileIsEmptyOrNotUsingShellScriptHowdoIcheckifafileisemptyornotusingbashorkshshellscriptunderaUNIX/Linux/macOS/OSX/BSDfamilyofoperatingsystems?HowdoIcheckifafileisemptyinBash?Youcanuse......
  • apache 代码库的语言分布
    apache代码库的语言分布排行榜:htmljavaxmlc++jsonjavascriptcpython对这个排行多少有些意外。首先,php没有进入前八,javascript排行不高。xml/json排行之高在于大部分人还是喜欢用文件做数据存储?或者是因为项目数据比较小?html占据第一位,但html主要是描述性,而不是......
  • Intellij IDEA 显示 access.log 日志
    先配置  SpringBoot记录access.log日志,先让accesslog 显示出来  ......
  • C#倒计时关闭提示框
    前两天实现某个功能需要做一个提示框并且能够自动关闭的,就从网上搜了一个能够自动关闭的提示框,但由于我需要的场景是不确定计时时间的,所以并没有使用到该窗体,但是我觉得可以留存备用,后边也把我这种倒计时的提示框用处还是很多的,用于自动弹窗自动关闭,虽然在我的项目......
  • Go:Missing type in composite literal
    在使用含字符串数组的结构体时,我出现了以下问题1packagemain23import"github.com/gin-gonic/gin"45typeMyJsonstruct{6Functions[]string`json:"functions"`7Descstring`json:"desc"`8}910funcmain(){11......
  • Silverlight工作流控件功能缺失,Windows Server操作系统 IIS添加WCF功能
    注:Silverlight工作流控件,如果在网页中打不开,则要判断是否缺少Silverlight工作流控件的插件程序,如果不是则可以进行一下步骤检查,如果是以下原因则是:由于IIS版本问题,安装后可能出现不支持wcf服务的请求处理,需要手动添加处理程序;数据库客户端如果是64位,需要修改iis应用池启用32位。......
  • Classical Management: emphasized rationality and making organizations and worker
    Classicalapproach:Firststudiesofmanagement,whichemphasized:rationalitymakingorganizationsandworkersasefficientaspossibleMaxWeber’sBureaucracy(OrganationalMachine)wasanattempttoformulatetheBureaucracyanidealprototypefororg......
  • 基于vite的前端模板库create-xg
    一个类似于create-vite的快速生成模板,因为create-vite创建的项目模板只有最基础的东西,仍然需要安装第三方依赖如ui库等,还未达到开箱即用的程度。于是自己动手实现一个类似的模板库,包含vue/react、路由、ui库、axios、mock数据,可以在此基础上直接开发业务代码,避免重复的环境搭......
  • docker配置
    在ubuntu22.04.2版本配置 更新系统软件包:sudoaptupdate安装所需的依赖包,以允许APT使用HTTPS:sudoaptinstallapt-transport-httpsca-certificatescurlsoftware-properties-common添加Docker官方的GPG密钥:curl-fsSLhttps://download.docker.com/linux/ubun......