工业自动化的编程理念经历了从最初的线性化编程模式到结构化编程,再到后来的模块化编程,其编程效率得到了极大的提升。但编程的理念总是在不断的向前发展,今天,笔者在这里引入了一个全新的编程思想—面向组件编程。
2.1 什么是面向组件编程模式
面向组件(COP,Component-Oriented Programming)编程是一种编程思想,它来源于软件工程领域,是高级语言编程中的概念。面向组件技术建立在面向对象技术(OOP,Object-Oriented Programming)之上,它是面向对象技术的进一步发展。它的定义是:系统中一种物理的、可代替的部件、它按照某种类别对部分数据及逻辑进行封装,并对外提供了一系列可用的接口。一个组件代表一个系统中实现的物理部分。
组件和组件接口是面向组件编程的的两个重要概念。组件是一个明确定义了接口和相关功能的可组合的单元,它可以独立的发行并供第三方使用及再进一步组装。组件接口描述了组件对外提供的服务,组件和组件之间、组件和客户之间同时通过组件接口进行交互。组件发布后只能通过预定义的接口提供服务,因此组件的接口应具有稳定性、合理性,组件的接口必须标准化,这是组件是否成熟的标志之一。
以上概念引申到TIA Portal中,其实每个针对某个特定工业设备对象(比如马达、阀门、变送器等)并按照独立逻辑封装好并对外提供接口的FB(Function Block,下面简称FB)就是一个组件在STEP7中的表现形式,根据它提供的接口就可以调用其内部功能并返回数据及状态,也可以通过接口来设置某些控制特性等,这些接口是标准的且符合事先约定的标准。在编程中,当调用这个FB并分配了一个背景DB(Data Block,下面简称DB)后便产生了一个该组件的实例,也就是说这个FB(逻辑)和相应的背景DB(存储该设备的状态及相关数据)对应于某一个具体的设备,是这个设备在控制程序中的一个实例。例如我们创建了一个专门控制马达类设备的FB并命名为HwMotor的组件,那么我们可以多次调用这个组件并分配不同的背景DB以对应于不同的马达,比如M-1001、M-1002等,所有的马达类设备共用这个HwMotor组件,区别是具有不同的背景DB,可以通过该组件的接口为每个马达设置不同的控制特性,比如有的马达操作需要二次确认(即按下“启动”或“停止”按钮后还要再确认一次),而有的马达则不需要确认等。
那为什么是FB而不是FC呢?由于FC(Function,下面简称FC)没有自己的背景DB,它不可以存储自己的数据,需要借助于其它存储区,如全局DB或M存储区,换言之,它不支持产生实例。因此从高级编程语言的角度来看,FC只相当于一个函数,而不是一个组件,它只能根据预先定义的功能返回结果。另外,虽然通过建立UDT(User Data Type,下面简称UDT)再通过DB来存储数据提高了其易用性,但还是存在以下缺点:
u 一旦修改了FC的接口,则必须修改UDT,那么该UDT的所有数据必须要更新,名称或地址将重新排列,需要手工重新连接数据至更新后的FC,工作量大、效率低下;
u 在调用FC时,所有的参数引脚都需要连接变量,而对于FB,需要赋值的引脚才连接变量,不需要的赋值的则可以空在那儿,因为它们有属于自己的背景DB地址,从而节省编程工作量;
u FB有自己的背景DB,支持static变量,也支持更复杂的参数类型,可以实现一些更高级的功能。
综上所述,对于组件的编写,强烈建议生成FB,而对于一些简单的函数,则最好使用FC编写,例如选择器、比较器及限幅器等等。
图2.1 组件库架构示意图
在TIA Portal中的面向组件编程并不仅仅是生成FB,每个FB还有相对应的Faceplate(面板)。Faceplate基于WinCC Comfort和WinCC Professional,在运行表现为Icon和弹出式面板,面板中包含该FB所有的操作命令、状态和属性设置。FB和与之对应的Faceplate称之为一套组件。
任何问题请发送邮件至huangwei@hwlib.cn