生产线称重实时打印条码标签

     由于生产的一些产品,包装后需要把产品的毛重实时打印到包装的标签上去,但一些工业用电子秤(电子磅)等称重器,都不带实时标签打印功能,即使一些超市用的称重器能打印标签,但如果换了不同标签格式,修改起来也比较麻烦。所以需要开发一套软件来实时采集称重器的重量数据,并按设置好的标签格式实时打印一个包装箱的条码标签。

1.获取电子秤称重数据

称重器采用了上海耀华的XK3190-A7,

上海耀华电子秤

     将电子秤跟电脑连上,接收数据一看,数据是连续发送,而且还没稳定的称重数据也都发送过来了,发送的数据还是高位和低位颠倒的,看来还得费一番功夫去解析数据和算法判断称重是否已经稳定了。电子秤发送过来的数据截图如下:

电子秤发送的数据

解析电子秤数据的代码

/// <summary>
    /// 电子秤对象:
    /// </summary>
    public class ElectronicScale
    {
        /// <summary>
        /// 连续相同重量次数
        /// </summary>
        private int _sameCount = 20;
        /// <summary>
        /// 误差范围
        /// </summary>
        private decimal _errorLimit = 0.5M;
        /// <summary>
        /// 计数
        /// </summary>
        private int _readCount = 0;
        /// <summary>
        /// 上一次读数
        /// </summary>
        private decimal _lastWeight;
        /// <summary>
        /// 最小重量起
        /// </summary>
        private decimal _minWeight = 0.2M;

        /// <summary>
        /// 重量队列,先进先出
        /// </summary>
        private Queue _dataQueue = new Queue();

        /// <summary>
        /// 是否有新的重物
        /// </summary>
        private bool _isChanged = true;

        #region 构造函数

        public ElectronicScale()
        {
        }
        #endregion

        #region 属性
        /// <summary>
        /// 最小起秤重量
        /// </summary>
        public decimal MinWeight
        {
            get
            { return _minWeight; }
            set
            { _minWeight = value; }
        }
        /// <summary>
        /// 频率(连续相同重量次数,5--10)
        /// </summary>
        public int SameCount
        {
            get
            { return _sameCount; }
            set
            {
                _sameCount = value;
            }
        }
        /// <summary>
        /// 误差范围(设置为重物的最小重量)
        /// </summary>
        public decimal ErrorLimit
        {
            get
            {
                return _errorLimit;
            }
            set
            {
                _errorLimit = value;
            }
        }
        /// <summary>
        /// 接收到的重量队列
        /// </summary>
        public Queue WeightQueue
        {
            get { return _dataQueue; }
        }
        #endregion

        public void OnDataReceived(object sender, WeightEventArgs e)
        {
            try
            {
                decimal weight = e.Weight;                
                if (weight <= _minWeight)
                {
                    _readCount = 0;
                    _isChanged = true;
                }
                if (Math.Abs(weight - _lastWeight) <= _errorLimit)
                {
                    //连续在误差范围里,就开始计数
                    _readCount++;
                }
                _lastWeight = weight;
                if (_readCount >= _sameCount && _isChanged)
                {
                    if (weight <= _minWeight)
                        return;
                    _dataQueue.Enqueue(weight);
                    _lastWeight = weight;
                    _isChanged = false;
                }
                //string recevieData = _serialPort.ReadExisting();
                //string logData=DateTime.Now.ToString("hh:mm:ss")+":"+recevieData;
                //if (_dataQueue.Count > 0)
                //{
                //    InvokeRichText.Log(this.richTextBox1, LogMsgType.Receiving, _dataQueue.Dequeue().ToString() + "\r\n");
                //}
            }
            catch
            {
            }
        }
    }

2. 连接条码打印机打印条码标签

   取得称重数据后,还得及时驱动条码打印机开始打印条码标签。条码打印机采用Zebra 105S,为了提高生产线实时打印速度,所以采用指令打印方式。

称重打印条码

转载于:https://www.cnblogs.com/haoyue/archive/2010/07/14/1777500.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值