honeywell 1500/1300条码枪的串口读写类

using System;
using System.Collections.Generic;
using System.Text;
using System.IO.Ports;
using System.Windows.Forms;
using System.Threading;
using System.IO;
namespace QMS.Infrastructure
{
    public class BarcodeScanner
    {
        //****************************************************** 字 段 **************************************************************************
        /// <summary>
        /// 串口对象。
        /// </summary>
        SerialPort comm = new SerialPort();
        /// <summary>
        /// 窗体对象。
        /// </summary>
        Form _frm;
        //****************************************************** 属 性 ***************************************************************************
        /// <summary>
        /// 返回条码值。应当在条码扫描完毕事件发生时,再去取条码值。
        /// </summary>
        public string Barcode
        {
            set;
            get;
        }
        //*****************************************************  事 件 ***************************************************************************
        /// <summary>
        /// 扫描完毕事件。
        /// </summary>
        public event EventHandler ScanFinished;
        //****************************************************** 方 法  *******************************************************************
        /// <summary>
        /// 打开设备。
        /// </summary>
        /// <param name="portName">串口号</param>
        /// <param name="frm">窗体</param>
        public void Open( string portName, Form frm )
        {
            try
            {
                // 初始化窗体对象
                _frm = frm;
                _frm.FormClosing += new FormClosingEventHandler( _frm_FormClosing );
                //初始化SerialPort对象
                comm.PortName = portName;
                comm.BaudRate = 19200; //honeywell的是这个值
                comm.Open();
                comm.DataReceived += comm_DataReceived;   //添加事件注册
            }
            catch( Exception e )
            {
                MessageBox.Show( e.Message );
            }
        }
        /// <summary>
        /// 条码枪进行扫描。
        /// </summary>
        public void Scan()
        {
            // 扫描超时监视
            //    tmr.Enabled = true;
            // 触发扫描
            byte[] b = { 22, 84, 13 }; //十六进制数为16 54 0d,括号中为这三个数的十进制形式
            string s = System.Text.Encoding.ASCII.GetString( b );
            if( comm.IsOpen == true )
            {
                comm.Write( s );
            }
            else
            {
                MessageBox.Show( "无法触发扫描枪扫描!请检查连线或重启程序" );
            }
        }
        /// <summary>
        /// 关闭设备。
        /// </summary>
        public void Close()
        {
            if( comm.IsOpen == true )
            {
                comm.Close();
                comm.Dispose();
            }
        }
        //******************************************************  内部函数  *******************************************************************
        /// <summary>
        /// 串口数据接收函数。当接收到数据时,则引发ScanFinished事件。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void comm_DataReceived( object sender, SerialDataReceivedEventArgs e )
        {
            // 扫描超时监视。数据返回,则关闭监视
            // tmr.Enabled = false;
            // 读取串口返回值
            this.Barcode = comm.ReadLine().Trim();
            // 引发事件
            if( this.ScanFinished != null )
            {
                _frm.Invoke( new MethodInvoker( delegate
                {
                    this.ScanFinished( this, new EventArgs() );
                } ) );
            }
        }
        /// <summary>
        /// 在窗体关闭的时候关闭串口连接。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void _frm_FormClosing( object sender, FormClosingEventArgs e )
        {
            this.Close();
        }
    }
}


知识共享许可协议
《honeywell 1500/1300条码枪的串口读写类》常伟华 创作。
采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。
  • 多说评论
  • 签名
  • 新浪微博
  • 默认评论
  • Tab Header 5

0 条评论 / 点击此处发表评论

Tab Content 5

开发技术


开发平台和工具

sitemap     177.77ms