VisiBroker3.3 for Corba在自动化物流上的应用

VisiBroker3.3 for Corba在自动化物流上的应用

剑过无痕 2008-12-26

1系统简介:

该系统采用先进的三层/多层体系架构。该结构将界面、逻辑和数据层分离,其优点是十分显著的;该系统应用于某大型卷烟厂自动化物流信,主要针对片烟自动配方库、辅料平衡库和成品库三个自动化仓库的仓库管理和统一协调控制而设计的,其目的是依据卷烟厂的作业特点,实现对仓库的控制自动化、管理信息化,和业务标准化和生成柔性化系统,既是卷烟厂自动化仓库的神经中枢,又是企业整体信息化的重要组成部分。上接ERPMES系统,获得原辅料等基础信息、转库计划和出库等作业计划,并把作业情况上报给上层系统;下接各种自动设备,如堆垛机、码垛机械手、AGV(自动导航无人驾驶小车)和传输控制设备,把生产中所需的原辅料准确安全地运送到对应机台,同时把生产后的成品运送到成品高架库,最后实现成品按销售数据出库。

 

1.1系统特点

       除了一般软件具备的特点外,还特别要求

n         稳固性,除片烟入库、辅料配盘入库和成品出库一班制外,其它要求三班倒,连续24h×6不间断稳定运行;

n         快速恢复、切换和启动。程序运行故障后,要能很快正常启动,不能影响生产。设备检修、计算机故障后,要能方便地切换到备份机上运行。运行过程的数据不能丢失,要能方便迁移到备份机上。

n         可记帐性。把与生产活动、安全有关的记录保存下来,以便事后分析调查,及时发现隐患、追查责任者,可记帐性包括身份论证和审计。

n         智能化、柔性化。物流信息系统在处理货物出入库时,因自动化设备、信息处理过程、信息交换过程中产生软故障,信息系统会根据当前任务执行情况,自动判断错误产生的原因,并且不需人工干预,就能自动恢复正常运行;对于不能自动排除的软故障和硬故障,信息系统也能智能提示故障表现、根据当前作业情况分析原因,提供给当班管理员,方便及时排除故障,从而快速恢复运行。对不同的处理情况,根据自动化设备要求和故障处理流程,内置于程序异常处理模块中,通过简单的人机交互(提示)后,自动启动不同的异常处理流程。在这种半自动处理过程中,可能包括货位库存、当前任务、日志数据、下游自动化设备等的复杂的自动调整过程。

n         日志跟踪。系统处理速度要稳定,运行日志比较多,要求能跟踪日志,便于排查故障的原因:人为操作失误、程序错误还是设备故障。

n         系统开发后调试困难。有别于传统的信息系统,该系统与众多设备连在一起,不便于调试或者调试时间长。因此也要求有更细一级的有助于程序员调试的日志。

n         集中控制与分散。众多自动化设备分散在自动化流水线上的各个环节,有的设备是通过socket通讯来控制设备,有的设备是通过读写PLC来控制,还有些设备是通过端口通讯来控制。要把这些设备按照一定的工艺流程控制起来,通过集中的中央大脑向各个自动化设备有序地发送指令。

1.2 控制系统简介

设备控制系统按照三层网络结构设计,设备控制层以Siemens公司的S7/400 PLC处理器为主控制器,对现场设备的输入、输出信息进行采集和处理;选用可靠高速的SIEMENS PROFINET 工业总线网络连接分布式IO、数据采集设备、智能设备、现场操作员界面,并通过工业以太网连接管理信息系统,进行设备监控和数据交换。

1.3 控制系统结构

 

 

传输设备控制层由主控制柜、电源开关、PLC控制模块、远程IO模块、通讯模块、操作终端、检测器、条码扫描器、操作按钮、外形检测光栅、告警指示灯、执行机构驱动装置等设备组成传输设备控制系统,根据设备的组成、位置、工艺的需求,划分为多个独立的控制系统,各系统采用PLC为控制核心,分别负责各部分设备的控制,完成各输送设备运行控制、检测信号采集、条码信息读取、货物外形检测、故障报警等各种过程控制通过PROFINET现场总线连接各现场远程IO模块和智能设备,具有连接简便、灵活的扩展和维护性的优点。远程IO连接现场元件,例如检测器、控制开关、电机等,智能设备包括变频器、条码识别、定位检测装置、人机界面等设备控制系统通过通讯机与上位信息系统连接,通讯机负责实时采集设备控制系统的控制数据,反馈到上位信息系统,并接收上位信息系统的生产任务指令,发送到设备控制系统,实现立体库系统的全程自动化、信息化。

 

2 系统设计

2.1 设计依据

(1)       根据集中控制众多分散的自动化设备的特点,每个高架库需要而且只能有一个设备相关的程序(我们称为设备服务程序),主要读写控制系统的PLC数据,按工艺流程有序控制各个设备,反馈各个设备的运行状态,根据与控制系统的通讯协议,最终与控制系统一起实现物流自动化。设备服务程序最后还需根据运行结果,保存日志,保存记录到数据库;

(2)       业务终端分散在厂区各个地方,且是触摸屏,程序更新不便,因此瘦客户端程序是理想的选择。机台操作员参差不齐,还要求业务终端具有很好的人机交换易操作性,大多操作要求Only Press One Key

(3)       为了便于业务终端的安装和保持相对稳定,因此把主要的业务逻辑和处理流程剥离到数据层、企业业务逻辑层和设备控制层。程序在改变和升级优化时只需要修改数据层、企业业务逻辑层和设备控制层。

(4)       在处理速度和完备的运行日志间的权衡。最终的货物出入库和库存信息是物流系统最重要的数据,但在生产全自动过程中,运行中间的各种数据也需保存。因此不同数据需要区别对待:系统重要数据集中到双机热备服务器中,采用Oracle9i,其它程序调试信息、设备运行日志只需按日期保存到本地数据库中。本地数据库可选择桌面小型数据库如AccessParadox等,本系统最后选择文本文件,按时间先后保存日志信息。这样减少数据库的压力,提高运行速度。

(5)       根据分布式结构要求,我们选择delphi6 VisiBroker for Corba来开发。数据层和企业业务逻辑层集中在一起,这里称为应用服务程序设备服务程序用来集中控制分散的自动化设备,它同时也需要调动应用服务程序向数据库更新记录;分布在车间各处的机台请料终端需要安装对应的业务处理终端程序,业务处理终端程序需要调用设备服务程序和应用服务程序;各个科室管理者则通过管理终端程序维护物流信息,查询统计运行数据,查看计划执行情况,打印报表以便辅助决策,管理终端程序需要调用应用服务程序。所有服务程序的接口都采用Corba接口。

2.2 软硬件设计

Ø       IBM X系列服务器;

Ø       双机热备份双控容错系统;

Ø       Oralce9i企业版;

Ø       Cisco企业级系列交换机;

Ø       Simatic OPC Server 6.4及其相关驱动(后来升级);

Ø       工作站选用某品牌的商用计算机;

Ø       现场终端选用某品牌的工控机

Ø       开发工具dephi6 sp2 + VisiBroker3.3,采用Corba接口。

 

 

2.3 信息系统网络结构图:

 

系统划分为片烟、辅料和成品3个子系统。集中式服务器方案是让系统的数据和应用服务集中管理,三个库共用数据库服务器,采用双机热备份、存储系统采用磁盘阵列方式,并可以共用应用服务器(三个库的应用服务器互为备份)。片烟库、辅料库、成品库三个库具有自己独立的监控系统和中央控制程序(设备服务程序),并根据各自的情况配置1到多台作业处理计算机和管理机。

 

3 程序间的Corba调用

3.1 Corba服务端

根据业务规则建立数据对象后,合理规划应用服务层(数据层和业务逻辑层),明确接口。接口设计出来后,在delphi6中继承TCorbaDataModule类,通过类型库(Type Library)实现接口。接口声明后,我们可以看到IDL中就会出现:

 

module WMSEquServer

{

  interface ICoDMCPInOut;

 

  interface ICoDMCPInOut: Midas::IAppServer

  {

long CPTraysOutLib(inout long aCount, in wstring aPsn,

in wstring aAddr, in wstring aLayer); 

};

 

  interface CoDMCPInOutFactory

  {

    ICoDMCPInOut CreateInstance(in string InstanceName);

  };

 

};

 刷新Type Library后,可以看到创建了TCoDMCPInOut实现类和***_TLB.pas文件。你可以在TCoDMCPInOut实现类中填写自己的代码。在***_TLB.pas文件中可以看到:

²   CoCoDMCPInOut类,用于创建本地或远程接口ICoDMCPInOut

²   TCoDMCPInOutCorbaFactory类,工厂类;

²   TCoDMCPInOutSkeleton类(创建服务器主干单元);

²   TCoDMCPInOutStub创(建客户段的骨架单元)。

最后TCoDMCPInOut类的initialization中你会看到

  TCorbaVclComponentFactory.Create('CoDMCPInOutFactory', 'CoDMCPInOut',

'IDL:WMSEquServer/CoDMCPInOutFactory:1.0', ICoDMCPInOut,

      TCoDMCPInOut, iMultiInstance, tmMultiThreaded);

该物流系统采用多实例(Multi Instance)多线程模式(Multi Threaded)。

 

3.2 Corba客户端

首先把服务程序中的***_TLB.pas文件加入到客户端工程中。

在客户端中继承TDataModule,并放入CorbaConn: TCorbaConnection,让CorbaConn.RepositoryId等于服务程序对应的ID。首先运行VisiBroker SmartAgent,再运行服务程序后,在CorbaConn的对象属性中将会出现一串字符串,如“WMSEquServer/CoDMCPInOutFactory”,它与服务程序的ClassID对应。

最后放入cdsProTree: TClientDataSet组件,设置cdsProTree.RemoteServer=CorbaConn,输入提供者的名称cdsProTree.ProviderName为服务端上的Provider组件,设置cdsProTree.CommandTextSQL语句。当让cdsProTree.Active=true时,客户端数据集cdsProTree就自动从远程服务程序中获取了数据。

通过上面的例子介绍,采用corba分布式结构其实比COM+简单,但在dephi中无论是corba还是com+都能看到midas.dll的身影。因此更多内容请查阅midas相关文章。

3.3 程序部署和相互调用关系图

4 其它技术

(1)设备服务程序中运行的中间数据、状态更新数据保存在本地数据文件中,避免频繁访问Oracle数据库,加快运行速度。在处理本地数据时,程序采用TclientDataSet.LoadFromFileSaveToFile方法,当TclientDataSet装载本地数据文件后,就可以采用Locate方法定位记录,通过FieldByName方法修改数据,定位修改记录与一般的过程相同。在换班或程序退出前保存数据到本地文件中。

 

(2)程序运行过程中大量的日志按年份、月、日和小时(24h)层级(文件目录层次)保存到日志文件中。

 

 

(3)当遇到与Oralce数据库连接断开(如网线中断或其它不可预知的故障),应用服务程序不能把数据写入到数据库时,可把关键数据临时写入到本地文件中,当下次恢复数据库连接后,再把本地文件中的数据转移到Oracle数据库中。

 

5 采用Corba分布式架构常见问题

(1)一定时间后,客户端可能会与服务程序断开,报“灾难性故障”。当设备服务程序退出,客户端自然也会报“灾难性故障”,这时所有与之相连的客户端都必需重新启动;

 

(2)采用TclientDataSet操作本地数据文件时,会发现文件越来越大,影响程序的运行和稳定。因为TclientDataSet中的数据包括DataDeta两部分,在Deta部分包含了大量修改日志,时间一长,数据文件能达到 20M 以上。

 

 

(3)最严重的是服务程序不稳定,一定时间后会退出,退出没有规律也没有任务警示信息。在网上有很多人提出了这个问题,面对Corba无计可施,甚至失望。

 

问题(3)也一直困扰着我,最开始怀疑自己的程序编写可能有问题,于是反复修改和检查,都查不出问题所在。也想过Corba内存泄漏,怀疑过Dephi本身,当打上补丁SP2后问题依然存在。直到后来,在另一个烟厂实施同样的系统时,才对比发现,如果服务程序没有客户端调用,则不会退出,如果客户端频繁调用,退出相对频繁,严重时2小时就退出一次。

 

以上问题如何解决,我将在更高级的话题中给出。

 

6 系统运行现状

在某烟草从2002年底正式运行到现在已经有6个年头了,开始出现过上面描述的三个问题。前面两个问题很容易解决。第三个问题,回归原始,从java编写J2EE时如何处理分布式中得到启发,很快也得到解决。

 

解决了上面三个问题后,程序运行更稳定可靠,一个星期624小时能不间断运行;数据不丢失,抗异常抗突发事件能力强;启动恢复快,界面操作直观;程序维护方便,业务终端程序基本保持最开始的程序不变;日志信息详尽,全程跟踪货物流向,用户能通过分析日志文件得出问题出现的原因。得到用户肯定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值