zoukankan      html  css  js  c++  java
  • 坤宏电子称 数据读取类

    1、电子称配置   

        按照说明书,将电子称的数据传输模式设置为模式2,即在测量稳定后会自动返回数据。其它的配置按照默认的。

    2、电子称的读取类

         按照厂家提供的通讯协议,对数据的读取进行了简单的封装。

    using System;
    using System.Collections.Generic;
    
    using System.Text;
    using System.IO.Ports;
    using System.Windows.Forms;
    using System.Diagnostics;
    
    
    /// <summary>
    /// 坤宏
    /// </summary>
    
    
    public class WeightMeterKH
    {
    
        //****************************************************** 字 段 ************************************************************************** 
        SerialPort _serialPort = new SerialPort();
        Form _frm;
    
    
    
        //*****************************************************  事 件 ***************************************************************************
        /// <summary>
        /// 称重数据返回事件。
        /// </summary>
        public event EventHandler WeightDataReceived;
    
    
    
        //****************************************************** 属 性 *************************************************************************** 
    
        /// <summary>
        /// 重量值。请将设备的单位设成克。
        /// </summary>
        public decimal WeightData
        {
            get
            {
                return _WeightData;
            }
        }
        decimal _WeightData;
    
    
    
    
    
    
    
        //****************************************************** 构造函数  ******************************************************************* 
    
        /// <summary>
        /// 私有构造函数,防止类被实例化
        /// </summary>
        private WeightMeterKH()
        {
        }
    
    
        //****************************************************** 方 法  ******************************************************************* 
    
    
    
        /// <summary>
        /// 创建一个单例。只能通过CreateInstance方法来创建
        /// </summary>
        public static WeightMeterKH CreateInstance()
        {
            return instance;
        }
        private static readonly WeightMeterKH instance = new WeightMeterKH();
    
    
    
    
        /// <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对象
                _serialPort.PortName = portName;
                _serialPort.BaudRate = 9600; // 请将设备的波特率设置为此。
                _serialPort.Open();
                _serialPort.DataReceived += _serialPort_DataReceived;   //添加事件注册
            }
            catch( Exception e )
            {
                MessageBox.Show( e.Message );
            }
        }
    
    
    
    
    
    
        /// <summary>
        /// 关闭设备。
        /// </summary>
        public void Close()
        {
            if( _serialPort.IsOpen == true )
            {
                _serialPort.Close();
                _serialPort.Dispose();
            }
        }
    
    
        /// <summary>
        /// 在电子称的模式用不上,使用指令取得重量值
        /// </summary>
        public void GetWeightData()
        {
            if( _serialPort.IsOpen == true )
            {
                _serialPort.Write( "RN" );  // Read Net weight
            }
            else
            {
                MessageBox.Show( "读值失败:串口没有打开。" );
            }
        }
    
    
    
    
    
        /// <summary>
        /// 串口数据接收函数。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void _serialPort_DataReceived( object sender, SerialDataReceivedEventArgs e )
        {
            string strRaw = _serialPort.ReadLine();
            //其数据由三个部分构成,用逗号分隔的,可以转换为一个数组。数据示例:ST,NT,   74.06 kg
            string[] strs = strRaw.Split( new char[] { ',' } );
            string str3 = strs[ 2 ].Trim(); // 重量数据的第三个部分,返回的数据就是 74.06 kg
            string strWeight = str3.Substring( 0, str3.Length - 2 ).Trim();
    
            bool flag = decimal.TryParse( strWeight, out _WeightData );
    
            if( flag == false )
            {
                MessageBox.Show( "电子称数据转换失败!" );
                // 写入日志
                StringBuilder sb = new StringBuilder();
                sb.AppendLine( DateTime.Now.ToString() + " 电子称数据转换失败" );
                sb.AppendLine( "    原始数据为:" + strRaw );
                sb.AppendLine( "    第三部分去除单位后的数据为:" + strWeight + "
    " );
                Trace.Write( sb.ToString() );
            }
            else
            {
                if( this.WeightDataReceived != null )
                {
                    _frm.Invoke( ( EventHandler ) ( delegate
                    {
                        this.WeightDataReceived( this, new EventArgs() );
                    } ) );
                }
            }
        }
    
    
    
    
        /// <summary>
        /// 在窗体关闭的时候关闭串口连接。
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void _frm_FormClosing( object sender, FormClosingEventArgs e )
        {
            this.Close();
        }
    
    }
    View Code

        调用方式:

     public partial class Form1 : Form
        {
            //*******************************   全局变量  ******************************
            WeightMeterKH _meter = WeightMeterKH.CreateInstance();
    
    
            public Form1()
            {
                InitializeComponent();
            }
    
    
    
            private void Form1_Load( object sender, EventArgs e )
            {
                _meter.Open( "COM10", this );
                _meter.WeightDataReceived += new EventHandler( _meter_WeightDataReceived );
    
            }
    
    
    
    
            /// <summary>
            /// 重量数据返回事件处理
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            void _meter_WeightDataReceived( object sender, EventArgs e )
            {
                lblWeight.Text = _meter.WeightData.ToString();
    
            }
        }
    View Code
  • 相关阅读:
    在路上——7月英语
    Today is a special day for English Topic
    三级网络-不单单是学知识
    停下是为了更好的出发
    量变引发质变--【2015年计算机年终总结】
    这个月,小美很忙
    一个人牛逼不如一群人一起牛逼——致我最亲爱的程序员
    掀起你的盖头来--【2015年英语年终总结】
    平凡之路之小美
    小美的猴年年中总结,挪不开眼~
  • 原文地址:https://www.cnblogs.com/dehai/p/4303734.html
Copyright © 2011-2022 走看看