加入收藏 | 设为首页 | 阅知网,倾力打造学术界一站式发表平台!
 教育
具有网络控制系统仿真功能的基于Matrix Laboratory的TrueTime简
发布时间:2019-11-28 09:31:40 点击: 来源:教育研究与实践
0  引言
仿真开始前,要初始化各个内核模块以及网络模块,创建一些计时器、任务、事件和监控器等等。初始化代码和仿真时需要执行的代码可写成C++函数,也可以写成矩阵实验室(Matrix Laboratory,Matlab)中的.m文件,前者的效率较高,后者更方便。
1  TrueTime的代码书写
通过一个比例控制器(PI-controller)的实现来说明如何书写Matlab或C++代码。
1.1 书写Matlab代码

表1 比例控制的Matlab代码实现                                表2 比例控制的C++代码实现
Table1 The Matlab code implementation of proportion controlling      Table2 The C++ code implementation of proportion controlling
表1是给出比例控制的Matlab代码实现。变量segment用来决定执行哪一部分,data是用户定义的数据结构,该数据结构是在执行ttCreateTask或者ttCreatePeriodicTask时创建的,在这个函数里被更新并返回。在这个例子里,ttAnalogIn表示读,ttAnalogOut表示写。第一段代码的执行时间是2s,这表示该任务的输入到输出的延时至少为2s。第二段代码返回一个负的执行时间,用以表示代码执行已经结束,即没有其他的代码段需要执行了。
1.2 书写C++代码
如上表2所示,其中数据结构Task_Data已知,包含了控制信号u和控制器放大倍数K。
1.3 调用仿真模块框图
不论是通过C++实现还是通过Matlab实现,都可以在代码里调用仿真模块框图,这是实现控制器的一个简便方法,如下表3是其代码实现。

表3 调用PI控制器模块的例子                             表4 一个TT初始化脚本的Matlab实现
Table3 Example of calling the PI controller modules            Table4 The matlab implementation of a TT initialization script
2  初始化TrueTime
TrueTime内核模块初始化有:定义调度策略;指定输入和输出的个数;创建任务、事件、监测器等。这些都是由初始化脚本函数来完成的。它的内核模块带有一个参数,不论是在Matlab还是在C++里,此参数都是初始化脚本的文件名,例如下面例子中的参数就是:example_init。
上表4给出一个TT仿真在初始化时需要的最少代码,通过ttInitKernel函数定义输入、输出个数和调度政策;通过表4中的函数创建一个周期任务,此任务调用表1所给的Pcontroller函数。