分布式仿真系统



为了能够将单个仿真器组合到一个分布式仿真系统中,目前使用以下标准和技术:



  • IEEE1516(也替代了HLA和DIS)
  • OPC;
  • CAPE-OPEN和其他“行业”标准。


最受关注的是IEEE 1516标准,因为该标准与仿真器直接相关,并且旨在构建分布式仿真系统(协议,推荐的控制和反馈方法,系统体系结构等)。



OPC(用于过程控制的OLE)软件技术家族提供了用于管理自动化对象和工艺过程的单个接口,也引起了人们的极大兴趣,但前提是需要与自动化对象和工艺过程集成。 CAPE-OPEN标准用于专门为化工行业设计的模拟器的交互。



电气和电子工程师协会(IEEE)为建模和仿真的标准化做出了重要贡献。分布式建模(模拟)是一种用于通过本地或全局计算机网络在模拟器之间进行数据交换的技术。这使各个仿真器可以作为一个受控的建模或仿真系统一起工作。分布式建模概念基于高层架构(HLA)的使用。实际上,IEEE 1516标准通过使用单个API(应用程序编程接口)来定义体系结构。该标准的起始假设是:



  1. 简单的“整体式”仿真模型无法满足专业用户的需求;
  2. 事先不知道所有可能的模拟应用;
  3. 应提供将各个模拟器任意组合成复杂的模拟系统的可能性;
  4. 分布式建模架构应尽可能对未来的建模和仿真技术开放。


当前,由于对与美国国防部和北约开发和使用的模拟器的兼容性有严格的要求,因此IEEE 1516是军事应用中模拟器和模拟器交互的绝对标准。当前,IEEE 1516在民用领域中越来越多地用于仿真器的开发中,以培训航空,航天,运输等复杂技术系统的人员。



OPC软件技术家族旨在降低创建和维护工业自动化应用程序的成本。在90年代初期,工业软件开发人员需要一种通用工具来与来自不同制造商或不同通信协议的设备交换数据。 OPC为工业软件开发人员提供了一个通用的固定接口,可以与任何设备进行数据交换。同时,设备开发人员提供了一个实现此接口的程序。



要创建复杂的仿真系统,可以结合使用IEEE 1516和OPC,从而可以使用实际设备和SCADA系统(图),这在许多任务中都非常有用。



IEEE 1516标准(对于仿真器而言是基本的)和OPC(在SCADA系统中使用)之间的通信可以直接在仿真器中或通过中介来实现。例如,对我来说,这种中介的角色是由National Lab Lab软件包执行的。 LabView可以支持任何复杂性的数学模型,具有内置的OPC支持,可以用作OPC服务器,有效支持与各种I / O卡的交互,这使您可以直接使用必要的设备,但是不幸的是,它没有与IEEE 1516交互的方式,这需要编写适当的软件组件。



由于使用IEEE 1516和OPC,可以创建相对复杂的分布式仿真系统,包括许多仿真器,真实设备,SCADA系统等



。一个或多个仿真器在支持IEEE 1516标准方面的认证问题值得单独考虑IEEE 1516术语联盟)和实现交互的软件库。但是,此认证的目的不是确定程序的功能缺陷(仅是对IEEE 1516标准支持的认证)。



具备认证能力的组织:



  • 美国。国防部(DoD)建模与仿真协调办公室(M&S CO)。网站:www.msco.mil
  • . ONERA. (Office National d’Etudes et Recherches Aérospatiales) is the French national aerospace research center. : www.onera.fr
  • . Pitch Technologies AB. : www.pitch.se














让我们考虑基于IEEE 1516标准构建分布式仿真系统的问题,信息支持中使用的基本术语与IEEE 1516分布式交互式仿真系统的术语相对应-联合,联合,对象,属性和交互。对象的概念被定义为现实世界中单独现象的模型。对象没有方法,它们只有状态(只有数据结构,没有用于处理它们的函数)。对象的状态以一组固定的属性为特征-可以随时间变化的精确值。每个对象在任何时候都以其状态为特征,该状态由其属性的一组当前值确定。联盟是对象行为的数学描述-仿真模型,由软件指定(以指令语言实现)或由硬件传感器值表示。实际上,联邦调查局既可以是模仿者,又可以是真实的设备,也可以是特殊的软件。唯一的要求是提供统一的通信接口。联盟可以通过更改(更新)或获取(显示)其属性值来操纵对象。特别地,模仿者的用户也是联邦。参与模拟的所有联盟的集合构成一个联盟。唯一的要求是提供统一的通信接口。联盟可以通过更改(更新)或获取(显示)其属性值来操纵对象。特别地,模仿者的用户也是联邦。参与模拟的所有联盟的集合构成一个联盟。唯一的要求是提供统一的通信接口。联盟可以通过更改(更新)或获取(显示)其属性值来操纵对象。特别地,模仿者的用户也是联邦。参与模拟的所有联盟的集合构成一个联盟。



术语“交互”定义为不与特定对象实例或联合相关联的即时消息(事件),发生在联合级别(即,无法确定发送者)。与对象状态相反,交互不是在系统中一直保持不变,而是具有瞬时性质。一个示例是向所有感兴趣的联合会成员单向广播文本消息。图中显示了分层联合方案(HLA / IEEE 1516)



联盟的交互是使用一般交互机制(RTI)进行的,该交互机制实现为订阅。对获取某些属性和另一个联合会的交互感兴趣的联合会必须通过RTI订阅它们。图中显示了请求,提供和更改属性值的机制。图中显示了用于组织分布式仿真和协作的机制。





图片。分层联合方案



模拟器中的对象通常分别是3D模型和声源,这些对象的属性是空间,大小,体积等中的位置和方向。关于模拟器,可以将用户的行为(联盟)(例如,包含密钥)视为交互。





. (RTI)





. (RTI)





.



创建通过RTI进行交互的分布式仿真系统时,必须考虑以下重要特征。联盟和联盟的所有元素都必须记录在特定文件中(使用FOM(联盟对象模型)文件描述联盟),在SOM文件(模拟对象模型)中描述联盟。所有数据仅存储在联盟中,RTI不存储任何数据,而仅传输它。 HLA仅允许一个联盟在任何给定时间更改属性的值(存在用于转移权限的特殊权限管理机制)。联盟可以管理本地时间,HLA使用各种内部时间管理机制(同步)。



通常,IEEE 1516标准解决了与创建分布式仿真系统相关的大量问题,例如维护联盟的状态,更新状态,各种时间同步机制,联盟的交互区域等。由于该标准本身的数量巨大,此外,由于该代码用于证明该标准中描述的所有方面,因此下面仅演示“基本”功能的基本实现(图)。





图片。 IEEE 1516基本功能实现框图



该实现的更详细介绍与需要提供一个相当大的程序列表相关,因此,读者可以独立使用随软件提供的支持RTI的程序示例。 Portico Project库中包含带有很多注释的简单示例,可从porticoproject.org免费获得。该标准的几乎所有商业实现也包含许多示例。



例如,考虑以下联邦,它由两个联邦组成:无线电控制的汽车和控制面板。假设通过设置汽车的四个引擎中每个引擎的速度并转动前轮来进行控制。机器配备有传感器,该传感器确定到障碍物的距离并将信号传输到控制面板。为此,必须定义两个对象类,用于控制面板的cYpravlenie和用于距离传感器的cDatchik。 cYpravlenie类的属性是wheel1,wheel2,wheel3,wheel4,wheel_angle。 cDatchik类的属性是距离。以下是HLA 1.3格式的联合身份验证描述文件(以交互为例)。



;;  —   (FED )   HLA 1.3

(Fed 
  (Federation Test) 
  (FedVersion v1.3) 
  (Federate "fed" "Public") 
  (Spaces 
	(Space "Geo" 
		(Dimension X) 
		(Dimension Y) 
	) 
  ) 

(Objects 
	(Class cYpravlenie 
		(Attribute wheel1 reliable timestamp) 
		(Attribute wheel2 reliable timestamp) 
		(Attribute wheel3 reliable timestamp) 
		(Attribute wheel4 reliable timestamp) 
		(Attribute wheel_angle reliable timestamp) 
	) 
	(Class cDatchik 
		(Attribute distance reliable timestamp) 
	) 
) 
	 
(Interactions 
	(Class reaction BEST_EFFORT RECEIVE 
	(Sec_Level "Public") 
		(Parameter dx) 
		(Parameter dy) 
		(Parameter dz) 
	) 
) 

)
	


接下来,代表控件的模拟器基于cYpravlenie类创建联盟和对象。代表汽车的模拟器还基于cDatchik类创建了联盟和对象。联盟还订阅他们感兴趣的更改,即联邦机器订阅从cYpravlenie类(即cYpravlenie类)接收对象数据,并从联邦控件接收cDatchik类。因此,机器从控制面板接收更改,并且控制面板从汽车中的传感器接收数据。



构建更复杂的仿真系统需要进行认真的设计。首先,有必要以第一近似值确定联盟的主要组成,即联盟,联盟对象和对象属性。在制定联盟方案时,有必要考虑分布式仿真系统的硬件组件,即传感器和控制硬件设备也应以联盟,对象和属性的形式表示。在图片上。显示了抽油杆泵安装模拟器的联盟结构。





图片。联盟结构



组成联盟之后,有必要定义链接,即反映哪些联盟发布(即更改)对象的属性,以及哪些对象订阅这些属性的更改。通常,在定义链接的阶段,会为联盟的结构建立大量的“修订”。在对结构和关系进行“细化”所需的迭代次数之后,设计人员必须确定联盟是“模型正确”的事实。图中显示了一个定义链接的示例(没有链接的对象被隐藏)。





图片。定义链接的第一阶段的示例



在下一阶段,确定所需的计算机数量以及相应的联邦分布。例如,联盟“ A”将在计算机“ 1”上运行,联盟“ B,C,D”将在计算机“ 2”上运行。





图片。通过电脑联邦成员的分布



作为一项规则,联邦成员的分布是基于他们的数学模型的经济,如果联邦成员的数学模型不需要显著的计算资源,则可以使用一台计算机,如果联邦成员的数学模型需要显著的计算资源,有必要确定计算机的数量和联合会的相应分配。



下一步是创建一个反映联邦的已批准“正确模型”的联邦描述文件(请参见上面的示例)。然后,通过编写适当的代码与RTI交互并编写代码以实现联盟的数学模型,来创建联盟的软件实现。在最后阶段,有必要测试分布式仿真系统,识别错误,系统中某些组件的“超载”(基于统计信息),正确同步等



。每个联合身份验证以及整个联合身份的统计信息均显示所执行查询的数量和类型并允许您在系统运行期间确定可能的问题。



联盟的统计信息示例:



RTIA: Statistics (processed messages)
Joined federation as car_federate
Synchronization point announced: ReadyToRun
Achieved sync point: ReadyToRun, waiting for federation...
Federation Synchronized: ReadyToRun
Time Policy Enabled
Published and Subscribed
Add instance object: obj_datchik
Removing temporary file _RTIA_3033_ExampleFederation.fed on resign federation.
Resigned from Federation
Didn't destroy federation, federates still joined
List of federate initiated services 
--------------------------------------------------
1 Message::CLOSE_CONNEXION (MSG#1)
1 Message::DESTROY_FEDERATION_EXECUTION (MSG#3)
1 Message::JOIN_FEDERATION_EXECUTION (MSG#4)
1 Message::RESIGN_FEDERATION_EXECUTION (MSG#5)
1 Message::SYNCHRONIZATION_POINT_ACHIEVED (MSG#10)
1 Message::PUBLISH_OBJECT_CLASS (MSG#28)
1 Message::SUBSCRIBE_OBJECT_CLASS_ATTRIBUTES (MSG#32)
1 Message::SUBSCRIBE_INTERACTION_CLASS (MSG#34)
1 Message::REGISTER_OBJECT_INSTANCE (MSG#40)
1708 Message::UPDATE_ATTRIBUTE_VALUES (MSG#41)
855 Message::TIME_ADVANCE_REQUEST (MSG#91)
3 Message::GET_OBJECT_CLASS_HANDLE (MSG#112)
6 Message::GET_ATTRIBUTE_HANDLE (MSG#114)
1 Message::GET_INTERACTION_CLASS_HANDLE (MSG#116)
120516 Message::TICK_REQUEST (MSG#141)
2564 Message::TICK_REQUEST_NEXT (MSG#142)
List of RTI initiated services 
--------------------------------------------------
1 NetworkMessage::ANNOUNCE_SYNCHRONIZATION_POINT (MSG#13)
1 NetworkMessage::FEDERATION_SYNCHRONIZED (MSG#15)
1 NetworkMessage::DISCOVER_OBJECT (MSG#43)
1711 NetworkMessage::REFLECT_ATTRIBUTE_VALUES (MSG#45)
49 NetworkMessage::GET_FED_FILE (MSG#84)
Number of Federate messages : 125662
Number of RTIG messages : 1763
RTIA: Federate destroyed
TCP Socket 3 : total = 122015 Bytes sent 
TCP Socket 3 : total = 340249 Bytes received
UDP Socket 4 : total = 0 Bytes sent 
UDP Socket 4 : total = 0 Bytes received
	     :
CERTI RTIG up and running ... 
New federation: ExampleFederation 
Looking for FOM file... 
   Trying... open_test.fed --> cannot access. 
   Now trying.../usr/local/share/federations/open_test.fed... opened. 

 TCP Socket  7 : total =    340400 Bytes sent 
 TCP Socket  7 : total =    122015 Bytes received 
 UDP Socket  4 : total =         0 Bytes sent 
 UDP Socket  4 : total =         0 Bytes received 
 TCP Socket  6 : total =    258616 Bytes sent 
 TCP Socket  6 : total =    283044 Bytes received 
 UDP Socket  4 : total =         0 Bytes sent 
 UDP Socket  4 : total =         0 Bytes received 


时间同步



正如分布式仿真系统的设计和实现实践所示,最困难的问题与时间流的控制(时间同步)有关。



通常,当您设置联合时间的同步方式时,会设置两个参数,TimeRegulating和TimeConstrained。实际上,这些模式会影响从其他联盟接收消息的过程,并且与消息排序机制直接相关:

  • 接收顺序(消息的接收顺序是在没有时间控制的情况下发送的);
  • 优先级(传入消息位于优先级队列中,其时间戳用于确定消息的优先级);
  • 因果关系(确保将消息以与那些消息所代表的先前事件和后续事件一致的顺序发送给联邦);
  • 按时间戳记(使用此服务时,消息将按照其时间戳记的顺序发送给联盟)。


还值得注意的是,不同的联盟可以使用不同的同步方法。



RTI实现的软件库



可用的HLA \ IEE1516实现的列表可在en.wikipedia.org/wiki/Run-Time_Infrastructure上获得今天,有相当多的实现方式,包括商业和非商业的。大多数实现都是用JAVA和C ++进行的(这些是标准中使用的语言),但是也有MatLab,Python(CERTI项目)等的实现。



选择库时,应特别注意``认证''以支持IEEE 1516.通常,所有商业实现都有“证书”,免费的则没有(许多免费实现正在为这种认证做准备)。



商业销售表:





非商业销售表:





我个人使用ONERA项目CERTI(https://savannah.nongnu.org/projects/certi)支持分布式应用程序的基础结构。



通过RTI测量联盟成员的交互速度



这样的测试在分布式仿真系统的设计中非常重要,尤其是当不同的联合会位于不同的计算机网络上时,尤其是在Internet上与联合会进行交互时更重要。



要获得最小的时间延迟,必须选择具有最小数据包传输时间延迟的服务器(可以使用ping命令进行检查)。例如,让我们考虑在TyumGNGU的NII EOR创建的一个分布式系统的工作。使用100兆位网络(ping延迟<0.231 ms),没有时间同步(以减少RTI内部的延迟),两台计算机,服务器(rtig)在其中一台计算机上运行。联盟参数-2个对象包含5个属性(每个联盟/计算机一个对象),联盟之间的交互是双向的。作为测量结果的结果,获得了每秒交互次数与所传输数据大小的相关性。



这种测量的结果使我们可以得出许多结论,例如,如果模拟器应在给定的“实时”下工作,即例如,至少每秒更新一次,至少每秒更新60次,则对于一次交互(对于快速以太网),不应传输超过300 KB(例如,如果5个属性,则每个传输60 KB)。同时,每秒传输60次的300千字节数据也表明使用RTI在模拟器之间传输语音和视频数据以及与VR设备进行交互的可能性。



通过Internet联合时,最小等待时间主要由数据包传输延迟决定。例如,如果服务器与模拟器之间的数据包延迟为300毫秒,则每秒的最大交互次数将不超过3。



使用更快的解决方案,例如IpoIB(InfiniBand上的IP,RFC 4392),10G以太网,Myrinet-10G等。可以增加吞吐量并显着减少延迟(现有解决方案每秒可以产生3000万次互动或更多)。



与真实系统的交互



不仅对象(即人工系统)的数学模型,而且真实的系统和设备都可以充当联邦。示例包括:



  • 提供音频数据的麦克风;
  • 提供视频数据的摄像机;
  • 各种输入/输出设备,例如操纵杆(图片),打印机等。
  • 通过ADC / DAC板连接到计算机的各种传感器和控制机制;
  • 通过工业OPC接口的实际设备和SCADA系统(图2.10.1。,第1.4.1章);
  • 与在单独的计算机或虚拟机上运行的真实操作系统的“桌面”接口(图);
  • VR设备(第4.5.9章);
  • 数据库接口等


一般而言,这种可能性对于模拟器和模拟系统而言是相当可观的。



All Articles