![OPNET_Modeler-core-function_第1頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/270c7745-37ce-4b13-a441-2df11e34e6cb/270c7745-37ce-4b13-a441-2df11e34e6cb1.gif)
![OPNET_Modeler-core-function_第2頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/270c7745-37ce-4b13-a441-2df11e34e6cb/270c7745-37ce-4b13-a441-2df11e34e6cb2.gif)
![OPNET_Modeler-core-function_第3頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/270c7745-37ce-4b13-a441-2df11e34e6cb/270c7745-37ce-4b13-a441-2df11e34e6cb3.gif)
![OPNET_Modeler-core-function_第4頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/270c7745-37ce-4b13-a441-2df11e34e6cb/270c7745-37ce-4b13-a441-2df11e34e6cb4.gif)
![OPNET_Modeler-core-function_第5頁(yè)](http://file3.renrendoc.com/fileroot_temp3/2022-1/18/270c7745-37ce-4b13-a441-2df11e34e6cb/270c7745-37ce-4b13-a441-2df11e34e6cb5.gif)
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、OPNET Modeler核心函數(shù)42目錄1. 核心函數(shù)簡(jiǎn)介31.1 命名規(guī)則31.2 參數(shù)類型31.2.1 Animation Entity41.2.2 Boolean41.2.3 Compcode41.2.4.Distribution41.2.5 Event Handle41.2.6 Statistic Handle41.2.7 ICI41.2.8 List51.2.9 Object ID51.2.10 Packet51.2.11 Memory Object Type51.2.12 Log Handle51.2.13 Procedure51.2.14 Process Handle51.2.
2、15 Sar Buffer Handle51.2.16 Vartype61.3 多線程安全72. 基本核心函數(shù)72.1 內(nèi)部模型訪問(wèn)函數(shù)集72.2 分布函數(shù)集102.3 進(jìn)程函數(shù)集122.4 事件函數(shù)集152.5 仿真函數(shù)集162.6 鑒定函數(shù)集172.7 拓?fù)浜瘮?shù)集182.8 接口控制信息函數(shù)集232.9 中斷函數(shù)集262.10 包函數(shù)集312.11 子隊(duì)列函數(shù)集382.12 統(tǒng)計(jì)量函數(shù)集401. 核心函數(shù)簡(jiǎn)介1.1 命名規(guī)則OPNET中的核心函數(shù)具有非常標(biāo)準(zhǔn)的命名規(guī)則,以增強(qiáng)函數(shù)在C/C+代碼中的可視性,避免名稱與非OPNET函或變量沖突。以下列出了一些簡(jiǎn)單的命名規(guī)則:名稱均采用op_作為
3、前綴,以標(biāo)識(shí)其為OPNET仿真內(nèi)核提供的核心函數(shù)。函數(shù)名的第二部分為函數(shù)集名,用小寫(xiě)字母表示,通常是函數(shù)所處理對(duì)象的名稱縮寫(xiě),如pk、ici、stat等。函數(shù)名的第三部分是子函數(shù)集名,對(duì)核心函數(shù)進(jìn)一步進(jìn)行了分類,如核心函數(shù)op_pk_nfd_set()中的nfd。核心函數(shù)主要用于對(duì)對(duì)象的操作。在函數(shù)名中,對(duì)象總是出現(xiàn)在動(dòng)作之前,比如名稱中的attr_set和subq_flush就將對(duì)象(attribute和subqueue)放在動(dòng)作(set和flush)之前。1.2 參數(shù)類型大部分核心函數(shù)的參數(shù)和返回值都是標(biāo)準(zhǔn)的C/C+數(shù)據(jù)類型,如int、double、char*。除此之外,在仿真數(shù)據(jù)結(jié)構(gòu)中還
4、通過(guò)C/C+的typedef語(yǔ)句定義了許多參數(shù)和返回值作為特殊的OPNET數(shù)據(jù)類型。盡管用戶通過(guò)核心函數(shù)來(lái)操作OPNET數(shù)據(jù)類型,可能對(duì)每個(gè)數(shù)據(jù)類型的基本內(nèi)容都越來(lái)越熟悉,但用戶并不需要關(guān)心數(shù)據(jù)類型確切的內(nèi)部結(jié)構(gòu),因?yàn)镺PNET仿真數(shù)據(jù)結(jié)構(gòu)的內(nèi)容因軟件版本的不同而有所改變。表1-1列舉了部分特殊的數(shù)據(jù)類型。表1-1 OPNET中部分特殊數(shù)據(jù)類型基本數(shù)據(jù)類型聲明示例Anvid (viewer ID)Anvid vid;Anmid (macro ID)Anmid mid;Andid (drawing ID)Andid did;BooleanBoolean bool;CompcodeCompcode
5、 comp_status;DistributionDistribution* dist_ptr;EvhandleEvhandle evh;StathandleStathandle Stat_handle;IciIci* ici_ptr;ListList* list_ptr;ObjidObjid objid;PacketPacket* pkptr;PmohandlePmohandle pmh;Log_HandleLog_Handle config_log_hndl;ProcedureProcedure proc;ProhandleProhandle proh;SbhandleSbhandle s
6、bh;1.2.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)準(zhǔn)確標(biāo)記ID參數(shù)和變量。三種基于ID號(hào)的動(dòng)畫(huà)實(shí)體包括瀏覽器(Viewer)、宏(Macro)和圖畫(huà)(Drawing)。1.2.2 Boolean核心函數(shù)通過(guò)返回布爾值來(lái)表示結(jié)果是否正確。布爾值可與符號(hào)常量OPC_TRUE和OPC_FALSE進(jìn)行比較。1.2.3 Compcode核心函數(shù)通過(guò)返回Compcode值來(lái)表
7、示操作是否正確完成。Compcode的值可與符號(hào)常量OPC_COMPCODE_SUCCESS和OPC_COMPCODE_FAILURE進(jìn)行比較。1.2.4.DistributionDistribution是一種與概率密度函數(shù)(PDF)一致的數(shù)據(jù)結(jié)構(gòu),它描述了隨機(jī)數(shù)到特定數(shù)字輸出的映射。Distribution包含一張對(duì)映射進(jìn)行編碼的數(shù)字表,指出完成該映射的算法。對(duì)于基于表格的Distribution,數(shù)據(jù)從PDF編輯器的PDF模型文件中讀入。這些結(jié)構(gòu)均由Dist函數(shù)集中核心函數(shù)操作。1.2.5 Event Handle事件句柄是惟一一種確定未決仿真事件(中斷)的數(shù)據(jù)結(jié)構(gòu)。該結(jié)構(gòu)主要在Intrp
8、t核心函數(shù)集中使用,因此可通過(guò)它們處理預(yù)設(shè)的中斷。注意,事件句柄是一種數(shù)據(jù)結(jié)構(gòu),而不是整型或指針。因此不能把它存儲(chǔ)在整型或指針變量中。1.2.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ù)類型為Stathandle,獲得統(tǒng)計(jì)量句柄的惟一方法是通過(guò)核心函數(shù)的Stat函數(shù)集來(lái)注冊(cè)統(tǒng)計(jì)量。注冊(cè)統(tǒng)計(jì)量時(shí)將為其指定一個(gè)惟一的名稱,并和時(shí)間一起存儲(chǔ)在一個(gè)輸出矢量中。局部統(tǒng)計(jì)量用在特定處理器或隊(duì)列中;全局統(tǒng)計(jì)量由仿真模型中的實(shí)體共享,每個(gè)實(shí)體分布式地作用于輸出矢量。1.2.7 ICIICI(Interface Control Informati
9、on,接口控制信息)是與仿真中斷相關(guān)的結(jié)構(gòu)化數(shù)據(jù)的集合用于進(jìn)程間通信機(jī)制,傳輸分層協(xié)議接口的控制信息。ICI由ici函數(shù)集中的核心函數(shù)操作。1.2.8 ListList是存儲(chǔ)在雙向鏈表中的數(shù)據(jù)元素的集合。List中的元素可按照從簡(jiǎn)單的C/C+數(shù)據(jù)類型在復(fù)雜的數(shù)據(jù)結(jié)構(gòu)進(jìn)行排列。List主要用于臨時(shí)存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)組,可包含各種不同類型的元素,但通常并不這樣使用。對(duì)List的大小沒(méi)有限制,可在其任意位置插入或移除元素。List由Prg函數(shù)集的List子函數(shù)集操作。1.2.9 Object ID對(duì)像ID惟一地確定了一個(gè)仿真對(duì)象。通過(guò)使用Objid數(shù)據(jù)類型聲明該標(biāo)識(shí)符,供Id、Ima、Topo和Pk函數(shù)集
10、使用。1.2.10 PacketPacket是數(shù)據(jù)封裝和傳輸建模中的基本仿真實(shí)體。它由Pk函數(shù)集中的核心函數(shù)操作。1.2.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)存分配器的效率。每個(gè)匯聚池中的內(nèi)存對(duì)象必須通過(guò)調(diào)用核心函數(shù)op_prg_pmo_define()來(lái)創(chuàng)建,該函數(shù)將返回一個(gè)匯聚內(nèi)存對(duì)象句柄來(lái)標(biāo)識(shí)池,用Pmohandle表示。創(chuàng)建匯聚內(nèi)存對(duì)象時(shí)都為其分配了一個(gè)惟一的名稱,仿真模型中的實(shí)體可以共享匯聚內(nèi)存對(duì)象。1.2.12 Log Handle當(dāng)在仿真調(diào)試或數(shù)據(jù)分析
11、中創(chuàng)建仿真日志時(shí),日志句柄對(duì)于每個(gè)日志項(xiàng)非常必要。 1.2.13 Procedure某些核心函數(shù)將C/C+函數(shù)指針作為參數(shù),但并不聲明這些參數(shù)作為指向返回整型值的函數(shù)的指針,而是定義了一種特殊的數(shù)據(jù)類型Procedure。1.2.14 Process Handle進(jìn)程句柄是惟一一種標(biāo)識(shí)仿真中活動(dòng)進(jìn)程的數(shù)據(jù)結(jié)構(gòu),由Pro函數(shù)集中的核心函數(shù)使用。需注意進(jìn)程句柄是數(shù)據(jù)結(jié)構(gòu),而不是整形或指針,因而不能將它們存儲(chǔ)在整型或指針變量中。1.2.15 Sar Buffer HandleSar緩沖句柄是惟一一種標(biāo)識(shí)Sar(Segmentation & Reassembly,分段與重組)緩沖區(qū)的數(shù)據(jù)結(jié)構(gòu)。
12、Sar緩沖區(qū)緩存包序列,并可對(duì)包進(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緩沖句柄分配到整型或指針變量中。1.2.16 Vartype除標(biāo)準(zhǔn)的C/C+數(shù)據(jù)類型和特殊的仿真內(nèi)核數(shù)據(jù)類型外,OPNET還提供了另外一種數(shù)據(jù)類型Vartype。Vartype數(shù)據(jù)類型可用在變量聲明或類型轉(zhuǎn)換語(yǔ)句中,它是OPNET文檔中的特殊關(guān)鍵詞,表示函數(shù)參數(shù)可以是多種可能的數(shù)據(jù)類型之一。類型參數(shù)的傳遞由C描述的調(diào)用函數(shù)確定,Vartype用于確定哪個(gè)函數(shù)參數(shù)
13、可用來(lái)傳遞多種數(shù)據(jù)類型。但需要注意的是,Vartype并不像C中的varargs那樣可傳遞多種參數(shù),每個(gè)Vartype參數(shù)一次只能接受一個(gè)傳遞值。Vartype類型的參數(shù),可接受int、double或指向數(shù)據(jù)結(jié)構(gòu)的指針。Vartype*是Vartype的一種變體,它可接受指向變量類型的指針。Vartype*類型的參數(shù)可接受的值包括:指向整型的指針、指向double的指針、指向數(shù)據(jù)結(jié)構(gòu)的指針,或參數(shù)用于返回filled-in值時(shí)指向數(shù)據(jù)結(jié)構(gòu)指針的指針。每個(gè)核心函數(shù)中都描述了可被Vartype或Vartype*參數(shù)接受的類型值。具有該類型參數(shù)的部分核心函數(shù)如表1-2所示。表1-2 帶Vartype
14、參數(shù)的核心函數(shù)核心函數(shù)變量類型參數(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()Vartypeop_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()Vart
15、ype*op_prg_mem_free()Vartype*返回變量類型參數(shù)的部分核心函數(shù)如表1-3所示。表1-3 返回變量類型參數(shù)的核心函數(shù)核心函數(shù)變量類型參數(shù)op_prg_list_access()Vartype*op_prg_list_remove()Vartype*op_prg_mem_alloc()Vartype*表1-4 易沖突的函數(shù)名accept()index()send()access()kill()signal()audit()link()socket()bind()listen()stat()clear()open()tell()clock()pipe()truncate()
16、close()poll()unlink()connect()read()wait()exit()select()1.3 多線程安全無(wú)線模塊允許OPNET采用多處理器進(jìn)行收/發(fā)信機(jī)管道計(jì)算。為確保并行傳輸?shù)恼_性和盡可能快速,五個(gè)管道階段必須采用多線程安全核心函數(shù)。核心函數(shù)定義了三個(gè)多線程安全級(jí)別,分別是MT-safe、MT-unsafe和Forced serialization。(1)MT-safe:該類核心函數(shù)已手動(dòng)進(jìn)行重編碼以支持多線程。多個(gè)線程可安全地并行執(zhí)行該類核心函數(shù)。(2)MT-unsafe:在該安全級(jí)別下,若在核心函數(shù)中采用并行處理,將導(dǎo)致性能的下降,達(dá)不到預(yù)期的結(jié)果。使用MT-
17、unsafe核心函數(shù)時(shí),應(yīng)當(dāng)執(zhí)行適當(dāng)?shù)拇a序列化(Serialization)。(3)Forced serialization:對(duì)于所有已手動(dòng)重編碼以支持多線程的核心函數(shù),仿真內(nèi)核采用內(nèi)部互斥來(lái)執(zhí)行嚴(yán)格的序列化。最終每個(gè)核心函數(shù)將進(jìn)行手動(dòng)重編碼來(lái)支持多線程,它們的狀態(tài)也將由Forced serialization變?yōu)镸T-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))
18、函數(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ì)象的某屬性值,其參數(shù)說(shuō)明如表2-1所示。表2-1 op_ima_obj_attr_get()函數(shù)的參數(shù)說(shuō)明參 數(shù)類 型描 述objidObjid給定對(duì)象的對(duì)象IDattr_nameconst char*屬性名(必須是給定對(duì)象中已定義的,否則將出錯(cuò))value_ptrVartype*指向存儲(chǔ)屬性值變量的指針(Vartype*
19、可接受字符串或指向整型 、double以及復(fù)合屬性對(duì)象ID指針。當(dāng)為字符串時(shí),字符數(shù)組必須足夠大,以容納屬性值。參數(shù)指針類型必須與給定屬性的數(shù)據(jù)類型相匹配,否則將出錯(cuò)。如果屬性類型是toggle,返回值即為OPC_BOOLINT_ENABLED或OPC_BOOLINT_DISABLED;如果屬性類型是pofile,返回值即為包含訪問(wèn)profile所需的必要信息的pofile specification(PrgT_Profile_Spec) 1)返回值Compcode如果成功獲取屬性值,即返回OPC_COMPCODE_SUCCESS,否則返回OPC_COMPCODE_FAILURE。如果需要獲取
20、給定對(duì)象的復(fù)合屬性值,則若復(fù)合屬性相等,value_ptr的值即設(shè)為復(fù)合屬性中的一個(gè)對(duì)象ID,并返回OPC_COMPCODE_SUCCESS;若不相等,則返回OPC_COMPCODE_FAILURE。注意:在復(fù)合屬性中,所謂的“相等”,是指復(fù)合屬性中的所有屬性都具有相同的名稱、類型和值,并且復(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)在包含該
21、進(jìn)程的模塊名稱之前。并不是所有的對(duì)象屬性都可仿真中調(diào)用該函數(shù)來(lái)獲取。比如Simulation/Access字段被標(biāo)記為N/A的屬性就不能通過(guò)調(diào)用op_ima_obj_attr_get()來(lái)獲取。此外,該核心函數(shù)的命令級(jí)別為Forced serialization。3)目的該函數(shù)提供了一種在仿真中動(dòng)態(tài)獲取對(duì)象屬性的機(jī)制。它可用于處理器或隊(duì)列確定自身或網(wǎng)絡(luò)中其它對(duì)象的屬性值。將該函數(shù)與op_ima_obj_attr_set()結(jié)合,無(wú)需包、ICI或中斷遞送就可提供遠(yuǎn)程進(jìn)程間的通信。4)錯(cuò)誤Program Abort:分段錯(cuò)誤(由無(wú)效值指針、指針?biāo)竷?nèi)存不足或指向無(wú)效的attr_name地址所引起)
22、。Recoverable Error:對(duì)象無(wú)法識(shí)別屬性名。Recoverable Error:對(duì)象ID溢出。Recoverable Error:對(duì)象ID指向受限對(duì)象(由受護(hù)模型中的相關(guān)對(duì)象引起)。5)相關(guān)函數(shù)采用op_ima_obj_attr_set()、op_ima_obj_attr_set_db1()、op_ima_obj_attr_set_int32()和op_ima_obj_attr_set_str()設(shè)置對(duì)象屬性值。采用op_ima_sim_attr_get()、op_ima_sim_attr_get_db1()、op_ima_sim_attr_get_int32()和op_ima_
23、sim_attr_get_str()獲取仿真屬性值。采用op_ima_obj_svar_get()獲取進(jìn)程狀態(tài)變量值。采用op_ima_obj_command()向?qū)ο蟀l(fā)出一個(gè)命令。采用op_id_self()獲取所屬處理器或隊(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ù)類 型描 述objidObjid給定對(duì)象的對(duì)象IDattr_
24、nameconst char*屬性名value_ptrVartype*指定屬性需設(shè)置的新值1)返回值Compcode如果成功獲取屬性值,即返回OPC_COMPCODE_SUCCESS,否則返回OPC_COMPCODE_FAILURE。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ù)合屬性,都可以設(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()來(lái)設(shè)置。此外,該核心函數(shù)的命令級(jí)
25、別為Forced serialization。3)目的該核心函數(shù)提供了一種在仿真過(guò)程中動(dòng)態(tài)設(shè)置對(duì)象屬性的機(jī)制,可用于處理器或隊(duì)列控制其他模塊。與函數(shù)op_ima_obj_attr_get()結(jié)合,無(wú)需包、ICI或中斷遞送就可提供遠(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ú)效或值類型錯(cuò)誤所引起)。Recoverable Error:對(duì)象無(wú)法識(shí)別屬性名。Recoverable Error:對(duì)象I
26、D溢出。Recoverable Error:對(duì)象屬性為只讀。Recoverable Error:屬性值無(wú)效。Recoverable Error:對(duì)象ID指向受限對(duì)象。5)相關(guān)函數(shù)采用op_ima_obj_attr_get()、op_ima_obj_attr_get_db1()、op_ima_obj_attr_get_int32()和op_ima_obj_attr_get_str()設(shè)置對(duì)象屬性值。采用op_ima_sim_attr_get()、op_ima_sim_attr_get_db1()、op_ima_sim_attr_get_int32()和op_ima_sim_attr_get_st
27、r()獲取仿真屬性值。采用op_ima_obj_svar_get()獲取進(jìn)程狀態(tài)變量值。采用op_ima_obj_command()向?qū)ο蟀l(fā)出一個(gè)命令。采用op_id_self()獲取所屬處理器或隊(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ù)類 型描 述attr_typeint屬性類型(可以為OPC_IMA_INTEGER、OPC
28、_IMA_DOUBLE、OPC_IMA_TOGGLE或OPC_IMA_STRING)attr_nameconst char*屬性名value_ptrVartype*指定存儲(chǔ)屬性值變量的指針1)返回值Compcode如果成功獲取屬性值,即返回OPC_COMPCODE_SUCCESS,否則返回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ù)(<HOME>/op_admin/env_db<rel&g
29、t;)、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)取消用戶提示),請(qǐng)求輸入一個(gè)值。一旦提示出現(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_SUCCESS。如果內(nèi)核必須要引用value_ptr的值,
30、則返回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)程級(jí)參數(shù)。4)錯(cuò)誤Program Abort:分段錯(cuò)誤(由無(wú)效值指針、指針?biāo)竷?nèi)存不足或指向畸形的attr_name參數(shù)引起)。Program Abort:內(nèi)存分配失敗。Recoverable Error:屬性類型不可識(shí)別。5)相關(guān)函數(shù)采用op_ima_obj_attr_get()、op_ima_obj_attr_get_db1()、op_ima_obj_attr_get_i
31、nt32()和op_ima_obj_attr_get_str()設(shè)置對(duì)象屬性值。采用op_ima_sim_attr_set()、op_ima_sim_attr_set_db1()、op_ima_sim_attr_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ī)值中的一種或幾種,
32、如計(jì)算中斷的到達(dá)時(shí)間、產(chǎn)生通信量目的地址或確定節(jié)點(diǎn)是否應(yīng)被去激活等。1. op_dist_load (dist_name, dist_arg0, dist_arg1)此核心函數(shù)的作用是加載分布以產(chǎn)生隨機(jī)值流,其參數(shù)說(shuō)明如表2-4表2-4 op_dist_load()函數(shù)的參數(shù)說(shuō)明參 數(shù)類 型描 述dist_nameconst char*被加載的分布名稱,通常為字符串常量dist_arg0double分布的附加參數(shù)#0dist_arg1double分布的附加參數(shù)#11)返回值Distribution *指向被加載分布的指針。如果發(fā)生可恢復(fù)錯(cuò)誤,則返回常量OPC_NIL。函數(shù)返回值一般存儲(chǔ)在Dis
33、tribution *類型的狀態(tài)變量中,稍后現(xiàn)傳遞給相關(guān)核心函數(shù) op_dist_outcome()。2)詳解分布是根據(jù)名稱來(lái)確定的,可以是預(yù)定義的分析分布、采用PDF編輯器建立的用戶自定義PDF模型或EMA-specified PDF模型。執(zhí)行預(yù)定義的分布可以看作是通過(guò)一兩個(gè)數(shù)值參數(shù)調(diào)用該核心函數(shù)的參數(shù)化算法。另外兩種類型的分布是后綴為“.pd.s”的表格式數(shù)據(jù)文件,調(diào)用該函數(shù)時(shí)將其加載到內(nèi)存中。需要注意的是,即使預(yù)定義的分布在models/std/base文件夾中有相應(yīng)的“.pd.s”文件,但這些文件都是零字節(jié)的,不包含任何分布信息,只是讓分布能夠顯示在OPNET菜單中。當(dāng)加載用戶自定義的
34、PDF時(shí),將忽略參數(shù)dist_arg0和dist_agr1。此外,該核心函數(shù)的安全級(jí)別為MT-safe。3)目的該核心函數(shù)提供作為隨機(jī)數(shù)發(fā)生器的概率分布。該函數(shù)主要用于加載分布,以在處理器產(chǎn)生的包之間提供隨機(jī)時(shí)間間隔。任何隨機(jī)分布的仿真參數(shù)都可以通過(guò)該函數(shù)來(lái)獲取。實(shí)際的隨機(jī)值是通過(guò)調(diào)用函數(shù)op_dist_outcome()來(lái)獲取的。4)錯(cuò)誤Program Abort:分段錯(cuò)誤(由無(wú)效分布名指針引起)。Program Abort:內(nèi)存分配失敗。Recoverable Error:分布名不可識(shí)別。5)相關(guān)函數(shù)采用op_dist_outcome()或op_dist_outcome_ext()獲取已加
35、載分布的隨機(jī)值。采用op_dist_uniform()獲取均勻分布的隨機(jī)值。采用op_dist_unload()釋放分布占用的內(nèi)存。2. op_dist_outcome (dist_ptr)此核核心函數(shù)的作用是為具有特定分布的隨機(jī)變量產(chǎn)生一個(gè)浮點(diǎn)數(shù),其參數(shù)說(shuō)明如表2-5。表2-5 op_dist_outcome()函數(shù)的參數(shù)說(shuō)明參 數(shù)類 型描 述dist_ptrDistribution*指向被加載分布的指針1)返回值double具有特定分布隨機(jī)變量的結(jié)果。如果發(fā)生可恢復(fù)錯(cuò)誤,則返回常量 OPC_DBL_INVALID。2)詳解特定分布可以是預(yù)定義的算法分布,也可以是之前通過(guò)函數(shù)op_dist_
36、load()加載的數(shù)字型表格式分布。該核心函數(shù)執(zhí)行表格式分布的列表查詢,并對(duì)算法分布(如指數(shù)分布)進(jìn)行數(shù)字計(jì)算。該核心函數(shù)使用的隨機(jī)數(shù)流是調(diào)用BSD random()過(guò)程產(chǎn)生的,所有分布函數(shù)集中的函數(shù)和發(fā)生器模塊都可共享此隨機(jī)數(shù)流。隨機(jī)數(shù)流依賴于初始的種子數(shù)(seed),如果仿真輸入(包括相同的隨機(jī)seed)相同,則仿真結(jié)果可重復(fù)。此外,該核心函數(shù)的安全級(jí)別為MT-safe。3)目的該核心函數(shù)提供了一種獲取符合某概率分布的隨機(jī)值的機(jī)制。該函數(shù)學(xué)用于計(jì)算處理器產(chǎn)生的包之間的隨機(jī)時(shí)間間隔。任何隨機(jī)分布的仿真參數(shù)都可以通過(guò)它來(lái)獲取。4)錯(cuò)誤Program Abort:分段錯(cuò)誤(由無(wú)效分布指針引起)。
37、Recoverable Error:分布指針為NIL。5)相關(guān)函數(shù)采用op_dist_load()加載分布。采用op_dist_uniform()獲取均勻分布的隨機(jī)值。采用op_dist_unload()釋放分布占用的內(nèi)存。采用op_dist_outcome_ext()獲取用戶自定義的隨機(jī)數(shù)發(fā)生器產(chǎn)生的隨機(jī)數(shù)。采用op_intrpt_schedule_self()、op_intrpt_schedule_remote()或op_intrpt_schedule_call()分別產(chǎn)生自中斷、遠(yuǎn)程中斷和過(guò)程中斷。3. op_dist_uniform(limit)此核心函數(shù)的作用是產(chǎn)生一個(gè)均勻分布的隨機(jī)
38、值,其參數(shù)說(shuō)明如表2-6所示。表2-5 op_dist_uniform()函數(shù)的參數(shù)說(shuō)明參 數(shù)類 型描 述limitdouble均勻分布的取值范圍1)返回值double產(chǎn)生的均勻分布的隨機(jī)值,范圍在0.0,limit 中。2)詳解該核心函數(shù)使用的隨機(jī)數(shù)流是調(diào)用BSD random()過(guò)程產(chǎn)生的,所有分布函數(shù)集中的函數(shù)和發(fā)生器模塊都可共享此隨機(jī)數(shù)流。隨機(jī)數(shù)流依賴于初始的種子數(shù)(seed),如果仿真輸入(包括相同的隨機(jī)seed)相同,則仿真結(jié)果可重復(fù)。如果參數(shù)limit為負(fù)數(shù),則返回值將是一個(gè)大于limit的均勻分布的負(fù)數(shù)此外,該核心函數(shù)的安全級(jí)別為MT-safe。3)目的該核心函數(shù)為普通的建模提
39、供了一種獲取均勻分布隨機(jī)數(shù)的機(jī)制,例如可用于數(shù)據(jù)鏈路協(xié)議計(jì)算隨機(jī)超進(jìn)。4)錯(cuò)誤無(wú)錯(cuò)誤捕獲5)相關(guān)函數(shù)采用op_dist_load()加載一個(gè)概率分布。采用op_dist_outcome()根據(jù)已加載的概率分布,獲取一隨機(jī)值。2.3 進(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ā)的特定類型進(jìn)程的行為和功能規(guī)范。1. op_pro_create (model_name, ptc_mem_ptr)此核心函數(shù)的作用是創(chuàng)建一個(gè)新的進(jìn)程作為特定進(jìn)程模型的實(shí)例,并允許安裝parent-to-chi
40、ld共享內(nèi)存,作為當(dāng)前進(jìn)程和創(chuàng)建的子進(jìn)程間通信機(jī)制,其參數(shù)說(shuō)明如表2-7所示。表2-7 op_pro_create()函數(shù)的參數(shù)說(shuō)明參 數(shù)類 型描 述model_nameconst char*進(jìn)程模型名稱ptc_mem_ptrVartype*當(dāng)前進(jìn)程和被創(chuàng)建進(jìn)程共享的parent-to-child內(nèi)存塊的地址(該內(nèi)存塊格式是用戶自定義的。通常若無(wú)內(nèi)存共享,則傳遞值OPC_NIL)1)返回值Prohandle進(jìn)一步處理被創(chuàng)建子進(jìn)程的進(jìn)程句柄。2)詳解仿真內(nèi)核支持單個(gè)隊(duì)列或處理器模塊中任意多個(gè)不同類型進(jìn)程的并存。除了根進(jìn)程,其他所有進(jìn)程都通過(guò)該核心函數(shù)創(chuàng)建。只有當(dāng)提供的參數(shù)process_mode
41、l引用當(dāng)前仿真中已聲明的進(jìn)程,該核心函數(shù)才會(huì)執(zhí)行成功。在為仿真系統(tǒng)的任一處理器或隊(duì)列模塊的進(jìn)程模型屬性賦值,或在通過(guò)進(jìn)程編輯器將進(jìn)程聲明為另一進(jìn)程的子進(jìn)程時(shí),均采用進(jìn)程模型的隱式聲明。每個(gè)通過(guò)該核心函數(shù)創(chuàng)建的進(jìn)程都可以利用共享內(nèi)存與創(chuàng)建它的進(jìn)程進(jìn)行通信。共享內(nèi)存是用戶自定義的內(nèi)存塊,其地址必須作為ptc_mem_ptr參數(shù)傳遞給該函數(shù)。此外,該核心函數(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)程上下文。Pr
42、ogram Abort:無(wú)法創(chuàng)建進(jìn)程。Program Abort:進(jìn)程的描述符分配失敗。Program Abort:初始化進(jìn)程失敗。Recoverable Error:進(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)銷毀動(dòng)態(tài)創(chuàng)建的進(jìn)程和該進(jìn)程的所有預(yù)設(shè)事件,其參數(shù)說(shuō)明如表2-8所示。表2-8 op_pro_destroy_op
43、tions ()函數(shù)的參數(shù)說(shuō)明參 數(shù)類 型描 述pro_handleProhandle被銷毀進(jìn)程的進(jìn)程句柄optionsint被執(zhí)行的可選操作1)返回值Compcode表示仿真內(nèi)核是否成功銷毀進(jìn)程的完成代碼,包括OPC_COMPCODE_SUCCESS和OPC_COMPCODE_FAILURE。2)詳解該函數(shù)允許進(jìn)程銷毀同一模塊中的任意其他動(dòng)態(tài)進(jìn)程,因此根進(jìn)程是惟一給定模塊中不能被銷毀的進(jìn)程。此外,該函數(shù)還可移除被銷毀進(jìn)程的所有預(yù)設(shè)事件。其中,動(dòng)態(tài)進(jìn)程是通過(guò)核心函數(shù)op_pro_create()創(chuàng)建的,在仿真中可隨時(shí)從模型中移除動(dòng)態(tài)進(jìn)程。適當(dāng)終止進(jìn)程可釋放分配給進(jìn)程的動(dòng)態(tài)內(nèi)存,但這也可能給建模
44、帶來(lái)一定影響。進(jìn)程模型在銷毀時(shí)會(huì)有一個(gè)特殊的邏輯片斷,該片斷是進(jìn)程模型的終止塊和銷毀進(jìn)程時(shí)仿真內(nèi)核直接調(diào)用的包含其中的代碼。代碼片斷中可能用到狀態(tài)和臨時(shí)變量。進(jìn)程可以銷毀自身,這時(shí)不返回任何值,除了終止塊中的特定操作外,不執(zhí)行任何操作。注意:內(nèi)核對(duì)釋放parent-to-child或參數(shù)內(nèi)存不負(fù)任何責(zé)任。該核心函數(shù)可使用的option有:OPC_PRO_DESTROY_OPT_KEEP_EVENTS核心函數(shù)移除被銷毀進(jìn)程的任意預(yù)設(shè)事件。OPC_PRO_DESTROY_OPT_NONE默認(rèn)操作。此外,該核心函數(shù)的安全級(jí)別為Forced serialization。3)目的該核心函數(shù)提供了一個(gè)進(jìn)程
45、,其可以創(chuàng)建在相同模塊中操作的子進(jìn)程。每個(gè)子進(jìn)程作為一個(gè)進(jìn)程模型實(shí)例獨(dú)立存在,并維持自身的狀態(tài)。4)錯(cuò)誤Program Abort:核心函數(shù)需要進(jìn)程上下文。Program Abort: 分段錯(cuò)誤(由畸形進(jìn)程句柄導(dǎo)致)。Recoverable Error:進(jìn)程句柄無(wú)效。Recoverable Error:進(jìn)程句柄指向被銷毀進(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_f
46、ree()釋放通過(guò)函數(shù)op_prg_mem_alloc()分配的內(nèi)存。采用op_pro_invoke()調(diào)用進(jìn)程模型。采用op_pro_parmem_access()用于子進(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)的操作時(shí),調(diào)用其他核心函數(shù)時(shí)可使用此句柄。2)詳解當(dāng)前執(zhí)行的進(jìn)程通常需要使用其自身的句柄作為進(jìn)程和中斷函數(shù)集中其他核心函數(shù)的參數(shù)。例如,該句柄可作為指針來(lái)獲取父進(jìn)程的句柄。其他典型應(yīng)用包括獲取進(jìn)程的惟一ID,銷毀無(wú)用的進(jìn)
47、程本身。此外,該核心函數(shù)的安全級(jí)別為Forced serialization。3)目的該核心函數(shù)為調(diào)用該核心函數(shù)的進(jìn)程提供了一個(gè)進(jìn)程句柄,作為進(jìn)程和中斷函數(shù)集中其他核心函數(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()為特定類型中斷注冊(cè)一個(gè)進(jìn)程。4. op_pro_invoke (pro_handle, argmem_ptr
48、)該核心函數(shù)的作用是在當(dāng)前事件和當(dāng)前模塊的上下文中調(diào)用進(jìn)程。被調(diào)用進(jìn)程將被暫停直到函數(shù)返回,其參數(shù)說(shuō)明如表2-9所示。表2-9 op_pro_invoke()函數(shù)的參數(shù)說(shuō)明參 數(shù)類 型描 述pro_handleProhandle被調(diào)用進(jìn)程的進(jìn)程句柄argmem_ptrVartype*通過(guò)函數(shù)op_pro_argmem_access()為被調(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)用同一模塊中的
49、其它進(jìn)程。如果使用其它模塊進(jìn)程的進(jìn)程句柄來(lái)調(diào)用該函數(shù)將引起可恢復(fù)錯(cuò)誤。在同一事件中,對(duì)函數(shù)op_pro_invoke()的調(diào)用次數(shù)并沒(méi)有任何限制。換句話說(shuō),調(diào)用函數(shù)op_pro_invoke()所導(dǎo)致中斷的進(jìn)程,可接著利用該函數(shù)調(diào)用其他進(jìn)程。這種一連串的進(jìn)程調(diào)用稱為當(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()來(lái)獲取內(nèi)存塊地址,則地址必須作為參數(shù)傳遞給op_pro
50、_invoke();若無(wú)此需要,則應(yīng)傳遞常量OPC_NIL。此外,該核心函數(shù)的安全級(jí)別為Forced serialization。3)目的多個(gè)進(jìn)程可共同處理單一隊(duì)列或處理器模塊上下文中發(fā)生的事件。通常對(duì)進(jìn)程進(jìn)行分層組織,父進(jìn)程根據(jù)不同事件的要求將事件處理任務(wù)交給合適的子進(jìn)程。另外一種進(jìn)程組織方式就是根據(jù)功能行來(lái)劃分任務(wù),如可根據(jù)進(jìn)程收到的中斷類型調(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)程上下文。Prog
51、ram Abort: 分段錯(cuò)誤(由畸形進(jìn)程句柄導(dǎo)致)。Recoverable Error:進(jìn)程句柄無(wú)效。Recoverable Error:進(jìn)程句柄指向被銷毀進(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)返回值Var
52、type*調(diào)用進(jìn)程提供的用戶自定義內(nèi)存塊的地址。若仿真內(nèi)核直接調(diào)用進(jìn)程或調(diào)用進(jìn)程不愿?jìng)鬟f任何參數(shù)內(nèi)存,則返回符號(hào)常量OPC_NIL。2)詳解參數(shù)內(nèi)存是一個(gè)用戶自定義的內(nèi)存塊,其地址由進(jìn)程調(diào)用其他進(jìn)程時(shí)傳遞。內(nèi)存的格式和內(nèi)容都是用戶自定義的,只有其地址由仿真內(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_p
53、ro_invoke()可使用參數(shù)內(nèi)存機(jī)制,這時(shí)被調(diào)用進(jìn)程并不需要接收傳入的值或向調(diào)用進(jìn)程返回任何數(shù)據(jù)。在這種情況下,通常在需要參數(shù)內(nèi)存的情況下,調(diào)用函數(shù)op_pro_invoke()應(yīng)傳遞符號(hào)常量OPC_NIL。此外,該核心函數(shù)的安全級(jí)別為Forced serialization。3)目的該核心函數(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)
54、用進(jìn)程間共享內(nèi)存的機(jī)制。內(nèi)存可在調(diào)用前建立,以包含輸入?yún)?shù)值。被調(diào)用進(jìn)程可以檢查該參數(shù)值,并利用它。4)錯(cuò)誤Program Abort:核心函數(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.4 事件函數(shù)集op_ev_cancel(evhandle)函數(shù)的作用是撤銷預(yù)設(shè)的事件,其參數(shù)說(shuō)明如表2-10所示。表2-10 op_ev_cancel()函數(shù)的參數(shù)說(shuō)明參 數(shù)類 型描 述evhandleEvhandle被取
55、消事件的事件句柄。事件句柄可以通過(guò)本函數(shù)集中的op_ev_seek_time()、op_ev_next()、op_intrpt_schedule_self()等函數(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ù)提供了一種撤銷無(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)前事件。Re
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025北京市建材購(gòu)買合同(衛(wèi)浴潔具類)
- 委托管理物業(yè)合同
- 2025VR設(shè)備租賃合同版
- 2025危險(xiǎn)品運(yùn)輸承包合同范本
- 咖啡廳租房合同
- 少年用化妝品購(gòu)銷合同
- 2025年計(jì)算機(jī)機(jī)房設(shè)備項(xiàng)目規(guī)劃申請(qǐng)報(bào)告模式
- 2025辦公室裝修合同樣書(shū)(合同版本)
- 2025年采暖設(shè)備項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告模范
- 2025國(guó)際廣場(chǎng)商城商場(chǎng)內(nèi)部承包合同
- 2025年春季學(xué)期學(xué)校德育工作計(jì)劃安排表(完整版)
- 2025年有機(jī)肥行業(yè)發(fā)展趨勢(shì)分析報(bào)告
- 2023-2024年員工三級(jí)安全培訓(xùn)考試題及參考答案(綜合題)
- 2025-2030年中國(guó)融雪劑行業(yè)運(yùn)行動(dòng)態(tài)及發(fā)展前景預(yù)測(cè)報(bào)告
- 對(duì)口升學(xué)語(yǔ)文模擬試卷(6)-江西?。ń馕霭妫?/a>
- 2025保安部年度工作計(jì)劃
- 2024年江蘇經(jīng)貿(mào)職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)
- 人居環(huán)境綜合治理項(xiàng)目項(xiàng)目背景及必要性分析
- 招標(biāo)采購(gòu)基礎(chǔ)知識(shí)培訓(xùn)
- 電力系統(tǒng)分布式模型預(yù)測(cè)控制方法綜述與展望
- 2024年注冊(cè)建筑師-二級(jí)注冊(cè)建筑師考試近5年真題附答案
評(píng)論
0/150
提交評(píng)論