基于C#的串口扫描枪通信实战 您所在的位置:网站首页 新大陆扫码枪扫不上吗 基于C#的串口扫描枪通信实战

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

2024-07-15 03:31| 来源: 网络整理| 查看: 265

今天搞大事,观众们动起来,搞事的目的是 掌握串口通信及winform开发技术

硬件设备:1、串口激光扫描枪,注意是串口,不是USB口

 

 

                   2、USB转串口的连接线一根,如图连接所示

                  3、USB扩展器一个,如果你电脑USB口较多,可不用这个,如下图

                  4、香烟槟榔矿泉水,鸡腿等实物商品,用来扫的,用来点赞的

硬件连接拓扑图:

 软件环境:VS2019,C#,WINFORM

1、打开VS2019,创建窗体项目,命名为SerialPortScanner

 2、添加工具条,文本框控件,布局如下

 3、查看电脑设备管理器中的串口,并在app.config文件中添加配置项

 

 4、添加引入

 5、编写事件代码

 

 

 

 代码中用到SerialPortHelper帮助类,用于串口的初始化,接收事件,参数设置等,代码:

using System; using System.Collections.Generic; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SerialPortScanner { /// /// 串口帮助类 /// public class SerialPortHelper { /// /// 定义委托 /// /// public delegate void ShowMesgDelegate(string info); /// /// 委托对象 /// public ShowMesgDelegate myShowMsg; private SerialPort myCom = new SerialPort();//串口对象 /// /// 串口属性 /// public SerialPort MyCom { get { return myCom; } set { myCom = value; } } private byte myReceiveByte = 0;//接收字节 private byte[] bData = new byte[1024];//接收的字节数组 private int index = 0; /// /// 打开串口 /// /// public void OpenMyConn(SerialPortModel entiry) { if (myCom.IsOpen) { myCom.Close();//关闭 } myCom.PortName = entiry.PortName;//串口名称 myCom.BaudRate = entiry.BaudRate;//波特率 myCom.DataBits = entiry.DataBits;//数据位 myCom.StopBits = entiry.StopBits;//停止位 myCom.Parity = entiry.Parity;//校验位 myCom.ReceivedBytesThreshold = 1;//设置串口缓冲区的字节数 myCom.DataReceived += MyCom_DataReceived;//串口接收数据事件 myCom.Open();//打开串口 } /// /// 串口接收事件 /// /// /// private void MyCom_DataReceived(object sender, SerialDataReceivedEventArgs e) { //#region 写法1 //index = 0; //while (MyCom.BytesToRead > 1)//循环读取缓冲区的数据 //{ // myReceiveByte = (byte)MyCom.ReadByte();//从缓冲区读取一个字节数据 // bData[index] = myReceiveByte;//将读取到的一个字节数据存放在字节数组中 // //string txt = Encoding.ASCII.GetString(bData, 0, index);//将字节转换成字符串 // myShowMsg(txt); // index++; // if (index >= 1024) // { // index = 0; // MyCom.DiscardInBuffer();//丢弃缓冲区的数据 // return; // } //} //if (index > 0) //{ // //数据解析 // string txt = Encoding.ASCII.GetString(bData, 0, index);//将字节转换成字符串 // myShowMsg(txt); //} //#endregion #region 写法2 //读取串口缓冲区的字节数据 byte[] result = new byte[MyCom.BytesToRead]; MyCom.Read(result, 0, MyCom.BytesToRead); string str = Encoding.UTF8.GetString(result); myShowMsg(str); #endregion } /// /// 关闭串口 /// public void CloseMycom() { if (MyCom.IsOpen) { MyCom.Close();//关闭 } } } }

SerialPortModel实体类代码:

using System; using System.Collections.Generic; using System.IO.Ports; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SerialPortScanner { /// /// 串口实体模型 /// public class SerialPortModel { /// /// 端口号 /// public String PortName { get; set; } /// /// 波特率 /// public int BaudRate { get; set; } /// /// 数据位 /// public int DataBits { get; set; } /// /// 停止位 /// public StopBits StopBits { get; set; } /// /// 校验位 /// public Parity Parity { get; set; } } }

6、运行程序,首先建立连接

 

 扫一扫香烟,兵狼,矿泉水,瓜子,鸡腿等,所有的有条形码的商品都可以扫到,效果不错。

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有