honeywell 1500/1300条码枪的串口读写类_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > honeywell 1500/1300条码枪的串口读写类

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

 2015/2/7 18:36:16  德海  程序员俱乐部  我要评论(0)
  • 摘要:此类用于honeywell1500/1300条码枪的串口读写,可实现控制条码枪扫描,并从条码枪中取得扫描的数据。使用条码枪的串口模式有以下几个好处:(1)避免因文本框失去焦点而导致录入失败。(2)可与自动化设备配合。/*----------------------------------------------------------------//文件名:BarcodeScanner.cs//文件功能描述:条码扫描枪类。用于控制条码枪进行扫描。////创建标识:leo2012.10
  • 标签:

   此类用于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();
        }

    }
}

 

  • 相关文章
发表评论
用户名: 匿名