上世纪90年代以来,信息技术不断的发展和成熟,同时,在经济全球化趋势不断加强的背景下企业竞争的市场环境已经发生了根本的变化,市场的主要特征表现为以顾客的需求和企业的需求创造为主要特征,市场竞争的要素涉及到了工控时间、质量、价格、服务、环境和产品的更新率。为了提高企业的竞争能力,企业必须重视把制造技术与信息技术、自动化技术、现代管理技术和系统科学技术有机的融合在一起。
MES(Manufacturing Execution System)即“制造执行系统”同企业资源计划(ERP)一样从理念发展到软件平台,是信息技术发展的必然产物。然而,目前在国内许多企业尤其是工厂企业对MES的重视程度远不及ERP,事实上在工厂型的企业里应用MES不仅能够迅速的提高该企业的市场竞争能力,同时也能迅速的为企业现有的信息网络投资获取回报。
1 MES的架构设计
MES在整个企业的信息化系统中处于承上启下的地位,是获取生产实时信息的接口。如图1所示
1.1 传统的MES
在我国,现有的MES大都是针对某一特定领域或工作环境而设计的单一的应用系统,这种MES的通用性差,这种MES往往适用于连续型的生产企业,且前提是该企业的生产管理非常完善,流水线生产程度极高,目前的实际情况是,我国大多数企业,尤其是国企,很多都是非流水线的离散型生产企业,因此这种MES并不适用于在我国的企业大范围推广,同时这种MES也不能适应多变的市场需求。
1.2 我国MES的使用现状
目前,国内还没有自主开发得很成熟的适用于多种生产类型的MES软件。目前大多数MES都是针对连续型生产企业的,目前实施该类型MES比较成功的企业有广州本田、TCL,NUFO中国、杭州士兰集成电路公司。但是,由于我国大多数企业的管理并不完善,目前许多成功企业采用的MES都是从国外引进的,它们的价格昂贵。通常在一个企业实施MES少则几百万,多则甚至几千万,而且这些费用紧紧是MES的软件部分。许多企业难以承受昂贵的MES开发费用,再者,国外的MES的开发对象是具有非常先进的制造技术,和具有非常丰富的生产经验的企业,并不一定都适用于国内的企业,在实施过程中通常会对策略进行修改,这又加长了实施周期。而如何降低MES的开发成本和增加MES的灵活性,使MES能够适用于我国大部分生产方式相对落后的离散型制造企业是当前在国内企业实施MES的当务之急。
1.3 服务程序支持的MES
服务程序支持的MES继承了模块化MES的优点,并且以服务程序作为整个MES系统中的核心部分是沟通MES系统现场数据获取、数据提交、数据整理、数据保存的桥梁,同时能够完成生产计划的制定、排序、下达(包括自动和手工)、暂停、恢复、插入、取消等,几乎所有有关生产计划执行的操作都可以通过服务程序来完成。如图2所示,可以看出在整个MES系统中,服务程序连接了下层的数据采集模块和上层的管理模块,并提供了与其他系统或设备的扩展接口,采取服务程序的架构,能够连接产品在产过程 中所 经 过的各个离散加工点,使得MES服务器成为各个离散加工点的加工信息处理中心。在企业内部,为了保证系统的稳定性、安全性以及降低开发成本,提高现有信息网络的利用率,MES系统的上位设计宜采用C/S三层体系结构,这样,服务程序又可以作为这种三层C/S结构MES的中间层,并可以把部分业务规则、数据访问、合法性校验等集成到服务程序中。
2 MES服务程序的具体设计
基于上述的MES的构思,我们设计了一套服务程序支持的MES,其基本架构如图2所示。其中服务程序部分是该MES的核心部分其具体的设计及讨论如下:
2.1 通信协议的设计
在本MES系统中,服务程序需要完成与下层通信模块和上层管理模块的通信,首先要考虑的必然是通信协议的选用,在计算机与计算机的网络通讯中我们采用局域网中常用的TCP/IP协议,这一层协议的选用主要与MES系统建立的硬件网络环境有关。除了网络硬件层协议的选择,在软件层也需要设计一套请求应答协议,许多软件开发者认为程序在与不同的模块间进行通信时应该采用统一的请求应答协议,并且将这些程序放在同一个程序文件中,虽然这种设计方式有利于减少程序的开发周期但是却增加了软件的后期维护难度,尤其在移植MES的部分模块时甚至会造成协议混乱而导致移植失败。因此,我们在设计MES的服务程序的请求应答协议时把与不同模块通信的协议及程序放在相互独立的文件中以提高服务程序与其它MES模块通信的效率以及这部分代码的可读性和可维护性。例如,与底层的通信模块通信时可采用:CMDFlag +请求命令类型+CMDSplit+信息1+DataSplit+信息2+DataSplit+……+信息n+Data0ver其中CMDFIag为通信模块向服务程序请求的命令类型起始分割符,MDSplit为请求命令类型的结束分割符同时表示请求命令中具体信息的开始,请求命令中的具体信息之间以DataSplit作为分割符,最后请求命令以Data0ver为结束符。
相应的应答协议或其它MES模块与服务程序通信的请求应答协议也可以仿照这种格式来制定,需要注意的是在具体的程序设计中要注意保持命令类型的唯一性,以避免系统在解释命令类型时产生歧义,同时程序对协议进行解释时还必须具有一定的容错能力。
2.2 服务程序的初始化设计
以服务程序为核心的MES要正常工作必须在运作前对服务程序进行初始化,服务程序的初始化包括与数据库建立正确而稳定可靠的连接、对最近的生产数据进行分析、最新生产参数的确定、更新待分配生产计划队列、更新日计划队列、更新材料队列、更新操作工队列、更新设备队列、刷新数据库等,其主要目的是在计算机内存中设置生产过程中所涉及的各种要素,保持内存数据与数据库数据的同步从而正确而有效地指导生产。我们在设计程序时可以采用动态队列以及类的概念来组织生产数据,并且可以采用队列嵌套以及指针的思想来提高数据的利用率。在设计队列和类时必须包括服务程序所管瞎的各个生产要素,同时要理清各生产要素的关系,例如:设备队列MachList由多个实例化的设备类Machltem?组成,而不同的设备可能能加工的工序集是不同的,这样就要求每个实例化的设备类中要有一个能加工的工序集队列Can-ProcList,这就需要用到队列嵌套技术了。这些情况在实际的工厂生产中大量的存在。从程序的角度来看,服务程序初始化的实质就是对各个队列以及实例化的类赋予初值,为后继生产创造基础条件。
2.3 服务程序设计要点
工厂生产的连续性和合理性依赖于MES的正常运作,而MES的正常运作又依赖于服务程序的正常运行,提高服务程序的运行效率就是提高MES的运作效率,就是提高工厂的生产效率。服务程序承担了包括生产计划的排产、生产数据的保存以及质量数据的处理等任务,而处理这些任务时所涉及的数据量往往是很大的,因此,在程序设计时要提高内存中数据的利用率和尽量减少程序对磁盘的操作以及减少与数据库服务器的数据交换。
1) 系统参数配置的独立化:
许多程序的设计者直接将系统的配置放在程序当中,这样做虽然提高了系统的集成度,也免去了用户在使用系统前对系统进行配置,但这样却降低了系统的可移植性。服务程序为了提高服务程序的可移植性,将系统配置和参数设置独立于程序之外而保存在ini文件中,当数据库服务器被移植到其它地方或MES的其它模块的配置发生变化时只需要修改ini文件即可,而不需要修改服务程序的源代码,其中ini文件中的敏感配置,例如密码、数据库位置等完全可以通过各种加密措施来保证这些配置的安全。
2) 用好“池”的概念:
在实际的生产过程中,离散生产过程一般会存在以下实际问题使得某一工序的待加工计划出现堆积现象:
1.同一个生产计划在不同的工序阶段所需要的工时是不可能相同的。
2.而不同的计划在同一个工序中所消耗的工时也是不可能相同的。
3.不同计划的工艺有可能不同但却有交叉的工序。
以上三点是造成某一工序的待加工计划出现堆积现象的主要原因,此外,一些例如:设备检修、工人请假、停电、工人的熟练程度等也是造成堆积现象的原因。一般的工厂生产可以通过增加设备和增加工人的方法来解决,但问题是堆积现象的堆积度是不断在变化的,需要增加的设备和工人的数量难以确定,因此服务程序中利用了‘他”的思想来解决这一问题。具体做法是为每一个工序设计一个待分配计划工序队列,队列有两个数据接口,输人接口Input和输出接口Output(以下Input指代输人接口,Output指代输出接口),而这个队列就是所谓的‘他”这里可称为“待分配计划工序池”。输入接口为上一工序,输出接口为本工序。该队列记录的数据结构至少包括计划任务生产属性、工序、优先级,把上一工序完成的计划任务按照工序从输人接口Input放人到对应的待分配计划工序池中,可以通过该计划任务所属订单的客户重要程度、交货期、批量的大小来计算出各个待分配计划任务的优先级。当本工序的某台终端请求计划时,服务程序就会在待分配计划工序池中按待分配任务的优先级和请求终端对应设备的加工属性通过输出接口Output把待分配计划下发给请求终端。并且可以动态的计算出每个待分配计划工序池中的待分配计划所需的总工时,这样,有关人员就可以很容易地计算出需要如何安排设备和工人等生产资源。
3) 优先级调度:
在流水线生产中,不同任务的产品在线内的加工顺序是按照计划的投产先后顺序来调度的,因而处理起来比较简单,但在离散生产中,由于不同任务的加工品到达同一工序的时间和顺序不完全取决于计划的投产先后,还取决于计划的生产工艺和相关的各种生产要素。这样,在离散制造业中,服务程序设计的最大难点和重点在于生产计划的自动排产,即何时下发哪一个工序的待生产计划给哪一个设备终端。生产计划优先级的计算并不太难实现,根据事先给定的优先级规则可以计算出来。但同一个优先级若出现几个待分配计划时就需要计算解决计划的选择问题。
随机服务(RS):即在几个相同优先级的待分配计划中随机的下发合适请求终端的待分配计划。它的优点是实现起来非常的容易,因此在许多场合被采用。但没有利用请求终端对应的设备的加工历史,缺乏主观控制接口。
先来先服务(FCFS):即在相同优先级的待分配计划中先处理最先加人到待分配计划队列中的待分配计划。这种调度方式考虑了以前工序的因素,从某种程度上反映了该计划任务的紧急程度,与RS算法相比具有更多的科学性,但也没有考虑本工序的设备加工历史,有可能增加了辅助时间。
服务程序的优先级调度策略考虑了如何减少产品加工的辅助时间,在FCFS的基础上加人了对本工序设备加工历史因素的考虑,称为优化先来先服务(OFCFS)算法。该算法对待分配计划工序队列预扫描,预扫描计算出队列中是否有与本工序最后一次加工相同的任务,若没有,则计算是否有与本工序最后一次加工参数相同或同一范围内的待分配计划任务,若没有则继续计算其它可以减少辅助时间的待分配计划,若预扫描的某一过程计算出有合适的待分配计划则立刻返回该待分配计划并结束预扫描,若都没有相关的待分配计划再按照FCFS的算法来调度。这种算法虽然预扫描有可能会对待分配计划进行多次扫描,但考虑到同一优先级的待分配计划通常情况下只是少数的几条,预扫描所花费的时间可以忽略不计。
4) 同步修改内存数据和数据库数据:
服务程序在设计时考虑了数据处理的平衡问题,比较合理地将数据操作分配到数据库服务器和服务程序本身。即使这样,也难以满足工厂生产中处理大量实时生产数据的要求。任何系统都不可能立即同时对多个请求作出处理,但是系统必须在请求允许的等待时间内作出回应,这就决定了服务程序不能频繁的调用数据库的数据来刷新内存中的各生产要素队列,一个解决的办法就是在修改数据库的同时立即修改内存中相应的值,这样就避免了在某一时间大量的读取数据库数据同时又保证了服务程序运行数据的实时性,同时加人事务处理」以增加数据的安全性。
只要工厂的生产在进行,MES就必须不间断地运作,只要MES在运作,服务程序就必须不间断地运行,这意味着服务程序必须伴随MES运作的始终,要保证工厂生产的连续性和正确性就要要求当生产数据出现错误时,服务程序仍然能够下达正确的生产计划指令。因此当生产过程中出现数据偏差时必须对错误的数据进行修正,服务程序提供了在线刷新和手工更正
3 运行情况
基于上述思想设计的服务程序支持的MES已被应用到实际的离散型制造企业中,其中服务程序部分的相关设计信息和运行情况如下:
系统结构:三层Client/Serve;
开发工具:Windows 2000 Professional, Borland Delphi 6.0 Enterprise,Microsoft SQL 2000 Professional;
实施地点:广东省肇庆市怀集县怀集汽车配件制造有限公司;
运行环境:Windows 2000 Server;
以下是服务程序的运行性能数据统计:
表1对系统运行至2005年6月的综合性能进行了统计,统计表明,这种服务程序支持的MES的可靠性极高,计划误发率低于0.001%,终端请求的响应时间在正常情况下小于2秒,在峰值情况下小于4秒,而这样的响应时间完全能够被大多的车间生产所接受。值得注意的是该MES的终端响应时间90%是由于网络通信而产生的。为了提高响应时间可以从改善网络方面人手,光纤网是目前最理想的通信网络,如果使用光纤作为通信网路,理论上响应时间可以小于0.5秒。
4 结束语
本文形式地给出了支持MES的服务程序的设计方法,并且把这种系统应用到了实际的生产中,测试也表明服务程序支持的MES与目前市场上的MES相比,同样具有适应性、灵活性、实时性、可靠性,同时也具有极高的计划处理效率,这得益于服务程序可以独立于MES的其它模块,可以在专用的服务器运行,大大地减轻了系统运行的负担,同时也使得这种MES系统更加安全,保证在模块的升级过程中不会对其它模块产生不良的影响。由于该MES可以充分利用企业现有的网络设备,并且处于核心位置的服务程序是可以重复利用的,使得开发其它企业的MES时,大大地缩短了开发周期,有效地降低了开发和实施的费用。本文还统计了服务程序支持的MES的系统设计方案在广东怀集汽车配件制造有限公司实施的情况,并且取得了良好的效果。