您的位置:首页 > 其它

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

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

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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: