




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、OPNET Modeler核心函數(shù)1 .核心函數(shù)簡(jiǎn)介1.1 命名規(guī)則OPNET中的核心函數(shù)具有非常標(biāo)準(zhǔn)的命名規(guī)則,以增強(qiáng)函數(shù)在C/C+代碼中的可視性,避免名稱(chēng)與非OPNET函或變量沖突。以下列出了一些簡(jiǎn)單的命名規(guī)則:名稱(chēng)均采用op_作為前綴,以標(biāo)識(shí)其為OPNET仿真內(nèi)核提供的核心函數(shù)。函數(shù)名的第二部分為函數(shù)集名,用小寫(xiě)字母表示,通常是函數(shù)所處理對(duì)象的名稱(chēng) 縮寫(xiě), 如 pk、ici、stat 等。函數(shù)名的第三部分是子函數(shù)集名,對(duì)核心函數(shù)進(jìn)一步進(jìn)行了分類(lèi),如核心函數(shù)op_pk_nfd_set()中的 nfd。核心函數(shù)主要用于對(duì)對(duì)象的操作。在函數(shù)名中,對(duì)象總是出現(xiàn)在動(dòng)作之前,比如名稱(chēng) 中的 attr
2、_set和 subq_flush 就將對(duì)象(attribute 和 subqueue 放在動(dòng)作(set和 flush)之 刖。1.2 參數(shù)類(lèi)型大部分核心函數(shù)的參數(shù)和返回值都是標(biāo)準(zhǔn)的C/C+數(shù)據(jù)類(lèi)型,如int、double、char*。除此之外,在仿真數(shù)據(jù)結(jié)構(gòu)中還通過(guò)C/C+的typedef語(yǔ)句定義了許多參數(shù)和返回值作為特殊的OPNET數(shù)據(jù)類(lèi)型。盡管用戶(hù)通過(guò)核心函數(shù)來(lái)操作 OPNET數(shù)據(jù)類(lèi)型,可能對(duì)每個(gè)數(shù)據(jù)類(lèi)型的基 本內(nèi)容都越來(lái)越熟悉,但用戶(hù)并不需要關(guān)心數(shù)據(jù)類(lèi)型確切的內(nèi)部結(jié)構(gòu),因?yàn)?OPNET仿真數(shù)據(jù) 結(jié)構(gòu)的內(nèi)容因軟件版本的不同而有所改變。表1-1列舉了部分特殊的數(shù)據(jù)類(lèi)型。表1-1 OPNET中
3、部分特殊數(shù)據(jù)類(lèi)型基本數(shù)據(jù)類(lèi)型聲明示例Anvid (viewer ID)Anvid vid;Anmid (macro ID)Anmid mid;Andid (drawing ID)Andid did;BooleanBoolean bool;CompcodeCompcode comp_status;DistributionDistribution* dist_ptr;EvhandleEvhandle evh;StathandleStathandle Stat handle;IciIci* ici_ptr;ListList* list_ptr;ObjidObjid objid;PacketPacke
4、t* pkptr;PmohandlePmohandle pmh;Log_HandleLog_Handle config_log_hndl;ProcedureProcedure proc;ProhandleProhandle proh;SbhandleSbhandle sbh;1. Animation Entity動(dòng)畫(huà)集由操作中特定動(dòng)畫(huà)實(shí)體的ID號(hào)表示。之所以采用ID號(hào)來(lái)代替中的指針,是因?yàn)閷?duì) 于動(dòng)畫(huà)觀察函數(shù)op_vuanim, ID號(hào)通信超過(guò)了了仿真范圍。盡管ID號(hào)只是存儲(chǔ)在規(guī)則的C/C+ 整型變量中的簡(jiǎn)單整數(shù)值,但 OPNET也聲明了特定的數(shù)據(jù)類(lèi)型來(lái)準(zhǔn)確標(biāo)記ID參數(shù)和變量。三 種基于ID號(hào)的
5、動(dòng)畫(huà)實(shí)體包括瀏覽器(Viewer)、宏(Macro)和圖畫(huà)(Drawing)。2. Boolean核心函數(shù)通過(guò)返回布爾佰來(lái)表示結(jié)果是否正確。布爾值可與符號(hào)常量OPC_TRUE和OPC_FALSE進(jìn)行比較。3. Compcode核心函數(shù)通過(guò)返回Compcode值來(lái)表示操作是否正確完成。Compcode的值可與符號(hào)常量 OPC_COMPCOED_SUCCESS和 OPC_COMPCOED_FAILURE 進(jìn)行比較。4. DistributionDistribution是一種與概率密度函數(shù)(PDF) 一致的數(shù)據(jù)結(jié)構(gòu),它描述了隨機(jī)數(shù)到特定數(shù)字 輸出的日射。Distribution包含一張對(duì)映射進(jìn)行編碼
6、的數(shù)字表,指出完成該映射的算法。對(duì)于基 于表格的Distribution,數(shù)據(jù)從PDF編輯器的PDF模型文件中讀入。這些結(jié)構(gòu)均由 Dist函數(shù)集 中核心函數(shù)操作。5. Event Handle事件句柄是惟一一種確定未決仿真事件(中斷)的數(shù)據(jù)結(jié)構(gòu)。該結(jié)構(gòu)主要在 Intrpt核心函 數(shù)集中使用,因此可通過(guò)它們處理預(yù)設(shè)的中斷。注意,事件句柄是一種數(shù)據(jù)結(jié)構(gòu),而不是整型 或指針。因此不能把它存儲(chǔ)在整型或指針變量中。6. Statistic Handle統(tǒng)計(jì)量句柄是一種確定動(dòng)態(tài)產(chǎn)生的全局和局部統(tǒng)計(jì)量的數(shù)據(jù)結(jié)構(gòu)。統(tǒng)計(jì)量句柄的數(shù)據(jù)類(lèi)型為Stathandle獲得盲文句柄的惟一方法是通過(guò)核心函數(shù)的Stat函數(shù)集來(lái)
7、注冊(cè)統(tǒng)計(jì)量。注冊(cè)統(tǒng)計(jì)量時(shí)將為其指定一個(gè)惟一的名稱(chēng),并和時(shí)間一起存儲(chǔ)在一個(gè)輸出矢量中。局部統(tǒng)計(jì)量用在特定 處理器或隊(duì)列中;全局統(tǒng)計(jì)量由仿真模型中的實(shí)體共享,每個(gè)實(shí)體分布式地作用于輸出矢量。7. ICIICI( Interface Control Information , 接口控制信息)是與仿真中斷相關(guān)的結(jié)構(gòu)化數(shù)據(jù)的集合用于進(jìn)程間通信機(jī)制,傳輸分層協(xié)議接口的控制信息。 ICI 由 Ici 函數(shù)集中的杧函數(shù)操作。8. ListList是存儲(chǔ)在雙向鏈表中的數(shù)據(jù)元素的集合。List中的元素可按照從簡(jiǎn)單的 C/C+數(shù)據(jù)類(lèi) 型在復(fù)雜的數(shù)據(jù)結(jié)構(gòu)進(jìn)行排列。 List 學(xué)用于臨時(shí)存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)組,可包含各種不同類(lèi)
8、型的元素, 但通常并不這樣使用。對(duì) List 的大小沒(méi)有限制,可在其任意位置插入或移除元素。 List 由 Prg 函數(shù)集的 List 子函數(shù)集操作。9. Object ID對(duì)像 ID 惟一地確定了一個(gè)仿真對(duì)象。 通過(guò)使用 Objid 數(shù)據(jù)類(lèi)型聲明該標(biāo)識(shí)符, 供 Id 、 Ima、 Topo和Pk函數(shù)集使用。10. PacketPacket是數(shù)據(jù)封裝和傳輸建模中的基本仿真實(shí)體。它由Pk函數(shù)集中的核心函數(shù)操作。11. Memory Object Type某些建模需要為其動(dòng)態(tài)分配內(nèi)存來(lái)存儲(chǔ)各種信息。 每個(gè)相同大小數(shù)據(jù)組成的集合記為一個(gè)池,內(nèi)核為每個(gè)池分配大量的數(shù)據(jù)條目以提高標(biāo)準(zhǔn)內(nèi)存分配器的效率。每
9、個(gè)匯聚池中的內(nèi)存對(duì)象必須通過(guò)調(diào)用核心函數(shù)op_prg_pmo_de巾ne(冰創(chuàng)建,該函數(shù)將返回一個(gè)匯聚內(nèi)存對(duì)象句柄來(lái) 標(biāo)識(shí)池,用Pmohandle表示。創(chuàng)建匯聚內(nèi)存對(duì)象時(shí)都為其分配了一個(gè)惟一的名稱(chēng),仿真模型中 的實(shí)體可以共享匯聚內(nèi)存對(duì)象。12. Log Handle當(dāng)在仿真調(diào)試或數(shù)據(jù)分析中創(chuàng)建仿真日志時(shí),日志句柄對(duì)于每個(gè)日志項(xiàng)非常必要。13. Procedure某些核心函數(shù)將C/C+ 函數(shù)指針作為參數(shù), 但并不聲明這些參數(shù)作為指向返回整型值的函數(shù)的指針,而是定義了一種特殊的數(shù)據(jù)類(lèi)型Procedure。14. Process Handle進(jìn)程句柄是惟一一種標(biāo)識(shí)仿真中活動(dòng)進(jìn)程的數(shù)據(jù)結(jié)構(gòu),由 Pro
10、 函數(shù)集中的核心函數(shù)使用。 需注意進(jìn)程免柄是數(shù)據(jù)結(jié)構(gòu),而不是整形或指針,因而不能將它們存儲(chǔ)在整型或指針變量中。15. Sar Buffer HandleSar緩沖句柄是惟一一種標(biāo)識(shí) Sar (Segmentation & Reassembly分段與重組)緩沖區(qū)的數(shù) 據(jù)結(jié)構(gòu)。Sar緩沖區(qū)緩存包序列,并可又t包進(jìn)行分段和重裝。 Sar緩沖區(qū)由Sar函數(shù)集中的核心 函數(shù)創(chuàng)建,該函數(shù)返回訪問(wèn)新緩沖區(qū)的 Sar緩沖句柄。Sar函數(shù)集函數(shù)利用Sar緩沖名柄來(lái)處理 被標(biāo)識(shí)的Sar緩沖區(qū)。與其他OPNET數(shù)據(jù)結(jié)構(gòu)一樣,不能將Sar緩沖句柄分配到整型或指針變 量中。16. Vartype除標(biāo)準(zhǔn)的C/C+數(shù)據(jù)類(lèi)型
11、和特殊的仿真內(nèi)核數(shù)據(jù)類(lèi)型外,OPNET還提供了另外一種數(shù)據(jù) 類(lèi)型Vartype。Vartype數(shù)據(jù)類(lèi)型可用在變量聲明或類(lèi)型轉(zhuǎn)換語(yǔ)句中,它是 OPNET文檔中的特殊關(guān)鍵詞,表示函數(shù)參數(shù)可以是多種可能的數(shù)據(jù)類(lèi)型之一。類(lèi)型參數(shù)的傳遞由C描述的調(diào)用函數(shù)確定,Vartype用于確定哪個(gè)函數(shù)參數(shù)可用來(lái)傳遞多種數(shù)據(jù)類(lèi)型。但需要注意的是,Vartype并不像C中的varargs那樣可傳遞多種參數(shù),每個(gè) Vartype參數(shù)一次只能接受一個(gè)傳遞值。Vartype類(lèi)型的參數(shù),可接受int、double或指向數(shù)據(jù)結(jié)構(gòu)的指針。Vartype*是Vartype的一 種變體,它可接受指向變量類(lèi)型的指針。Vartype*類(lèi)型
12、的參數(shù)可接受的值包括:指向整型的指針、指向double的指針、指向數(shù)據(jù)結(jié)構(gòu)的指針,或參數(shù)用于返回filled-in值時(shí)指向數(shù)據(jù)結(jié)構(gòu)指針的指針。每個(gè)核心函數(shù)中都描述了可被 Vartype或Vartype*參數(shù)接受的類(lèi)型值。具有該類(lèi)型參數(shù)的 部分核心函數(shù)如表1-2所示。表1-2帶Vartype參數(shù)的核心函數(shù)核心函數(shù)變量類(lèi)型參數(shù)op_ima_obj_attr_set()Vartypeop_ima_obj_attr_get()Vartype* (fill-in)op_pk_fd_set()Vartypeop_pk_fd_get()Vartype* (fill-in)op_pk_nfd_set()Var
13、typeop_pk_nfd_get()Vartype* (fill-in)op_ini_attr_set()Vartypeop_ini_attr_get()Vartype* (fill-in)op prg list insert()Vartype*op_prg_mem_copy()Vartype*op_prg_mem_free()Vartype*返回變量類(lèi)型參數(shù)的部分核心函數(shù)如表1-3所示。表1-3返回變量類(lèi)型參數(shù)的核心函數(shù)核心函數(shù)變量類(lèi)型參數(shù)op prg list access()Vartype*op_prg_list_remove()Vartype*op_prg_mem_a110coVar
14、type*表1-4易沖突的函數(shù)名accept()index()send()access()kill()signal()audit()link()socket()bind()listen()stat()clear()open()tell()clock()pipe()truncate。close()poll()unlink()connect()read()wait()exit()select()1.3 多線(xiàn)程安全無(wú)線(xiàn)模塊允許OPNET采用多處理器進(jìn)行收/發(fā)信機(jī)管道計(jì)算。為確保并行傳輸?shù)恼_性和 盡可能快速,五個(gè)管道階段必須采用多線(xiàn)程安全核心函數(shù)。核心函數(shù)定義了三個(gè)多線(xiàn)程安全級(jí) 另I,分別是 MT-
15、safe、MT-unsafe和 Forced serialization。(1) MT-safe:該類(lèi)核心函數(shù)已手動(dòng)進(jìn)行重編碼以支持多線(xiàn)程。多個(gè)線(xiàn)程可安全地并行執(zhí) 行該類(lèi)核心函數(shù)。(2) MT-unsafe:在該安全級(jí)別下,若在核心函數(shù)中采用并行處理,將導(dǎo)致性能的下降, 達(dá)不到預(yù)期的結(jié)果。使用 MT-unsafe核心函數(shù)時(shí),應(yīng)當(dāng)執(zhí)行適當(dāng)?shù)拇a序列化(Serialization) 0(3) Forced serialization:對(duì)于所有已手動(dòng)重編碼以支持多線(xiàn)程的核心函數(shù),仿真內(nèi)核采 用內(nèi)部互斥來(lái)執(zhí)行嚴(yán)格的序列化。最終每個(gè)核心函數(shù)將進(jìn)行手動(dòng)重編碼來(lái)支持多線(xiàn)程,它們的 狀態(tài)也將由 Forced
16、serialization變?yōu)?MT-safe。2 .基本核心函數(shù)OPNET Modeler10.0提供了 21個(gè)核心函數(shù)集,只有熟悉核心函數(shù)才能在建模時(shí)方便地進(jìn)行 代碼編寫(xiě)。本節(jié)按照不同的功能對(duì)常用的核心函數(shù)作了詳細(xì)的介紹。2.1 內(nèi)部模型訪問(wèn)函數(shù)集Ima (Internal Model Access,內(nèi)部模型訪問(wèn))函數(shù)集是一系列提供對(duì)仿真實(shí)體動(dòng)態(tài)訪問(wèn)的 核心函數(shù)的集合,其中仿真實(shí)體包括仿真屬性、對(duì)象屬性、對(duì)象命令( Object Command)和進(jìn) 程狀態(tài)變量。1. op_ima_obj_attr_get (objid,attr_name,value_ptr)此核心函數(shù)的作用是獲取給定對(duì)
17、象的某屬性值,其參數(shù)說(shuō)明如表2-1所示。表2-1 op_ima_obj_attr_get()函數(shù)的參數(shù)說(shuō)明參數(shù)類(lèi)型描述objidObjid給定對(duì)象的對(duì)象IDattr_nameconst char*屬性名(必須是給定對(duì)象中已定義的,否則將出錯(cuò))value_ptrVartype*指向存儲(chǔ)屬性值變量的指針(Vartype*可接受字符串或指向 整型、double以及復(fù)合屬性對(duì)象ID指針。當(dāng)為字符串時(shí), 字符數(shù)組必須足夠大,以容納屬性值。參數(shù)指針類(lèi)型必須與 給定屬性的數(shù)據(jù)類(lèi)型相匹配,否則將出錯(cuò)。如果屬性類(lèi)型是 toggle ,返回值即為 OPC_BOOLINT_ENABLED 或 OPC_BOOLINT
18、_DISABLED ;如果屬,性類(lèi)型是 pofile ,返回 值即為包含訪問(wèn)profile所需的必要信息的pofile specification(PrgT_Profile_Spec)1)返回值Compcode如果成功獲取屬性值,即返回OPC_COMPCODE_SUCCESS,否貝U返回OPC_COMPCODE_FAILURE。如果需要獲取給定對(duì)象的復(fù)合屬性值,則若復(fù)合屬性相等, value_ptr的值即設(shè)為復(fù)合屬性 中的一個(gè)對(duì)象ID ,并返回 OPC_COMPCODE_SUCCESS;若不相等,則返回 OPC_COMPCODE_FAILURE。注意:在復(fù)合屬性中,所謂的“相等”,是指復(fù)合屬性
19、中的所有屬性都具有相同的名稱(chēng)、 類(lèi)型和值,并且復(fù)合懺悔的所有子對(duì)象也相等。2)詳解對(duì)于網(wǎng)絡(luò)域?qū)ο螅ㄗ泳W(wǎng)、節(jié)點(diǎn)和鏈路)、節(jié)點(diǎn)域?qū)ο螅K)以及預(yù)先由網(wǎng)絡(luò)、節(jié)點(diǎn)、進(jìn) 程或鏈路編輯器定義的復(fù)合屬性,都可以獲取對(duì)象屬性值。提升的屬性值可以從父對(duì)象中獲取。 要引用提升屬性,必須為每個(gè)中間對(duì)象的屬性名附加一個(gè)點(diǎn)分前綴。例如,若要在節(jié)點(diǎn)級(jí)獲取 進(jìn)程屬性,則屬性名應(yīng)在包含該進(jìn)程的模塊名稱(chēng)之前。并不是所有的對(duì)象屬性都可仿真中調(diào)用該函數(shù)來(lái)獲取。比如Simulation/Access字段被標(biāo)記為N/A的屬性就不能通過(guò)調(diào)用 op_ima_obj_attr_get(沫獲取。止匕外,該核心函數(shù)的命令級(jí)別為 Forced
20、serialization.3)目的該函數(shù)提供了一種在仿真中動(dòng)態(tài)獲取對(duì)象屬性的機(jī)制。它可用于處理器或隊(duì)列確定自身或網(wǎng)絡(luò)中其他對(duì)象的屬性值。將該函數(shù)與 op_ima_obj_attr_set(鉆合,無(wú)需包、ICI或中斷遞送就 可提供遠(yuǎn)程進(jìn)程間的通信。4)錯(cuò)誤Program Abort:分段錯(cuò)誤(由無(wú)效值指針、指針?biāo)竷?nèi)存不足或指向無(wú)效的attr_name地址所引起)。Recoverable Error對(duì)象無(wú)法識(shí)別屬性名。Recoverable Error 對(duì)象 ID 溢出。Recoverable Error對(duì)象ID指向受限對(duì)象(由受護(hù)模型中的相關(guān)對(duì)象引起)。5)相關(guān)函數(shù)采 用 op_ima_ob
21、j_attr_set()、 op_ima_obj_attr_set_db1()、 op_ima_obj_attr_set_int32()和 op_ima_obj_attr_set_strQiS 置對(duì)象屬性值。采 用 op_ima_sim_attr_get()、 op_ima_sim_attr_get_db1()、 op_ima_sim_attr_get_int32()和 op_ima_sim_attr_get_str(潴取仿真屬性值。采用op_ima_obj_svar_get(玳取進(jìn)程狀態(tài)變量值。采用op_ima_obj_command()向?qū)ο蟀l(fā)出一個(gè)命令。采用op_id_self()獲取所
22、屬處理器或隊(duì)列的對(duì)象ID。采用op_id_from_name(威取對(duì)象的對(duì)象ID。2. op_ima_obj_attr_set (objid,attr_name,value_ptr)此核心函數(shù)的作用是設(shè)置給定對(duì)象的某屬性值,其參數(shù)說(shuō)明如表 2-2所示。表2-2 op_ima_obj_attr_set()函數(shù)的參數(shù)說(shuō)明參數(shù)類(lèi)型描述objidObjid給定對(duì)象的對(duì)象IDattr_nameconst char*屬性名value_ptrVartype*指定屬性需設(shè)置的新值1)返回值Compcode如果成功獲取屬性值,即返回OPC_COMPCODE_SUCCESS,否貝U返回OPC_COMPCODE_F
23、AILURE。2)詳解對(duì)于網(wǎng)絡(luò)域?qū)ο?子網(wǎng)、節(jié)點(diǎn)和鏈路)、節(jié)點(diǎn)域?qū)ο?模塊)以及預(yù)先由網(wǎng)絡(luò)、節(jié)點(diǎn)、進(jìn)程或鏈路編輯器定義的復(fù)合屬性,都可以設(shè)置對(duì)象屬性值。在對(duì)象中可以設(shè)置提升對(duì)象的值。并不是所有的對(duì)象屬性都可仿真中調(diào)用該函數(shù)來(lái)設(shè)置。比如Simulation/Access字段被標(biāo)記為N/A的屬性就不能通過(guò)調(diào)用 op_ima_obj_attr_set怵設(shè)置。止匕外,該核心函數(shù)的命令級(jí)別為 Forced serialization.3)目的該核心函數(shù)提供了一種在仿真過(guò)程中動(dòng)態(tài)設(shè)置對(duì)象屬性的機(jī)制,可用于處理器或隊(duì)列控制 其他模塊。與函數(shù)op_ima_obj_attr_get()結(jié)合,無(wú)需包、ICI或中斷
24、遞送就可提供遠(yuǎn)程進(jìn)程間的 通信。不過(guò)需要注意的是,遠(yuǎn)端對(duì)象值的改變并不會(huì)引起中斷,只是當(dāng)修改后的對(duì)象再次調(diào)用 函數(shù)op_ima_obj_attr_get(威取其屬性時(shí)才會(huì)產(chǎn)生影響。4)錯(cuò)誤Program Abort::分段錯(cuò)誤(由無(wú)效值指針、attr_name地址無(wú)效或值類(lèi)型錯(cuò)誤所引起)。Recoverable Error對(duì)象無(wú)法識(shí)別屬性名。Recoverable Error 對(duì)象 ID 溢出。Recoverable Error對(duì)象屬性為只讀。Recoverable Error 屬性值無(wú)效。Recoverable Error對(duì)象ID指向受限對(duì)象。5)相關(guān)函數(shù)采 用 op_ima_obj_att
25、r_get()、 op_ima_obj_attr_get_db1()、 op_ima_obj_attr_get_int32()和 op_ima_obj_attr_get_str()iS 置對(duì)象屬性值。采 用 op_ima_sim_attr_get()、 op_ima_sim_attr_get_db1()、 op_ima_sim_attr_get_int32()和 op_ima_sim_attr_get_str(潴取仿真屬性值。采用op_ima_obj_svar_get(玳取進(jìn)程狀態(tài)變量值。采用op_ima_obj_command()向?qū)ο蟀l(fā)出一個(gè)命令。采用op_id_self()獲取所屬處理器
26、或隊(duì)列的對(duì)象ID。采用op_id_from_name(威取對(duì)象的對(duì)象ID。3. op_ima_sim_attr_get (attr_type, attr_name, value_ptr)此核心函數(shù)的作用是獲取仿真屬性值,其說(shuō)明如表 2-3所示。表2-3 op_ima_sim_attr_get()函數(shù)的參數(shù)說(shuō)明參數(shù)類(lèi)型描述attr_typeint屬(可以為 OPC_IMA_INTEGER、OPC_IMA_DOUBLE、OPC_IMA_TOGGLE 或 OPC_IMA_STRING )attr_nameconst char*屬性名value_ptrVartype*指定存儲(chǔ)屬性值變量的指針1)返回值
27、Compcode如果成功獲取屬性值,即返回OPC_COMPCODE_SUCCESS,否貝U返回OPC_COMPCODE_FAILURE。2)詳解仿真屬性與子網(wǎng)發(fā)屬性、節(jié)點(diǎn)屬性、模塊屬性以及進(jìn)程屬性均不同,它不在制定模塊規(guī)范 階段定義,而在仿真運(yùn)行期間動(dòng)態(tài)定義。仿真屬性是通過(guò)一些環(huán)境屬性機(jī)制來(lái)進(jìn)行賦值的,包 括仿真命令行、環(huán)境數(shù)據(jù)庫(kù)(/op_admin/env_db)、shell變量或環(huán)境文件。該函數(shù)將觸發(fā)仿真的內(nèi)部環(huán)境數(shù)據(jù)庫(kù)掃描可用值,如果無(wú)法在現(xiàn)有程序環(huán)境中為仿真屬性找到一個(gè)值,那么它將在標(biāo)準(zhǔn)輸出設(shè)備上打印一個(gè)提示(可用仿真的noprompt環(huán)境屬性來(lái)取消 用戶(hù)提示),請(qǐng)求輸入一個(gè)值。一旦提
28、示出現(xiàn),就將打印一個(gè)屬性的默認(rèn)值。注意:默認(rèn)值是調(diào)用核心函數(shù)時(shí)傳遞給參數(shù)的 value_ptr值,而不使用進(jìn)程模型屬性列表 中的默認(rèn)初始值。因此在調(diào)用該函數(shù)時(shí),必須事先定義value_ptr。如果在仿真程序環(huán)境中能夠找到給定屬性,或當(dāng)提升時(shí)值時(shí)被顯示輸入,那么認(rèn)為函數(shù)執(zhí) 行成功并返回值 OPC_COMPCODE_SUCCES&如果內(nèi)核必須要引用 value_ptr的值,則返回 OPC_COMPCODE_FAILURE。3)目的該核心函數(shù)提供了一種獲取在仿真運(yùn)行期間設(shè)置的仿真屬性的機(jī)制。將該函數(shù)與用環(huán)境屬性來(lái)分配仿真屬性結(jié)合起來(lái),不僅可以獲取網(wǎng)絡(luò)范圍內(nèi)的關(guān)鍵參數(shù),還可獲取影響進(jìn)程邏輯操 作的進(jìn)程
29、級(jí)參數(shù)。4)錯(cuò)誤Program Abort:分段錯(cuò)誤(由無(wú)效值指針、指針?biāo)竷?nèi)存不足或指向畸形的attr_name參數(shù)引起)。Program Abort:內(nèi)存分配失敗。Recoverable Error屬性類(lèi)型不可識(shí)別。5)相關(guān)函數(shù)采 用 op_ima_obj_attr_get()、 op_ima_obj_attr_get_db1()、 op_ima_obj_attr_get_int32()和 opJma_obj_attr_get_str()iS 置對(duì)象屬性值。采 用 op_ima_sim_attr_set()、 op_ima_sim_attr_set_db1()、 op_ima_sim_at
30、tr_set_int32()和 op ima sim attr set str(設(shè)置對(duì)象屬性值。采用op_ima_obj_svar_get(玳取進(jìn)程狀態(tài)變量值。采用op_ima_obj_command()向?qū)ο蟀l(fā)出一個(gè)命令。2.2 分布函數(shù)集Dist (Distribution)函數(shù)集是一系列根據(jù)特定概率分布產(chǎn)生隨機(jī)值的核心函數(shù)集合。只要 具有隨機(jī)行為的仿真都可以使用這些隨機(jī)值中的一種或幾種,如計(jì)算中斷的到達(dá)時(shí)間、產(chǎn)生通 信量目的地址或確定節(jié)點(diǎn)是否應(yīng)被去激活等。1. op_dist_load (dist_name, dist_arg0, dist_arg1)此核心函數(shù)的作用是加載分布以產(chǎn)生隨機(jī)
31、值流,其參數(shù)說(shuō)明如表2-4表2-4 op_dist_load()函數(shù)的參數(shù)說(shuō)明參數(shù)類(lèi)型描述dist_nameconst char*被加載的分布名稱(chēng),通常為字符串常量dist_arg0double分布的附加參數(shù)#0dist_arg1double分布的附加參數(shù)#11)返回值Distribution * 指向被加載分布的指針。如果發(fā)生可恢復(fù)錯(cuò)誤,則返回常量OPC_NIL。函數(shù)返回值一般存儲(chǔ)在Distribution *類(lèi)型的狀態(tài)變量中,稍后現(xiàn)傳遞給相關(guān)核心函數(shù)op_dist_outcome()。2)詳解分布是根據(jù)名稱(chēng)來(lái)確定的,可以是預(yù)定義的分析分布、采用PDF編輯器建立的用戶(hù)自定義 PDF模型或EM
32、A-specified PDF模型。執(zhí)行預(yù)定義的分布可以看作是通過(guò)一兩個(gè)數(shù)值參數(shù)調(diào)用 該核心函數(shù)的參數(shù)化算法。另外兩種類(lèi)型的分布是后綴為“.pd.s”的表格式數(shù)據(jù)文件,調(diào)用該函數(shù)時(shí)將其加載到內(nèi)存中。需要注意的是,即使預(yù)定義的分布在models/std/base文件夾中有相應(yīng)的”.pd.s”文件,但這些文件都是零字節(jié)的,不包含任何分布信息,只是讓分布能夠顯示在 OPNET菜單中。當(dāng)加載用戶(hù)自定義的 PDF時(shí),將忽略參數(shù)dist_arg0和dist_agU。此外,該核心函數(shù)的安全級(jí)別為 MT-safe。3)目的該核心函數(shù)提供作為隨機(jī)數(shù)發(fā)生器的概率分布。該函數(shù)主要用于加載分布,以在處理器產(chǎn) 生的包之
33、間提供隨機(jī)時(shí)間問(wèn)隔。任何隨機(jī)分布的仿真參數(shù)都可以通過(guò)該函數(shù)來(lái)獲取。實(shí)際的隨 機(jī)值是通過(guò)調(diào)用函數(shù)op_dist_outcome(旅獲取的。4)錯(cuò)誤Program Abort:分段錯(cuò)誤(由無(wú)效分布名指針引起)。Program Abort:內(nèi)存分配失敗。Recoverable Error分布名不可識(shí)別。5)相關(guān)函數(shù)采用op_dist_outcome(或op_dist_outcome_ext(威取已力口載分布的隨機(jī)值。采用op_dist_uniform()獲取均勻分布的隨機(jī)值。采用op_dist_unload()ff放分布占用的內(nèi)存。2.3 op_dist_outcome (dist_ptr)此核核心
34、函數(shù)的作用是為具有特定分布的隨機(jī)變量產(chǎn)生一個(gè)浮點(diǎn)數(shù),其參數(shù)說(shuō)明如表7-5。表2-5 op_dist_outcome()函數(shù)的參數(shù)說(shuō)明參數(shù)類(lèi)型描述dist_ptrDistribution*指向被加載分布的指針1)返回值double具有特定分布隨機(jī)變量的結(jié)果。如果發(fā)生可恢復(fù)錯(cuò)誤,則返回常量OPC_DBL_INVALID。2)詳解特定分布可以是預(yù)定義的算法分布,也可以是之前通過(guò)函數(shù)op_dist_load()加載的數(shù)字型表 格式分布。該核心函數(shù)執(zhí)行表格式分布的列表查詢(xún),并對(duì)算法分布(如指數(shù)分布)進(jìn)行數(shù)字計(jì) 算。該核心函數(shù)使用的隨機(jī)數(shù)流是調(diào)用 BSD random()過(guò)程產(chǎn)生的,所有分布函數(shù)集中的函數(shù)
35、和 發(fā)生器模塊都可共享此隨機(jī)數(shù)流。隨機(jī)數(shù)流依賴(lài)于初始的種子數(shù)( seed),如果仿真輸入(包括 相同的隨機(jī)see。相同,則仿真結(jié)果可重復(fù)。此外,該核心函數(shù)的安全級(jí)別為 MT-safe。3)目的該核心函數(shù)提供了一種獲取符合某概率分布的隨機(jī)值的機(jī)制。該函數(shù)學(xué)用于計(jì)算處理器產(chǎn)生的包之間的隨機(jī)時(shí)間問(wèn)隔。任何隨機(jī)分布的仿真參數(shù)都可以通過(guò)它來(lái)獲取。4)錯(cuò)誤Program Abort::分段錯(cuò)誤(由無(wú)效分布指針引起)。Recoverable Error 分布指針為 NIL。5)相關(guān)函數(shù)采用op_dist_load()力口載分布。采用op_dist_uniform()獲取均勻分布的隨機(jī)值。采用op_dist_
36、unload()ff放分布占用的內(nèi)存。采用op_dist_outcome_ext(玳取用戶(hù)自定義的隨機(jī)數(shù)發(fā)生器產(chǎn)生的隨機(jī)數(shù)。采用 op_intrpt_schedule_self() op_intrpt_schedule_remote(或 op_intrpt_schedule_call(汾另U 產(chǎn)生自中斷、遠(yuǎn)程中斷和過(guò)程中斷。2.4 op_dist_uniform(limit)2-6所示。此核心函數(shù)的作用是產(chǎn)生一個(gè)均勻分布的隨機(jī)值,其參數(shù)說(shuō)明如表表2-5 op_dist_uniform()函數(shù)的參數(shù)說(shuō)明參數(shù)類(lèi)型描述limitdouble均勻分布的取值范圍1)返回值double產(chǎn)生的均勻分布的隨機(jī)
37、值,范圍在0.0, limit 中。2)詳解該核心函數(shù)使用的隨機(jī)數(shù)流是調(diào)用 BSD random()過(guò)程產(chǎn)生的,所有分布函數(shù)集中的函數(shù)和 發(fā)生器模塊都可共享此隨機(jī)數(shù)流。隨機(jī)數(shù)流依賴(lài)于初始的種子數(shù)( seed),如果仿真輸入(包括 相同的隨機(jī)see。相同,則仿真結(jié)果可重復(fù)。如果參數(shù)limit為負(fù)數(shù),則返回值將是一個(gè)大于limit的均勻分布的負(fù)數(shù)此外,該核心函數(shù)的安全級(jí)別為 MT-safe。3)目的該核心函數(shù)為普通的建模提供了一種獲取均勻分布隨機(jī)數(shù)的機(jī)制,例如可用于數(shù)據(jù)鏈路協(xié)議計(jì)算隨機(jī)超進(jìn)。4)錯(cuò)誤無(wú)錯(cuò)誤捕獲5)相關(guān)函數(shù)采用op_dist_load()加載一個(gè)概率分布。采用op_dist_outc
38、ome()t艮據(jù)已加載的概率分布,獲取一隨機(jī)值。2.5 進(jìn)程函數(shù)集進(jìn)程函數(shù)集是一系列用于在一個(gè)處理器或隊(duì)列模塊中創(chuàng)建和管理多個(gè)進(jìn)程的核心函數(shù)的 集合。進(jìn)程是進(jìn)程模型的一個(gè)實(shí)例,進(jìn)程模型是在OPNET的進(jìn)程編輯器中開(kāi)發(fā)的特定類(lèi)型進(jìn)程的行為和功能規(guī)范。1. op_pro_create (model_name, ptc_mem_ptr)此核心函數(shù)的作用是創(chuàng)建一個(gè)新的進(jìn)程作為特定進(jìn)程模型的實(shí)例,并允許安裝 parent-to-child共享內(nèi)存,作為當(dāng)前進(jìn)程和創(chuàng)建的子進(jìn)程間通信機(jī)制,其參數(shù)說(shuō)明如表2-7所示。表2-7 op_dist_load()函數(shù)的參數(shù)說(shuō)明參數(shù)類(lèi)型描述model_nameconst
39、 char*進(jìn)程模型名稱(chēng)ptc_mem_ptrVartype*當(dāng)前進(jìn)程和被創(chuàng)建進(jìn)程共享的 parent-to-child內(nèi)存塊的地址 (該內(nèi)存塊格式是用戶(hù)自定義的。通常若無(wú)內(nèi)存共享,則傳遞值 OPC_NIL)1)返回值Prohandle進(jìn)一步處理被創(chuàng)建子進(jìn)程的進(jìn)程句柄。2)詳解仿真內(nèi)核支持單個(gè)隊(duì)列或處理器模塊中任意多個(gè)不同類(lèi)型進(jìn)程的并存。除了根進(jìn)程,其他 所有進(jìn)程都通過(guò)該核心函數(shù)創(chuàng)建。只有當(dāng)提供的參數(shù)process_model引用當(dāng)前仿真中已聲明的進(jìn) 程,該核心函數(shù)才會(huì)執(zhí)行成功。在為仿真系統(tǒng)的任一處理器或隊(duì)列模塊的進(jìn)程模型屬性賦值, 或在通過(guò)進(jìn)程編輯器將進(jìn)程聲明為另一進(jìn)程的子進(jìn)程時(shí),均采用進(jìn)程
40、模型的隱式聲明。每個(gè)通過(guò)該核心函數(shù)創(chuàng)建的進(jìn)程都可以利用共享內(nèi)存與創(chuàng)建它的進(jìn)程進(jìn)行通信。共享內(nèi)存是用戶(hù)自定義的內(nèi)存塊,具地址必須作為ptc_mem_ptr參數(shù)傳遞給該函數(shù)。止匕外,該核心函數(shù)的安全級(jí)別為 Forced serialization3)目的該核心函數(shù)提供了一個(gè)進(jìn)程,其可以創(chuàng)建在相同模塊中操作的子進(jìn)程。每個(gè)子進(jìn)程作為一 個(gè)進(jìn)程模型實(shí)例獨(dú)立存在,并維持自身的狀態(tài)。4)錯(cuò)誤Program Abort:核心函數(shù)需要進(jìn)程上下文。Program Abort:無(wú)法創(chuàng)建進(jìn)程。Program Abort:進(jìn)程的描述符分配失敗。Program Abort:初始化進(jìn)程失敗。Recoverable Erro
41、r進(jìn)程模型未被聲明。5)相關(guān)函數(shù)采用op_pro_invoke()調(diào)用進(jìn)程模型。子進(jìn)程采用 op_pro_parmem_access獄取 parent_to_child 共享內(nèi)存。采用op_pro_id()確定進(jìn)程的惟一整數(shù)標(biāo)識(shí)符。2. op_pro_destroy_options(pro_handle, options)銷(xiāo)毀動(dòng)態(tài)創(chuàng)建的進(jìn)程和該進(jìn)程的所有預(yù)設(shè)事件,其參數(shù)說(shuō)明如表2-8所示。表 2-8 op_pro_destroy_options (而數(shù)的參數(shù)說(shuō)明參數(shù)類(lèi)型描述pro_handleProhandle被銷(xiāo)毀進(jìn)程的進(jìn)程句柄optionsint被執(zhí)行的可選操作1)返回值Compcode表
42、示仿真內(nèi)核是否成功銷(xiāo)毀進(jìn)程的完成代碼,包括OPC_COMPCODE_SUCCESS和 OPC_COMPCODE_FAILURE。2)詳解該函數(shù)允許進(jìn)程銷(xiāo)毀同一模塊中的任意其他動(dòng)態(tài)進(jìn)程,因此跟進(jìn)程是惟一給定模塊中不能被銷(xiāo)毀的進(jìn)程。止匕外,該函數(shù)還可移除被銷(xiāo)毀進(jìn)程的所有預(yù)設(shè)事件。其中,動(dòng)態(tài)進(jìn)程是通過(guò)核 心函數(shù)op_pro_create(月1J建的,在仿真中可隨時(shí)從模型中移除動(dòng)態(tài)進(jìn)程。適當(dāng)終止進(jìn)程可釋放分配給進(jìn)程的動(dòng)態(tài)內(nèi)存,但這也可能給建模帶來(lái)一定影響。進(jìn)程模型 在銷(xiāo)毀時(shí)會(huì)有一個(gè)特殊的邏輯片斷,該片斷是進(jìn)程模型的終止塊和銷(xiāo)毀進(jìn)程時(shí)仿真內(nèi)核直接調(diào) 用的包含其中的代碼。代碼片斷中可能用到狀態(tài)和臨時(shí)變量。
43、進(jìn)程可以銷(xiāo)毀自身,這時(shí)不返回任何值,除了終止塊中的特定操作外,不執(zhí)行任何操作。注意:內(nèi)核對(duì)釋放parent-to-child或參數(shù)內(nèi)存不負(fù)任何責(zé)任。該核心函數(shù)可使用的option有:OPC_PRO_DESTROY_OPT_KEEP_EVENTS核心函數(shù)移除被銷(xiāo)毀進(jìn)程的任意預(yù) 設(shè)事件。OPC_PRO_DESTROY_OPT_NONE默認(rèn)操作。止匕外,該核心函數(shù)的安全級(jí)別為 Forced serialization.3)目的該核心函數(shù)提供了一個(gè)進(jìn)程,其可以創(chuàng)建在相同模塊中操作的子進(jìn)程。每個(gè)子進(jìn)程作為一 個(gè)進(jìn)程模型實(shí)例獨(dú)立存在,并維持自身的狀態(tài)。4)錯(cuò)誤Program Abort:核心函數(shù)需要進(jìn)程上
44、下文。Program Abort:分段錯(cuò)誤(由畸形進(jìn)程句柄導(dǎo)致)。Recoverable Error進(jìn)程句柄無(wú)效。Recoverable Error進(jìn)程句柄指向被銷(xiāo)毀進(jìn)程。Recoverable Error進(jìn)程句柄指向遠(yuǎn)程進(jìn)程。Recoverable Error進(jìn)程句柄指向根進(jìn)程。Recoverable Error進(jìn)程句柄指向活動(dòng)進(jìn)程。5)相關(guān)函數(shù)采用op_pro_create(創(chuàng)建新的進(jìn)程并獲取其句柄。采用 op_prg_mem_free()隼放通過(guò)函數(shù) op_prg_mem_a110c(歷配的內(nèi)存。采用op_pro_invoke()調(diào)用進(jìn)程模型。采用op_pro_parmem_access
45、例于子進(jìn)程獲取 parent_to_child共享內(nèi)存。3. op_pro_self()此核心函數(shù)的作用是獲取當(dāng)前正在執(zhí)行的進(jìn)程的進(jìn)行句柄。1)返回值Prohandle-當(dāng)前正在執(zhí)行的進(jìn)程的進(jìn)程句柄。在執(zhí)行與該進(jìn)程相關(guān)的操作,調(diào)用其他核 心函數(shù)時(shí)可使用此句柄。2)詳解當(dāng)前執(zhí)行的進(jìn)程通常需要使用其自身的句柄作為進(jìn)程和中斷函數(shù)集中其他核心函數(shù)的參 數(shù)。例如,該句柄可作為指針來(lái)獲取父進(jìn)程的句柄。其他典型應(yīng)用包括獲取進(jìn)程的惟一ID,銷(xiāo)毀無(wú)用的進(jìn)程本身。止匕外,該核心函數(shù)的安全級(jí)別為Forced serialization3)目的該核心函數(shù)為調(diào)用該核心函數(shù)的進(jìn)程提供了一個(gè)進(jìn)程句柄,作為進(jìn)程和中斷函數(shù)集中
46、其他核心函數(shù)的參數(shù)。4)錯(cuò)誤Program Abort:核心函數(shù)需要進(jìn)程上下文。5)相關(guān)函數(shù)采用op_pro_id()獲取進(jìn)程的惟一整數(shù)ID。采用op_prg_mem_free(加肖毀進(jìn)程。采用op_intrpt_port_register ()為特定流或統(tǒng)計(jì)中斷注冊(cè)一個(gè)進(jìn)程。采用op_intrpt_type_register()為特定類(lèi)型中斷注冊(cè)一個(gè)進(jìn)程。4. op_pro_invoke (pro_handle, argmem_ptr)該核心函數(shù)的作用是在當(dāng)前事件和當(dāng)前模塊的止下文中調(diào)用進(jìn)程。被調(diào)用進(jìn)程將被暫停直到函數(shù)返回,其參數(shù)說(shuō)明如表 2-9所示。表2-9 op_pro_invoke()
47、函數(shù)的參數(shù)說(shuō)明參數(shù)類(lèi)型描述pro_handleProhandle被調(diào)用進(jìn)程的進(jìn)程句柄argmem_ptrVartype*通過(guò)函數(shù)op_pro_argmem_access()j被調(diào)用進(jìn)程提供的參數(shù) 內(nèi)存塊的地址1)返回值Compcode-表示調(diào)用是否成功的完成代碼,返回代碼包括OPC_COMPCODE_SUCCESS和OPC_COMPCODE_FAILURE。進(jìn)程句柄過(guò)期或調(diào)用其他模塊的進(jìn)程都將引起調(diào)用失敗。2)詳解進(jìn)程可調(diào)用同一模塊中的其他進(jìn)程。 如果使用其他模塊進(jìn)程的進(jìn)程句柄來(lái)調(diào)用該函數(shù)將引 起可恢復(fù)錯(cuò)誤。在同一事件中,對(duì)函數(shù)op_pro_invoke()的調(diào)用次數(shù)并沒(méi)有任何限制。換句話(huà)說(shuō),
48、調(diào)用函數(shù) op_pro_invoke()所導(dǎo)致中斷的進(jìn)程,可接著利用該函數(shù)調(diào)用其他進(jìn)程。這種一連串的進(jìn)程調(diào)用 稱(chēng)為當(dāng)前調(diào)用棧,就像 C 語(yǔ)言中的函數(shù)調(diào)用棧一樣。仿真內(nèi)核限制進(jìn)程在當(dāng)前調(diào)用棧中調(diào)用其 他進(jìn)程。當(dāng)進(jìn)行進(jìn)程調(diào)用時(shí),調(diào)用進(jìn)程可建立一個(gè)內(nèi)存塊,供它和被調(diào)用進(jìn)程共享。由于該內(nèi)存可傳遞被調(diào)用進(jìn)程的輸入和輸出參數(shù),因而作為參數(shù)內(nèi)存。若調(diào)用進(jìn)程需要通過(guò)函數(shù)op_pro_argmem_access便獲取內(nèi)存塊地址,則地址必須作為參數(shù)傳遞給op_pro_invoke();若無(wú)此需要,則應(yīng)傳遞常量OPC_NIL 。此外,該核心函數(shù)的安全級(jí)別為 Forced serialization。3)目的多個(gè)進(jìn)程
49、可共同處理單一隊(duì)列或處理器模塊上下文中發(fā)生的事件。 通常對(duì)進(jìn)程進(jìn)行分層組織,父進(jìn)程根據(jù)不同事件的要求將事件處理任務(wù)交給合適的子進(jìn)程。另外一種進(jìn)程組織方式就是根據(jù)功能行來(lái)劃分任務(wù),如可根據(jù)進(jìn)程收到的中斷類(lèi)型調(diào)用不同的子進(jìn)程。大多數(shù)組織化機(jī)制都有一個(gè)共通處,即都需要在模塊中臨時(shí)傳遞對(duì)子進(jìn)程或?qū)Φ冗M(jìn)程的執(zhí)行控制權(quán)。這就需要通過(guò)函數(shù)op_pro_invoke()來(lái)完成,并提供需執(zhí)行的進(jìn)程句柄。4)錯(cuò)誤Program Abort:核心函數(shù)需要進(jìn)程上下文。Program Abort: 分段錯(cuò)誤(由畸形進(jìn)程句柄導(dǎo)致) 。Recoverable Error進(jìn)程句柄無(wú)效。Recoverable Error進(jìn)程句
50、柄指向被銷(xiāo)毀進(jìn)程。Recoverable Error進(jìn)程句柄指向遠(yuǎn)程進(jìn)程。Recoverable Error進(jìn)程句柄指向活動(dòng)進(jìn)程。5)相關(guān)函數(shù)采用op_pro_argmem_access獄取調(diào)用參數(shù)內(nèi)存的訪問(wèn)權(quán)。采用op_pro_parent(玳取父進(jìn)程的進(jìn)程句柄。采用op_pro_create(創(chuàng)建新的進(jìn)程并獲取其句柄。5. op_pro_argmem_access ()此函數(shù)的作用是獲取進(jìn)程調(diào)用所傳遞的參數(shù)內(nèi)存的地址。1)返回值Vartype*調(diào)用進(jìn)程提供的用戶(hù)自定義內(nèi)存塊的地址。若仿真內(nèi)核直接調(diào)用進(jìn)程或調(diào)用 進(jìn)程不愿?jìng)鬟f任何參數(shù)內(nèi)存,則返回符號(hào)常量OPC_NIL 。參數(shù)硅存是一個(gè)用戶(hù)自定
51、義的內(nèi)存塊,具地址由進(jìn)程調(diào)用其他進(jìn)程時(shí)傳遞。內(nèi)存的格式和 內(nèi)容都是用戶(hù)自定義的,只有其地址由仿真內(nèi)核管理。仿真內(nèi)核保證只有通過(guò)函數(shù)傳遞的內(nèi)存 地址阻塞時(shí),才能被調(diào)用進(jìn)程訪問(wèn),并將控制權(quán)返回給調(diào)用進(jìn)程。地于直接由仿真內(nèi)核調(diào)用的進(jìn)程,該核心函數(shù)將返回一個(gè)空地址OPC_NIL。直接由內(nèi)核調(diào)用的進(jìn)程和通過(guò)函數(shù) op_pro_invoke()調(diào)用的進(jìn)程應(yīng)在使用該指針訪問(wèn)參數(shù)值之前檢查返回的 地址是否為OPC_NIL,否則將發(fā)生分段錯(cuò)誤。調(diào)用函數(shù)op_pro_invoke()可使用參數(shù)內(nèi)存機(jī)制,這時(shí)被調(diào)用進(jìn)程并不需要接收傳入的值或 進(jìn)調(diào)用進(jìn)程返回任何數(shù)據(jù)。在這種情況下,通常在需要參數(shù)內(nèi)存的情況下,調(diào)用函數(shù)
52、 op_pro_invoke()應(yīng)傳遞符號(hào)常量 OPC_NIL。止匕外,該核心函數(shù)的安全級(jí)別為 Forced serialization3)目的該核心函數(shù)提供了一種在調(diào)用進(jìn)程和被調(diào)用進(jìn)程間共享內(nèi)存的機(jī)制。內(nèi)存可在調(diào)用前建 立,以包含輸入?yún)?shù)值。被調(diào)用進(jìn)程可以檢查檢查該參數(shù)值,并利用它來(lái)處理事件。同樣被調(diào) 用進(jìn)程可修改內(nèi)存,以向調(diào)用進(jìn)程返回輸出參數(shù),而調(diào)用進(jìn)程可在函數(shù)op_pro_invoke()返回之后檢查內(nèi)存的內(nèi)容。該核心函數(shù)提供了一種在調(diào)用進(jìn)程和被調(diào)用進(jìn)程間共享內(nèi)存的機(jī)制。內(nèi)存可在調(diào)用前建立,以包含輸入?yún)?shù)值。被調(diào)用進(jìn)程可以檢查該參數(shù)值,并利用它。4)錯(cuò)誤Program Abort:核心函
53、數(shù)需要進(jìn)程上下文。5)相關(guān)函數(shù)采用op_pro_invoke()調(diào)用進(jìn)程模型。采用op_pro_modmem_access但同一模塊中的其他進(jìn)程共享信息。采用op_pro_parmem_access帝進(jìn)程及其父進(jìn)程共享信息。2.6 事件函數(shù)集op_ev_cancel(evhandle)函數(shù)的作用是撤銷(xiāo)預(yù)設(shè)的事件,其參數(shù)說(shuō)明如表2-10所示。表2-10 op_ev_cancel()函數(shù)的參數(shù)說(shuō)明參數(shù)類(lèi)型描述evhandleEvhandle被取消事件的事件句柄。事件句柄可以通過(guò)本函數(shù)集中的op_ev_seek_time( op_ev_next()、op_intrpt_schedule_self(痔
54、函數(shù)獲取1)返回值Compcode-表示操作是否成功的完成代碼,包括符號(hào)常量OPC_COMPCODE_SUCCESS 和 OPC_COMPCODE_FAILURE 。2)詳解取消事件就是將其從仿真事件列表中移除,并阻止其向目的模塊發(fā)送。該函數(shù)只能用于取消未決的事件,取消已經(jīng)發(fā)送或正在執(zhí)行的事件將導(dǎo)致錯(cuò)誤發(fā)生。因?yàn)榉抡鎯?nèi)核將事件信息緩存到了相應(yīng)的事件句柄中, 這樣無(wú)需查找就可很快對(duì)事件進(jìn)行定位,所以利用該函數(shù)取消事件時(shí)不必考慮效率問(wèn)題。在事件發(fā)送之前使用該函數(shù)將其取消將比事件發(fā)送到目的地后再將其取消更加高效。此外,該核心函數(shù)的安全級(jí)別為Forced serialization。3)目的該核心函數(shù)
55、提供了一種撤銷(xiāo)無(wú)用事件的機(jī)制。該函數(shù)常用于取消 op_intrpt_schedule_self() 函數(shù)預(yù)設(shè)的超時(shí)中斷事件。如果在超時(shí)前收到 ack 包或有其他中斷發(fā)生,則該函數(shù)將取消超時(shí) 事件,并重置定時(shí)器。4)錯(cuò)誤Program Abort: 分段錯(cuò)誤(由畸形進(jìn)程句柄導(dǎo)致) 。Recoverable Error事件句柄指向無(wú)效或當(dāng)前還未預(yù)設(shè)的事件。Recoverable Error無(wú)法取消當(dāng)前事件。Recoverable Error無(wú)法取消正在進(jìn)行的事件。Recoverable Error無(wú)法取消未定位事件。5)相關(guān)函數(shù)采用op_ev_pending()!t定事件是否可取消。采用opjntrpt_schedule_self()i殳置進(jìn)程的自中斷。采用op_intrpt_clear_self()撤銷(xiāo)進(jìn)程的未決中斷。2.7 仿真函數(shù)集1. op_sim_time()此函數(shù)的作用是獲取當(dāng)前仿真時(shí)間。1)返回值double當(dāng)前仿真時(shí)間。該雙精度浮點(diǎn)數(shù)以秒為單位表示了當(dāng)前的仿真時(shí)間,從仿真中 斷(即op_sim_time()返回零值)時(shí)刻開(kāi)始計(jì)時(shí)。2)詳解仿真時(shí)間是一個(gè)雙精度浮點(diǎn)數(shù),表示與當(dāng)前仿真事件相關(guān)的時(shí)間值。在
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)鉛鋅行業(yè)十三五投資分析及發(fā)展風(fēng)險(xiǎn)評(píng)估報(bào)告
- 2025-2030年中國(guó)針織面料市場(chǎng)運(yùn)營(yíng)狀況與發(fā)展?jié)摿Ψ治鰣?bào)告
- 2025-2030年中國(guó)酵母核糖核酸市場(chǎng)運(yùn)行趨勢(shì)及投資戰(zhàn)略研究報(bào)告
- 2025-2030年中國(guó)速溶固體飲料市場(chǎng)發(fā)展趨勢(shì)及前景調(diào)研分析報(bào)告
- 2025-2030年中國(guó)豆腐市場(chǎng)運(yùn)行狀況及發(fā)展趨勢(shì)分析報(bào)告
- 2025-2030年中國(guó)血液透析機(jī)市場(chǎng)運(yùn)營(yíng)現(xiàn)狀及發(fā)展前景規(guī)劃分析報(bào)告
- 2025-2030年中國(guó)脫咖啡因綠茶市場(chǎng)發(fā)展策略規(guī)劃分析報(bào)告
- 2025-2030年中國(guó)美白護(hù)膚市場(chǎng)運(yùn)行狀況及投資戰(zhàn)略研究報(bào)告
- 2025年上海市建筑安全員-A證考試題庫(kù)及答案
- 2025-2030年中國(guó)米酒市場(chǎng)運(yùn)行動(dòng)態(tài)及投資戰(zhàn)略研究報(bào)告
- 2025年中華工商時(shí)報(bào)社事業(yè)單位招聘12人歷年高頻重點(diǎn)模擬試卷提升(共500題附帶答案詳解)
- 安全生產(chǎn)事故調(diào)查與案例分析(第3版)課件 呂淑然 第1-4章 緒論-應(yīng)急預(yù)案編制與應(yīng)急管理
- 中小學(xué)課件人造衛(wèi)星課件
- 新版冀教版(冀人版)科學(xué)五年級(jí)下冊(cè)全冊(cè)教案
- 鋼樓梯計(jì)算(自動(dòng)版)
- 社區(qū)醫(yī)院建設(shè)標(biāo)準(zhǔn)
- 個(gè)人所得稅稅率表【自動(dòng)提取稅率計(jì)算】
- 浙美版小學(xué)美術(shù)五年級(jí)下冊(cè)課件1畫(huà)家故居
- 中國(guó)作家協(xié)會(huì)入會(huì)申請(qǐng)表
- 熒光綠送貨單樣本excel模板
- 水土保持治理效益計(jì)算
評(píng)論
0/150
提交評(píng)論