设计模式在可集成MES开发中的应用    
   当前,可集成制造执行系统(Integratable MES,I-MES)正逐渐成为自动化领域研究的热点。复用性是I-MES的主要技术特点之一,通过模块组件化,使MES各部分功能模块可复用、可配置和可扩展。众所周知,复用性是考量一个面向对象系统框架好坏的重要评判标准,而设计模式是软件工程中实现复用性设计的最常用办法。在MES开发中广泛应用设计模式,能优化系统结构,促进模块内功能聚合及模块间的松散耦合,最终实现系统的高可复用性这一目标。论文对MES功能模型进行了分析和总结,针对MES部分子系统的潜在问题,提出采用设计模式进行程序设计的解决办法,构建出结构更加清晰。复用性更强的系统框架。

1 MES及其潜在问题分析

    1.1 MES简介


    根据国际制造执行系统协会(Manufacturing Execution System Association,MESA)的定义,MES是一些能够完成车间生产活动管理及优化的硬件和软件的集合,这些生产活动覆盖从订单发放到出产成晶的全过程。它通过维护和利用买时准确的制适信息来指导、传授、响应并报告车间发生的各项活动,同时向企业决策支持过程提供有关生产活动的任务评价信息。简言之,MES是管理活动和生产活动的纽带,是面向车间级的实时信息处理系统,通过管理和协调其他系统,为企业带来效益的提升。1997年,MESA在MES白皮书中提出了MES的功能模型,很好地表示了MES内部各子系统组成关系,如图1所示。
 
 1.2 常规MES系统潜在的问题

    通过观察图1所示MES系统各模块,如生产管理、在制品管理、物料管理、设备管理等的详细设计,可以发现以下几方面潜在问题:

    (1)模块间存在依赖关系,耦合度较高,不利于复用。例如,设备管理模块涉及生产管理模块对生产计划和维护计划的制定,涉及人力资源管理模块的维修人员调配,涉及物料管理模块的备件管理,还涉及质量管理模块的产品质量控制。

    (2)因MES中很多模块常需被多次访问,若每次访问都创建一个实例,不仅会导致对象引用不一致的潜在问题,也会在每次进行数据库连接等重量级操作中带来大量开销。

    (3)在制品管理、设备管理、人力资源管理等模块均涉及历史数据和生产、设备和人员实时数据的多种访问方式。若一并处理,不仅每个子系统甚至功能都要分别实现,复用性和系统性能也大大降低。

    (4)对I-MES中的生产管理等模块来说,考虑到行业间和企业间的各种应用场景,同一功能的实现可能涉及不同的流程和方法,相应的算法也会不同。而传统的MES系统设计往往针对单一企业或行业,不利于多行业集成和复用。

    1.3 潜在问题的解决方案

    考虑应用设计模式解决上述潜在问题。设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述,是一种用来解决不同领域中相似问题的通用解决方案,是软件开发人员长期设计经验的总结。Erich Gamma等人提出了23种常见的设计模式,据其性质,分为创建型(Creational)、结构型(Structural)和行为型(Behavioral)三种。创建型模式与对象的创建有关,特点是将部分对象的创建工作延迟到了子类或者其他对象中;结构型模式常用于处理类或对象的组合,特点是通过继承(Inheritance)和组合(Composition)方式组织类和对象,使其符合一定的层次或结构要求,这一类模式往往用在框架的整体结构设计上;行为型模式则对类或对象怎样交互和怎样分配职责进行描述。

    在可复用MES整体设计中,最需要考虑的是降低各子系统耦合性,针对问题(1),应用结构型设计模式中的Faqade(外观)模式无疑是最合适的。通过定义一个接口,Facade模式以每个功能模块定义为一个子系统,提供一致界面,并为进一步把各子系统划分成更小组件打下坚实基础。

    Singleton(单件)模式通过类自身保存唯一实例,提供了一个访问该实例的全局访问点,它是一种对象创建型设计模式。针对问题(2),应用Singleton模式为每个子系统设计一个全局唯一访问点,仅在系统第一次访问时创建该子系统对象的唯一实例,再次访问时仍然使用该实例,既保证了引用对象前后一致,又可重复利用之前的数据库连接。

    对于同时需要访问数据库获取历史数据和OPC Server获取实时设备参数的子系统,将两种访问操作分离,根据Factory Method(工厂方法)模式的特点,定义一个用于创建对象的接口,让子类决定实例化哪个类。这种设计方法。对多种访问操作进行细分,相似功能进行合理封装,有效地提高系统可复用性、可配置性和可扩展性。

    针对问题(4),即系统中多算法整合复用问题,可通过Strategy(策略)模式解决。Strategy模式常有许多算法组成,这些算法被一个个封装起来,通过一个Context类进行访问决策,客户程序可以通过Context类决定调用哪个算法,以达到算法互换的目的,是一种典型的对象行为型设计模式。如果生产管理子系统涵盖常见的几种调度算法,并利用Strategy模式进行管理,算法能很迅速地部署到企业中而无需做大的调整,子系统的可复用性也会大大提高。
2 应用设计模式的技术细节

    2.1 应用Facade模式和Singleton模式进行系统结构设计

    设计SystemFacade类为MES各子系统提供一个统一的界面和入口,图2和图3分别为示意图和UML设计图。

 


图2 Facade接口为MES系统提供单一界面
 


图3 应用Facade模式和Singleton模式设计的接口UML图


    同时,该类应用Singleton模式创建自身和每个子接口的全局唯一实例,代码如下:

    public class SystemFacade︱
    pcivate static SystemFacade SystemFacade=null;
    private static IEquipManagement equip=null;
    pfiv址e SystemFacade(){}
    public static synchronized SystemFacade getlnstance(){
    if(systemFacade==null){
    systemFacade=new SystemFacade();
    }
    mqXLm systemFacade;
    }
    public static synchronized IEquipManagemem getEquipManagementlnstance(){
    if(equip==null){
    equip=new EquipManagemenImpl();
    }
    return equip;
    }
    ……

    当需要访问该类的时候,如果直接创建SystemFacade对象实例,编译就会失败。因为其实现类的构造方法被声明为私有,无法直接进行实例化。而通过访问公共的静态方法getlnstance(),就能获得SystemFacade类的唯一实例,该方法中的条件保证了实例的唯一性:

    //创建系统入口的唯一实例
    SystemFacade system=SystemFacade.getable();

    2.2 应用Factory Method模式灵活查询设备状态

    设备管理子系统中,定义了数据库查询和实时状态查询的具体实现,在工厂类中定义了抽象访问操作,由其派生类HistoryStatusQuery和RenltimeStatusQuery进行访问操作的实现。另外,若工厂方法带参,还可以使派生类简单而有选择性地扩展或改变一个由工厂方法生产的产品(类)。

    图4为应用Factory Method模式设计的设备历史数据和实时数据查询UML图。
 


图4 设备状态查询UML图

  2.3 应用Strategy模式解决生产管理子系统多算法整合

    在生产管理子系统中定义一个包含机器数、产品数、工序数和单机生产能力等调度策略参数的抽象类SchedulingAlgorithm,并提供统一的接口SchedulingMethod()方法,由它派生的三个调度算法类——最少作业数规则策略类FORuleAlgorithm、最短加工时间规则策略类SPTRuleAlgorithm和先进先出规则策略类FIFORuleAlgorithm,都必须实现该接口方法。定义AlgorithmContext类为算法调用决策。可以直接在该决策类的构造方法中指定,也可通过setFORuleAlgorithm()这样的方法由用户自由选择具体调用的算法。

    图5为应用Strategy模式进行算法整合的生产管理子系统部分功能模块UML图。
 

 


图5 生产管理子系统调度算法UML图


    本例中的算法选取的是比较简单的规则调度算法,在实际应用中,往往还有更为复杂的调度算法及多种算法的集合。如果预先定义好这些算法规则,用户仅需针对本企业的要求选择合适的算法就能应付不同的应用场景。Strategy模式的使用,大大提高了系统的可复用性。

3 应用开发验证

    利用流行的Java开源集成开发工具Eclipse和统一建模语言UML,为系统建模和设计。以某机床制造企业离散制造车间为背景广泛调研,深入分析车间生产业务过程的本质和构建可复用MES系统的技术要点,分别为MES各子系统建立业务UseCase和粗粒度的组件用例模型,并在后期不断完善。根据UseCase模型和业务需求,为各子系统设计UML图,翻译成系统代码框架,编写代码。在此期间,用JUnit及HttpUnit框架进行单元测试,ApacheJMeter工具进行功能和性能测试。

    系统基于J2EE技术B/S三层结构开发,应用接口技术,将方法的定义和实现分离,通过调用接口参数实现组件功能。开发与运行环境:Web服务器操作系统Windows Server 2003,并部署Tomcat进行页面发布和网络访问,数据库系统为开源数据库MySQL 5.0,并在系统中应用了Struts和Hibernate等Java轻量级框架。限于文章篇幅,仅给出设备管理子系统历史状态查询功能界面,如图6所示。
 


图6设备历史状态查询功能界面


4 结束语

    实践证明,应用设计模式开发的系统,结构清晰,模块功能明确,可复用性得到了增强,并为系统今后的重构打下基础。本文介绍了设计模式在系统整体结构设计,以及设备管理和生产管理子系统中的应用,并通过实例进行了验证,对I-MES开发中应用设计模式做了有益的探讨,具有较高的借鉴意义和实用价值。
 

 

关联文档