国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

DEVS++程序庫(kù)及應(yīng)用

2018-12-12 07:35:26燕美玲張學(xué)軍
電氣自動(dòng)化 2018年6期
關(guān)鍵詞:基類端口原子

燕美玲,張學(xué)軍

(1.國(guó)網(wǎng)大同市新榮區(qū)供電公司,山西 大同 037000;2.山西大學(xué) 動(dòng)力工程系,山西 太原 030013)

0 引 言

近年來(lái),隨著系統(tǒng)仿真理論和技術(shù)的深入研究、系統(tǒng)仿真為分析、研究復(fù)雜系統(tǒng)問(wèn)題提供了有效的解決方法。離散事件系統(tǒng)仿真是系統(tǒng)仿真的研究?jī)?nèi)容之一。離散事件系統(tǒng)狀態(tài)遷移發(fā)生在隨機(jī)性、離散的時(shí)間點(diǎn)上,內(nèi)部轉(zhuǎn)換機(jī)制較為復(fù)雜,難以用微分、差分方程等常規(guī)的數(shù)學(xué)方法來(lái)描述[1]。1976年Bernard Zeigler教授提出離散事件系統(tǒng)規(guī)范(Discrete Event System Specification,DEVS)[2],為離散事件系統(tǒng)仿真建模提供了層次化、模塊化和形式化的機(jī)制。

DEVS規(guī)范就是從面向?qū)ο?Object-Oriented)的角度出發(fā)依據(jù)系統(tǒng)理論描述了離散事件系統(tǒng)[3]。通過(guò)建立系統(tǒng)完備的模型框架,保證了模型的規(guī)范性、重用性和仿真互操作能力[4]。DEVS++是實(shí)現(xiàn)DEVS機(jī)制的開(kāi)源程序庫(kù)[5],采用面向?qū)ο蟮腃++開(kāi)發(fā)語(yǔ)言提供了模型的基類,設(shè)計(jì)了仿真引擎,通過(guò)繼承、派生的方式實(shí)例化具體的模型,便于對(duì)任意的離散事件系統(tǒng)進(jìn)行建模,為系統(tǒng)建模提供最基本的、標(biāo)準(zhǔn)的框架。

本文介紹了DEVS的建模思想以及DEVS++程序庫(kù)。在此基礎(chǔ)上,以智能變電站過(guò)程層網(wǎng)絡(luò)數(shù)據(jù)鏈路層發(fā)送適配器模型[6-8]實(shí)現(xiàn)為例,說(shuō)明了DEVS++仿真程序的應(yīng)用。最后通過(guò)仿真試驗(yàn)驗(yàn)證了模型的正確性。

1 DEVS規(guī)范

DEVS是離散事件系統(tǒng)通用的形式化描述,有兩種模型,包括原子模型和耦合模型[9]。

1.1 Atomic

原子模型封裝了不可進(jìn)一步分解的元件的動(dòng)態(tài)行為。原子模型被定義為一個(gè)七元組:

M=

式中:X是外部輸入事件集,通過(guò)輸入端口接受外部事件;Y是輸出事件集,通過(guò)輸出端口發(fā)出事件;S是系統(tǒng)狀態(tài)集;s0是系統(tǒng)初始狀態(tài)(s0∈S);tα是時(shí)間推進(jìn)函數(shù),該函數(shù)用來(lái)確定一個(gè)狀態(tài)的生命周期,狀態(tài)壽命是一個(gè)非負(fù)實(shí)數(shù),取值范圍為[0,∞);δx是內(nèi)部轉(zhuǎn)移函數(shù),定義了輸入X如何改變系統(tǒng)的狀態(tài);δy是外部轉(zhuǎn)移函數(shù),當(dāng)一個(gè)狀態(tài)的生命周期到達(dá)時(shí),調(diào)用該函數(shù),產(chǎn)生輸出并進(jìn)行狀態(tài)轉(zhuǎn)移。

1.2 Coupled

耦合是原子或其他耦合的容器,封裝了元件及它們之間的連接關(guān)系,描述了系統(tǒng)層次化的結(jié)構(gòu)。耦合模型被定義為:

CM=

式中:X是外部輸入事件集;Y是輸出事件集;D是耦合模型組成成員的名字集;{Mi}是基本模型成員集,Mi是原子模型也可以是耦合模型(iD);EIC是外部輸入耦合,描述耦合外部輸入與耦合各元件間的耦合關(guān)系;ITC是內(nèi)部耦合,描述的是耦合元件的輸出與其他耦合元件之間的耦合關(guān)系。EOC是外部輸出耦合。DEVS模型根據(jù)當(dāng)前的狀態(tài)和轉(zhuǎn)換函數(shù)處理輸入事件,驅(qū)動(dòng)產(chǎn)生輸出事件。

2 DEVS++程序庫(kù)

基于DEVS規(guī)范開(kāi)發(fā)的,采用C++語(yǔ)言實(shí)現(xiàn)的DEVS++程序庫(kù)提供了Atomic和Coupled模型的基類,并設(shè)計(jì)了仿真引擎。用戶從Atomic和Coupled基類繼承并實(shí)現(xiàn)相關(guān)虛函數(shù),實(shí)例化系統(tǒng)的原子或耦合模型,通過(guò)層次化建模的思想構(gòu)建待建系統(tǒng)的模型,并載入仿真引擎中實(shí)現(xiàn)仿真試驗(yàn)。

2.1 事件、端口、值(PortValue、Port、Value)

圖1給出DEVS++程序庫(kù)中類的結(jié)構(gòu)及關(guān)系,

圖1 DEVS++中的類

如圖1所示,port是端口的基類,派生自Named抽象類,同時(shí)又派生出Input Port和Output Port兩個(gè)具體類,分別實(shí)例化輸入端口和輸出端口,該兩個(gè)具體類又是Devs的成員,實(shí)現(xiàn)了原子和耦合的輸入、輸出功能。Port基類中包含ToP和FormP數(shù)組成員,存放與其他端口的耦合關(guān)系,其中ToP存放該端口的前接端口表,F(xiàn)ormP保存該端口后接的端口表。Value是值的基類,值指事件所包含的內(nèi)容。bValue和tmValue派生自Value基類,其中bValue是模板類,為多種數(shù)據(jù)類型提供接口,tmValue創(chuàng)建帶有時(shí)間戳的實(shí)例,方便提取與值相關(guān)的時(shí)間。在DEVS++定義中,將事件看成是端口和值組成的二元組,PortValue類封裝了事件,各模型元件通過(guò)端口接收和輸出事件。

2.2 Devs基類

圖2 Devs類中時(shí)間函數(shù)關(guān)系

Devs虛基類包含了Atomic和Coupled相同的特點(diǎn),輸入、輸出事件端口,相同的時(shí)間特性,如當(dāng)前時(shí)間、消逝時(shí)間和剩余時(shí)間等。除上節(jié)提到的Input Port和Output Port外,Devs基類還提供了對(duì)端口進(jìn)行操作的函數(shù)AddIP、GetIP、RemoveIP、PrintAllIPs,輸出端口類似;與時(shí)間相關(guān)的時(shí)間函數(shù),如圖2所示,便于用戶訪問(wèn)時(shí)間。成員變量t_Last、t_Next保存模型中上一事件和下一最早事件發(fā)生的時(shí)間;以及純虛函數(shù)when_receive_init、when_receive_star、when_receive_x,為實(shí)現(xiàn)原子和耦合模型具體的初始化函數(shù)、內(nèi)部和外部轉(zhuǎn)移函數(shù)提供接口。

其中,tr=ts-te=tn-tc、ts=tn-tl、te=tc-tl。tl是上一事件發(fā)生的時(shí)間;tc是仿真當(dāng)前時(shí)間;tn是下一事件發(fā)生的時(shí)間;ts是當(dāng)前狀態(tài)的生命周期;tr是當(dāng)前狀態(tài)剩余的時(shí)間;te是當(dāng)前狀態(tài)消逝的時(shí)間。

2.3 Atomic和Coupled基類

Atomic虛基類派生自Devs,含有新增加的純虛函數(shù)tau、init、delta_x、delta_y。tau函數(shù)返回當(dāng)前狀態(tài)壽命值,init、delta_x、delta_y函數(shù)分別在重載的虛函數(shù)when_receive_init、when_receive_x、when_receive_star中調(diào)用,分別實(shí)現(xiàn)初始化、外部轉(zhuǎn)移和內(nèi)部轉(zhuǎn)移。

Coupled可直接實(shí)例化,也可作為基類。具體實(shí)現(xiàn)重載虛函數(shù)when_receive_init、when_receive_star、when_receive_x,并增加了新的虛函數(shù)when_receive_y。其中,when_receive_x定義了外部輸?shù)竭_(dá),激發(fā)該輸入耦合的元件,并找出下一最早發(fā)生事件的時(shí)間及模型;when_receive_y定義產(chǎn)生輸出事件,并發(fā)生狀態(tài)轉(zhuǎn)移。Coupled基類還提供了對(duì)子模型操作的一系列函數(shù)AddModel、RemoveModel、GetModel,以及管理子模型間耦合關(guān)系的函數(shù)AddCP、RemoveCP。

Atomic和Coupled基類中新增加的純虛函數(shù)通過(guò)派生類重載具體實(shí)現(xiàn)。

2.4 rv類和SRTEngine類

DEVS++提供了隨機(jī)變量基類rv,含有四個(gè)隨機(jī)分布函數(shù),分別是均勻分布,三角形分布,指數(shù)分布,正態(tài)分布。根據(jù)實(shí)際系統(tǒng)的需求來(lái)生成隨機(jī)的數(shù)字。隨機(jī)數(shù)發(fā)生器每次采用不同的種子,保證各隨機(jī)變量相互獨(dú)立。

圖3 DEVS++仿真循環(huán)流程

DEVS++設(shè)計(jì)了仿真引擎類SRTEngine。實(shí)例化時(shí),其構(gòu)造函數(shù)創(chuàng)建一個(gè)獨(dú)立的仿真線程。單個(gè)模型載入仿真引擎,通過(guò)循環(huán)的線程來(lái)實(shí)現(xiàn)仿真運(yùn)行。其流程如圖3所示。

基于DEVS++的二次開(kāi)發(fā),繼承Atomic模型需具體實(shí)現(xiàn)虛函數(shù)(init、tau、delta_x和delta_y),繼承Coupled模型,連接耦合端口,構(gòu)建系統(tǒng)模型。仿真時(shí)鐘的推進(jìn)、狀態(tài)轉(zhuǎn)換函數(shù)的調(diào)用和輸入輸出的耦合都在DEVS++完成,用戶不必關(guān)心。

3 仿真實(shí)例

圖4 仿真實(shí)例示意圖

電力通信系統(tǒng)是典型的離散事件系統(tǒng)。以智能變電站通信網(wǎng)絡(luò)為例,建立基于DEVS++的過(guò)程層網(wǎng)絡(luò)模型[10-12]。如圖4所示,該實(shí)例包含兩個(gè)合并單元、一個(gè)保護(hù)測(cè)控IED、一個(gè)交換機(jī)和三條物理信道通過(guò)以太網(wǎng)實(shí)現(xiàn)通信。本文以交換機(jī)為例介紹依據(jù)DEVS++建??蚣艽罱ㄔP偷倪^(guò)程。

3.1 網(wǎng)絡(luò)建模

交換機(jī)用接口發(fā)送器(TSwitch-Sender)、接口接收器(TSwitch-Receive)和交換單元((TSwitch-Sever)三種原子耦合來(lái)建模。以TSwitch-Sender原子為例,詳細(xì)介紹DEVS++在建模中的應(yīng)用。

圖5 TSwitch-Sender模型結(jié)構(gòu)圖

圖5為T(mén)Switch-Sender原子示意圖,由Atomic模型派生而來(lái),含兩個(gè)輸入端口、一個(gè)輸出端口,F(xiàn)rame_in接收數(shù)據(jù)幀,Carrie_in接收物理層輸入的載波信號(hào)。TSwitch-Sender原子應(yīng)含有一個(gè)緩沖區(qū)(Buffer)來(lái)存放待發(fā)送的數(shù)據(jù)。

定義變量:SenderPhase為T(mén)Switch-Sender當(dāng)前狀態(tài),PhysicalPhase為物理層的狀態(tài),Jam為擁堵信號(hào),AppFrame為正在發(fā)送的幀指針,CarrieFrame為偵聽(tīng)端口上輸入的幀指針,CollisionCount記錄沖突次數(shù)。

圖6 Init函數(shù)流程圖

圖7 Frame_in端口輸入流程圖

虛函數(shù)tau、init、delta_x、delta_y具體實(shí)現(xiàn)。tau返回各狀態(tài)的壽命,TSwitch-Sender處于空閑狀態(tài)(Idling),壽命為∞;幀發(fā)送前偵聽(tīng)通道的狀態(tài)(Sensing),信道忙時(shí)立即返回,壽命為0,信道空閑時(shí),再持續(xù)監(jiān)聽(tīng)1個(gè)幀間隙(固定為96 bit的傳輸時(shí)間)壽命為0.000 96 ms;發(fā)送幀狀態(tài)(Sending),壽命為數(shù)據(jù)包的長(zhǎng)度與網(wǎng)絡(luò)帶寬的比值;幀成功發(fā)送后的復(fù)位狀態(tài)(Resting),持續(xù)1個(gè)幀間隙;發(fā)送沖突干擾信號(hào)的狀態(tài)(SendingJam),Jam是48 bit的沖突信號(hào)可瞬時(shí)發(fā)送,壽命為0;發(fā)送Jam后等待狀態(tài)(AfterJam),持續(xù)1個(gè)時(shí)隙(固定為512 bit的傳輸時(shí)間),使Jam信號(hào)被全部節(jié)點(diǎn)接收;沖突發(fā)生后等待重傳的狀態(tài)(Backoff),該狀態(tài)根據(jù)退避規(guī)則隨機(jī)退避一定時(shí)間[13]。

Init函數(shù)用于實(shí)現(xiàn)模型初始化,流程如圖6所示。

外部輸入X到達(dá)觸發(fā)delta_x,若X來(lái)自于Frame_in端口,流程如圖7所示。

X來(lái)自Carrie_in端口,則分兩種情況,X可能是Jam信號(hào)或數(shù)據(jù)幀,具體流程如圖8所示。

圖8 Carrie_in端口輸入流程圖

狀態(tài)壽命結(jié)束時(shí)出發(fā)delta_y。TSwitch-Sender發(fā)生狀態(tài)轉(zhuǎn)移并伴隨輸出事件。若TSwitch-Sender處于Sensing狀態(tài),調(diào)用delta_y時(shí)流程如圖9所示;處于Sending狀態(tài)時(shí),發(fā)送幀尾,轉(zhuǎn)移到復(fù)位狀態(tài)后,若Buffer空閑,轉(zhuǎn)為Idling,反之轉(zhuǎn)為Sensing狀態(tài)繼續(xù)偵聽(tīng);處于SendingJam狀態(tài)時(shí),產(chǎn)生Jam信號(hào)發(fā)送到其他節(jié)點(diǎn)后轉(zhuǎn)移到AfterJam,按隨機(jī)退避規(guī)則隨機(jī)退避一定的時(shí)間,退避時(shí)間到達(dá),再偵聽(tīng)Buffer狀態(tài),與前類似。

圖9 Sensing狀態(tài)時(shí)調(diào)用delta_y

以上介紹TSwitch-Sender模型中虛函數(shù)的具體實(shí)現(xiàn),同理構(gòu)建TSwitch_Receive和TSwitch_Sever原子模型,Switch耦合模型即可搭建。

依據(jù)DEVS++建??蚣?,依次構(gòu)建合并單元、物理信道、保護(hù)測(cè)控裝置的模型,不再贅述。系統(tǒng)模型派生自耦合模型,通過(guò)Coupled提供的AddModel函數(shù)可添加以上網(wǎng)絡(luò)中的耦合模型,通過(guò)AddCP建立耦合間的關(guān)聯(lián)關(guān)系,將網(wǎng)絡(luò)模型載入仿真引擎即可實(shí)現(xiàn)仿真運(yùn)行。

3.2 仿真結(jié)果

仿真參數(shù)設(shè)置,合并單元每隔0.25 ms采樣一次,SV報(bào)文長(zhǎng)度156 Bytes,數(shù)字信號(hào)在光纖上傳輸?shù)乃俣葹?×108m/s,網(wǎng)絡(luò)半徑100 m,通信帶寬按照100 Mbit/s建模,仿真時(shí)長(zhǎng)設(shè)為1 000 ms。表1和表2分別統(tǒng)計(jì)在交換總線通信方式下、仿真運(yùn)行期間內(nèi)的總流量和SV報(bào)文相關(guān)參數(shù)。

表1 總流量統(tǒng)計(jì)

表2 SV報(bào)文統(tǒng)計(jì)

由表1統(tǒng)計(jì)沖突次數(shù)為0,網(wǎng)絡(luò)仿真過(guò)程中沒(méi)有發(fā)生沖突,即沒(méi)有Jam數(shù)據(jù)幀產(chǎn)生。網(wǎng)絡(luò)總流量為9.981 5×106Mbit,全部被接受。表2統(tǒng)計(jì)得出,仿真期間內(nèi)共產(chǎn)生SV報(bào)文總數(shù)7 998個(gè),總流量可計(jì)算得7 998×156 bytes×8=9.981 5×106Mbit,與統(tǒng)計(jì)結(jié)果相同。仿真過(guò)程沒(méi)有發(fā)生沖突,最小時(shí)延考慮數(shù)據(jù)處理過(guò)程中沒(méi)有排隊(duì),理論上延時(shí)可分如下三個(gè)階段計(jì)算:

(1)幀到達(dá)交換機(jī)之前的傳輸過(guò)程:發(fā)送幀頭前偵聽(tīng)網(wǎng)絡(luò)狀態(tài)時(shí)延為0.000 96 ms;經(jīng)光纖傳輸產(chǎn)生傳輸時(shí)延為信道長(zhǎng)度與傳輸速率之比5×10-4ms;發(fā)送幀尾時(shí)延為數(shù)據(jù)幀長(zhǎng)度與網(wǎng)絡(luò)帶寬之比0.011 98 ms;幀尾經(jīng)光纖傳輸時(shí)延為5×10-4ms。

(2)交換機(jī)內(nèi)部交換幀產(chǎn)生時(shí)延為數(shù)據(jù)幀長(zhǎng)度與交換速率的比值1.248×10-3ms。

(3)數(shù)據(jù)從交換機(jī)發(fā)出到達(dá)IED元件與第一個(gè)過(guò)程類似,最小延時(shí)為0.029 128 ms,與統(tǒng)計(jì)結(jié)果相同。

(4)若數(shù)據(jù)需在交換機(jī)緩沖器中排隊(duì)等待,則產(chǎn)生額外延時(shí),由統(tǒng)計(jì)結(jié)果得該網(wǎng)絡(luò)的最大時(shí)延為0.043 528 ms。通過(guò)統(tǒng)計(jì)結(jié)果可分析SV報(bào)文的最大延時(shí)與最小延時(shí)及丟包率等參數(shù),對(duì)比網(wǎng)絡(luò)性能要求,方便用戶進(jìn)行測(cè)試。

4 結(jié)束語(yǔ)

DEVS++開(kāi)源庫(kù)提供了原子模型、耦合模型和仿真引擎的基類,將系統(tǒng)建模和仿真結(jié)合起來(lái),通過(guò)繼承、派生各類原子和耦合模型,具體實(shí)現(xiàn)系統(tǒng)功能,就能實(shí)現(xiàn)任意的離散事件系統(tǒng)建模和仿真。DEVS++提供基于軟件開(kāi)發(fā)的分層、模塊化的機(jī)制,為離散事件系統(tǒng)建模提供了標(biāo)準(zhǔn)的、統(tǒng)一的框架,提高了仿真模型的重用性和可操作性,為用戶集成模型或二次開(kāi)發(fā)提供了非常大的便利。

對(duì)于信息物理融合的電力系統(tǒng)而言,DEVS++為實(shí)現(xiàn)智能電網(wǎng)的統(tǒng)一建模提供了可參考的標(biāo)準(zhǔn),為信息系統(tǒng)的性能分析及研究提供了重要的手段。在離散事件系建模中,DEVS++具有廣闊的應(yīng)用前景。

猜你喜歡
基類端口原子
原子可以結(jié)合嗎?
原子究竟有多小?
帶你認(rèn)識(shí)原子
基于C#面向?qū)ο蟪绦蛟O(shè)計(jì)的封裝、繼承和多態(tài)分析
一種端口故障的解決方案
端口阻塞與優(yōu)先級(jí)
空戰(zhàn)游戲設(shè)計(jì)實(shí)例
一種基于用戶興趣的STC改進(jìn)算法
虛機(jī)制在《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》中的教學(xué)方法研究
初識(shí)電腦端口
電腦迷(2015年6期)2015-05-30 08:52:42
佛冈县| 沾化县| 乐至县| 息烽县| 大埔县| 广灵县| 绥阳县| 梅河口市| 阜康市| 根河市| 灵宝市| 沙田区| 平泉县| 巨鹿县| 望奎县| 集安市| 营口市| 辽源市| 德兴市| 金寨县| 大安市| 正蓝旗| 龙井市| 阿拉善左旗| 赣榆县| 历史| 天等县| 寿宁县| 建水县| 吴江市| 金塔县| 七台河市| 甘孜县| 布尔津县| 新干县| 河池市| 和硕县| 徐州市| 同江市| 宁武县| 安康市|