基于条形码技术的车间监控系统的实时信息采集
2009-02-20
作者:周四军 王建宇 谭 俊
摘 要: 探讨了使用条形码作为信息载体的车间监控系统信息采集的实现,分析了所需要的信息及其条码编码,介绍了Windows95环境下用RS-232串口中断方式数据实时采集的实现方法,以及客户/服务器机构模式下数据采集模块与监控模块之间实现动态数据传送(DDE)的手段。
关键词: 条形码 数据采集 动态数据交换(DDE) 中断
随着计算机的广泛应用,生产技术发生了革命性的变化,柔性制造系统(FMS)已在国外得到较广泛应用。但对目前我国的大多数企业来说,高度柔性化的制造系统仍是一个难以承受的负担,在一些生产量大的电器行业,如:电冰箱、洗衣机、空调器等,以人工装配为主、生产工位多的生产流水线形式仍占主要地位。
由于缺乏信息监测手段,此类生产系统会出现种种问题:工位负荷缺乏定量关系,无法随生产目标、生产条件的改变均衡生产;没有生产监视信息,故障事件得不到及时处理;物流流动缺乏指导,工位连接不畅导致阻塞和缺料事件。
条形码(以下简称条码)技术由于其输入速度快、准确度高、成本低、可靠性强等优点而具有广泛的应用领域。我们开发的基于条码技术的车间监控管理系统是这种自动识别技术在工业领域的应用实例,其目的是为了监控某复印机厂装配流水线的生产状况。载有各种生产信息的条码或贴在部件和成品上,或放于相应工位上,流水线出入口配有自动条码扫描器,各工位上则配有手动条码扫描器,这些条码扫描器通过条码扫描网络仪连接到车间监控计算机上。实际运行时,自动或手工扫描器将条码信息送入车间监控计算机上,在其上运行的监控软件可以动态地模拟整个车间所有流水线的实时动作。一旦发现各个工位的故障及警报信息,及时通知值班人员,值班人员可以通过该系统查询故障及报警信息,并根据该系统提供的参考处理办法调度维修人员进行抢修。
1 系统的硬件及软件结构
系统的硬件结构如图1所示。
本系统软件结构上分为两大部分:(1)数据采集模块:将条码信息转换为控制信号;(2)监控模块:对生产线各种状态的动态显示和生产调度。软件操作系统采用Windows95,由于数据采集模块涉及低层硬件操作,用C++比较合适,而监控模块兼顾动画和数据库操作,我们采用了VB4.0。数据采集模块和监控模块进程之间条码信息的交换采用Windows系统的动态数据交换(DDE)实现。系统软件结构如图2所示。
基于上述系统软硬件结构,要将条码信息转换成反映生产线现状的控制信号,我们必须完成三方面工作:(1)生产信息分析及编码;(2)使用RS-232串口进行信息采集;(3)使用DDE实现数据采集模块与监控模块的通讯。本文给出以上三方面功能的实现。
2 生产信息分析及编码
车间监控系统要用现代化的管理手段, 在生产过程中,最合理地安排好生产流程,及时发现并排除故障,使各生产工序处于最理想的正常工作状态。为此,所需的生产信息基本上可分为以下几个方面:
工件监视
工件(指装配线上的部件或成品)的情况,包括当前位置、装配状态、装配时间、关键测试数据。
操作工监视
包括操作工岗位、工作状态、技术水平及突发请求等的监视。
生产过程监视
包括流水线开工/停工,生产系统物流状态,各生产单元完成工件的品种及数量,各工位实际劳动负荷等。
故障监视
包括直接故障及间接故障。直接故障是指明确包括故障源的故障信息,如设备故障、零件不足等;间接故障指未知故障源引发的系统级故障,如系统生产率明显低于额定生产率等。
关键工位监视
包括对直接影响整个生产系统流程的重要工位各种数据的监视。主要有生产劳动负荷相对饱和的工位、生产限制条件多的工位(如零件品种多,供应源多,辅助设备多等)、技术工艺要求高的工位等等。
基于以上生产信息的分析,监控管理系统必须实现对跟踪、监测对象的自动识别。目前最好的办法就是采用条码自动识别技术。工业上最常采用的是39码,本系统也采用这一码制。用39码制设计以上生产信息所需的条码如下:
· 工件标签条码:每个成品或重要部件上都贴有条码,是其身份的标识。
· 考勤条码:载有该工位上操作工的信息。
· 操作状态条码:载有装配开始/结束信息,用于工位操作状态的监视。
· 设备故障/故障排除条码:用于监测设备故障。
· 异常报警条码:用于表示除设备故障外的各种故障信息。
·流水线状态条码:载有流水线开工和停止生产等信息。
· 撤销输入条码:表示撤销前一次的条码输入,用于工位数据输入的容错。
条码实例:
3 数据采集模块的RS-232串口通讯
本监控系统中条码信息经过条码扫描器送到车间监控计算机的串口COM2上(COM1被鼠标占用)。所以条码信息的实时采集就是串口数据实时采集。 Windows95平台下串口通讯的实现有以下三种方法:
(1) 定时采集方式。设置一个定时器,每隔一段时间产生一个WM_TIMER消息,该消息的相应函数读取串口缓冲器中的数据。这种方法实现简单,但有以下几个缺点:一是受Windows计时器数据分辨率的限制,最高采样频率为18.2Hz。另外WM_TIMER消息在Windows消息队列中优先权低,可能得不到及时响应。最重要的一点是Windows会将消息队列中没有来得及处理的几个WM _TIMER消息合并成一个,这意味着前几次定时器消息没有得到响应,因而可能导致数据丢失。
(2)在Win95操作平台下,利用其支持多线程的特点,开辟一个线程专门读取串口数据。每当串口有数据到来时,此线程被激活,读取串口缓冲器中的数据;无数据时,该线程被挂起。尽管可以设置线程的优先级,这种采集方式仍称不上实时通讯。
(3) 保护模式下的中断方式。Windows支持一种特殊的DOS服务,称为DOS保护模式接口DPMI(DOS Protected Mode Interface),由一些INT 2FH和INT 31H组成。可以用软中断INT 31H挂住保护模式中断向量,以中断方式处理外部实时事件。这种方式对数据量不太大但需要准确及时响应的条码信息采集很适用,因此,我们采用这种方式。具体实现方案如下:
信息采集模块主窗口第一次被创建时,Windows向它传递WM_CREATE消息,在该消息响应函数中调用INT 31H的0204H功能将老的中断向量保存起来,用INT 31H的0205H号功能将中断向量指向新的中断服务例程;监控管理模块退出时,Windows将向它传递WM_DESTROY消息,在该消息响应函数中调用INT 31H的0205H功能恢复老的中断服务例程。以上步骤在VC++1.52集成开发环境中,采用嵌入汇编方式加以实现。主要包括以下几个函数:
· 初始化串口2(VOID PASCAL InitCom2())
保存COM2的当前状态,然后把COM2的波特率设置为9600,每个字符8bits,1个停止位。允许0xoc号中断。
· 中断初始化(BOOL PASCAL InitComm())
调用DMPI,保存旧的0CH号保护模式中断向量,设置新的保护模式中断服务例程。
· 中断服务例程(void __interrupt __far new_int())
处理信息的接收。判断信息类型。如是异常信息,就向主窗口发送一自定义WM_INTERRUPT1消息;如是一般信息,则发送一WM_INTERRUPT2消息。
· 中断恢复 (VOID PASCAL Restore_Comm())
恢复COM2状态,恢复0CH保护模式向量。
每当串口有条码信息到来,0CH中断将发生,保证消息得到及时处理,因而实现了条码信息的实时采集。
4 数据采集模块与监控模块之间DDE的实现
数据采集模块采用中断方式实时采集串口COM2的条码信息的同时,还需将所采集的数据传递给监控模块。这两者之间的信息交换采用Windows系统的动态数据交换(DDE)来实现。
4.1 动态数据交换(DDE)
动态数据交换(DDE)是一种进程之间的通信形式,而DDE会话则是实现进程通信的手段,它总是在一个客户程序和一个服务器程序之间进行的。启动会话并要求接收数据的应用程序是客户程序。响应客户程序的要求并提供数据的程序是服务器程序。
在早期的Windows版本中,DDE会话是通过进程之间互相发送消息的形式来实现的,DDE协议就是一组预定义的消息,被发送的数据包含在消息的两个参数(wParam和lParam)中。
在Windows3.0以后的版本中,采用了一种先进的DDE方案,即动态数据交换管理库(DDEML),DDEML提供了一系列API,将传统的DDE消息及附属的各种特征封装在一个函数调用接口中,应用程序通过调用DDEML中的函数实现DDE会话,从而交换数据或互相提供服务。在DDEML中,进程之间传递的是事务(事务是对数据和服务的请求,表现为一组预定义的常量),整个通讯过程都是围绕着事务进行的:首先,客户程序向服务器程序发出建立联接的事务,服务器响应之后,联接便建立起来;之后,客户向服务器发出请求数据的事务,服务器便向客户提供所需的数据,这一过程可以在建立联接之后多次进行;最后,当客户不再需要数据时,便向服务器发出终止联接的事务,从而结束一次DDEML会话过程。
4.2 DDE服务器的实现(工具为VC++1.52)
DDE会话有三种方式,冷链、温链、热链。由于采集的数据要及时得到监控程序的处理,我们就采用了热链方式来传送数据,即只要一有数据到来,采集服务器就立即把此数据传送到监控程序。
下面我们应用DDEML机制来实现数据传输编程。其步骤如下:
步骤1.创建用于处理各类DDEML事务的回调函数(HDDEDATA EXPENTRY_export DdeCallBack(WORD wType,WORD wFmt,HCONV hConv,HSZ hsz1,HSZ hsz2,HDDEDATA hData,DWORD lData1,DWORD lData2))
在DDEML中,进程之间传递的是事务,根据实际的需要,回调函数应处理的事务如下:
·XTYP_CONNECT及XTYP_CONNECT_CONFIRM
证实客户是否已连接到了采集服务器。
·XTYP_ADSTART
回复客户热链开始的申请。
·XTYP_ADVREQ
当采集服务器一接收到信息时,就向客户传递此信息,实现动态数据交换。
·XTYP_ADVSTOP
回复客户热链结束的申请。
·XTYP_DISCONNECT
回复客户和服务器之间链接结束的申请。
步骤2.初始化DDEML (BOOL PASCAL InitializeDDEML(HWND hWnd))通知DDEML该程序将开始使用DDE机制。
步骤3.登记服务名、主题名和项目名 (BOOL PASCAL InitializeDDEML(HWND hWnd))
这涉及到WINDOWS的三级服务名称管理体系。它们是;服务名(Server Name)、主题名(Topic Name)、项目名(Item Name)。首先,一个应用程序作为服务器必须有一个服务名,当客户应用程序希望和该服务器会话时,就在发出链接事务时指定这个服务器,从而识别出该服务器;主题名是指一个服务器所支持的各类会话主题的名称,在一次会话期间,客户程序只能和服务器就某一主题进行会话,客户在发出链接事务时指定所关心的会话主题;项目名是关于一个主题的各类数据项的名称,在链接建立以后,客户可以请求不同项目的数据,但都只能是属于当前主题范围之内。一个服务器可以决定自己所能支持的主题以及每个主题所拥有的各个项目。因此,服务名使客户以找到服务器,主题名和项目名则合起来标识客户所需要的数据。
在这里,服务名为Server,主题名为TiaoMa,项目名则有两个,一个名为BaoJing,专门传送异常信息;另一个名为RuKu,专门传送一般信息。
步骤4.结束DDEML使用(BOOL PASCAL CleanUpDDEML(HWND hWnd))
当客户已不再需要服务器的数据时,服务器需要被撤销。
4.3 DDE客户的实现(工具为VB4.0)
Microsoft公司的Visual Basic号称Windows程序开发的快枪手,用它来开发Windows程序十分方便。我们在VB4.0下开发监控系统的多媒体和数据库操作部分。因此,需要在VB下创建DDE客户程序。具体编程内容如下:
(1) 确定服务名、主题名和项目名。在Startup Form(假设为Form1)中放入两个文本框(假设为Text1,Text2),然后在文本框上单击右键,在弹出菜单中选择Properties(属性),在弹出的属性对话框中将Text1和Text2的LinkTopic都设置为“Server|TiaoMa”,LinkMode为“0”;Text1的LinkItem设置为“RuKu ”, Text2的LinkItem设置为“BaoJing ”,或者可以在Sub Form1_Load()中加入下列几行:
Form1.Text1.LinkTopic=″server|TiaoMa″
Form1.Text1.LinkItem=″RuKu″
Form1.Text2.LinkTopic=″server|TiaoMa″
Form1.Text2.LinkItem=″BaoJing″
(2) 建立联接.在主控程序中,用VB的Shell( )函数启动采集服务器(同时也是DDE服务器)开始采集数据,然后加入下列语句:
Form1.Text1.LinkMode=1
Form1.Text2.LinkMode=1
(3) 拆除联接.在Sub Form1_Unload( )中加入下列语句:
Form1.Text1.LinkMode=0
Form1.Text2.LinkMode=0
此时DDE客户程序向DDE服务器发出终止链接的事务,结束一次DDEML会话过程。
DDE的实现如图3所示。
本系统采用了条码自动识别技术,使车间生产线上的各种信息可以快速准确地传递到监控管理系统,以便系统及时地作出各种反应,提高了工厂生产效率。
在开发过程中,解决了Windows操作环境中数据实时采集的技术难题。同时,DDE不失为Windows下进程间交换信息的好办法。Visual Basic这个Windows应用快速开发工具有不少优点,用它来开发多媒体动画、数据库查询等程序非常方便,但它作为一种解释执行语言,要将它用在工业现场实时监控系统中,我们不得不慎重考虑它的运行速度可能带来的影响,需要采取妥善的办法加以克服。
参考文献
1 周建荣.工业生产系统的故障监控和诊断实时专家系统开发工具的研究.信息与控制,1994;23(1):53~58
2 李郝林,孔祥利,史维祥.生产监控系统研究概况.信息与控制,1991;20(1):33~38
3 疏松桂,谭 民.非串行CIMS生产线可靠性建模、分析与综合.自动化学报,1994;20(6),642~649
4 李金哲,朱俊英,黄增满,刘义春.条形码自动识别技术.北京:国防工业出版社
5 张国峰.Windows应用程序设计——原理、方法和技巧.北京:电子工业出版社
6 杨国才,武伟,何国斌.VB4.0实用技术与方法,成都:电子科技大学出版社
7 谢金宝,虞琦.Visual Basic程序设计.上海:上海交通大学出版社