实时网络Modelica网络仿真库.docx
- 文档编号:4570935
- 上传时间:2022-12-06
- 格式:DOCX
- 页数:9
- 大小:537.66KB
实时网络Modelica网络仿真库.docx
《实时网络Modelica网络仿真库.docx》由会员分享,可在线阅读,更多相关《实时网络Modelica网络仿真库.docx(9页珍藏版)》请在冰豆网上搜索。
实时网络Modelica网络仿真库
TrueTimeNetwork——Modelica网络仿真库
P657
摘要:
我们提供对于Modelica的TrueTimeNetwork(以下翻译为实时网络)库,基于ITEA2工程EUROSYSLIB开发。
它允许各种网络协议的仿真,准备用于实时网络。
我们描述它的一些特征,讨论执行情况。
因为TrueTimeNetwork是用C语言建立的,要注意Modelica外部函数接口的使用。
我们也简单的讨论了本地Modelica执行的前景。
1.介绍
网络系统和网络控制在许多领域是越来越普遍了,如在自动控制系统。
通过网络发送信号导致延迟,依赖于网络协议,或多或少是确定的。
有些延迟的例子是网络接口延迟、传输延迟、传播延迟、和在分享模块上的冲突时间推后。
为了准确的仿真结果,这些延迟作用在整个系统上,在一个恰当的水平上建模网络是很重要的。
太详细的网络模型(包含单个字节传输)会是仿真太慢。
此外,这个详细级别在大多情况下是不必要的。
一个太粗糙的模型,如将网络延迟作为一个常量,在大多情况下不能获得网络传输的动态特性。
在ITEA2项目EUROSYSLIB下,Lund大学的自动控制院正在开发一个Modelica网络协议库。
将能应用到实时网络领域。
在这些网络下,ISO/OSI协议堆栈高层次通常不用。
因此库只建模各种有线或无线数据链接层次协议,焦点在关联延迟源的MAC通道。
库基于Matlab/Simulink工具箱TrueTime相同组开发的。
Modelica的TrueTimeNetwork是基于Simulink的TrueTime,并做了一些修改。
TrueTimeNetwork可以通过不同的网络协议发送浮点型和浮点型数组。
这是在Modelica中通过外部函数接口用C来实现的。
文章的组织如下。
在第二节,我们描述了用于仿真的TrueTime仿真包以及怎样对网络和网络协议进行建模。
第三节,从一个用户的角度来介绍TrueTimeNetwork库。
第四节,我们讨论TrueTimeNetwork库的实施方面。
特别要注意的是所给的外部函数接口的使用。
第五节,库的使用的一个前景。
2.TrueTime
3.Modelica库
如图1所示,Dymola中所见到的库的全貌。
TrueTimeNetwork库支持在同一个仿真中用多种不同的网络模块。
对于每一种执行协议,都有一种相对应的图形化模块。
在框图的参数里可以进行不同的网络设置。
网络框图的输入和输出是用于触发发送和接收。
另外,有框图用于发送和接收网络包,意味着连接网络框图,见图2。
存在的独立模块用于标量和数组的发送和接收。
也有一些另外的模块提供间隔时间、采样、通过网络周期发送信号。
另外,有一些模块代表空的节点,它应该连接网络地,用于那种不发送和接收信号的网络节点。
图1TheTrueTimeNetworkpackage图2用于发送和接收网络信息的框图外部函数
网络协议有好几种设置,见图3,以下库的使用方法省略。
图3CSMA/CD网络框图的参数对话框
图表1网络仿真回路
4.实现
原始的TrueTimeSimulink框图是用变步长的C++写的S-Function实现的。
在内部,每个框图都包含一个到网络结构体和离散事件仿真器的指针。
过零检测函数是用于强制求解器在要么一个内部(事先规定的)或外部(触发的)事件时产生“majorhits”。
事件包含发送和接收信息。
框图间的事件使用0/1之间的触发信号进行传递。
网络在运行时,网络数据包在网络包含的FIFO(先入先出)队列之间移动。
TrueTime的C++实现方法要转换成C实现方法才能采用外部函数接口在Modelica中使用。
外部对象被用于代表相当于不同协议的网络。
因为外部对象不允许成员函数、辅助外部函数的使用,如运行网络、发送和接收网络数据包。
对于用户隐藏了实现细节。
Modelica当前不支持外部状态。
这意味着,一旦我们运行网络,就没有办法返回到前一状态。
当更新网络的时候一定要注意。
因此我们不能在“后期”运行网络。
这可能发生,依赖于实现方法,在积分器尝试下一步运算的事件检测之前。
Simulink仿真器对它的积分器有丰富的界面,解决了在Simulink环境下的问题。
在Modelica环境下,我们通过小心使用when结构来完成这个问题。
图4仿真一个PID控制来关闭网络
图5仿真变量
图6网络协议实现
图表2检索网络结构指针
4.1外部网络对象
图6显示了一个用Modelica实现的网络协议。
网络是在Dymola中用代表每个网络协议的外部对象来实现的。
它指向网络模型的外部C实现。
另外有一个网络封装类来处理访问外部对象。
这通过函数networkZC和runNetwork来实现。
其他外部函数也可通过指定网络ID来访问外部网络模型。
另外,通过查找这个号码来获得指向这个网络结构的指针,如图表2。
为了仿真网络传输TrueTimeNetwork依赖两个函数,过零检测函数networkZC和runNetwork,见图表3。
当一个数据包通过网络发送,网络自己不接受数据包。
相反,它读一个布尔信号并触发它的侧面。
当一个来临的信号被接收了,标记一个新的网络包的接收,网络通过调用runNetwork来运行。
当网络应该在下一时刻运行,用networkZC来pollingthenetwork。
如果返回0,引起when从句触发,将触发包交付给目的地或者移动它通过FIFO队列(组成网络)。
简单的放下一个包意味着将它从网络移除。
图表3网络仿真回路
4.2发送和接收
在网络的发送端发送一个信号之前,发送节点必须创建一个网络包并在外部网络数据结构将数据包放在队列里。
当发送一个消息,调用外部函数sendReal,见图表4,创建一个消息结构体并将它插入FIFO队列。
通过搜索网络ID号码来存取网络。
所有这些都是在C代码中发生。
同时,在Modelica这边,一个代表输入的布尔型变量被触发。
当这是在通过调用runNetwork函数后使网络运行的时候发生的。
图表4网络仿真回路
当在网络上运行时,在一系列队列上传送消息。
消息的发送和接收是基于事件响应的。
怎样和什么时候移动消息是由仿真的网络模型协议决定的。
为了决定什么时候运行网络,使用过零检测函数。
放置在when语句里的到runNetwork的调用得到这个消息。
当网络运行的时候,它会检查在FIFO队列之间是否有任何消息将被传输。
网络也会计算下一个hit的时间。
通过过零检测函数来报告更新的值。
当一个消息准备接收,触发一个布尔型变量。
这触发一个调用receiveReal函数,这个函数从网络获得消息。
当发送和接收数据数组,用户指定编译时间数组长度,见
图表5receiveRealArray外部函数
5.本地实现
为了增加协议实现的透明度,网络仿真引擎也许用Modelica实现,而不是用C。
按照下面的方法的初始工作已经完成了。
实现方法很大程度上基于TrueTime的设计。
实现的基本构建框图是RingBuffer类,这个类仿真包含网络消息的限制消息大小的缓冲区。
接下来,通过一个record类NWMessage来表示,用一个继承类来表示每一个独立的协议。
实现方法也包含连接节点到网络框图的连接,类似的到TrueTime。
连接器包含相当于发送和接收节点地址的变量,实际数据。
连接器也包含一个标记传输信号的布尔型变量。
当这个变量被触发了,接收端执行相应的动作,例如,读取信息并储存在一个内部缓冲区里。
项目仍然进行。
这个工作的一个特别有兴趣扩展将是用ModeGraph来建模和协议的发送和接收节点的状态机。
特别因为网络协议经常用状态机的形式来描述。
这种方法将确实提高网络协议实现的清晰性和透明性。
6.总结
我们提供了TrueTimeNetwork库,在ITEA2工程EUROSYSLIB上开发。
这个库用外部对象来实现,我们已经指出了相关外部接口实现的关键方面。
我们也概括了一下将来的纯Modelica实现方法,whichisbeingworkedonatthetimeofwriting。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实时 网络 Modelica 仿真
![提示](https://static.bdocx.com/images/bang_tan.gif)