




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第三章基于中斷的離散事件仿真
3.1
離散事件仿真3.2
驅(qū)動問題的深入討論3.3事件的類型
仿真是一個(gè)動態(tài)的過程,需要按一定邏輯去處理許多任務(wù)。仿真可以比擬成人的走路。人在走路中,不僅要有骨骼、肌肉等人體運(yùn)動結(jié)構(gòu)的支持,還需要腦和神經(jīng)系統(tǒng)的指揮。同樣地,仿真不僅需要一個(gè)由圖形語言和代碼所構(gòu)建的模型結(jié)構(gòu),還需要有一個(gè)驅(qū)動機(jī)制,去指引仿真中各個(gè)動作邏輯有序地進(jìn)行。3.1
離散事件仿真一仿真事件表在OPNET仿真中,事件是指狀態(tài)的變化,如數(shù)據(jù)源發(fā)送數(shù)據(jù)包、定時(shí)器超時(shí)、信道空閑與繁忙的轉(zhuǎn)變等,都構(gòu)成了事件。而中斷是對事件的處理。
事件和中斷是一對相互關(guān)聯(lián)的范疇。一般地,一個(gè)事件總會引起一個(gè)中斷。但此中斷不一定真正去執(zhí)行,例如用事件類核心函數(shù)op_ev_cancel()可以刪除已經(jīng)預(yù)設(shè)(schedule)但尚未執(zhí)行(excution)的事件。
事件和中斷在OPNET的仿真中發(fā)揮著極其重要的作用,可以說,OPNET仿真就是一系列事件和中斷相互引發(fā)、交替作用的動態(tài)過程。在這個(gè)過程中,需要對事件進(jìn)行有效管理。OPNET是通過仿真事件表(SimulationEvnetList)來完成這項(xiàng)工作的。
仿真事件表是一個(gè)動態(tài)的列表,包括時(shí)間、事件標(biāo)識、中斷類型、源、數(shù)據(jù)和執(zhí)行模塊等屬性:時(shí)間(time):表征事件執(zhí)行的仿真時(shí)間,為非負(fù)的雙精度浮點(diǎn)值。事件(event):包括執(zhí)行ID、調(diào)度ID和中斷類型源(source):表示事件產(chǎn)生的模塊及源模塊中事件的執(zhí)行ID。數(shù)據(jù)(data):包括輸入流標(biāo)識(instrmID)、數(shù)據(jù)包標(biāo)識(PacketID)、代碼(code)等事件信息。模塊(module):表征仿真事件的執(zhí)行模塊。事件屬性的觀察方法
在ODB窗口中截取的rx_sink模塊的一個(gè)事件的屬性實(shí)例
事件執(zhí)行的仿真時(shí)間約為16秒;事件的執(zhí)行ID為70,調(diào)度ID為78,處理事件的中斷類型為流中斷;源模塊為rx節(jié)點(diǎn)的radio_receiver,源模塊的流中斷事件的執(zhí)行ID為68;執(zhí)行模塊是rx節(jié)點(diǎn)的rx_sink;數(shù)據(jù)中輸入流號為0,數(shù)據(jù)包ID為11。
我們還可以用一個(gè)模塊間的接收過程,將上述事件的主要屬性串接起來,以便更好地理解其中的內(nèi)涵:作為接收機(jī)的源模塊收到來自接收天線的一個(gè)數(shù)據(jù)包(ID=11),發(fā)給instrm為0的包流線,并通過仿真內(nèi)核預(yù)設(shè)了包流線的輸出節(jié)點(diǎn)——rx_sink中的事件(流中斷事件),執(zhí)行的仿真時(shí)間約為16秒。在OPNET中,對仿真事件表的管理是由仿真內(nèi)核(SimulatonKernel,SK)施行的。仿真內(nèi)核是OPNET中的控制中心。如果將OPNET仿真平臺比擬成一臺計(jì)算機(jī),那么仿真內(nèi)核就是CPU。在仿真中,仿真內(nèi)核能夠?qū)κ录M(jìn)行管理和調(diào)度進(jìn)程。二離散事件驅(qū)動
在實(shí)際應(yīng)用中,仿真要對網(wǎng)絡(luò)通信的某個(gè)過程進(jìn)行模擬;而網(wǎng)絡(luò)通信涉及諸多的協(xié)議,節(jié)點(diǎn)、實(shí)體間彼此又相互作用。因此,仿真必然涉及許多的事件和中斷。而這些事件中,一個(gè)事件可能是由另一個(gè)事件觸發(fā)的,彼此間存在著復(fù)雜的時(shí)序關(guān)系和邏輯關(guān)系。如何將這些紛繁復(fù)雜的事件進(jìn)行合理的調(diào)度并有效地控制進(jìn)程的行為,是仿真中的核心問題。OPNET采用了一種稱為離散事件驅(qū)動(DiscreteEventDriven)的仿真機(jī)制,其基本思想如下所述:盡管物理世界的網(wǎng)絡(luò)通信是連續(xù)發(fā)生、進(jìn)行的,但我們總可以將其分解為離散的事件。而離散事件總是在離散的時(shí)間點(diǎn)上發(fā)生的,不發(fā)生事件的時(shí)間段本質(zhì)上對我們的仿真不產(chǎn)生任何影響。因此,盡管時(shí)間是連續(xù)的,我們可以僅對事件發(fā)生的離散時(shí)間點(diǎn)進(jìn)行處理,從而簡化仿真的模型和過程。下面我們以simple_source進(jìn)程為例,描述離散事件驅(qū)動的主要過程。
在仿真開始時(shí)刻(仿真時(shí)間為0),通常要對進(jìn)程進(jìn)行初始化。這種對進(jìn)程進(jìn)行初始化的事件稱為初始仿真(BeginSimulation,BEGSIM)事件。初始事件是在進(jìn)程接口(ProcessInterface)的begsimintrpt屬性中設(shè)置的:
初始事件的設(shè)置
當(dāng)設(shè)為使能時(shí),初始化代碼將在仿真開始后最先執(zhí)行。初始化代碼位于進(jìn)程的初始狀態(tài)中,以箭頭表征:
在仿真開始前,仿真內(nèi)核按照進(jìn)程的優(yōu)先級,將這些初始事件加入到仿真事件表中。在OPNET仿真中,還涉及一個(gè)仿真控制權(quán)的概念。由于一般情況下,離散事件仿真是在串行計(jì)算機(jī)中執(zhí)行的,同一時(shí)刻只能處理一個(gè)事件。一個(gè)實(shí)體要對事件進(jìn)行處理,必須獲取執(zhí)行仿真的權(quán)利,我們稱這種權(quán)利為仿真控制權(quán)。
仿真開始后,仿真內(nèi)核將首先執(zhí)行位于表頭的事件,并將仿真控制權(quán)轉(zhuǎn)給模塊1。模塊1獲得控制權(quán)后,將執(zhí)行該模塊進(jìn)程模型的初始狀態(tài),進(jìn)行進(jìn)程的初始化,通常包括讀取對象屬性、注冊統(tǒng)計(jì)量和設(shè)置自中斷等工作。其中,自中斷可預(yù)設(shè)未來的中斷事件,可通過中斷函數(shù)集中的自中斷函數(shù)實(shí)現(xiàn),該函數(shù)的作用為調(diào)用函數(shù)預(yù)設(shè)一個(gè)中斷事件。自中斷函數(shù)的調(diào)用形式為:op_intrpt_schedule_self(time,code)其中,第一個(gè)參數(shù)time為double型,表示預(yù)設(shè)事件的執(zhí)行時(shí)間;該值為絕對仿真時(shí)間,而不是當(dāng)前仿真時(shí)間的時(shí)延。第二個(gè)參數(shù)是用戶自定義的中斷代碼,用以標(biāo)識該自中斷。simple_source進(jìn)程初始狀態(tài)中包產(chǎn)生的啟動自中斷代碼如下://Scheduleaselfinterruptthatwillindicateourstarttimefor//packetgenerationactivities.Ifthesourceisdisabled,//scheduleitatcurrenttimewiththeappropriatecodevalue.if(start_time==SSC_INFINITE_TIME) { op_intrpt_schedule_self(op_sim_time(),SSC_STOP); }else { op_intrpt_schedule_self(start_time,SSC_START); …… }
模塊1在獲得控制權(quán)后,若其初始狀態(tài)為非強(qiáng)制狀態(tài)(unforcedstate),則執(zhí)行完入口(EnterExecs)程序后,模塊1停止運(yùn)行,并等待激活,進(jìn)入阻塞狀態(tài)。同時(shí),把控制權(quán)歸還仿真內(nèi)核。仿真內(nèi)核在獲得控制權(quán)后,首先將已處理的事件(即表頭事件)刪除,并將自中斷引發(fā)的預(yù)設(shè)事件按執(zhí)行時(shí)間加入到仿真事件表中。若初始狀態(tài)為強(qiáng)制狀態(tài),則繼續(xù)執(zhí)行至下一狀態(tài)。直至到達(dá)一個(gè)非強(qiáng)制狀態(tài),再執(zhí)行入口后阻塞和轉(zhuǎn)讓控制權(quán)。
執(zhí)行上一事件表表頭的初始事件后,仿真內(nèi)核將其從列表中刪除,并加入模塊1的自事件,如下表所示:
之后,仿真內(nèi)核將控制權(quán)轉(zhuǎn)讓給模塊2,執(zhí)行相應(yīng)的初始事件,并按上述排序規(guī)則加入模塊2的自事件(自事件2)。應(yīng)該指出,自事件2不一定是在自事件1后面。事實(shí)上,若自事件2的執(zhí)行時(shí)間小于t,則其將被插入到自事件1之前。
以此類推,當(dāng)執(zhí)行完初始事件n后,將執(zhí)行表頭的自事件。此時(shí),仿真內(nèi)核將控制權(quán)轉(zhuǎn)讓至生成該自事件的模塊。該模塊將從阻塞中被喚醒,繼續(xù)執(zhí)行初始狀態(tài)的出口程序,并根據(jù)狀態(tài)轉(zhuǎn)移條件轉(zhuǎn)移到下一個(gè)狀態(tài)中。若下一個(gè)狀態(tài)為非強(qiáng)制狀態(tài),則執(zhí)行入口程序后,阻塞并返回控制權(quán);若為強(qiáng)制狀態(tài),則繼續(xù)執(zhí)行下一狀態(tài),直至執(zhí)行到非強(qiáng)制狀態(tài)。
隨著狀態(tài)的執(zhí)行,進(jìn)程還會預(yù)設(shè)其他類型的事件,如流事件、遠(yuǎn)程事件等。這些事件將按照執(zhí)行時(shí)間的先后插入到時(shí)間表中;若執(zhí)行時(shí)間相同,則按優(yōu)先級及自然順序排序。如上所述,事件處理(即中斷)將導(dǎo)致仿真內(nèi)核的控制權(quán)轉(zhuǎn)讓,得到控制權(quán)的進(jìn)程將執(zhí)行狀態(tài),狀態(tài)代碼
又會生成新的事件。就這樣,仿真像一臺啟動的機(jī)器連續(xù)不斷地進(jìn)行下去,直到事件表已空或仿真時(shí)間已經(jīng)到達(dá),才停止運(yùn)行。
3.2
驅(qū)動問題的深入討論
為了進(jìn)一步理解離散事件驅(qū)動,我們將以下問題提煉出來做專題討論。
一深刻理解仿真事件中的時(shí)間在仿真事件表中,事件是以仿真執(zhí)行時(shí)間排序的。執(zhí)行時(shí)間是一個(gè)單向遞增的過程,其只向前或保持不變,不會向后發(fā)展,這和我們的物理世界中的時(shí)間是一致的。
執(zhí)行時(shí)間反應(yīng)真實(shí)的物理現(xiàn)象的時(shí)間規(guī)律。例如,在數(shù)據(jù)包產(chǎn)生中,我們經(jīng)常根據(jù)通信中的業(yè)務(wù)統(tǒng)計(jì)規(guī)律,假設(shè)為泊松分布,到達(dá)時(shí)間間隔服從于指數(shù)分布。我們可以將自中斷函數(shù)的時(shí)間參數(shù)設(shè)置為一個(gè)具有指數(shù)分布的隨機(jī)變量,從而預(yù)設(shè)具有泊松分布的多個(gè)自事件;再通過自事件的調(diào)用,生成具有泊松分布的業(yè)務(wù)量,客觀反映實(shí)際業(yè)務(wù)的規(guī)律。
在離散事件驅(qū)動中,只有執(zhí)行時(shí)間才是有效的時(shí)間;本質(zhì)上,我們在非執(zhí)行時(shí)間中什么也不做。而且在執(zhí)行一個(gè)事件的過程中執(zhí)行時(shí)間總是不變的。事實(shí)上,執(zhí)行一個(gè)事件的過程就是仿真內(nèi)核將控制權(quán)轉(zhuǎn)讓給執(zhí)行事件的進(jìn)程,進(jìn)程運(yùn)行狀態(tài)代碼,直到執(zhí)行至非強(qiáng)制狀態(tài),并執(zhí)行入口代碼后阻塞,并返回給仿真內(nèi)核的過程。該過程中仿真時(shí)間不會變化。執(zhí)行時(shí)間不同于在計(jì)算機(jī)上運(yùn)行仿真的時(shí)間(我們稱之為仿真運(yùn)行時(shí)間)。盡管仿真運(yùn)行時(shí)間也是單向遞增的,但其不會出現(xiàn)同時(shí)發(fā)生的情況,同時(shí)也不會產(chǎn)生跳躍。仿真運(yùn)行時(shí)間總是線性地遞增,不可能發(fā)生非線性地跳躍。
二同一時(shí)刻的事件排序
我們知道,在仿真事件表中,同時(shí)發(fā)生的事件是按優(yōu)先權(quán)排序的。那么優(yōu)先權(quán)又是如何確定的呢?OPNET提供了對象優(yōu)先權(quán)和中斷優(yōu)先權(quán)兩種方法。
對象優(yōu)先權(quán)適合確定不同執(zhí)行模塊下事件的優(yōu)先權(quán)。仿真內(nèi)核用優(yōu)先權(quán)速率(priorityrating)來決定對象優(yōu)先權(quán)的高低。仿真速率可視為二個(gè)參數(shù)的函數(shù):模塊優(yōu)先權(quán):適用于處理器和隊(duì)列模塊。節(jié)點(diǎn)和子網(wǎng)優(yōu)先權(quán):適用于包含模塊的節(jié)點(diǎn)和直接包含模塊的子網(wǎng)。
對象優(yōu)先權(quán)適合確定不同執(zhí)行模塊下事件的優(yōu)先權(quán)。仿真內(nèi)核用優(yōu)先權(quán)速率(priorityrating)來決定對象優(yōu)先權(quán)的高低。仿真速率可視為二個(gè)參數(shù)的函數(shù):模塊優(yōu)先權(quán):適用于處理器和隊(duì)列模塊。節(jié)點(diǎn)和子網(wǎng)優(yōu)先權(quán):適用于包含模塊的節(jié)點(diǎn)和直接包含模塊的子網(wǎng)。
對象優(yōu)先權(quán)的比較規(guī)則如下,其中節(jié)點(diǎn)(X)表示包含模塊X的節(jié)點(diǎn),子網(wǎng)(X)表示直接包含節(jié)點(diǎn)(X)的子網(wǎng)。A.超級優(yōu)先權(quán)使能并且B.超級優(yōu)先權(quán)未使能子網(wǎng)(A).優(yōu)先權(quán)>子網(wǎng)(B).優(yōu)先權(quán)子網(wǎng)(A).優(yōu)先權(quán)=子網(wǎng)(B).優(yōu)先權(quán)并且節(jié)點(diǎn)(A).優(yōu)先權(quán)>節(jié)點(diǎn)(B).優(yōu)先權(quán)子網(wǎng)(A).優(yōu)先權(quán)=子網(wǎng)(B).優(yōu)先權(quán)并且節(jié)點(diǎn)(A).優(yōu)先權(quán)=節(jié)點(diǎn)(B).優(yōu)先權(quán)并且A.優(yōu)先權(quán)>B.優(yōu)先權(quán)A優(yōu)先權(quán)高于B優(yōu)先權(quán)
那么,多個(gè)事件在同一模塊中同時(shí)執(zhí)行時(shí),優(yōu)先權(quán)是如何確定的呢?OPNET采用了中斷優(yōu)先權(quán)方法。不同于對象優(yōu)先級,中斷優(yōu)先權(quán)是基于進(jìn)程,而非基于模塊的(或者說是基于模型,而非基于對象的),可通過模型代碼實(shí)現(xiàn)。OPNET中斷函數(shù)集提供了op_intrpt_priority_set()核心函數(shù),可以對中斷優(yōu)先權(quán)進(jìn)行設(shè)置。
op_intrpt_priority_set()函數(shù)包含三個(gè)參數(shù):類型(type):中斷的類型,如自中斷、流中斷、統(tǒng)計(jì)中斷等。代碼(code):用戶自定義的中斷號。例如:對于流中斷來說,表示輸入流的索引號。優(yōu)先權(quán)(priority):優(yōu)先權(quán)值,默認(rèn)值為0。3.3事件的類型
以上介紹的事件都是通過“調(diào)度”的方式執(zhí)行的,即仿真事件被按執(zhí)行時(shí)間或優(yōu)先權(quán)及自然順序插入仿真事件表;仿真內(nèi)核執(zhí)行事件表的表首事件,調(diào)度該事件所對應(yīng)的模塊進(jìn)程;進(jìn)程執(zhí)行至非強(qiáng)制狀態(tài)的入口結(jié)束,阻塞并交還控制權(quán)。調(diào)度是OPNET中最為常用的一種事件類型,大多數(shù)仿真都是依靠調(diào)度驅(qū)動的。調(diào)度型事件只能執(zhí)行到非強(qiáng)制狀態(tài)的入口代碼結(jié)束,才能執(zhí)行其他事件。反映在數(shù)據(jù)包傳輸上,發(fā)送模塊通過op_pk_send()產(chǎn)生流中斷,接收模塊獲得控制權(quán)后才能獲取數(shù)據(jù)包。如果接收模塊需要在執(zhí)行進(jìn)程代碼的過程中,立即接收數(shù)據(jù)包;接收之后,再繼續(xù)執(zhí)行進(jìn)程代碼。這該怎么實(shí)現(xiàn)呢?顯然,用調(diào)度型事件是無能為力的。為了解決這個(gè)問題,OPNET提出了一種稱為“強(qiáng)制”的事件類型。調(diào)度型事件只能執(zhí)行到非強(qiáng)制狀態(tài)的入口代碼結(jié)束,才能執(zhí)行其他事件。反映在數(shù)據(jù)包傳輸上,發(fā)送模塊通過op_pk_send()產(chǎn)生流中斷,接收模塊獲得控制權(quán)后才能獲取數(shù)據(jù)包。如果接收模塊需要在執(zhí)行進(jìn)程代碼的過程中,立即接收數(shù)據(jù)包;接收之后,再繼續(xù)執(zhí)行進(jìn)程代碼。這該怎么實(shí)現(xiàn)呢?顯然,用調(diào)度型事件是無能為力的。為了解決這個(gè)問題,OPNET提出了一種稱為“強(qiáng)制”的事件類型。
不同于調(diào)度事件,強(qiáng)制事件的發(fā)起模塊,在產(chǎn)生一個(gè)接入中斷后,將掛起(suspended)正在執(zhí)行的進(jìn)程,而立即去執(zhí)行接入中斷指向的流輸入進(jìn)程。執(zhí)行完數(shù)據(jù)流的輸入進(jìn)程后,再返回原進(jìn)程,從被掛起的地方繼續(xù)執(zhí)行代碼。
下面以被動隊(duì)列為例,描述強(qiáng)制執(zhí)行方式。下圖為一個(gè)包含被動隊(duì)列的節(jié)點(diǎn)模型。圖中,數(shù)據(jù)包從Upstream處理器模塊,經(jīng)Passive_Queue隊(duì)列模塊,到達(dá)Downstream處理器模塊;模塊間是通過包流線(packetstream)連接的。
該實(shí)例中,Passive_Queue隊(duì)列接收來自Upstream的數(shù)據(jù)包,但其不會主動傳遞數(shù)據(jù)包。該隊(duì)列將等待外界中斷(來自其前向模塊Downstream的接入中斷)的觸發(fā),才向前傳包。為此,處理器Downstream將執(zhí)行op_strm_access(),該函數(shù)為被動隊(duì)列中的進(jìn)程產(chǎn)生一個(gè)強(qiáng)制性的接入中斷(AccessInterrupt)。op_strm_access()僅有一個(gè)整型的函數(shù)參數(shù)instrm_index,表征輸入流的索引號。處理器Downstream中相關(guān)的進(jìn)程代碼如下:/*Requestapacketfromthequeue.*/op_strm_access(INPUT_STREAM);/*Testifapackethasarrived.Ifso,forwardit.*/if(op_strm_empty(INPUT_STREAM)==OPC_FALSE){pk=op_pk_get(INPUT_STREAM);op_pk_send(pk,INPUT_STREAM);}當(dāng)執(zhí)行完op_strm_access()函數(shù)時(shí),Downstream將程序掛起(阻塞),并將仿真控制權(quán)返回給仿真內(nèi)核。請讀者對比:調(diào)度方式下,執(zhí)行完非強(qiáng)制狀態(tài)入口代碼后的驅(qū)動過程。仿真內(nèi)核將調(diào)用Passive_Queue隊(duì)列,轉(zhuǎn)交控制權(quán)。被動隊(duì)列獲得控制權(quán)后,將查詢是否有可傳的數(shù)據(jù)包;若有,則傳遞數(shù)據(jù)包。隊(duì)列Passive_Queue中的相關(guān)代碼如下:/*ARequesthasbeenmadetoaccessthequeue:checkifitisempty.*/if(!op_supq_empty(SUBQ)){/*Removethefirstpacket.*/pk=op_supq_pk_remove(SUBQ,OPC_QPOS_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年甘肅酒泉市玉門市引進(jìn)急需緊缺人才(第一批)考前自測高頻考點(diǎn)模擬試題及一套完整答案詳解
- 2025湖南新五豐股份有限公司公開招聘考前自測高頻考點(diǎn)模擬試題及一套參考答案詳解
- 2025北京林業(yè)大學(xué)雄安校區(qū)規(guī)劃建設(shè)指揮部招聘1人考前自測高頻考點(diǎn)模擬試題及一套答案詳解
- 伊利活動策劃方案
- 2025貴州興仁市馬馬崖鎮(zhèn)村級衛(wèi)生室醫(yī)生崗位招聘考前自測高頻考點(diǎn)模擬試題及答案詳解(考點(diǎn)梳理)
- 企業(yè)短視頻優(yōu)化咨詢方案
- 2025福建泉州市鯉城區(qū)屬部分公辦學(xué)校專項(xiàng)招聘編制內(nèi)新任教師15人(二)考前自測高頻考點(diǎn)模擬試題附答案詳解(典型題)
- 人工湖補(bǔ)漏施工方案
- 2025年眼科操作試題題庫及答案
- 多人合伙協(xié)議
- 數(shù)據(jù)智能研究報(bào)告(2025年)
- 2026年中國地震局事業(yè)單位招聘235人筆試參考題庫附答案解析
- 快消品管理層培訓(xùn)課件
- 居民小區(qū)停車位共享管理方案
- 2025江蘇徐州國信電力工程有限公司招聘24人考試參考試題及答案解析
- 醫(yī)院醫(yī)患溝通培訓(xùn)
- 家庭儲能設(shè)備市場2025年應(yīng)用場景與用戶需求研究報(bào)告
- 2025年美國留學(xué)入學(xué)測試題及答案
- 污水處理廠自動化系統(tǒng)升級改造方案
- 光伏項(xiàng)目課件
- 2025年徐州市中考地理生物合卷試題卷(含答案及解析)
評論
0/150
提交評論