王悅霖 劉立士 韓東奇
摘 ? 要:針對(duì)某分布式聯(lián)合仿真系統(tǒng),本文制定了分布式通信算法,利用Redis作為數(shù)據(jù)通信中間件,來(lái)實(shí)現(xiàn)前后臺(tái)之間的數(shù)據(jù)傳輸與交互。針對(duì)仿真系統(tǒng)進(jìn)行應(yīng)用測(cè)試與仿真結(jié)果分析,從而驗(yàn)證分布式通信算法的準(zhǔn)確性與有效性。
關(guān)鍵詞:分布式聯(lián)合仿真系統(tǒng) ?Redis數(shù)據(jù)通信中間件 ?前后臺(tái)通信算法
中圖分類號(hào):TP311.1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A ? ? ? ? ? ? ? ? ? ? ? ?文章編號(hào):1674-098X(2019)09(b)-0138-03
多個(gè)領(lǐng)域的建模與聯(lián)合仿真的目標(biāo)是將多個(gè)學(xué)科的模型進(jìn)行高效的整合,借此來(lái)達(dá)成理想的設(shè)計(jì)、仿真與分析效果。針對(duì)某分布式聯(lián)合仿真系統(tǒng),研究其前后臺(tái)之間的分布式通信算法,實(shí)現(xiàn)前后臺(tái)之間數(shù)據(jù)通信。
1 ?分布式聯(lián)合仿真系統(tǒng)
某分布式聯(lián)合仿真系統(tǒng)由仿真設(shè)計(jì)與控制系統(tǒng)(前臺(tái))和通用仿真系統(tǒng)(后臺(tái))兩部分組成,提供統(tǒng)一仿真設(shè)計(jì)、部署、執(zhí)行與控制功能[1],完成仿真設(shè)計(jì)、仿真執(zhí)行、仿真數(shù)據(jù)存儲(chǔ)與可視化等主要功能,以及從屬于上述系統(tǒng)軟件的管理功能,如圖1所示,通過(guò)對(duì)底層通信模塊的封裝實(shí)現(xiàn)分布式聯(lián)合仿真[2],。
2 ?Redis數(shù)據(jù)通信中間件
本系統(tǒng)主要采用Redis兩種數(shù)據(jù)通信模式實(shí)現(xiàn)仿真系統(tǒng)前后臺(tái)之間的數(shù)據(jù)通信,即:(1)利用Redis作為數(shù)據(jù)庫(kù),以鍵值對(duì)的形式存儲(chǔ)所有的仿真執(zhí)行參數(shù)、仿真模型以及一些仿真控制參數(shù)等實(shí)現(xiàn)通信,既保證了數(shù)據(jù)通信的可靠性又減少了數(shù)據(jù)冗余;(2)利用Redis頻道的基于訂閱發(fā)布的通信模式來(lái)完成前后臺(tái)間數(shù)據(jù)的通信。本系統(tǒng)將所有的仿真結(jié)果數(shù)據(jù)通過(guò)Redis頻道分發(fā)給系統(tǒng)前臺(tái)。
3 ?分布式通信算法在仿真系統(tǒng)前后臺(tái)的設(shè)計(jì)
3.1 前臺(tái)向后臺(tái)發(fā)送數(shù)據(jù)的通信算法設(shè)計(jì)
仿真系統(tǒng)的前臺(tái)利用Redis向后臺(tái)發(fā)送仿真數(shù)據(jù)的示意圖如圖2所示,前臺(tái)向后臺(tái)發(fā)送仿真控制命令、仿真參數(shù)信息、分布式部署信息、仿真模型參數(shù)和模型連接總圖信息。具體的數(shù)據(jù)包格式如下。
(1)仿真控制命令。
Redis中控制仿真工程的key設(shè)置為:root.projectCommand。數(shù)據(jù)包為:
①開(kāi)始:{'Type':'CommandStart', 'ProjectName':'p1'};
②結(jié)束:{'Type':'CommandStop', 'ProjectName':'p1'};
③暫停:{'Type':'CommandPause', 'ProjectName':'p1'};
④步進(jìn):{'Type':'CommandRunOneStep', 'ProjectName':'p1'}。
(2)仿真參數(shù)。
Redis數(shù)據(jù)庫(kù)的鍵設(shè)置為:{pname}.control.projectParameter。
數(shù)據(jù)包為:dictParams={'start_time':0.0,'final_time':2.0,'input':None,'simResultFilter':filterDict,'opts':dictOpts};dictParams為總體數(shù)據(jù),filterDict是仿真結(jié)果輸出端口和仿真時(shí)間的數(shù)據(jù)包,其結(jié)構(gòu)為:
filterDict={'SF_001.mmrus':['tau1'],'__STEP__':10,'SF_001.load1':['phi1','w1']};
dictOpts參數(shù)數(shù)據(jù)包定義仿真步長(zhǎng)、仿真開(kāi)始、仿真結(jié)束、仿真延遲等,其結(jié)構(gòu)為: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的鍵設(shè)置為:{pname}.dis.config。數(shù)據(jù)包格式為:{'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)仿真模型參數(shù)。
Redis的鍵設(shè)置為:{pname}.fmu.fmuname。傳輸?shù)臄?shù)據(jù)包內(nèi)容則為仿真模型的二進(jìn)制序列。
(5)仿真模型連接總圖。
Redis的鍵設(shè)置為:{pname}.graph.config。數(shù)據(jù)包格式為:
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表示宏觀模型連接總圖結(jié)構(gòu),總圖的節(jié)點(diǎn)為各子圖。最后發(fā)送的數(shù)據(jù)包為dictConns。
3.2 后臺(tái)向前臺(tái)發(fā)送數(shù)據(jù)的通信算法設(shè)計(jì)
后臺(tái)利用Redis頻道向前臺(tái)發(fā)送仿真結(jié)果數(shù)據(jù)。Redis的頻道為:projectname.chResults2DB。發(fā)送的數(shù)據(jù)格式為:
{"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 ?分布式通信算法在仿真系統(tǒng)中的應(yīng)用與測(cè)試
為了驗(yàn)證本論文研究的分布式通信算法在某分布式聯(lián)合仿真系統(tǒng)前后臺(tái)之間的有效性和正確性,利用設(shè)計(jì)的仿真系統(tǒng)進(jìn)行仿真,并對(duì)測(cè)試結(jié)果進(jìn)行分析判斷。
本次測(cè)試案例中采用的仿真模型分別為source、load1、load2、mmrus。模型連接總圖為圖3所示。所選擇的仿真模型輸出端口為mmrus模型的tau1端口和load1模型的phi1端口。仿真結(jié)果分別如圖4和圖5所示。
使用OpenModelica軟件進(jìn)行仿真對(duì)比實(shí)驗(yàn),利用相同的仿真模型以及模型接續(xù)關(guān)系,并且查看相同的模型輸出端口,仿真結(jié)果分別如圖6和圖7所示。
對(duì)兩個(gè)仿真系統(tǒng)的實(shí)驗(yàn)結(jié)果進(jìn)行比較分析,發(fā)現(xiàn)仿真結(jié)果圖形趨勢(shì)走向基本一致,仿真計(jì)算出的結(jié)果數(shù)據(jù)相符合,故可驗(yàn)證本論文設(shè)計(jì)的基于Redis的分布式通信算法應(yīng)用在某分布式聯(lián)合仿真系統(tǒng)前后臺(tái)間是準(zhǔn)確有效的。
5 ?結(jié)語(yǔ)
本文闡述了某分布式聯(lián)合仿真系統(tǒng)的整體架構(gòu)以及數(shù)據(jù)通信中間件的通信模式,并針對(duì)某系統(tǒng)設(shè)計(jì)出前后臺(tái)之間的分布式通信算法。通過(guò)利用仿真模型在系統(tǒng)上進(jìn)行仿真測(cè)試,并且對(duì)測(cè)試結(jié)果進(jìn)行對(duì)比分析,從而驗(yàn)證分布式通信算法在仿真系統(tǒng)前后臺(tái)之間是正確性的。
參考文獻(xiàn)
[1] 魏映琳.等離子通信仿真平臺(tái)的分布式架構(gòu)設(shè)計(jì)[D].西安電子科技大學(xué),2014.
[2] 李閱歷.基于Java的Web服務(wù)器性能測(cè)試工具研究[J].河北農(nóng)業(yè)大學(xué)學(xué)報(bào),2005(1):92-96.