基于串口通信的肉牛企业标签打印系统的研究和设计

2012-11-02 07:34沈明霞彭增起陈士进吴海娟刘超超谌启亮
食品工业科技 2012年8期
关键词:电子秤字符串胴体

梁 林,沈明霞,*,彭增起,陈士进,吴海娟,王 卫,刘超超,谌启亮

(1.南京农业大学工学院,江苏南京210031; 2.南京农业大学农业部农畜产品加工与质量控制重点开放实验室,江苏南京210095)

基于串口通信的肉牛企业标签打印系统的研究和设计

梁 林1,沈明霞1,*,彭增起2,陈士进1,吴海娟1,王 卫1,刘超超1,谌启亮2

(1.南京农业大学工学院,江苏南京210031; 2.南京农业大学农业部农畜产品加工与质量控制重点开放实验室,江苏南京210095)

介绍了现代肉牛企业信息管理系统中实用的串口通信技术和条码标签打印技术。在Visual C++6.0环境中用Microsoft Communication Control控件实现计算机与电子秤的串口通信,使计算机得到牛胴体或牛胴体分割肉的重量信息。然后利用Code128B条码规则实现重量、质量等级等信息的编码,并通过标签打印机把编码得到的条码打印出来。

电子秤,串口通信,Microsoft Communication Control,条码,Code128

近些年来,我国的食品安全问题层出不穷,每年频频出现的重大食品安全事件,不仅严重影响了人们的身体健康,造成了巨额的财产损失,而且也影响到了中国的经济发展、食品出口、社会稳定等一系列问题[1]。食品安全危机被认为是现代“溯源性”生产系统发展的直接动力,早在19世纪,“溯源性”生产系统就被应用于动物及动物产品的生产[2]。2000年末,欧洲肉类出口集团(EMEG)实施了新的“牛肉标签法”[3],欧盟基于新的“牛肉标签法”推出了牛肉“溯源性”生产系统,下游生产商及消费者可根据该系统下生产的肉食品所提供的条形码进行相关信息的全方面检查和考证[4],确保该肉食品的安全和优质。我国现代农业(肉牛)产业技术体系也越来越关注肉牛屠宰场追溯管理系统、屠宰场信息管理系统和牛肉分级系统的研究。获取牛胴体或牛胴体切块重量信息的串口通信技术和条形码打印技术能很好的应用到上述系统中,并能得到广泛的推广应用。条形码技术能有效地结合ERP(企业资源规划系统,Enterprise Resource Planning System)等管理信息系统,不仅可以对食品从生产到流通进行全程追踪,也可以仅就流通环节或某一区域食品流通情况进行全面追踪并且可以帮助企业提高运作效率及管理水平[5]。这些技术的推广能推动肉牛屠宰加工企业的生产技术和现代质量管理系统的建立和完善。

1 系统组成

系统硬件组成框图如图1所示,其中电子秤的称重仪表与计算机是通过RS-232C标准的串行接口连接,计算机与条码打印机是通过USB接口连接。计算机利用与称重仪表间串口通信接收并显示重量数据,然后把重量数据和其它待编码信息编码成条码字符串,最后利用条码打印机把条码和厂家信息等打印到标签纸上。

图1 系统硬件组成框图Fig.1 Hardware composition of the system

现代肉牛产业技术体系里,企业管理系统的重要组成部分是牛胴体和牛胴体切块产品信息的管理,在这样的生产管理系统中,牛胴体和牛胴体分割肉的重量信息是必不可少的[6]。电子秤作为现代计量设备,在我国工业、商业及其它行业得到了广泛的普及应用,牛胴体和牛胴体切块重量数据的获得也离不开电子秤。然而在实际称重过程中,仅靠电子秤自身管理、控制,其局限性日益突出。如果能把电子秤的数据传至计算机处理,利用其强大的管理和控制功能,不仅可拓展电子秤的应用范围,而且其性能价格比、安全可靠性、控制灵活性、操作简易性、人机交互性、管理自动化均将获得极大的提高[7],所以越来越多的用户希望经电子秤计量之后的商品重量直接送至计算机进行管理[8]。通过电子秤与装有企业管理系统的计算机之间的串口通信可以实现牛胴体和牛胴体切块重量数据的传送。

计算机获得的牛胴体或牛胴体切块重量信息以及牛肉质量等级信息、追踪溯源信息可以保存到企业信息管理数据库,并且需要把这些信息编码成条码再通过条码打印机打印到标签纸上,便于企业的生产管理和流通管理。

1.1 串口通信模块

最大称量是电子秤的重要技术指标,选择的太小会损坏传感器,造成不必要的经济损失;选择的太大会使称重不准确,影响计量的准确性。本课题根据牛胴体分割肉的实际情况选择最大称量为60kg的电子秤。另外,由于屠宰工艺的要求,部分牛胴体切块的长度比较大,而最大称量为60kg电子秤承重梁的标准尺寸达不到实际的尺寸要求,所以制作一块符合实际尺寸要求的秤台盖板,并在承重梁和盖板之间设置挡板,限制盖板的移动,在不影响称重精确度的情况下满足实际的称重需要,使秤台达到美观、方便、实用的要求。

承重梁安装有称重传感器,可以感受切块的重力,并将信号通过传感器连线传输给称重仪表。称重仪表可以把传感器传来的信号进行A/D转换,计算成公斤数并把重量数据通过串口连接线传输给计算机,与此同时该切块的公斤数也显示在电子秤的显示屏幕上,便于操作人员调整产品重量(配送鲜货时经常需要调整产品重量以满足客户要求)。

称重仪表和计算机之间的串口连接采用最简单的三线制接法,即接收数据针脚(RxD)与发送数据针脚(TxD)相连,彼此交叉,信号地(GND)对应相接[9],如图2所示。

图2 串口三线制连接方法Fig.2 Three-wire principle of serial communication interface

1.2 条码打印模块

本课题选用的是东芝USB接口条码打印机,它拥有8点/毫米(203dpi)的打印头,清晰打印的速度可达127毫米/秒(5英寸/秒),支持的条码类型有CODE39、CODE128、EAN128、PDF417等。

Code128码是1981年引入的一种高密度条码,可表示从ASCII 0到ASCII 127共128个字符,故称128码。其中包含了数字、字母和符号字符,是一种长度可变、连续性的字母数字条码。与其他一维条码比较起来,相对较为复杂,支持的字元也相对较多,又有不同的编码方式可供交互运用,因此其应用弹性也较大[5]。因此本课题选择的是Code128码。

2 软件设计

软件设计是在计算机平台上的Visual C++6.0环境下,用基于对话框的应用程序完成的,用到了MFC(微软基础类)库和ActiveX控件。软件实现的总体流程如图3所示。

图3 软件总体流程图Fig.3 Flow chart of software

2.1 串口通信

2.1.1 串口通信协议 在现代工业控制中,串口通信的应用越来越广泛。下位机和PC机之间的串口通信在进行数据交换时经常被使用。在串行通信时,要求通信双方都采用一个标准接口,RS-232C接口是下位机和PC机进行通信最常用的一种接口。RS-232C标准规定在码元畸变小于4%的情况下,传输电缆长度最大约为 15m,最高传输速率为20kbit/s[9]。

称重显示控制器采用EIA-RS-232-C串行标准与计算机进行通信,其串口通信的主要参数如表1所示。

称重显示控制器向串行口发送数据的方式有两种,即连续方式和指令方式。

2.1.1.1 连续方式 所传送的数据为称量(毛重或净重)。毛重格式为:ww000.000kg或ww000.000lb;净重格式为:wn000.000kg或wn000.000lb(以上小数点位置是根据仪表的小数点位置设置确定)。

2.1.1.2 指令方式 仪表按上位机所发送的指令,执行相应的操作。命令R:仪表接收命令并发送一次重量数据(格式同连续方式);命令T:仪表接收命令,仪表去皮(同去皮键),不接收命令,仪表返回CRLF;命令Z:仪表接收命令,仪表置零(同置零键),不接收命令,仪表返回CRLF。

首先对称重仪表进行标定,把小数点设置选择为3位小数。然后进行用户功能设置,把波特率设置为9600,RS232输出方式选择为命令方式(Z:置零,T:除皮,R:发送一次重量数据)。

2.1.2 串口通信的实现 在windows平台下用C/C ++语言开发串行口通信程序的传统方法是使用Win32API。Win32API包括了一个通信函数的集合,使用这些函数可以像使用文件I/0一样对串行口、并行口等通信资源进行读写访问和控制。但是,由于这些函数的使用非常复杂,不但使得开发通信程序变得困难,而且增加了程序出错的机会,Windows平台先进的ActiveX技术使我们在对串行口编程时不再需要处理烦琐的细节,利用已有的ActiveX控件,只需要编写少量的代码,就可以轻松高效地完成任务[10]。

Microsoft Communication Control(简称MSComm)是Microsoft公司提供的简化Windows下的串行通信编程的ActiveX控件,为应用程序提供了串口接收发送数据的简便方法。MSComm控件通过串行端口传输和接收数据为应用程序提供串行通信功能。MSComm提供了两种处理通信问题的方法:一是事件驱动(Event-Driven)方法,主要是利用OnComm事件捕获并处理这些通信时间,也可以检查和处理通信错误;二是查询法,在这种情况下,每当应用程序执行完一个串口操作后,将查看MSComm控件的CommEvent属性以确定执行结果或者检查某一事件是否发生[11]。这里采用第一种事件驱动方法。

串口通信程序流程图如图4所示。

首先在当前工程中添加MSComm控件,并为此控件添加CMSComm控制变量m_ctrlComm,在对话框应用程序的OnInitDialog()函数中用m_ctrlComm来完成串口初始化,包括串行通信端口选择、设置波特率、设置缓冲区大小等。

在程序界面中添加一个称重按钮,在其单击消息即 BN_CLICKED处理函数中利用 m_ ctrlComm.SetOutput(COleVariant(“R”))这条语句向称重仪表发送字符R(发送一次重量数据的命令)。

称重仪表接收到命令R后发送一次重量数据,计算机的串口缓冲区有数据时,程序将响应MSComm控件的消息处理函数OnComm(),然后在此函数中处理接收到的数据并在界面中显示出来。其中接收串口缓冲区数据的流程如图5所示。

图4 串口通信程序流程图Fig.4 Flow chart of serial communication

图5 串口数据接收程序流程图Fig.5 Flow chart of receiving data in serial communication

串口缓冲区的有效数据全部接收后,还要对数据进行处理,并得到正常的显示格式。牛胴体分割肉的重量在25kg以内,数据格式为ww000.000kg,所以判断十位数据(即第4个字节)是否为零,如果不为零就从十位开始显示,如果为零从个位开始显示,这样就能达到在程序界面中正常显示的目的。

2.2 条码编码及打印

2.2.1 Code128编码规则 Code128码具有A、B、C三种不同的编码类型,每种类型拥有不同的字符集,如表2所示。

这里需要标准数字和大小写字母,所以采用了Code128B。

Code128B码的组成为:起始字符(START)+数据字符(DATA)+检验字符(CHECK CHAR)+终止字符(STOP)。

其中开始字符为STARTB,终止字符为STOP,每个数据字符对应到0~102其中的一个值,对于每个值各个字符集都有自己独立的具体含义解释。Code128码的部分编码表如表3。BandCode中的“1”代表一个单元,“2”代表两个单元,“4”代表四个单元,“条”和“空”间隔排列。若用b代表“条”,s代表“空”,则字母“a”对应的编码值为“bssbsbbssss”。若要打印,只需将b用黑色线标出,s用白色线标出[12]。

表2 Code128码分类表Table 2 Classification of Code128

表3 部分字符编码表Table 3 Code list of some characters

其中:checksum为校验字符值,start为起始字符值,data(i)为数据区第i个字符的数值。i为数据区字符的位置,从左到右依次为1到n,n为数据区字符的个数,mod为取模运算[13]。

Code128码的校验符是条码本身的特性,它不是数据的一部分,因此校验符不会在供人识读的数据中出现。

2.2.2 Code128编码和打印的实现 上述条码Code128的编码规则可以通过C++类来实现,考虑到代码重用,采用了专门为 Code128码设计的CCode128类,条形码的编码过程在类中由校验和编码两个方法共同完成。

在系统界面中添加打印按钮并定义它的消息响应函数OnPrinting,在此函数中调用标准打印对话框对象printDlg获得打印机的设备环境并初始化打印机。然后调用CCode128类的校验和编码方法把牛肉质量等级和重量信息编码成条形码字符串,最后调用print方法完成条码的打印。Code128编码和打印的程序流程图如图6所示。

打印机初始化由标准打印对话框对象printDlg来完成,首先设置条形码高度、码线宽度以及要编码的字符串等信息,然后利用printDlg的GetDevMode方法获得一个DEVMODE结构体指针,DEVMODE结构体包含了打印机的许多基本参数,例如打印机名称、打印方向、打印纸尺寸以及打印质量等。其中DEVMODE结构体的dmPrintQuality成员表示打印机的打印质量,单位为dpi。dmPrintQuality除以25.4,得到显示比率rato,即每一毫米内打印点的数量[14]。

在编码表中查表,寻找待编码字符串中每个字符对应的编码字符串,然后组合在一起,形成一个条形码字符串,得到编码的结果。

校验字符由起始字符和数据区的字符值决定,计算时由起始符的数值开始累加各数据字符的数值与其位置作为权值的乘积之和,最后使用总和对103取模所得到余数即为校验字符的数值。其计算公式如下:

图6 Code128编码打印程序流程图Fig.6 Flow chart of coding use Code128 and printing

打印机初始化完成后,把需要编码的信息加入待编码字符串,这些信息包括称重系统得到的重量信息、牛胴体分割肉的等级信息、系统的时间。

校验是对待编码的字符串进行一次检查,查看字符串中的字符是否都是合法且能够使用Code128码编码的字符,该任务由CCode128类的成员函数Code128Verify完成。如果校验成功则返回0,可进行下一步编码的工作;如果校验失败则返回-1,系统会给用户相应的提示信息。

编码工作由 CCode128类的成员函数Code128Encode完成。该函数有两个参数,一个是字符串指针,传递待编码的字符串;另一个也是字符串指针,指向编码后的条形码字符串。用CCode128类的Code128字符集数组表示Code128编码规则里的编码表,编码时在字符集数组中寻找待编码字符串中每个字符对应的编码字符串,然后组合在一起,形成一个条形码字符串,得到编码的结果。

最后调用print方法完成打印,根据编码生成的条形码字符串,在标签纸上画线。宽度为“1”画1道线,宽度为“2”则画2道线,空是不画线的,只向右移动相应的距离。实现时定义了一个公有成员函数print,它有两个参数,一个是字符串指针,传递编码后的条形码字符串;另一个是设备环境指针,指向要显示条形码的设备环境。如果该指针指向显示设备环境,则条形码将在显示器中显示;如果该指针指向打印机设备环境,则条形码将会被打印在纸上。print函数通过一条一条地画竖线来画出所需的条形码宽度,每条线的宽度为(i n t)(m_CodeWidth*rato),其中rato是上文提到的显示比率[12],条形码的起始点可以在代码中设定。代码举例如下:

条码打印完成后还可以在标签纸上打印厂家信息和当前日期。

3 调试结果

计算机平台上的系统界面控制称重和条码打印功能的使用,称重仪表与计算机平台通过串口线连接。首先点击界面上的“称重”按钮,计算机平台向称重仪表发送命令“R”,此时,称重仪表接收命令并发送一次重量数据。计算机平台接收到串口数据后对数据进行处理并把重量数值显示在界面上。然后加入其它需要编码成条码的信息,把它们和重量信息一起编码成条码字符串,本系统是通过界面的“质量等级”按钮把牛胴体分割肉的质量等级和厂家信息加入到待编码字符串。最后通过点击界面上的“打印”按钮,把待编码字符串编码成条码字符串,并利用与计算机平台连接的条码打印机把条码和相关信息打印到标签纸上。

4 结论

本文所述的串口通信技术和条码技术已经在牛肉质量分级系统、生产屠宰系统、追踪溯源系统中得到初步应用,并且能在肉牛屠宰加工企业信息管理系统中得到进一步推广,帮助人们实现牛肉生产、流通过程中的高效管理和安全监管。

[1]崔付荣.关注中国的食品安全问题[J].经济研究导刊,2010(19):1.

[2]Blancou J.A history of the traceability of animals and animal products[J].Rev Sci Tech,2001,20(2):413-425.

[3]Dickinson D L,DeeVon B.Meat traceability:Are U.S. consumers willing to pay for it[J].Journal of Agricultural and Resource Economics,2002,27(2):48-364.

[4]Davis J R,Dikeman M E.Practical aspects of beef carcass traceability incommercialbeefprocessing plants using an electronic identification system[C].Cattlemen's Day,Kansas State University,2002:47-48.

[5]史新建.现代工业技术在粮油储藏管理中的应用[J].北京农业,2011(3):36-37.

[6]沈振宁.牛肉影像分级仪对牛肉分级的精确性与适用性研究[D].南京:南京农业大学,2008:5.

[7]周杰.电子秤与计算机在串行通讯控制中的应用[J].工业计量,2004,14(5):16-20.

[8]雷卫武.电子秤与PC机串行通信的接口设计[J].衡器,2003(2):17.

[9]曾自强,王玉菡.用VC++实现单片机与PC机串口通信的三种方法[J].自动化与仪器仪表,2005(3):60-63.

[10]黄海荣,李鹰,田作华.基于VC++和ActiveX控件的PT650C电子秤重显示器串行通信接口程序设计[J].微型电脑应用,2000,16(4):42-44.

[11]龚建伟,熊光明.Visual C++/Turbo C串口通信编程实践[M].2版.北京:电子工业出版社,2007:63-65.

[12]王晓东.VC++在条形码打印中的应用[J].科技广场,2007(5):153-155.

[13]阮少林.网上阅卷中信息提取与识别技术研究[D].成都:电子科技大学,2010:21.

[14]谌章义,李华贵,颜廷秦.在VC 6.0对话框应用程序中实现打印和打印预览[J].计算机应用,2003,23(S2):337-338.

Label Printing System of the beef cattle business based on serial port communication

LIANG Lin1,SHEN Ming-xia1,*,PENG Zeng-qi2,CHEN Shi-jin1,WU Hai-juan1,WANG Wei1,LIU Chao-chao1,CHEN Qi-liang2
(1.College of Engineering,Nanjing Agricultural University,Nanjing 210031,China; 2.Key Laboratory of Agricultural and Animal Products Processing and Quality Control,Ministry of Agriculture,Nanjing Agricultural University,Nanjing 210095,China)

The practical serial port communication and barcode in Information Management System for beef cattle business was introduced.The serial port communication between computer and electronic weighter was realized by Microsoft Communication Control,which was supplied by Visual C++6.0.Then,the weight data of beef carcass or beef carcass cut was

by the computer.Applying the rule of Code128B,the data of weight and quality grade was coded to barcode.Finally,the barcode could be printed by label printer.

electronic weighter;serial port communication;Microsoft Communication Control;barcode;Code128

TS206

A

1002-0306(2012)08-0339-05

2011-08-19 *通讯联系人

梁林(1985-),男,硕士研究生,主要从事机器视觉与图像处理在农产品品质检测领域中的应用研究。

国家现代农业(肉牛)产业技术体系项目(nycytx-38);农业科技成果转化资金项目(SQ2011ECC100043);江苏高校优势学科建设工程资助项目(PAPD)。

猜你喜欢
电子秤字符串胴体
电子秤
影响猪胴体瘦肉率的因素及提高措施
基于文本挖掘的语词典研究
关于电子秤的设计
内洛尔公牛的饲料转化率及其与胴体品质、非胴体品质和肉品质的关系
基于STM32的高精度电子秤设计
蓝塘猪与长白猪正反交F1代胴体性状和肉品质的比较
味精与高脂日粮对生长猪胴体性状与组成的影响
一种新的基于对称性的字符串相似性处理算法
依据字符串匹配的中文分词模型研究