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

   此类用于honeywell 1500/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();

        }



    }

}

 

你可能感兴趣的:(500)