• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

C#的串口扫描枪通信

武飞扬头像
hqwest
帮助1

今天搞大事,观众们动起来,搞事的目的是

掌握串口通信及winform开发技术

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

学新通

学新通 

 学新通

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

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

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

硬件连接拓扑图:

学新通

 软件环境:VS2019,C#,WINFORM

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

学新通

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

学新通

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

 学新通

 4、添加引入

学新通

 5、编写事件代码

学新通

 学新通

 学新通

 学新通

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

  1.  
    using System;
  2.  
    using System.Collections.Generic;
  3.  
    using System.IO.Ports;
  4.  
    using System.Linq;
  5.  
    using System.Text;
  6.  
    using System.Threading.Tasks;
  7.  
     
  8.  
    namespace SerialPortScanner
  9.  
    {
  10.  
    /// <summary>
  11.  
    /// 串口帮助类
  12.  
    /// </summary>
  13.  
    public class SerialPortHelper
  14.  
    {
  15.  
    /// <summary>
  16.  
    /// 定义委托
  17.  
    /// </summary>
  18.  
    /// <param name="info"></param>
  19.  
    public delegate void ShowMesgDelegate(string info);
  20.  
    /// <summary>
  21.  
    /// 委托对象
  22.  
    /// </summary>
  23.  
    public ShowMesgDelegate myShowMsg;
  24.  
     
  25.  
    private SerialPort myCom = new SerialPort();//串口对象
  26.  
    /// <summary>
  27.  
    /// 串口属性
  28.  
    /// </summary>
  29.  
    public SerialPort MyCom
  30.  
    {
  31.  
    get
  32.  
    {
  33.  
    return myCom;
  34.  
    }
  35.  
    set
  36.  
    {
  37.  
    myCom = value;
  38.  
    }
  39.  
    }
  40.  
     
  41.  
    private byte myReceiveByte = 0;//接收字节
  42.  
    private byte[] bData = new byte[1024];//接收的字节数组
  43.  
    private int index = 0;
  44.  
     
  45.  
    /// <summary>
  46.  
    /// 打开串口
  47.  
    /// </summary>
  48.  
    /// <param name="entiry"></param>
  49.  
    public void OpenMyConn(SerialPortModel entiry)
  50.  
    {
  51.  
    if (myCom.IsOpen)
  52.  
    {
  53.  
    myCom.Close();//关闭
  54.  
    }
  55.  
    myCom.PortName = entiry.PortName;//串口名称
  56.  
    myCom.BaudRate = entiry.BaudRate;//波特率
  57.  
    myCom.DataBits = entiry.DataBits;//数据位
  58.  
    myCom.StopBits = entiry.StopBits;//停止位
  59.  
    myCom.Parity = entiry.Parity;//校验位
  60.  
    myCom.ReceivedBytesThreshold = 1;//设置串口缓冲区的字节数
  61.  
    myCom.DataReceived = MyCom_DataReceived;//串口接收数据事件
  62.  
    myCom.Open();//打开串口
  63.  
    }
  64.  
    /// <summary>
  65.  
    /// 串口接收事件
  66.  
    /// </summary>
  67.  
    /// <param name="sender"></param>
  68.  
    /// <param name="e"></param>
  69.  
    private void MyCom_DataReceived(object sender, SerialDataReceivedEventArgs e)
  70.  
    {
  71.  
    //#region 写法1
  72.  
    //index = 0;
  73.  
    //while (MyCom.BytesToRead > 1)//循环读取缓冲区的数据
  74.  
    //{
  75.  
    // myReceiveByte = (byte)MyCom.ReadByte();//从缓冲区读取一个字节数据
  76.  
    // bData[index] = myReceiveByte;//将读取到的一个字节数据存放在字节数组中
  77.  
    // //string txt = Encoding.ASCII.GetString(bData, 0, index);//将字节转换成字符串
  78.  
    // myShowMsg(txt);
  79.  
    // index ;
  80.  
    // if (index >= 1024)
  81.  
    // {
  82.  
    // index = 0;
  83.  
    // MyCom.DiscardInBuffer();//丢弃缓冲区的数据
  84.  
    // return;
  85.  
    // }
  86.  
    //}
  87.  
    //if (index > 0)
  88.  
    //{
  89.  
    // //数据解析
  90.  
    // string txt = Encoding.ASCII.GetString(bData, 0, index);//将字节转换成字符串
  91.  
    // myShowMsg(txt);
  92.  
    //}
  93.  
    //#endregion
  94.  
     
  95.  
    #region 写法2
  96.  
    //读取串口缓冲区的字节数据
  97.  
    byte[] result = new byte[MyCom.BytesToRead];
  98.  
    MyCom.Read(result, 0, MyCom.BytesToRead);
  99.  
    string str = Encoding.UTF8.GetString(result);
  100.  
    myShowMsg(str);
  101.  
    #endregion
  102.  
     
  103.  
    }
  104.  
     
  105.  
    /// <summary>
  106.  
    /// 关闭串口
  107.  
    /// </summary>
  108.  
    public void CloseMycom()
  109.  
    {
  110.  
    if (MyCom.IsOpen)
  111.  
    {
  112.  
    MyCom.Close();//关闭
  113.  
    }
  114.  
    }
  115.  
    }
  116.  
    }
学新通

SerialPortModel实体类代码:

  1.  
    using System;
  2.  
    using System.Collections.Generic;
  3.  
    using System.IO.Ports;
  4.  
    using System.Linq;
  5.  
    using System.Text;
  6.  
    using System.Threading.Tasks;
  7.  
     
  8.  
    namespace SerialPortScanner
  9.  
    {
  10.  
    /// <summary>
  11.  
    /// 串口实体模型
  12.  
    /// </summary>
  13.  
    public class SerialPortModel
  14.  
    {
  15.  
    /// <summary>
  16.  
    /// 端口号
  17.  
    /// </summary>
  18.  
    public String PortName { get; set; }
  19.  
    /// <summary>
  20.  
    /// 波特率
  21.  
    /// </summary>
  22.  
    public int BaudRate { get; set; }
  23.  
    /// <summary>
  24.  
    /// 数据位
  25.  
    /// </summary>
  26.  
    public int DataBits { get; set; }
  27.  
    /// <summary>
  28.  
    /// 停止位
  29.  
    /// </summary>
  30.  
    public StopBits StopBits { get; set; }
  31.  
    /// <summary>
  32.  
    /// 校验位
  33.  
    /// </summary>
  34.  
    public Parity Parity { get; set; }
  35.  
    }
  36.  
    }
学新通

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

学新通

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

学新通

 学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfihkjj
系列文章
更多 icon
同类精品
更多 icon
继续加载