面向对象设计在楼宇控制系统中的应用
Object-oriented design in building automation application | |
| 摘要 介绍了面向对象编程如何提高程序的可靠性、提供更大的灵活性和减少编制费用,进而介绍了完整的面向对象设计还包括构成控制系统通讯基础的面向对象协议。BACnet协议将每个控制子单元归纳为对象形式,简化了设备之间的通讯和操作。 关键词 面向对象设计, 控制系统, BACnet, 协议 Abstract lllutrates how object-oriented programming improves reliability, provides greater flexibility and reduces programming costs, and further presents that an object-oriented protocol as a base of communication makes a whole object-oriented design. BACnet changes control units to a control units to a collection of objects, which facilitates the communication and operation of the devices. Keywords object-oriented design, control system, BACnet, protocol | |
|
一个对象可能对多个触发消息响应,而每个消息必然需要一个成员函数对它响应,这种成员函数即所谓的"方法"。将系统事件映射到对象时所使用的手段称为"消息表"。面向对象控制语言出于简便的原则将消息映射和对应的方法按照统一的格式来书写。在消息表中预定义了系统事件所映射到的方法,当消息触发该对象后寻找对应这个消息的方法名称,并据此执行相应的方法。
控制语言中一个完整的对象应包括对象名称、消息表、对象变量声明和数据交换表和对象的实体。对象变量声明和数据交换表将系统内的变量声明并与外界设备数据进行交换。当消息触发对象时,表中的系统设备状态和数据均映射到相应的变量上。对象的整体构造为:
对象名称:
消息表:
方法名称1(触发条件1)
…
方法名称k(触发条件k)
对象变量声明和数据交换表:
变量类型 变量1=系统设备1
…
变量类型 变量n=系统设备n
对象的实体:
方法名称1
方法的源代码1
方法名称2:
方法的源代码
…
结束
为了简单地说明对象在楼宇控制系统中的实际应用,以最常用的PID算法为例来构成一个PID对象。图1所示为PID算法调节 调节执行器v使受控对象的温度t达到温度设定值tset。对于这个调节算法,一个简单的对象就可以将其概括。

图1 PID系统调节系统
离散PID算法是周期性运算,因此它的触发消息为时间周期。PID算法与外界存在3个数据的交换,它们是温度设定值、温度测量值和执行器。完成一个PID对象只需规定时间周期,同时将映射到这3个数据的对象内部变量与实际设备相对应。这是一个非常简单的过程,一个不精通PID算法的人可以熟练地操作PID算法。简单的PID算法只是一个例子,而对象的实际应用在复杂的算法上。通常工程人员需要花很多时间去理解复杂的算法,如自适应算法等等。而算法的对象化省去了这些麻烦,节约了工程人员的时间和精力。
由于对象对不同的消息作出不同的响应,因此可以在PID对象中加上对故障的处理等以丰富PID算法的应用。下面例子中对温度超限的信号进行了处理。当温度超限后,对象直接执行故障处理的程序,不再进行PID运算。用户同时可以增加其它的方法来处理不同的情况,从而大大提高了对象的灵活性。
PID算法:
消息表:
PID(间隔时间10s)
故障处理(温度超限报警信号)
对象变量声明和数据交换表:
tset=温度设定值
t=温度测量值
v=执行器
对象的实体
PID计算
PID计算源代码
故障处理:
故障处理源代码
结束
3 面向对象的协议
在控制系统中仅有属于管理层的面向对象编程语言是不够的,包括现场层的面向对象通讯协议才构成完整的面向对象控制系统。面向对象设计的初衷是将编程过程大大的简化,而传统的面向点的控制系统只会使编程人员的负担增加。例如一个AI和两个DO组成的对阀门的控制,其中AI测量阀开门度、两个DO分别是阀门电机的正反转,在控制阀门时若AI测量值小于阀门设定值则正转DO输出信号开大阀门,反之关小阀门。这些简单的功能在传统的面向点的控制系统中均需要编程人员来编写,增加了系统的设计费用和调试成本。
面向对象的BACnet协议是用来帮助系统中所有设备相互理解的"共同语言"。出于统一楼宇控制协议的目的,ASHRAE于1995年公布了BACnet协议[4]。BACnet协议定义了包括空调控制系统、消防等楼宇设备控制系统之间的数据通讯协议。它遵循OSI开放性协议,将数据组合成对象在网络之间传播。同时由于楼宇控制网络是网络,它只保留了物理层、数据链接层、网络层和应用层。它们的构成见图2。

图2 BACnet的结构
BACnet协议没有在具体规定物理层和数据链接层的形式,它可以建立在多种不同的协议之上。图2所示的第1,2种选择是建立在IEEE 802局域网标准上,它将数据链接层又细分为逻辑链路控制子层(LLC)和介质存取控制子层(MAC),其中逻辑链路控制子层主要提供寻址、排序、差错控制等功能,介质存取控制子层提供传输介质和访问控制方式等功能。图中ISO 8802-2(IEEE 802.2)是逻辑连路控制子层,ISO 8802-3(IEEE 802.3)是介质存取控制子层,具体方法为冲突检测的载波侦听多路访问(CSMA/CD)。第3种选择在数据链接层上为主从/令牌方式,物理层则采用了主从结构的RS-485标准,RS-485标准允许最多并联32台驱动器和32台接受器,因此在多点互连时非常方便。第4种选择是点对点协议,相应的物理层为RS-232标准。第5种选择是Echelon公司的LonTalk协议。BACnet的网络层的目的是将不同的网络连接起来,不管是由何种物理层和数据链接层组成的。例如建立一个BACnet路由器就可以将IEEE 802.3和ARCNET构成的不同网络组织起来。
BACnet之所以没有规定物理层和数据链接层的具体协议,是希望BACnet能应用在多种网络基础上。BACnet协议的真正实质是在应用层定义了开放性的设备对象,并因此成为面向对象的协议。BACnet几乎涵盖了楼宇控制中所有可能的情况,它定义了设备对象、时间表对象、程序对象、文件对象等等,同时还提供了管理和操作对象的服务。
BACnet目前定义了18种对象,它们分别是模拟量输入、模拟量输出、模拟量值、数字量输入、数字量输出、数字量值、设备、多态量输入、多态量输出、命令、时间表、时序表、事件登记、文件、环、组、通知类和程序对象。BACnet为这些对象定义了具体的数据结构和属性,属性代表了设备中的信息,系统可通过属性对设备进行读取或写入信息。在这18个对象中,输入输出对象共6个,它们代表了所有可能的输入输出类型。多态量输入输出对象2个,它们表示对象所在BACnet设备中运算程序的结果和物理输出。命令对象1个,它向一组对象的属性写入一组值。时间表对象2个,它们用于表示周期性的时间或日历。事件登记对象1个,它记录了管理事件所要求的信息。文件对象管理对文件的访问和读写。组对象将相似的设备定义为一组,使操作更简便。环对象为反馈控制对象。通知类对象包括事件通知所需的信息。程序对象将运行程序作为一个对象。
表1以数字量输入为便说明BACnet是如何定义对象的。
表中各项为数字量输入对象的属性。对象ID是代表对象的一个数字,对象名称和对象类型顾名思义是对象的名字和对象的类型。设备类型是一个描述所接设备的字符串,而设备状态和事件状态均代表设备正常与否。服务状态属性代表实际输入值和对象中的测量值是否一致。当它为真时实际输入值和测量值无关,用户可以随意更改而不用考虑实际的输入值,这为调试程序带来了极大的方便。极性属性代表对象的极性,当极性为正时对象中的测量值与实际输入值相同,极性为负时二者相反。例如实际输入值为"ON",若极性为负时对象中的值为"OFF"。"开"、"关"状态描述说明了对象对开或关状态的解释,例如"关"状态描述可以写为"风机1关"。"最近状态变换时间"属性是数字量从计数器复位后的状态变换次数,而状态变换计数器复位时间属性即记录了上次复位的时间。"开"状态复位时间和经历时间属性分别记录了复位的时间和复位后"开"状态的时间(s)总和。剩下的属性描述了对报警信息的操作,这里就不一一详述。
表1 数字量输入对象
| 属性名称 | 数据类型 | 属性特征 |
| 对象ID | BACnet对象ID | 只读 |
| 对象名称 | 字符串 | 只读 |
| 对象类型 | BACnet对象类型 | 只读 |
| 测量值 | BACnetBinaryPV | 只读 |
| 描述 | 字符串 | 可选 |
| 设备类型 | 字符串 | 可选 |
| 设备状态 | BACnetStatusFlags | 只读 |
| 事件状态 | BACnetEventState | 只读 |
| 可靠性 | BACnetReliability | 可选 |
| 服务状态 | 布尔量 | 只读 |
| 极性 | BACnetPolarity | 只读 |
| "关"状态描述 | 字符串 | 可选 |
| "开"状态描述 | 字符串 | 可选 |
| 最近状态变化时间 | BACnetDateTime | 可选 |
| 状态变换计数器 | 无符号整型 | 可选 |
| 状态变换计数器复位时间 | BACnetDateTime | 可选 |
| "开"状态经历时间 | 32位无符号整型 | 可选 |
| "开"状态复位时间 | BACnetDateTime | 可选 |
| 延迟时间 | 无符号整型 | 可选 |
| 告知级别 | 无符号整型 | 可选 |
| 报警值 | BACnetBinaryPV | 可选 |
| 事件使能 | BACnetEventTransitionBits | 可选 |
| 应答 | BACnetEventTransitionBits | 可选 |
| 告知类型 | BACnetNotifyType | 可选 |
BACnet协议使面向对象编程变得更为简单和安全。用户只需要在程序中简单地调用对象的属性就可以获得大量的功能,使控制程序变得短小精悍从而适用于控制系统。同时用户可以将主要精力集中在控制算法的编制上,编制程序由原来繁重的复杂的工作变成了轻松快乐的过程,节省了编程人员的时间和费用。
4 结论
由于面向对象设计的种种优点,现在已有大量的控制系统支持面向对象的概念。相比传统的面向点的控制系统,面向对象的控制系统更节省编程和调试费用,减少了程序的出错率,提高了系统的可靠性,增加了系统的灵活性。因此面向对象的控制系统必然替代面向点的控制系统,成为控制系统的方向。
1 Jonathan C French. Object-oriented programming of HVAC control devices. ASHRAE J, 1999 (12).
2 Perter cord, Edward Yourdon. Object-oriented design. Yourdon Press, 1991.
3 汤庸,结构化与面向对象软件方法,北京:出版社,1998
4 ASHRAE Standard, ANSI/ASHRAE 135-1995. BACnet, a Data Communication Protocol for Building Automation and Control Networks.
5 惠晓实,刘贤德,石岩,BACnet的对象模型,工程设计CAD与智能建筑,200(1)
6 惠晓实,刘贤德,石岩,BACnet的服务--BACnet协议标准技术系统讲座(6)。工程设计CAD与智能建筑,2002(2)
7 杨守权,建筑物自动化系统的三层结构,工程设计CAD与智能建筑,2000(3)