那么在实际应用中,对于那些具有相对“复杂”功能的设备,而这个基础模型无法完成全部功能映射的时候怎么办呢?Niagara 解决这个问题的方法就是对基础对象模型进行功能扩展。
对基础对象模型进行的功能扩展,Niagara 支持两种方式:
第一种,就是利用 Niagara 本身提供的功能扩展对象模型,将其组合到基础对象模型上面,从而实现对基础对象模型功能的扩展。我们可以简单地把这个叫做基础扩展。这个过程有点类似搭积木,你可以把一个纳凉亭(作为扩展)放在一座楼(基础模型)的屋顶,从而给楼本身增加了“屋顶纳凉休闲”的功能(这里的凉亭和大楼的屋顶都是Niagara系统已经提供的)

第二种,就是 Niagara 所谓的“开放性”,它允许用户通过代码开发的方式,利用对基础对象模型的“继承”,或者对已有功能扩展的“继承”,实现新的功能扩展(当然这个开发过程需要遵从 Niagara 的一些接口规范)。相对于基础扩展,我们可以把这种方式叫做自定义扩展。比如,想要建一座屋顶有网球场的大楼(也就是大楼+网球场),但如果 Niagara 本身只提供了大楼的模型而没有提供"网球场"这个“模型”或“扩展”,那么我们仍然可以通过代码开发的方式,开发出一个网球场模型(自定义功能扩展),然后将它和 Niagara 已有的大楼模型(基础模型)进行组合,就可以得到想要的结果。

其实人类自身的成长也是类似的方式:作为人本身,每个新生儿个体(基础模型)在出生的时候基础能力是差不多的,相比于其他物种,这个基础模型的能力甚至非常弱小。但人类作为蓝星主宰物种,最重要的两个能力就是学习能力和沟通组织能力。通过后天的学习和创造能力(模型的功能扩展)实现个体的发展。下期我们会进一步讲,通过有效的沟通,将众多个体组织起来分工合作,从而实现群体的发展(模型之间的关联、组态形成应用程序)。

Niagara 本身针对 BooleanWritable 提供的基础扩展大致包括:
- BooleanChangeOfStateAlarmExt
- BooleanCommandFailureAlarmExt
- BooleanInterval/BooleanCov
对于基础扩展和自定义扩展,通过下面的实例来说明:
在 Niagara 上实现一个定频水泵的控制,除了能够远程启停设备之外,还希望实现如下功能:
-
选择 BooleanWritable 作为基础对象模型对定频水泵对象进行映射;
-
在 BooleanWritable 上添加 BooleanCov,记录水泵的开关时间和状态;
-
在 BooleanWritable 上添加 DiscreteTotalizerExt,记录水泵的启停次数以及累计运行时间;
-
通过开发自定义扩展 PumpExtension (继承自 BAlarmSourceExt )并添加到 BooleanWritbale 上来实现和阀门反馈信号的连锁,并在水泵启动失败之后发出报警。



Coming Next:
通过对象模型的组合实现控制逻辑