C#串口扫描枪的简单实现
原文:C#串口扫描枪的简单实现
串口扫描枪的简单实现
基于串口通讯的扫描枪的实现,主要借助SerialPort类,表示串行端口资源。实现很简单:
工具:usb转RS232转接头/个,扫描枪/套,
扫描枪串口接入转接头,转接头插电脑

接下来具体代码实现
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.IO.Ports;
using System.Threading; namespace SerialScannerDemo
{
public partial class SerialScanner : Form
{
public SerialScanner()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
InstanceSerialPort();
} /// <summary>
/// 实例化串行端口资源
/// </summary>
private void InstanceSerialPort()
{
//实例化串行端口
SerialPort serialPort = new SerialPort();
//端口名 注:因为使用的是USB转RS232 所以去设备管理器中查看一下虚拟com口的名字
serialPort.PortName = "COM5";
//波特率
serialPort.BaudRate = ;
//奇偶校验
serialPort.Parity = Parity.None;
//停止位
serialPort.StopBits = StopBits.One;
//数据位
serialPort.DataBits = ;
//忽略null字节
serialPort.DiscardNull = true;
//接收事件
serialPort.DataReceived += serialPort_DataReceived;
//开启串口
serialPort.Open();
} /// <summary>
/// 接收数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void serialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
SerialPort serialPort = (SerialPort)sender;
//开启接收数据线程
Thread threadReceiveSub = new Thread(new ParameterizedThreadStart(ReceiveData));
threadReceiveSub.Start(serialPort);
}
catch (Exception ex)
{
SetMessage(ex.Message);
}
} private void ReceiveData(object serialPortobj)
{
try
{
SerialPort serialPort = (SerialPort)serialPortobj; //防止数据接收不完整 线程sleep(100)
System.Threading.Thread.Sleep(); string str = serialPort.ReadExisting(); if (str == string.Empty)
{
return;
}
else
{
SetMessage(str);
}
}
catch (Exception ex)
{
SetMessage(ex.Message);
}
}
/// <summary>
/// 添加记录
/// </summary>
/// <param name="msg"></param>
private void SetMessage(string msg)
{
richTextBox1.Invoke(new Action(() => { richTextBox1.AppendText(msg + "\r\n"); }));
}
}
}
注:因为使用的是USB转RS232 所以去设备管理器中查看一下虚拟com口的名字
接下来测试
找一张带有条码的包装袋或者印有条码的纸扫描

测试完成
顺便说一下,基于以太网的扫描枪的实现,其实将扫描枪当做是一个客户端,扫描完成一次相当于发送了一次基于TCP或者UDP的请求,使用的socket服务器略加改变就能实现
c#Socket服务器与客户端的开发(1)
源码:
链接:https://pan.baidu.com/s/1mdcj_I8W0RTi-PIs1YBdhA
提取码:xs8d
C#串口扫描枪的简单实现的更多相关文章
- Ajax跨域问题及解决方案 asp.net core 系列之允许跨越访问(Enable Cross-Origin Requests:CORS) c#中的Cache缓存技术 C#中的Cookie C#串口扫描枪的简单实现 c#Socket服务器与客户端的开发(2)
Ajax跨域问题及解决方案 目录 复现Ajax跨域问题 Ajax跨域介绍 Ajax跨域解决方案 一. 在服务端添加响应头Access-Control-Allow-Origin 二. 使用JSONP ...
- 1900型USB接口扫描枪设置虚拟串口模式提升扫描速度
在使用扫描枪的过程中,发现扫描二维码速度比较慢,不到100个字符,花了大概2-3秒的时间才完成显示,这个速度不能忍受啊.通过度娘,说是可以将USB键盘模式接收字符转换成虚拟串口接收,这样可以大大提高速 ...
- C#利用控件mscomm32.ocx读取串口datalogic扫描枪数据
1).开发环境VS12,语言C# 2).扫描枪品牌:datalogic 4470 3).通讯协议:串口 1.首先,第一步创建一个新工程,windows窗体应用程序,命名为TestScanner,如下: ...
- 扫描枪连接zebra打印机打印条码标签无需电脑
在一些流水线生产的现场,需要及时打印条码标签,由于现场环境和空间限制,无法摆放电脑或者通过连接电脑来打印条码标签的速度太慢, 瑞科条码特提供了一套扫描枪直接连接条码打印机,扫描枪扫描条码之后直接打印输 ...
- SilverLight 条码 扫描枪 MVVM(转载)
目前做SL项目时,遇到条码的问题. 客户需要通过条码来加快工作效率以及减少错误.有条码,自然便引入扫描枪这个东西.不解释. 关键点是:扫描枪每次扫描完毕会触发回车 这是解决问题的关键! 现有两种情景: ...
- JavaScript 扫描枪使用(一)
JavaScript 扫描枪应用(一)com.js为主要的代码实现,test.html文件为测试的页面,其中包括了com.js文件中方法的调用.以下为测试成功代码:com.js //com.js /* ...
- Winform让扫描枪听话,防止在有焦点的地方就扫码输入的尴尬
关注点: 1.扫描枪在扫描到条码后会在有焦点的地方显示扫描到的条码并且可设置扫码后添加回车换行让我很尴尬 2.怎样拦截扫码输入,扫描到条码就自动会嘀一声.不要这么智能行不行.瞎BB 需求详解 公司生产 ...
- PDA 收银系统PDA手持打印扫描枪 销售开单 收银 扫描打印一体机
在零售方面也有很好的应用.如在一些高端品牌零售店,营业员可以随身导购,一站式完成了商品销售和收银,很是受消费者追捧,符合了企业对客户体验以及行业领先的追求. PDA收银系统是一款多功能可以取代专业收银 ...
- C# Winform中无焦点状态下获取键盘输入或者USB扫描枪数据
类文件: C#类文件 using System; using System.Collections.Generic; using System.Text; using System.Runtime.I ...
随机推荐
- Android Asynchronous Http Client
Features Make asynchronous HTTP requests, handle responses in anonymous callbacks HTTP requests happ ...
- bootstrap Table 服务端处理分页 后台是.net
要考虑函数可被可重复使用(调用),需要将可变化的变为参数封装起来 function HQCreatTables(ob) { var option = { method: 'get', dataType ...
- 打造颠覆你想象中的高性能,轻量级的webform框架---js直接调后台的封装(第三天)
如果你没有看我第二天写的内容的,我想你是看不懂的!!!! 好了,废话不多说,怎么才能让我们的代码变得牛逼起来呢?怎么封装我们的代码呢?我们不可能 每个页面都需要那样写吧,那我们来一步一步来封装 我们的 ...
- IOS tabelView退出键盘
/** *当开始拖拽表格的时候就会调用 * */ -(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { //退出键盘 [sel ...
- World Wind Java开发之三 显示状态栏信息(转)
http://blog.csdn.net/giser_whu/article/details/40920315 先来看下本篇博客索要达到的效果: 找到源码下的gov.nasa.worldwind.ut ...
- 5分钟了解Java 12 八大新特性
Java 12 终于发布了,我们一起来看一看 Java 12 中的新特性.通过本文可以在5分钟内快速了解 Java 12 新特性. 1 Switch 表达式 使用Java 12,switch不仅可以作 ...
- 在RichTextBox控件中添加超链接文本
实现效果: 知识运用: RichTextBox控件的AppendText方法 public void AppendText{string textData} //向控件中添加文本内容 和Process ...
- fflush - 刷新一个流
SYNOPSIS 总览 #include <stdio.h> int fflush(FILE *stream); DESCRIPTION 描述 函数 fflush 强制在所给的输出流或更新 ...
- Python02 变量
变量 因为Python是弱变量类型编程语言,所以变量赋值不需要类型声明. 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息. 每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 变量 ...
- MacOS内核调试环境搭建
http://ddeville.me/2015/08/using-the-vmware-fusion-gdb-stub-for-kernel-debugging-with-lldb http://dd ...