上海钦顺机械设备有限公司

制药网免费会员

收藏

面向对象的PLC编程方法ZT

时间:2012-11-26      阅读:1272

  原文地址:面向对象的PLC编程方法ZT作者:浪潮
  
  1引言
  
  可编程控制器PLC因其操作简单、性能可靠而得到广泛使用。各种类型的可编程控制器充
  
  分享微经验,让更多的人受益
  
  快去分享吧!!!
  
  斥着市场。作为可编程控制器系统的设计者来说,面对不同型号的PLC控制器要进行不同的设计。系统的整体设计和硬件设计随控制器型号的变化通常只需做很小的改动,甚至根本不必作出修改。但是对于程序设计部分来说,改动结果往往是面目全非。有时还不如根据新的控制器型号重新设计。虽然可编程控制器程序相对于各种大型计算机应用软件来说要简单得多,但是应用软件设计中遇到的问题在可编程控制器程序设计中也同样存在,如:交流问题、需求不断变化及软件复用等问题。面向对象技术正是解决这些问题的方法。本文首先总结几个常用的设计方法,然后提出一种面向对象的可编程控制器程序设计方法。
  
  2常用方法介绍
  
  1.组合逻辑函数法
  
  可编程控制器是随传统继电器逻辑的发展而诞生的。电气控制线路与逻辑代数有一一对应的关系。具体设计时是首先根据控制要求列出逻辑代数表达式,然后对逻辑代数进行化简,zui后根据化简后的逻辑代数表达式画出梯形图,得出程序。
  
  此种方法简单直观。程序经化简后而得,显得非常精练。对于那些对电气控制线路熟悉的设计人员来说,容易接受这种设计方法。
  
  但是,换个角度来说,程序化简后系统的冗余性和安全性不好体现。精练的程序使得调试时很难判断出问题的确切位置,并且程序很小的变化往往涉及全盘变动。另外,逻辑代数只适用于系统开关量的设计,模拟量需求助于其它的方法。然而,一个系统的开关量和模拟量设计往往是紧密结合不可分的。
  
  2.功能转移图法
  
  这是一种顺序控制系统的图解表示法。适用于处理顺序、随机等类型的问题。此种方法就象制造工厂的流水线,干完一道工序才能进行下一道工序,直至zui后整个工艺流程结束。系统在设计时,首先按控制要求划分出一个个功能块,然后根据工艺流程将各个功能块进行排序,zui后整合成满足用户需求的系统。
  
  很显然,在利用这种方法编制的程序中每个功能块只与前后功能块有接口,之间仅仅存在功能转移的关系。对于柔性制造系统,它的各个组成元素需并行运行,协同动作,对资源并具有竞争性。前两种方法都是无法满足这种要求的。
  
  3.Petri网分析法
  
  用Petri网描述的系统有一个共同的特征:系统的动态行为表现为资源(物质资源和信息资源)的流动。可编程控制器的控制逻辑充分体现了这一特点,即谁条件满足谁就得电,得电者才能动作。该方法的具体设计步骤如下:
  
  (1)各个执行元件、位置检测元件、启动信号等都作为Petri的状态元素。
  
  (2)对每个切换主令信号采用一个转换表示。
  
  (3)设置启动状态,并列出各个状态标志。
  
  (4)设计Petri网的各个分程序。
  
  (5)对于协调控制系统,将要协调的各个单元主令信号进行约束。
  
  (6)对竞争控制系统、并发性的系统采用并行程序,循环型的系统采用与单序列程序相似的方法处理。
  
  (7)分配地址,列出逻辑方程,进行编程。
  
  Petri
  
  网具有图形的性质,能清楚地描述并行系统的所有现象。系统中的死锁等不安全因素都能通过可达树和关联矩阵等分析手段揭示出来。Petri网分析方法不仅可用于可编程控制器的程序设计,而且还可用于对程序中模型进行分析。然后根据构造出的模型直接设计程序,控制并行系统的运行。
  
  Petri网的优良特性受到人们的喜爱,但其状态空间爆炸是性能数量分析技术面临的主要问题。Petri网理论的不断发展虽然对解决状态空间爆炸带来一定的进展,但是不能从根本上解决状态空间随模型增长而指数性增长的问题,因而对复杂和大规模系统模型的分析求解仍然是极大的挑战。
  
  3面向对象的程序设计方法
  
  面向对象技术在计算机程序设计中,OOA(面向对象分析)阶段建立的系统模型映射到OOP(面向对象程序设计)阶段的程序代码非常方便,因为象C++、VC++、JAVA等编程语言都是面向对象的程序设计语言。类的封装、重载、继承都很容易实现。OOA阶段建立的系统模型包括基本模型和补充模型两部分。基本模型是一个类图。补充模型提供了帮助理解基本模型的主题图和反映系统如何满足用户需求的交互图。本文首先分析可编程控制器程序设计OOA阶段的系统模型,主要涉及类图和交互图的建立,然后将建立好的类图和交互图与具体的梯形图起来。在面向对象分析方法中用类图来表示对象模型。在可编程控制系统中对象的发现非常方便,即就是控制对象。对控制对象进行相应的控制就是代表用户的需求。然后将系统中所有对象进行分类,相同的归为一类。
  
  1.基类的建立
  
  zui基本的控制对象无外乎就是单个的继电器,如图1实线部分。此对象的属性即是继电器的状态。服务操作是控制继电器的触点开关。
  
  图1
  
  大部分基类均可如上图所示建立,只需将属性替换掉,换成定时器或计数器等。相应的服务更名为定时器启动和定时器停止,属性则为启动定时器和停止定时器。
  
  对于一些PID模块,我们不必考虑太多其积分、比例、微分等参数,因为这些都是人为事先设定的,其它模块以及PID模块本身都无法改变它们,所以顶多将它们设为属性,而不必为它们设置相应的服务。这样,我们对PID模块类只需根据它的输入输出添加一些服务和属性,如图1虚线部分。
  
  2.派生类的建立
  
  其实,对那些稍微有一些PLC基础的设计人员来说,基类早已存在他们的脑中,拿来即可用。建立派生类才是真正的PLC程序设计的开始。
  
  ——类的继承
  
  在C++编程中,我们可以先编好拥有画图的基类,把共同需要的画刷、画笔、背景等都设置好,并且还可定义很多共同需要的成员变量和成员函数。具体画矩形还是圆先不管,zui后在基类的基础上再派生出相应的画矩形类和画圆类。在PLC编程时继承非常容易实现,只需将基类梯形图中的继电器线包换成定时器或计数器。前头的控制逻辑不必变。如果要继承的并不是简单的一个定时器或计数器,而是另一段逻辑回路,则只需取一个基类继电器的触点引入到自己的回路中。这样即可原封不动地继承基类的控制逻辑。
  
  ——类的重载
  
  当然有时派生类只想继承部分基类的逻辑,某些部分则保留自己的特色。在此只能先复制基类的逻辑图,然后在需重载的部分做小范围的修改,而保留基类的大部分逻辑。
  
  ——类的虚拟与多态
  
  此处与类的重载有一定的相似,都是对基类的某一小部分进行修改而派生出自己所需的类。但是为实现类的虚拟还需做一些特殊处理。在基类的构造时,将需要实现虚拟的逻辑部分独立出来,用一中间继电器代表虚拟部分实现的功能。这样以后的派生类需重载虚拟部分时非常容易实现,只需将相应的中间继电器逻辑做一些改动,不会牵涉太多其它的逻辑回路。
  
  3.对象模型的封装
  
  在我们把所需的基类和派生类建立好后,就要考虑对象模型的建立。对象模型即就是把对象内部的具体逻辑回路的实现细节封装起来,提供程序设计人员一个简单直观的接口。如图2实现了一个变频器控制的简单封装。
  
  图2
  
  此变频器控制要求:开变频器时先将J1(给变频器供电的接触器)吸合,延时一段时间T1后才把B1(变频器启动接触器)吸合,启动变频器;变频器停止时,先停掉变频器,即断开B1,延时T2时间后才去断开J1接触器,断开变频器的电源。如图2实现了一个这样的变频器控制。此变频器对外的接口为:为J1、B1继电器状态提供四个属性,而外来触点BP1形成此类的两个服务。至于T1、T2定时器*被封装在此类中,属于该类的细节。如果用到一些中间继电器,它们都可封装为内部细节。
  
  其实,我们为了减轻后头交互图的复杂度,*可以进一步封装。例如:在一个化学水处理系统中,先把所需型号的阀门、泵、分析仪表等基本控制对象逻辑封装好,然后在对每一个阳床、阴床、混床(每种床都包括若干个阀门、分析仪表等)进一步封装。这个时候我们需要按照具体的工艺流程编排各个阀门、泵等的动作。该高层类接口对外提供:属性仅为一些主要部件的工作状态,从动设备的状态则无需理会;服务则可以是一系列工作方式,即阳床和阴床根据不同的工作方式实现不同的控制。封装到这一层后,我们的水处理系统的程序设计部分就已经完成了大半工作。zui后只需根据不同的工作方式组织对象模型。
  
  4.外部信号与对象模型的交互
  
  外部信号是存在对象模型之外的、调用对象模型的操作并且改变对象模型的状态的信号,比如:改变工作方式的外部液位信号(液位控制系统)、汽轮机的工作状态(汽机保护系统)、工作方式选择开关(适用大部分系统)。外部信号只是一个相对的概念,因为一个处于某一对象模型外部的信号有可能被封装在更高一层的对象模型中。每个对象模型对于不同的外部信号所作的响应是不同的,所以交互后对象模型的状态也不一样。其实,对于同样的外部信号,由于对象模型的初始状态不同,交互后的结果也可能不同。
  
  使用面向对象技术中的概念,交互图是一种详细表示对象之间以及系统外部信号与对象交互情况的图形文档。在此我们对交互图的绘制不必拘泥于某一特定的形式,具体情况具体应用,根据不同的控制工艺采取的图解方式。当然,是采用大家非常熟悉的方法,如流程图、状态变迁图、功能表图等。对于对象模型之间存在资源竞争和并行执行关系的系统也可借鉴Petri网来分析,但是状态空间的爆炸问题在对象模型的高层次的封装后显得不是那么突出了。
  
  例1:流程图式交互图(化学水处理系统为例)
  
  此处只给出了一个外部信号与对象模型交互的情况,完整的交互图应包括所有外部信号的交互情况。如图3,外部信号是方式开关打在“树脂回收”的位置,启动树脂回收工作方式。首先执行的操作是混床的“倒出树脂“操作,将阴、阳树脂分别倒出至阴床和阳床。然后并行调用阳床的“阳树脂回收”操作和阴床的“阴树脂回收”操作,进行树脂回收处理。直至处理好的树脂又都倒回至混床才结束。从这可以看出,步骤很象普通的功能转移法,一个功能执行完后接着下一个功能开始。但是思路*是两个方向,一个是功能细化,一个是层次构造。对于简单系统面向对象设计方法体现不出其太多优点,有时还是多次一举。但是系统复杂度一增加,*性能就突出来,具体见后头的性能分析。
  
  图3
  
  例2:状态变迁式交互图(多变频器联锁控制为例)
  
  如图4是一个三变频器联锁控制的状态变迁图。三个变频器*相同,所以对象模型非常好定义,三个对象取至同一个类中,就是图2中封装的变频器再加上一个工频回路。工频就是变频器的满功率运行,变频是变频器调节方式运行,两者互相联锁。某一时刻变频器只能工作在一种方式。方框中数字表示三个变频器的工作状态,分别用逗号隔开,前一数字表示变频方式,后一数字表示工频方式。例如:01,01,10表示1#变频器为工频方式,2#变频器为工频方式,3#变频器在变频方式。
  
  此系统定义了三个外部信号:泵出口压力低PL、泵出口压力高PH、12小时时间倒。
  
  ——PL导致的状态变迁如粗实线(箭头向下)的所示,通过比较变迁所引起的前后状态变化,我们可知变迁所需要调用的对象模型的操作。0-1需调用“开启变频或工频”操作,1-0则实调用“停止变频或工频”操作。
  
  ——PH引起的变迁如细虚线(箭头向上)所示。
  
  ——每隔12小时发出得时间到信号引起的变迁如细实线(三个循环回路)所示。
  
  图4
  
  4面向对象方法的性能分析
  
  1.交流问题
  
  从程序结构来讲,程序层次非常明了,zui底层的基类即就是PLC手册中的指令说明。基本控制对象如阀门、泵等的控制逻辑回路即是*层派生类,读者很容易分清哪些控制回路是控制阀门的,哪些是控制泵的。然后是对象模型封装部分。有了底层基本对象的封装,再加上对象模型与具体实物对象的紧密,这部分程序也是非常清晰。zui后是对象模型与外部信号的交互部分。根据流程图或状态变迁图很容易掌握功能实现所需操作的来龙去脉。所以,如果大家都以这种统一的三层结构编制PLC程序,交流问题就不存在了。
  
  2.需求不断变化问题
  
  需求的变化在PLC程序设计过程中是不可避免的,尤其对现场调试人员是一大考验。在现场调试时,通常都是条件差,交工时间催得紧的情况,而且用户是不断发现问题,不断地要求修改。所以,一个结构明了、思路清晰的程序非常重要。应用面向对象的PLC程序设计方法就能给出这样一个应变能力强的程序。PLC系统的需求变化无外乎是控制对象改型、控制工艺更改、外部信号要求的功能改变三种。
  
  (1)控制对象改型即就是阀门或泵的型号更改,这时我们只需在程序的基本控制对象部分找出相应对象的程序段,将其进行修改。这样即实现了控制对象的改型。用到该控制对象的程序部分都可保持原样不变。
  
  (2)控制工艺更改就像阳床(化水处理系统)的某一工作方式操作步的更改。比如阳床中阀门控制的顺序的改变,或者增删一些阀门。此部分的需求正好对应的是高层封装的对象模型。对付方法也是找到相应的对象模型程序段,作出修改。
  
  (3)外部信号要求功能的改变即就是外部信号引起的控制流程发生变化。我们所要做的工作的是针对需求改变的外部信号重新画交互图。根据交互图重新编制与该外部信号交互的程序段。可以看出,我们针对不同的需求变化都有非常明确的目标。每次的修改只涉及相应的程序段,对程序其他部分没有影响。我们的程序之所以对变化比较有弹性,主要是因为程序的层次封装结构。
  
  3.软件复用问题
  
  面向对象的PLC程序设计方法在软件复用方面是优势明显的。对于基本控制回路,直接可以挪用。高层封装的对象模型对于那些业务很单一的公司非常有用。比如专门设计锅炉控制系统的公司,它可以将复杂的三冲量计算公式封装在对象模型中,只需对同外部信号交互的程序部分稍作修改就可满足各种用户需求。
  
  4.存储空间问题
  
  面向对象的设计方法是一种浪费的习惯。用此方法设计的程序冗余部分非常多。但是,PLC硬件的发展已经使得这不是一个问题,CPU的存储空间通常都是绰绰有余。适当的冗余使得系统的安全性提高、结构更加明了、调试更加方便,没有必要再节省这庞大的存储空间。
  
  5结束语
  
  面向对象的PLC程序设计方法同其它方法相比,有时显得大同小异。因为在分析外部信号与对象模型的交互情况时,还是采用老方法。但是,正是面向对象概念的注入,规定了程序设计的层次分析结构,使得程序可读性大大增强,易于人员之间的交流;程序层次结构的清晰性使得程序对于用户需求的变化应变能力非常强;对象模型的封装便于功能代码的移植。至于交互图的表示形式,目前还是与程序设计人员的旧思维习惯兼容更好。等到PLC指令系统充分完善以及PLC设计人员*接受面向对象思想后,交互图自然会有它的统一格式。
上一篇: PLC编程语言 下一篇: PLC控制系统的设计和实践经验 PLC control system design and practical

下载此资料需要您留下相关信息

对本公司产品近期是否有采购需求?

提示

请选择您要拨打的电话: