应用SerialPort实现串口扫码枪ST2200操作
来源:互联网 发布:超市积分软件多少钱 编辑:程序博客网 时间:2024/06/09 12:30
引用串口类:System.IO.Ports.SerialPort
直接贴代码:
/// <summary> /// 串口 扫描枪 /// </summary> public class ScanProvider { private SerialPort _serialPort; public ScanProvider(string portName, int baudRate) { _serialPort = new SerialPort(); this.RegisterSerialPort(portName, baudRate); _serialPort.DataReceived +=_serialPort_DataReceived; } #region Private Methods /// <summary> /// 注册串口 /// </summary> /// <param name="portName">串口名</param> /// <param name="baudRate">波特率</param> private void RegisterSerialPort(string portName, int baudRate) { // 串口名 _serialPort.PortName = portName; // 波特率 _serialPort.BaudRate = baudRate; // 数据位 _serialPort.DataBits = 8; // 停止位 _serialPort.StopBits = System.IO.Ports.StopBits.One; // 无奇偶校验位 _serialPort.Parity = System.IO.Ports.Parity.None; } #endregion #region Public /// <summary> /// 是否处于打开状态 /// </summary> public bool IsOpen { get { return _serialPort != null && _serialPort.IsOpen; } } /// <summary> /// 打开串口 /// </summary> /// <returns></returns> public bool Open() { if (_serialPort == null) return this.IsOpen; if (_serialPort.IsOpen) this.Close(); _serialPort.Open(); return this.IsOpen; } /// <summary> /// 关闭串口 /// </summary> public void Close() { if (this.IsOpen) _serialPort.Close(); } /// <summary> /// 向串口内写入 /// </summary> /// <param name="send">写入数据</param> /// <param name="offSet">偏移量</param> /// <param name="count">写入数量</param> public void Write(byte[] send, int offSet, int count) { if (this.IsOpen) { _serialPort.Write(send, offSet, count); } } public void Dispose() { if (this._serialPort == null) return; if (this._serialPort.IsOpen) this.Close(); this._serialPort.Dispose(); this._serialPort = null; } #endregion void _serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { // 等待100ms,防止读取不全的情况 Thread.Sleep(100); byte[] m_recvBytes = new byte[_serialPort.BytesToRead];//定义缓冲区大小 int result = _serialPort.Read(m_recvBytes, 0, m_recvBytes.Length);//从串口读取数据 if (result <= 0) return; string strResult = Encoding.ASCII.GetString(m_recvBytes, 0, m_recvBytes.Length);//对数据进行转换 _serialPort.DiscardInBuffer(); if (this.DataReceived != null) this.DataReceived(this, new SerialSortEventArgs() { Code = strResult }); } public event EventHandler<SerialSortEventArgs> DataReceived; #region Static /// <summary> /// 获取可用串口名称 /// </summary> /// <returns></returns> public static string[] GetComNames() { string[] names = null; try { names = SerialPort.GetPortNames(); } catch (Exception ex) { throw ex; } return names; } #endregion } public class SerialSortEventArgs { public string Code { get; set; } }
应用:
public partial class MainWindow : Window { ScanProvider _scanner; public MainWindow() { InitializeComponent(); // 打开串口 _scanner = new ScanProvider("COM1", 115200); // 打开串口 if (_scanner.Open()) //关联事件处理程序 _scanner.DataReceived += _scanner_DataReceived; } void _scanner_DataReceived(object sender, SerialSortEventArgs e) { this.Dispatcher.BeginInvoke(new Action<string>((args) => { this.txtIDCard.Text = args; }), e.Code); } }
其中波特率根据具体的扫码枪设定。
我的扫码枪型号:ScanHome ST2200 。
1 0
- 应用SerialPort实现串口扫码枪ST2200操作
- c#实现串口操作 SerialPort
- C#串口serialPort操作
- C#串口serialPort操作
- C#串口serialPort操作
- C#串口serialPort操作
- C#操作串口serialPort实例
- VS2010 + QT5 SerialPort 串口应用实例总结
- C#用SerialPort实现串口通讯
- 串口编程中SerialPort类介绍以及应用
- 串口编程中SerialPort类介绍以及应用
- 随便写个用SerialPort操作串口的简单例子
- 操作串口通信类(IO.Ports)-SerialPort
- vb.net利用SerialPort进行读取串口操作
- Android串口操作,简化android-serialport-api的demo
- Android串口操作,简化android-serialport-api的demo
- Android串口操作,简化android-serialport-api的demo
- vb.net利用SerialPort进行读取串口操作
- $.each
- 51nod 1006 最长公共子序列Lcs【LCS】
- Linux下Tomcat重新启动,及kill命令的使用
- 利用mina进行TCPSocket通信
- java-经纬度有关的计算(半径内的经纬度范围和两点间距离)
- 应用SerialPort实现串口扫码枪ST2200操作
- java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/LoopTag 解决方法
- Windows-cmd命令行常用命令
- Windows-常用快捷键
- 前端入门学习 DAY1-DAY2
- Android Log详解(Log.v,Log.d,Log.i,Log.w,Log.e)
- Mysql-两个表之间复制数据
- 查看npm的配置
- 1.初识Spring boot