欢迎来到专业的新思文库网平台! 工作计划 工作总结 心得体会 事迹材料 述职报告 疫情防控 思想汇报 党课下载
当前位置:首页 > 范文大全 > 公文范文 > 正文

基于Redis的分布式通信算法在仿真前后台的应用与测试①

时间:2022-10-24 08:15:05 来源:网友投稿


打开文本图片集

摘   要:针对某分布式联合仿真系统,本文制定了分布式通信算法,利用Redis作为数据通信中间件,来实现前后台之间的数据传输与交互。针对仿真系统进行应用测试与仿真结果分析,从而验证分布式通信算法的准确性与有效性。

关键词:分布式联合仿真系统  Redis数据通信中间件  前后台通信算法

中图分类号:TP311.1                               文献标识码:A                        文章编号:1674-098X(2019)09(b)-0138-03

多个领域的建模与联合仿真的目标是将多个学科的模型进行高效的整合,借此来达成理想的设计、仿真与分析效果。针对某分布式联合仿真系统,研究其前后台之间的分布式通信算法,实现前后台之间数据通信。

1  分布式联合仿真系统

某分布式联合仿真系统由仿真设计与控制系统(前台)和通用仿真系统(后台)两部分组成,提供统一仿真设计、部署、执行与控制功能[1],完成仿真设计、仿真执行、仿真数据存储与可视化等主要功能,以及从属于上述系统软件的管理功能,如图1所示,通过对底层通信模块的封装实现分布式联合仿真[2],。

2  Redis数据通信中间件

本系统主要采用Redis两种数据通信模式实现仿真系统前后台之间的数据通信,即:(1)利用Redis作为数据库,以键值对的形式存储所有的仿真执行参数、仿真模型以及一些仿真控制参数等实现通信,既保证了数据通信的可靠性又减少了数据冗余;(2)利用Redis频道的基于订阅发布的通信模式来完成前后台间数据的通信。本系统将所有的仿真结果数据通过Redis频道分发给系统前台。

3  分布式通信算法在仿真系统前后台的设计

3.1 前台向后台发送数据的通信算法设计

仿真系统的前台利用Redis向后台发送仿真数据的示意图如图2所示,前台向后台发送仿真控制命令、仿真参数信息、分布式部署信息、仿真模型参数和模型连接总图信息。具体的数据包格式如下。

(1)仿真控制命令。

Redis中控制仿真工程的key设置为:root.projectCommand。数据包为:

①开始:{"Type":"CommandStart", "ProjectName":"p1"};

②结束:{"Type":"CommandStop", "ProjectName":"p1"};

③暂停:{"Type":"CommandPause", "ProjectName":"p1"};

④步進:{"Type":"CommandRunOneStep", "ProjectName":"p1"}。

(2)仿真参数。

Redis数据库的键设置为:{pname}.control.projectParameter。

数据包为:dictParams={"start_time":0.0,"final_time":2.0,"input":None,"simResultFilter":filterDict,"opts":dictOpts};dictParams为总体数据,filterDict是仿真结果输出端口和仿真时间的数据包,其结构为:

filterDict={"SF_001.mmrus":["tau1"],"__STEP__":10,"SF_001.load1":["phi1","w1"]};

dictOpts参数数据包定义仿真步长、仿真开始、仿真结束、仿真延迟等,其结构为:dictOpts={"logging":False,"step_size":0.0001,"simStart":["SH_001.source"],"simEnd":None,"simDelay":{"SF_001.mmrus.tau1":5},"simResultFilter": filterDict,’method’:”A”};

Method是仿真算法,A表示通用仿真算法。

(3)分布式部署信息。

Redis的键设置为:{pname}.dis.config。数据包格式为:{"SF_001.load1":"192.168.229.37","SF_001.load2":"192.168.229.37","SF_001.source":"192.168.229.37","SF_001.mmrus":"192.168.229.37}。

(4)仿真模型参数。

Redis的键设置为:{pname}.fmu.fmuname。传输的数据包内容则为仿真模型的二进制序列。

(5)仿真模型连接总图。

Redis的键设置为:{pname}.graph.config。数据包格式为:

dictConns = {"Graph":dictGraph, "SF_001":dictSF_001, "SH_001":dictSH_001};

dictGraph={"0":["SF_001.load1","phi1","SS_001.s_001","v1"],"1":["SF_001.source","tao1","SH_001.h_001","v1"],"2":["SS_001.s_001","v2","SF_001.source","phi1"],"3":["SH_001.h_001","v2","SF_001.load1","tau1"]};

dictSF_001={"0":["source","tau1","load1","tau1"],"1":["load1","phi1","source","phi1"],"2":["load1","phi2","mmrus","phi1"],"3":["load1","w1","mmrus","w1"]};

dictGraph表示宏观模型连接总图结构,总图的节点为各子图。最后发送的数据包为dictConns。

3.2 后台向前台发送数据的通信算法设计

后台利用Redis频道向前台发送仿真结果数据。Redis的频道为:projectname.chResults2DB。发送的数据格式为:

{"SF_001.load1.w1":[0.0,0.0,0.0,-2.4991779829137363e-20,-1.363233070243509e-19],"step":0.05,"SF_001.mmrus.tau1":[-0.0,-0.0,-0.0,-0.0,-6.713921223149536e-18,-3.3265638919077216e-17]}。

4  分布式通信算法在仿真系统中的应用与测试

为了验证本论文研究的分布式通信算法在某分布式联合仿真系统前后台之间的有效性和正确性,利用设计的仿真系統进行仿真,并对测试结果进行分析判断。

本次测试案例中采用的仿真模型分别为source、load1、load2、mmrus。模型连接总图为图3所示。所选择的仿真模型输出端口为mmrus模型的tau1端口和load1模型的phi1端口。仿真结果分别如图4和图5所示。

使用OpenModelica软件进行仿真对比实验,利用相同的仿真模型以及模型接续关系,并且查看相同的模型输出端口,仿真结果分别如图6和图7所示。

对两个仿真系统的实验结果进行比较分析,发现仿真结果图形趋势走向基本一致,仿真计算出的结果数据相符合,故可验证本论文设计的基于Redis的分布式通信算法应用在某分布式联合仿真系统前后台间是准确有效的。

5  结语

本文阐述了某分布式联合仿真系统的整体架构以及数据通信中间件的通信模式,并针对某系统设计出前后台之间的分布式通信算法。通过利用仿真模型在系统上进行仿真测试,并且对测试结果进行对比分析,从而验证分布式通信算法在仿真系统前后台之间是正确性的。

参考文献

[1] 魏映琳.等离子通信仿真平台的分布式架构设计[D].西安电子科技大学,2014.

[2] 李阅历.基于Java的Web服务器性能测试工具研究[J].河北农业大学学报,2005(1):92-96.

推荐访问:分布式 算法 仿真 后台 通信