zoukankan      html  css  js  c++  java
  • 生产线称重实时打印条码标签

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

    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,为了提高生产线实时打印速度,所以采用指令打印方式。

    称重打印条码

  • 相关阅读:
    PHP计算两个绝对路径的相对路径
    mysql触发器的使用 想让b字段在更新的时候把旧数据保存到a字段中
    LHC大神问的矩阵转置问题
    母牛2年生小牛 5年后并死去的算法
    switch和continue的关系
    逐行读取文件示例
    安装Harbor管理镜像服务
    解决:ElasticSearch ClusterBlockException[blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];
    Jenkins教程(五)构建Java服务Docker镜像
    Nacos高可用集群解决方案-Docker版本
  • 原文地址:https://www.cnblogs.com/haoyue/p/1777500.html
Copyright © 2011-2022 走看看