首页 > 学院 > 开发设计 > 正文

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

2019-11-17 02:34:33
字体:
来源:转载
供稿:网友

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

此类用于honeywell1500/1300条码枪的串口读写,可实现控制条码枪扫描,并从条码枪中取得扫描的数据。使用条码枪的串口模式有以下几个好处:

(1)避免因文本框失去焦点而导致录入失败。

(2)可与自动化设备配合。

/*----------------------------------------------------------------// 文件名:BarcodeScanner.cs// 文件功能描述:条码扫描枪类。用于控制条码枪进行扫描。//// 创建标识:leo 2012.10.16//// 修改标识:// 修改描述://// 修改标识:// 修改描述://----------------------------------------------------------------*/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();        }    }}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表