摘 要: 本文通过讨论物联网的现状、关键技术及发展方向,主要介绍了一种开源自动化控制软件Sedona在物联网的应用技术,包括在物联网架构中下如何进行软件开发和应用程序设计,以及该架构的技术特点。
关键词: 开源,自动化控制软件,Sedona,物联网
The Application of an open source automation control software Sedona in the Internet of Things architecture
Abstract: This article discuss the present state of the Internet of things, key technologies and the development direction. It mainly introduces an open source automation control software called Sedona, which is used in the Internet of things. It describes the workflow of developing source code, presents the design flow of the integration and summarizes the technical features of the architecture.
Key Words: Open Source, Automation control software, Sedona, The Internet of Things
引言
随着当今社会的高速发展,嵌入式、智能设备和系统已经遍及我们的周围,它们隐藏在我们工作和生活的各个角落,负责从环境控制(温度、湿度、空气质量、照度),到安全( 消防安防报警、通道控制、视频监视),到测量(水、电、燃气),到服务(电梯、垃圾处理,热水器),甚至是我们所使用的商品的生产线上。智能设备和系统越来越多的影响着我们的世界。
如何在不更换设备的情况下,让它们协调工作并且更好的管理是每个集成商和用户所面临的关键问题。而Sedona 软件解决了这一问题。Sedona 软件为开发、部署、集成和管理无处不在的最底层的智能设备应用提供完整的软件平台,为廉价的设备提供可编程控制和连接Internet 的能力。 Sedona 框架的分布决策系统可以使所有的设备都具备控制和管理的能力,连接到网络的任何地方。
2 物联网
2.1 物联网内涵
物联网(Internet of Things)概念是05年正式提出来的,是互联网的一个延伸。它是一个基于互联网、传统电信网等信息承载体,让所有能够被独立寻址的普通物理对象实现互联互通的网络。它具有普通对象设备化、自治终端互联化和普通服务智能化3个重要特征。
物联网指的是将无处不在的末端设备(Devices)和设施(Facilities),包括具备“内在智能”的传感器、移动终端、工业系统、楼控系统、家庭智能设施、视频监控系统等和“外在使能”的,如贴上RFID的各种资产(Assets)、携带无线终端的个人与车辆等“智能化物件或动物”或“智能尘埃”,通过各种无线/有线的长距离/短距离通讯网络实现互联互通(M2M)、应用大集成(Grand Integration)、以及基于云计算的SaaS营运等模式,提供安全可控乃至个性化的实时在线监测、定位追溯、报警联动、调度指挥、预案管理、远程控制、安全防范、远程维保、在线升级、统计报表、决策支持、领导桌面(集中展示的Cockpit Dashboard)等管理和服务功能,实现对“万物”的“高效、节能、安全、环保”的“管、控、营”一体化。
2.2 物联网特征
和传统的互联网相比,物联网有其鲜明的特征。
首先,它是各种感知技术的广泛应用。物联网上部署了海量的多种类型传感器,每个传感器都是一个信息源,不同类别的传感器所捕获的信息内容和信息格式不同。传感器获得的数据具有实时性,按一定的频率周期性的采集环境信息,不断更新数据。
其次,它是一种建立在互联网上的泛在网络。物联网技术的重要基础和核心仍旧是互联网,通过各种有线和无线网络与互联网融合,将物体的信息实时准确地传递出去。在物联网上的传感器定时采集的信息需要通过网络传输,由于其数量极其庞大,形成了海量信息,在传输过程中,为了保障数据的正确性和及时性,必须适应各种异构网络和协议。
还有,物联网不仅仅提供了传感器的连接,其本身也具有智能处理的能力,能够对物体实施智能控制。物联网将传感器和智能处理相结合,利用云计算、模式识别等各种智能技术,扩充其应用领域。从传感器获得的海量信息中分析、加工和处理出有意义的数据,以适应不同用户的不同需求,发现新的应用领域和应用模式。
2.3 物联网关键技术
联网物联网是物与物、人与物之间的信息传递与控制。
在物联网应用中有两项关键技术:
1、传感器技术,这也是计算机应用中的关键技术。到目前为止绝大部分计算机处理的都是数字信号。自从有计算机以来就需要传感器把模拟信号转换成数字信号计算机才能处理。
2、RFID标签也是一种传感器技术,RFID技术是融合了无线射频技术和嵌入式技术为一体的综合技术,RFID在自动识别、物品物流管理有着广阔的应用前景。
2.4 物联网展望
物联网相关技术已经广泛应用于交通、物流、工业、农业、医疗、卫生、安防、家居、旅游、军事等二十多个领域,在未来几年内中国物联网产业将在智能电网、智能家居、数字城市、智能医疗、车用传感器等领域率先普及,预计将实现三万亿的总产值。因此,物联网的发展有很大的空间。目前信息市场的潜力还有待进一步发掘,而物联网正是一个重要的潜在市场。物联网的发展不仅能够创造经济价值,促进流通有序高效运转,推动资源合配置,提高消费安全系数,而且可以为扩大内需拓展广阔空间,为经济社会发展提供持续动力。
3 Niagara AX 平台
随着物联网技术的迅速发展和应用,如何使各种智能设备连接IP网络并融入上层的应用系统,就变得至关重要。Tridium 公司所研发的Niagara AX 平台正是设计用于解决设备连接应用的软件框架平台。它创造了一个通用的环境,几乎可以连接任何能够想象到的嵌入式设备或系统,而不用太多考虑这些设备的制造厂家和所其使用的通讯协议。而其关键在于Niagara AX 可以与各种设备和系统通信,将它们的数据和属性转换成为标准的软件组件,通过大量基于IP 的协议,支持XML的数据处理和开放的API 为企业级应用提供无缝的,统一的设备数据视图。图1表示的是一种多对一架构的Niagara AX 平台。
图 1 Niagara AX 让各系统之间,以及与上层应用之间相互统一
通过转换各种外部设备和系统的数据成为规范的软件组件,Niagara AX 创造了一种开发架构,大大优于基于网关集成的多对多的复杂架构。这种优势体现在——任何的设备和系统通过Niagara AX 规范,就可以兼容其他连接到应用框架的设备和系统,为企业级应用提供真正的系统内的互操作能力和统一的数据呈现。开发者不再需要花费时间去创建,测试和重复验证各种网关设施。图2是传统的多对多的系统结构。
图 2 太多的连接,过于复杂和高的成本,都给集成解决方案带来了障碍
NiagaraAX 已经被不同的市场所验证——适用于不同市场创建实时监视,控制和M2M应用的解决方案今天已经有超过16万个Niagara的实例运行于全球,且还在以每个月2到3千个的速度在增加。
4 Sedona及其应用
Sedona是一个开源自控软件体系框架,由 Tridium 公司研发,包含Sedona语言、Sedona工具包、Sedona虚拟机、Sedona编译器、Sedona 图形化开发调试工具等部分,于2009年8月份正式推出第一版,并开放源代码。
Sedona 语言继承了 Java、C# 等面向对象语言的特点,使得开发非常简单,而实现的功能又非常强大;以 Sedona 工具包形式发布的控制逻辑模块,实现了 “ 一次开发、随处可用 ”的目的,大大降低了用户的应用难度,同时也使很多行业应用经验得到很好的积累与发展;Sedona 虚拟机(Sedona Virtual Machine—SVM)专门针对楼宇自控设备进行了优化,能高效的运行在只有 100K左右内存的小型嵌入式设备上,并且实时性能得到很好的保证;采用Sedona 图形化开发工具进行在线实时开发调试,用组件模块的方式简单拖拽各种所需功能,并进行数据流向和控制逻辑的连线,就可以立刻完成用户的应用逻辑开发,还能实时看见反馈结果,使用户开发业务控制逻辑非常简单、直观、明了,大大降低了用户使用难度。
4.1 Sedona 工作流程简述
如图 3 所示的流程列举了在楼宇智能控制器上开发 Sedona 应用程序的整个过程。在
Sedona 软件架构下进行开发,有两种角色:一种是开发者(Developer),另外一种是集成者(Integrator )。虽然在实际工作中不可能将这两种角色区分的很清楚,并且大多数情况下用户是用两种角色配合来完成工作的,但在这里区分这两种角色将有助于对 Sedona 软件框架的深入讨论。
◆ 开发者角色:该角色主要是指软件开发工程师,他们负责用 Sedona 编程语言开发各种 Sedona 应用组件模块,如:行业特殊应用功能模块、设备 I/O 驱动模块、特殊算法模块等等。组件模块开发好以后将以工具包(kit)的形式进行发布,这样有利于版本的管理,同时也便于行业经验的积累和延续。
◆ 集成者角色:该角色主要是指某个行业或领域的专家,通常他们只需要在如图 2 所 示的图形化开发工具里,将开发者发布的工具包中所需要用到的组件模块拖拽到工作区上, 然后用连线方式将所选择的组件模块按照业务数据流程或者控制逻辑关系连接在一起,从而 就完成了数据处理和控制逻辑的工作。对于开发者发布的每个组件模块,集成者还可以通过 属性来配置和调整其实现功能的各项参数,以满足具体应用的需要。这样对于没有软件开发经验的行业专家来说, Sedona 允许他们采用组件模块的方式来积累并延续行业经验,并且以图形化的方式让用户进行模块的简单连线组合,这就为行业专家在各自的领域中进行创造性应用奠定了坚实的基础。
图 3 Sedona 开发工作流程图
4.2 开发者工作流程
开发者的工作流程通常按如下步骤进行:
1) 用面向对象的 Sedona 编程语言编写 Sedona 组件,用于实现某种功能或者算法。
2) 用 sedonac 编译器工具将 Sedona 组件源代码编译成工具包。在编译的过程中,工具包里所有包含的类都要先进行有效性检查,然后才被编译成一种特殊的中间格式代码(intermediate representation —IR)。IR 就像是 Sedona 的汇编语言一样,由于它的引入使得用 Sedona 语言开发的组件或者应用有了很好的移植性,因为用 IR 实现的用户逻辑代码 直到最后才会针对某个具体应用平台编译成对应的二进制 Sedona 虚拟机指令,这样就能让开发好的工具包能适应所有的平台,而不需要在不同平台之间进行多次的编译过程。在编译的同时,该编译器也能针对每个类产生标准的 Java classfile 文件,从而可以在 Java 虚拟机上直接运行 Sedona 应用代码,以便于开发者利用 Java 的开发调试工具对应用组件进行开发 调试,从而大大提高开发效率。
3) 开发者将组件以工具包的形式发布,由集成者选择将哪些工具包安装到最终的设备上去,这样就由 sedonac 工具将这些工具包编译成二进制的 scode 映像文件(这一步通常由工具自动完成)。集成者选择的工具包就决定了在设备上能使用的组件功能,这样的自由选择能力,大大提高了设备的适用范围,使得集成者可以根据具体应用环境进行灵活的裁剪。
4 ) 将Sedona 虚拟机和scode 映像文件加载到设备上运行。这些文件即可以是预先保 存在设备的 ROM上,从而在设备上电之后直接运行,也可以由集成者临时选择,通过网络 用SOX协议动态加载。这样就使得集成者能非常灵活、方便的根据不同需求进行现场定制。
4.3 集成者工作流程
在开发者将基本的组件模块设计好并发布出来之后,就可以让集成者自行进行设备功 能的开发与定制,从而用标准的开发方式实现统一的“分散控制”思想。通常集成者是某个领域或者行业的专家,他们用图 4 所示的图形化工具,灵活的选择 哪些工具包用在设备上,然后选择需要的控制组件拖拽到工作区上,依据组件之间的数据流 向或者控制逻辑关系,采用连线的方式将它们组织在一起,从而实现最终的应用程序。
图 4 Sedona 图形化开发工具
他们采用图形化的工具来设计应用程序时,即可以在现场直接连接设备,实时的用SOX协议对设备进行开发,从而直接观察到设备的运行效果;又可以离线进行设计,然后将应 用程序保存在 “sax”文件里,之后在需要更新设备的时候用 sedonac 工具将其编译成 “ sab ”文件,并用 SOX 协议将编译后的程序传输安装到设备上,就完成应用程序的更新。
4.4 控制逻辑实现
在Sedona 开发软件中并没有现成的组件可以实现楼宇自控系统中风机的控制逻辑,虽
然可以利用其基本的各种逻辑控制组件实现以上控制算法,但这里想介绍如下步骤,让开发
者能很容易的开发用户自定义的控制逻辑组件。基本的开发步骤如下:
1、以3.4.43 版本的软件为例,假设应用软件安装根目录在“C:\Niagara\Niagara-3.4.43”
下,后面为表述方便,将根目录简述为{Root}。
2、在{Root}\sedona\src 目录下创建一个新的工具包目录,这里取名为LongDHuaTools”。3、在{Root}\sedona\src\LongDHuaTools 目录下创建“kit.xml”文件,该文件是用来述
编译器编译时所需要的相关源代码目录及其他信息,详细的内容如下:
<!--
- Sedona Kit
- Copyright (c) 2009 LongDHua (BeiJing) Controls Technology Co., Ltd.
- WuCaiJun, on 2009-10-01.
- Licensed under the Academic Free License version 3.0
-->
<sedonaKit
name = "LongDHuaTools"
vendor = "LongDHua"
description = "Tools package for the Building Automation"
version = "1.0.0"
includeSource = "true"
doc = "true"
>
<!-- Dependencies -->
<depend on="sys 1.0" />
<!-- Source Directories -->
<source dir="." />
<source dir="test" testonly="true"/>
</sedonaKit>
4、在{Root}\sedona\src\LongDHuaTools 目录下创建“Fan.sedona”文件,该文件是用户自定义风机控制逻辑的源代码文件,详细的内容如下:
//
// Copyright (c) 2009 LongDHua (BeiJing) Controls Technology Co., Ltd.
// Licensed under the Academic Free License version 3.0
//
// History:
// 2009-10-01 WuCaiJun Creation
//
**
** Create a fan control logic.
**
** out: output to the fan start or stop control point(true=start, false=stop).
**
** inFault: input to check the fan fault status(true=fault, false=normal).
**
** inStatus: input to check the fan running status(true=run, false=stop).
**
** inA_M: input to check the fan auto or manual status(true=auto, false=manual).
**
** inCtrl: input to set the fan control logic(true=start, false=stop).
**
@niagaraIcon="module://icons/x16/control/math/add.png"
class Fan extends Component
{
property bool out
property bool inFault
property bool inStatus
property bool inA_M
property bool inCtrl
/* The override execute function will be the main invoked loop */
virtual override void execute()
{
if ( inA_M )
{
// Auto Control
if ( inFault )
{
// Check the Fault condition
out = false
}
else
{
// Do the normal control logic
out = inCtrl
}
}
else
{
// Manual Control, Do nothing!
}
}
}
5、启动一个DOS 命令行窗体,转到{Root}\sedona\src\LongDHuaTools 目录下,输入如下命令执行编译的过程:
C:\Niagara\Niagara-3.4.43\sedona\src\LongDHuaTools>sedonac kit.xml <-此行为输入
Parse [1 files] <-此行以下为输出
WriteKit[C:\Niagara\Niagara-3.4.43\sedona\kits\LongDHuaTools\LongDHuaTools-182eba01-1.0.0.kit]
*** Success! ***
6、在经过上述五个步骤之后,将会自动创建{Root}\sedona\kits\LongDHuaTools 目录,并将编译好的工具包文件拷贝到该目录下,如:LongDHuaTools-182eba01-1.0.0.kit,其命名分三个部分,第一部分是工具包名称,包含供应商信息,第二部分是校验码,第三部分是工具包的版本号, 至此一个新的风机控制逻辑组件已经创建成功。
5 总结
Sedona 软件框架主要是面向基于互联网的智能型嵌入式设备而设计的,其主要特点如下:
1、 Sedona 语言
这是一种通用的面向组件化的编程语言,非常类
似Java 或者C#;它支持单一继承、多态等面向对象的特性,不支持接口扩展;采用静态内存设计模式,不支持new 关键字,从而非常适合只有100K 左右的嵌入式设备的使用,用户可以使用该语言编写自定义的扩展功能函数或者对象组件等,从而可以不断扩充新的功能。
2、Sedona 虚拟机
Sedona 虚拟机是一个小型解析器,采用ANSI C 编写,并且对硬件设备的特殊要求非常少,具有良好的移植性,可以很容易的移植到新的微处理器上,无论底层有没有操作系统的支持,移植都很方便。由于有了Sedona 虚拟机,也就实现了类似Java 语言的“一次编程、随处可运行”的目标,只要是采用Sedona 语言编写的代码,只要编写一次,就可以在任何支持Sedona 虚拟机的设备上运行。
3、支持Java
Sedona 编译器不仅能将Sedona 程序编译成Sedona 虚拟机能识别的二进制代码,也能将其编译成标准Java 字节码,从而可以在Java 虚拟机上运行用户的Sedona 应用程序,这就允许像使用Java 的JAR 文件那样运行Sedona 应用程序了。在Java 虚拟机上运行Sedona 应用程序有两点好处:一方面类似HotSpot 这样的Java 虚拟机拥有高效的即时编译技术(JIT),能在运行时刻将Java 字节码编译并优化成本机代码执行,从而提高运行效率,使得Sedona 应用程序在Java 上能运行的更快;另外一方面,在Java 环境下能有更多的开发调试工具可以使用,这样就能在程序运行出现异常情况的时候,充分利用Java 下的开发工具进行边界检查和堆栈跟踪,方便快速开发调试程序。
4、面向小型设备
在Java 上运行的Sedona所需要资源和性能使得其并不适合大多数嵌入式设备使用,Java通常需要好几兆的内存来运行,并且有些Java 虚拟机还需要运行时刻的授权费用,所以Sedona 的虚拟机就专门针对只有100K 左右字节内存的嵌入式设备进行设计。Sedona 虚拟机不支持new 关键字,并且采用静态内存设计模式,这样就避免了Java 虚拟机在运行时刻存在垃圾回收算法影响运行效率的问题,使得Sedona 虚拟机在嵌入式领域中能满足对实时性的特殊要求。
5、面向组件化的编程
Sedona 采用组件化的方式编程:组件可以是某种服务程序,也可以是其他组件的组合连接,从而完成某种数据处理或者流程控制。在已经开发好的组件基础上,将各个预先编好的组件连接起来,形成最后的应用程序,这样的编程模型非常适合采用图形化编程工具来进行开发,同时也便于用户的理解和使用。
6、联网
Sedona 内嵌多种通信协议,可以运行在任何基于IP 通信的网络上,包括6LoWPAN 等。通过联网通信协议,可以让用户实时观察设备运行数据并进行远程控制,也允许用户通过联网远程实时的对应用程序进行增加、删除、修改操作,甚至可以远程更新整个嵌入式系统的固件代码。Sedona 不仅提供标准的通信协议,如:BACnet、Lonworks、Modbus 等等,它还允许用户自行开发新的通信协议,以便兼容一些传统的控制设备或者扩展新的用途。
7、开源的系统
Sedona 核心技术基于一种灵活的学术性授权,因此对于制造厂家来说很容易在其设备上集成Sedona 技术,并且保证用Sedona 开发的工具或者应用能很容易的移植到任何Sedona设备上。Sedona 开源框架整合了最新的IT 技术,如:面向对象编程语言、虚拟机、图形化组件开发技术等等,给楼宇自动化领域带来了一种新的解决方案,相信在本文的抛砖引玉作用之下,会有越来越多的人参与到这个开源项目的开发与建设中来,那时候就会有源源不断的新思路补充到这个开源框架里来,使其不断的壮大,这样给楼宇自动化领域也注入了新的活力,希望本文能为Sedona 在国内的应用与发展开个好头。
参考文献
[2] Sedona 开发帮助文档
[3] 创建智能设备应用的开方式软件平台
-- NiagaraAX 简介
[4] 物联网 The Web of Things