传感器网络应用程序的建模、仿真与自动代码生成框架
扫描二维码
随时随地手机看文章
引言
无线传感器网络(Wireless Sensor Networks,WSN)在现场应用时,通过无线信道通信进行信息共享和协作处理。
WSN应用目前存在两种功能分析包,即特定平台操作系统和量身定制模型,在应用程序开发阶段都存在明显的缺陷。第一类将应用程序迁移到其他平台时很困难,例如从TinyOS迁移到MANTIS或迁移到ZigBee兼容平台,必须重写大量代码并进行大量调试。第二类有许多依赖于平台的具体代码需要开发和调试,如果在开发和集成阶段结束后发现问题,惟一的解决方法就是基于LED进行调试,极为耗时。
参考仿真框架
The MathWorks公司构建了基于 Simulink的传感器网络模型作为动态系统的基时仿真器。模型具有两个主要组件:无线信道模型(下文称为Communication Medium)和Node块。
Communication Medium块可以通过C语言实现,可将其修改为重用任意现有信道和连接模型。
Node块有多个完全参数化的mote,包含硬件与软件平台模型。例如包括计时器、LED以及应用程序的参数化Stateflow块。Stateflow是一种有限状态机语言,用于建模、仿真控制逻辑和流程图。可以用于实现各mote内运行的算法(应用程序、中间件或设备驱动器)。
只需修改模板算法(Stateflow 库对象),在Communication Medium块中设置节点的连接参数即可开始仿真。使用动画状态图、观测仪器和显示器收集统计数据,以执行算法的功能分析。如果结果分析表明需要改进,则可通过改进算法实现。
完成算法的功能分析后,通过算法的Stateflow自动为任何受支持的WSN平台生成代码。这是利用RealTime Workshop Embedded Coder软件的自定义功能完成的,它能为Simulink和Stateflow块生成可嵌入的ANSI C代码。
图1 WSN的一个简单仿真框架
WSN应用程序操作系统示例:TinyOS与MANTIS
TinyOS的编程模型基于组件,概念实体由模块和配置两类组件表示,实现用于声明命令和事件签名的接口。事件即软件抽象,例如接受信息包、完成传感器取样等。命令用于触发操作,例如传感器读取操作或启动无线电接收和传输信息等。TinyOS应用程序是使用nesC编写的,这是C语言的一个扩展。
MANTIS是一种轻量级、多线程的操作系统,能在能源受限的分布式传感器网络上进行多任务处理。调度程序采用基于优先级的轮叫调度,支持线程先占(pre-emption),允许操作系统在活动线程间自由切换而无需等待。由于采用了这样的方法,操作系统对于关键事件的响应速度比TinyOS更快。MANTIS的内核和API都是使用标准C语言编写的。
图2 WSN应用程序建模、仿真和代码生成框架
实现 WSN 应用程序
MANTIS线程和任务的计算主体以及TinyOS的命令实际上都是使用C语言编写的。在MANTIS中,集成非常直接,因为Real-Time Workshop Embedded Coder的ANSI C输出可直接用作用户线程。TinyOS的程序由高级抽象组成,但这些抽象的主体是使用C语言编写的,因而只需要一个代码转换器,以C语言代码作为输入,将代码分割成不同的部分(包括定义、函数等),并使用这些部分来生成nesC代码。
本文使用The MathWorks公司的 Target Language Compiler(TLC)实现这样的代码转换器。它提供了生成特定平台代码的机制,可接受来自ANSI C代码的部分(例如包含、定义、函数代码等),也可为目标平台添加自定义代码。使用Stateflow时无需考虑通用函数在TinyOS或MANTIS中的实际实现,因为TLC库中已经实现了这些函数,可用于任意操作系统。通过使用TLC脚本自动生成TinyOS或MANTIS应用程序,在无需修改的前提下为目标平台编译和执行这些应用程序。 并且,TLC可重写并修改源代码,分割源代码并使之适合底层平台。这不仅实现了比编译器更出色的优化,还能方便的在硬件和软件平台之间迁移应用程序。