專利名稱:使用模型事件調(diào)度模型組件的執(zhí)行的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明的示范實(shí)施例一般涉及建模環(huán)境內(nèi)的模型組件的執(zhí)行,更具體來說使用模型事件來調(diào)度建模組件的執(zhí)行。
相關(guān)的申請本發(fā)明的示范實(shí)施例涉及目前待決的美國專利申請,標(biāo)題為“在塊圖建模中使用執(zhí)行場景的系統(tǒng)和方法”,序列號為10/414,644,其內(nèi)容通過引用結(jié)合于本文。
背景技術(shù):
馬薩諸塞州內(nèi)蒂克的Math Works公司的SimulinkTM是圖形建模環(huán)境的一個示例,確切地來說塊圖環(huán)境的示例。SimulinkTM允許用戶創(chuàng)建動態(tài)系統(tǒng)的圖畫模型。模型由一組符號(稱為塊)組成。每個塊可以具有零或多個輸入端口、輸出端口和狀態(tài)。每個塊表示一個動態(tài)系統(tǒng),其輸入、狀態(tài)和輸出可以在特定時間點(diǎn)上連續(xù)和/或離散地改變。使用線將塊的端口彼此連接,以及它表示塊之間的數(shù)據(jù)相關(guān)性。可以將信號表示為沿著將塊圖中的塊連接的線上分布的值。
如果塊所有的輸入、狀態(tài)和輸出連續(xù)地或按一個固定的周期速率改變,則將該塊視為“單速率”塊。如果輸入、狀態(tài)和輸出一起或單獨(dú)在兩個或以上速率定義的時間點(diǎn)上更新,則將該塊視為“多速率”塊。如果模型在其中具有多速率塊,或按不同速率運(yùn)行的兩個或以上的單速率塊,則該模型本身是多速率的(相對于單速率)。
如果塊的功能定義是在它所在的模型的環(huán)境之外,則稱該塊為“原子”。SimulinkTM具有一組預(yù)定義的原子塊(例如,求和、乘積、增益),以及用戶還可以通過用戶書寫的“S-函數(shù)”創(chuàng)建他們自己的原子塊。作為原子,S-函數(shù)的功能定義是在模型的場景之外指定的,例如使用C代碼或MATLAB′m′代碼指定的?!皬?fù)合”塊是其功能定義是通過模型使用多組原子和復(fù)合塊指定的塊。SimuliakTM允許用戶指定“子系統(tǒng)”,其定義是由互連的多組預(yù)定義塊、用戶書寫的S-函數(shù)和其他SimulinkTM子系統(tǒng)構(gòu)成的復(fù)合塊。子系統(tǒng)可以使用“模型層次結(jié)構(gòu)”按層次結(jié)構(gòu)嵌套。
SimulinkTM采樣速率提供一種用于指定模型組件的執(zhí)行頻率的機(jī)制。圖1描述一種在控制模型組件的執(zhí)行時使用采樣速率的示例。例如,設(shè)計(jì)者可以指定被控對象塊4按連續(xù)速率執(zhí)行,以及控制器塊10按某個周期性的離散速率執(zhí)行。模型組件的執(zhí)行由SimulinkTM基礎(chǔ)設(shè)施在仿真時調(diào)度,或由操作系統(tǒng)來調(diào)度以供實(shí)時的實(shí)施。在模型的動態(tài)性與這些速率的調(diào)度之間沒有因果關(guān)系;組件執(zhí)行的瞬間是預(yù)定的。
SimulinkTM支持采樣速率的傳播。例如,圖1中的增益塊8和12的速率保留不指定,而或指定為“繼承”。在此情況中,假定已指定被控對象4和控制器10塊的速率,增益塊8和12從被控對象和控制器塊繼承它們的速率。
SimulinkTM還提供用于指定模型的動態(tài)性與模型組件的執(zhí)行之間的因果關(guān)系的機(jī)制,包括函數(shù)調(diào)用子系統(tǒng)、觸發(fā)子系統(tǒng)、迭代器(iterator)子系統(tǒng)、動作子系統(tǒng)和啟用的子系統(tǒng)。因果關(guān)系的指定允許用戶指定以模型中信號的當(dāng)前值和過去值以及其他數(shù)據(jù)為條件的模型組件的執(zhí)行。
但是,條件執(zhí)行的范圍一般限于子系統(tǒng),因?yàn)橹付ㄟ@些關(guān)系的常規(guī)方法不允許將條件執(zhí)行的范圍定義為隨意一組塊(相對于包括子系統(tǒng)的一組塊)。這是相當(dāng)大的局限性,因?yàn)橛性S多時候,期望同時執(zhí)行不在一個子系統(tǒng)和/或在模型中非鄰接的一組塊。例如,條件執(zhí)行的常規(guī)方法不允許在開機(jī)(power-up)或關(guān)機(jī)(power-down)時分布在模型上的不同塊的執(zhí)行。因此,組成因果關(guān)系的方式是受限制的。指定模型的動態(tài)性與模型組件的執(zhí)行之間的因果關(guān)系的常規(guī)方法不允許用戶啟用子系統(tǒng)中一半的塊然后觸發(fā)其他塊。相似地,不能通過一個觸發(fā)來觸發(fā)子系統(tǒng)中的一些塊,而通過另一個觸發(fā)來觸發(fā)其余的塊。
指定模型的動態(tài)性與模型組件的執(zhí)行之間的因果關(guān)系的常規(guī)機(jī)制的另一個缺點(diǎn)是這些機(jī)制需要在塊圖中制作圖形連接來指示因果性。這可能導(dǎo)致一些用戶感覺塊圖“雜亂”的外觀。用于指定因果關(guān)系的常規(guī)機(jī)制的另一個局限性是,這些常規(guī)機(jī)制不會自然而然地映射到如初始化、異?;蛉蝿?wù)的高級軟件或操作系統(tǒng)構(gòu)造。相似地,因?yàn)橹付ㄔ撘蚬P(guān)系的常規(guī)機(jī)制缺乏與因果關(guān)系相關(guān)聯(lián)的第一類對象,所以難以對該關(guān)系配置和指派特征。對于用戶來說,還難以直接影響與這些機(jī)制相關(guān)聯(lián)的隱式動態(tài)性,例如與被啟用的子系統(tǒng)相關(guān)聯(lián)的啟用和禁用方法,并基于這些隱式動態(tài)性有條件地執(zhí)行模型的組件。
發(fā)明內(nèi)容
本發(fā)明的示范實(shí)施例提供一種指定和配置模型的動態(tài)性與模型的組件的執(zhí)行之間的因果關(guān)系的機(jī)制。模型組件執(zhí)行依賴于“模型事件”的出現(xiàn)。首先,在建模環(huán)境中定義模型事件。在事件定義中指定的模型中出現(xiàn)條件促使事件被“發(fā)布”。與事件的出現(xiàn)相關(guān)聯(lián)的模型組件“接收到”發(fā)布事件的通知,然后執(zhí)行??梢灾概稍谧酉到y(tǒng)內(nèi)被隔離的組件以在出現(xiàn)事件時執(zhí)行,如同模型內(nèi)非鄰接的組件所能夠執(zhí)行的一樣??梢圆辉谀P偷囊暣爸欣L制連接組件的圖形指示符而指定模型事件和組件執(zhí)行之間的關(guān)聯(lián)。
在一個實(shí)施例中,在具有至少一個含多個可執(zhí)行組件的模型的建模環(huán)境中,一種方法可監(jiān)控針對指定事件的出現(xiàn)的模型的執(zhí)行。當(dāng)確定指定事件出現(xiàn)時,將事件的出現(xiàn)發(fā)布(posted)到事件處理程序。然后,執(zhí)行組件以響應(yīng)事件處理程序的通知。
在另一個實(shí)施例中,在具有含多個可執(zhí)行組件的至少一個模型的建模環(huán)境中,一種方法可監(jiān)控針對指定事件的出現(xiàn)的模型的執(zhí)行。當(dāng)確定指定事件出現(xiàn)時,中斷另一個事件的執(zhí)行以響應(yīng)確定了指定事件的發(fā)生。然后,執(zhí)行模型中的操作以響應(yīng)確定了指定事件的發(fā)生。
在一個實(shí)施例中,在建模環(huán)境中,系統(tǒng)包括具有多個可執(zhí)行組件的圖形模型。該系統(tǒng)還包括事件處理程序。事件處理程序從發(fā)生指定事件的模型接收通知。系統(tǒng)還包括從發(fā)生指定事件的事件處理程序接收通知的至少一個組件。接收組件響應(yīng)該通知來執(zhí)行。
圖1描述了利用采樣速率的常規(guī)塊圖模型;圖2描述了利用本發(fā)明的示范實(shí)施例的發(fā)布過程的模型;圖3描述了根據(jù)本發(fā)明的示范實(shí)施例在StateflowTM環(huán)境中發(fā)布和接收事件;圖4是啟用的子系統(tǒng)中發(fā)生隱式事件的時序圖;圖5描述了在啟用的子系統(tǒng)中使用隱式事件的模型;圖6A描述了在相同任務(wù)內(nèi)且在沒有事件轉(zhuǎn)換塊的情況下發(fā)生事件轉(zhuǎn)換的模型;圖6B描述了使用事件轉(zhuǎn)換塊在不同任務(wù)中發(fā)生事件轉(zhuǎn)換的模型;圖6C描述了在模型中使用事件轉(zhuǎn)換塊的時間線;圖7A描述了利用本發(fā)明的示范實(shí)施例將事件處理為異常的模型;圖7B描述了利用本發(fā)明的示范實(shí)施例以使用分支優(yōu)先級塊來控制執(zhí)行次序的模型;圖7C突出了圖7B模型中的分支優(yōu)先級塊指示的執(zhí)行次序;圖7D描述了利用本發(fā)明的示范實(shí)施例以通過塊組來控制執(zhí)行次序的模型;圖8是本發(fā)明的示范實(shí)施例中對比正常和異常事件的處理的數(shù)據(jù)流程圖;圖9描述了適于實(shí)現(xiàn)本發(fā)明的示范實(shí)施例的環(huán)境;以及圖10是用于將采樣速率與事件發(fā)生相關(guān)聯(lián)的遵循本發(fā)明的示范實(shí)施例的步驟序列的高級視窗的流程圖。
具體實(shí)施例方式
本發(fā)明的示范實(shí)施例提供一種將模型組件的執(zhí)行和指定模型事件的發(fā)生聯(lián)系起來的機(jī)制。將采樣速率指定為事件,由此建立了模型組件的執(zhí)行與模型動態(tài)性間的聯(lián)系??梢詫⒎青徑幽P驮嘏渲脼榛谀P褪录某霈F(xiàn)有條件地執(zhí)行。此外,組件執(zhí)行的范圍不限于整體中如某些常規(guī)系統(tǒng)所要求的子系統(tǒng)?;谑录霈F(xiàn)的組件的條件執(zhí)行還可以用于異常處理??梢圆辉谀P偷囊暣爸欣L制附加的組件連接而建立模型組件與事件之間的關(guān)聯(lián)。
為了簡明,本文所包含的本發(fā)明的示范實(shí)施例的解釋參考了基于SimulinkTM和MATLABTM的建模環(huán)境(二者都是馬薩諸塞州內(nèi)蒂克的Math Works公司的應(yīng)用程序)。但是,本領(lǐng)域技術(shù)人員應(yīng)該認(rèn)識到除了包括馬薩諸塞州內(nèi)蒂克的Math Works公司的StateflowTM的傳統(tǒng)的塊圖、狀態(tài)圖示應(yīng)用程序(state diagramming application)以及數(shù)據(jù)流程圖示環(huán)境(data flow diagramming environment)之外,本發(fā)明的示范實(shí)施例還可以應(yīng)用于其他建模環(huán)境和其他類型的圖。
如本發(fā)明的示范實(shí)施例中使用的SimulinkTM模型事件(下文也稱為“事件”或“SimulinkTM事件”)可以明確地在MATLAB工作區(qū)中被定義為對象。其屬性可以包括名稱、顏色、可選的期望速率、可選的任務(wù)、以及有關(guān)應(yīng)該如何實(shí)施該事件對應(yīng)的功能的解釋(例如嵌入(inline)對明確定義的簽名)。
已定義的事件可以由模型中的塊基于用戶定義的隨意條件來“發(fā)布”?!敖邮铡痹撌录膲K在它被發(fā)布時執(zhí)行?!鞍l(fā)布”指向事件處理程序發(fā)送指示特定事件發(fā)生的消息。然后,當(dāng)事件發(fā)布時,注冊到或在其他方面掛接到事件處理程序的塊被告知事件的出現(xiàn)。
圖2描述了利用發(fā)布過程的模型20的示例。事件“A”已經(jīng)定義并被賦予顏色“藍(lán)色”的屬性。在模型20中,塊“發(fā)布”22已配置為(如該附圖的對話框所示)當(dāng)在其輸入端口26的信號24大于零時有條件地發(fā)布事件“A”。該對話框?yàn)榘l(fā)布塊22從用戶請求多個參數(shù),包括多個輸入36、該塊據(jù)以執(zhí)行的條件38和指派給定義的模型事件40的名稱。模型20的視窗指示塊“常量”28的的采樣速率已被指定為事件“A”。該采樣速率(即事件“A”的發(fā)生)被傳播到已設(shè)為繼承它們的采樣速率的塊“單元延遲”30和“輸出1”32。由此所有三個塊接收到事件“A”。所有三個塊28、30和32可以假設(shè)事件“A”的“顏色”并在顯示器中向用戶陰影顯示藍(lán)色作為表示邏輯關(guān)聯(lián)的方式。因此,當(dāng)“正弦波”塊21的輸出是正時,塊“發(fā)布”發(fā)布“A”,三個塊28、30和32執(zhí)行,并更新模型的根輸出端口(outport)上的值。
圖2所示的模型示出與本發(fā)明的示范實(shí)施例提出的子系統(tǒng)的條件執(zhí)行相關(guān)聯(lián)的一些問題的解決。有與因果關(guān)系相關(guān)聯(lián)的第一類對象“A”,由此對該關(guān)系配置和指派如顏色的特征是可能的。條件執(zhí)行的范圍不限于子系統(tǒng)。有條件地執(zhí)行的三個塊28、30和32不被分組到一個母子系統(tǒng)內(nèi)以及可以從模型20的非鄰接區(qū)域中選擇。此外,條件執(zhí)行的范圍采用速率傳播(僅塊“常量”28指定“A”作為其采樣速率)。這促成一種指定采樣速率的方法,該方法比接收到“A”的每個塊不得不具有明確指定為“A”的采樣速率的其他情況更簡明。還有,塊與事件的關(guān)聯(lián)不需要在塊圖中發(fā)布塊22與常量塊28之間繪制圖形連接來指示因果性。“發(fā)布”塊22指定的條件與三個塊28、30和32的執(zhí)行之間的因果關(guān)系通過它們的公共基準(zhǔn)到達(dá)名稱為“A”的事件對象23。
事件的“范圍”是它所在的工作區(qū)的范圍。如果工作區(qū)與子系統(tǒng)或模型相關(guān)聯(lián),則事件的范圍是該子系統(tǒng)或模型。塊只能指定它們的采樣時間作為事件,此時該事件不超出該塊的范圍內(nèi)。
圖3描述了另一個發(fā)生事件的顯式發(fā)布和接收的環(huán)境示例,其中更詳細(xì)地顯示StateflowTM圖表30和該圖表的組件的塊圖模型32。在該示例中,用戶定義分別具有屬性顏色綠色和藍(lán)色的事件“A”34和“B”36。事件34和36都具有指定為20毫秒的采樣速率。Stateflow圖表30則每個20毫秒執(zhí)行一次,并按嚴(yán)格定義的周期性順序發(fā)布這些事件。兩個輸入端口塊40和50具有設(shè)為事件“A”34和“B”36的采樣速率。其余的塊承接那些事件作為繼承的采樣速率,并陰影顯示為對應(yīng)于該事件的顏色。一組綠色塊40、42、44和46接收事件“A”并在該事件被發(fā)布時執(zhí)行。同樣地,一組藍(lán)色塊50、52、54和56在事件“B”被發(fā)布時執(zhí)行。
一組處理每個事件的塊按它們在模型中排序的塊列表中出現(xiàn)的相對次序執(zhí)行。排序的塊列表次序由數(shù)據(jù)相關(guān)性確定。因此,每20毫秒,Stateflow圖表30執(zhí)行一次,以及綠色塊40、42、44和46的鏈從左到右執(zhí)行,然后藍(lán)色塊50、52、54和56的鏈從左到右執(zhí)行。再者,因?yàn)槭录目蛇x采樣速率已經(jīng)明確地指定為20毫秒,所以執(zhí)行運(yùn)行時間檢查以確保那些事件按每20毫秒發(fā)布。明確指定事件的速率的一個優(yōu)點(diǎn)在于無論任何情況下只要相繼的執(zhí)行之間需要消逝的時間,為該速率生成的任何代碼就可以使用所生成的代碼中的對應(yīng)的常量采樣時間,而無需如常規(guī)情況那樣需要使用定時器。
與定義為工作區(qū)對象以及其發(fā)布的條件由用戶明確地指定(例如使用SimulinkTM的“發(fā)布”塊或Stateflow邏輯)的顯式事件相比,隱式事件由模型構(gòu)造隱含,并響應(yīng)那些構(gòu)造的執(zhí)行被自動發(fā)布。用戶不能發(fā)布隱式事件。但是,用戶可以處理隱式事件,這意味著用戶可以定義直接響應(yīng)隱式事件來執(zhí)行的模型組件。
本發(fā)明的示范實(shí)施例包括下表注釋的五種類型的隱式事件
本領(lǐng)域技術(shù)人員將認(rèn)識到,在不背離本發(fā)明范圍的前提下,除了上表中列出的那些外,還可以處理其他類型的隱式事件。例如,可以支持的其他類型的隱式事件包括錯誤條件,如乘積塊嘗試除以零時或?qū)?shù)塊嘗試取零的對數(shù)時發(fā)布的隱式事件。對應(yīng)于隱式事件的對象自動占據(jù)模型的各種工作區(qū),由此用戶可以配置它們的特性。
圖4在時序圖中描述了上表中注釋的隱式事件。圖4示出在啟用子系統(tǒng)或函數(shù)調(diào)用層次結(jié)構(gòu)中該子系統(tǒng)的派生范圍內(nèi)的事件的相對時序;該時間變化信號是啟用子系統(tǒng)的信號。所有五種類型的隱式事件具有異步的采樣速率。這些隱式事件包括啟動70、初始化72、啟用74、禁用76和關(guān)閉78。
圖5中示出在啟用的子系統(tǒng)90中使用隱式事件的一個示例。子系統(tǒng)90具有與之相關(guān)聯(lián)的隱式啟用和禁用事件,它們在該子系統(tǒng)啟用和禁用時被發(fā)布。塊“零階保持”92具有指定為“禁用”的采樣速率,由此它在隱式禁用事件執(zhí)行時,即啟用的子系統(tǒng)90禁用時執(zhí)行。通過傳播,塊“增益1”94也繼承該事件(禁用)作為其采樣速率,當(dāng)子系統(tǒng)90禁用時這兩個塊一起執(zhí)行并更新與該子系統(tǒng)輸出端口96相關(guān)聯(lián)的存儲器。
本發(fā)明的示范實(shí)施例中的每個事件1-1地映射到用作至已將其采樣速率指定或繼承為該事件的塊所對應(yīng)的代碼的入口點(diǎn)的函數(shù)(這里也稱為“事件處理程序”)。無論何時,只要導(dǎo)致發(fā)布事件的條件成立,系統(tǒng)就通過調(diào)用該函數(shù)來反應(yīng)。該函數(shù)可在代碼生成時嵌入。對是否嵌入事件的函數(shù)的選擇是對應(yīng)事件對象的特性。作為缺省實(shí)現(xiàn),用戶可以選擇嵌入隱式事件的函數(shù),而不嵌入顯式事件的函數(shù)。
SimulinkTM事件的特性之一是它的任務(wù)。缺省情況下,事件從發(fā)布它的源場景中繼承它的任務(wù)。例如,在圖3中,事件“A”34和“B”36在與發(fā)布這些事件的Stateflow圖表30相同的任務(wù)中執(zhí)行。生成的代碼調(diào)用對應(yīng)于“A”和“B”的函數(shù)作為本地函數(shù)調(diào)用,如下文對應(yīng)于圖3的模型的偽代碼所述。
void model_step(){A();B();}void A(){u3=x;u2=2*u1;x=u2;}void B(){v3=y(tǒng);v2=3*v1;y=v2;}可以將事件的任務(wù)指定為模型任務(wù)對象的名稱,對應(yīng)于實(shí)時實(shí)現(xiàn)中的任務(wù)。SimulinkTM任務(wù)對象對應(yīng)于衍生(spawned)的操作系統(tǒng)任務(wù)。任務(wù)對象的特性可以包括指派的速率(周期性值或異步)、優(yōu)先級、任務(wù)棧大小、該任務(wù)是否是可搶占的或其他特性。當(dāng)發(fā)布事件而其任務(wù)不同于發(fā)布該事件的塊或模型構(gòu)造的任務(wù)時,將對應(yīng)于該事件的函數(shù)調(diào)度在該事件的任務(wù)中。如果該任務(wù)被指定為周期性的,則該函數(shù)在發(fā)布該事件期間該任務(wù)的任何時間步長期間執(zhí)行。如果該任務(wù)被指定為異步的,則發(fā)布該事件促使該任務(wù)被操作系統(tǒng)執(zhí)行。
本發(fā)明的示范實(shí)施例通過任務(wù)的使用避免了異步發(fā)布事件和多線程的實(shí)現(xiàn)。通過指示為了數(shù)據(jù)的完整性而需要事件轉(zhuǎn)換模塊的地方,任務(wù)用于幫助確保在實(shí)時實(shí)現(xiàn)中使用事件時數(shù)據(jù)的完整性。任務(wù)還用于指定與轉(zhuǎn)換相關(guān)聯(lián)的任務(wù)的相對優(yōu)先級。本發(fā)明的示范實(shí)施例使用作為SimulinkTM的速率轉(zhuǎn)換塊的規(guī)范化的事件轉(zhuǎn)換塊。圖6A、6B和6C圖示涉及事件轉(zhuǎn)換和事件轉(zhuǎn)換塊的使用的一些問題。
圖6A描述了響應(yīng)事件A和B的出現(xiàn)而出現(xiàn)轉(zhuǎn)換的模型100。在模型100中,事件A和B具有相同的任務(wù),以及可以利用永久存儲器以存儲處于這兩個事件的邊界處的數(shù)據(jù)來解決數(shù)據(jù)完整性問題。因?yàn)檫@兩個事件都在相同的任務(wù)中,所以它們無法彼此搶占,而且無需附加機(jī)制(例如雙緩沖)。在該模型100中,將永久存儲器用于左邊兩個傳遞函數(shù)塊102、104的輸出,因此無需轉(zhuǎn)換塊以在傳遞函數(shù)塊102、104和106之間傳遞數(shù)據(jù)。
但是,如果事件A和B被指定為在不同任務(wù)中執(zhí)行,則事件轉(zhuǎn)換塊是必需的,如圖6B所示。在圖6B的模型110中,事件A是具有高優(yōu)先級的任務(wù),而事件B是具有低優(yōu)先級的任務(wù)。在此情況中,位于第一112和第二116傳遞函數(shù)塊之間的邊界處的名稱為轉(zhuǎn)換的塊114充當(dāng)零階保持。位于第二116和第三120傳遞函數(shù)塊之間的邊界處的名稱為轉(zhuǎn)換1的塊118通過缺省充當(dāng)延遲。
圖6C的時間線示出圖6B的事件轉(zhuǎn)換塊的功能。因?yàn)槭录D(zhuǎn)換塊轉(zhuǎn)換114充當(dāng)零階保持,所以在附圖中它由標(biāo)記為“ZOH”的時間片表示。因?yàn)槭录D(zhuǎn)換塊轉(zhuǎn)換1118充當(dāng)延遲,所以在附圖中它由標(biāo)記為“1/z”的時間片表示。只要指派給事件A的任務(wù)不在搶占包含事件B的任務(wù),事件轉(zhuǎn)換塊轉(zhuǎn)換114在每次事件A的處理程序執(zhí)行時執(zhí)行。這防止了對B的處理程序的輸入在執(zhí)行中間改變。因?yàn)樵诋惒揭蚬到y(tǒng)中,沒有方法預(yù)先知道下次將在何時發(fā)布事件B,所以這是必需的。在時間B的處理程序完成執(zhí)行之后,時間轉(zhuǎn)換塊轉(zhuǎn)換1 118的輸出函數(shù)在每次發(fā)布事件A時執(zhí)行。這確保事件A的處理程序利用B的處理程序計(jì)算的最新值,但是如果不是必需的話不執(zhí)行轉(zhuǎn)換1的輸出函數(shù)。
由此,在圖6C中,與事件B相關(guān)聯(lián)的低優(yōu)先級任務(wù)執(zhí)行(步驟130),延遲執(zhí)行(步驟132),與事件A相關(guān)聯(lián)的高優(yōu)先級任務(wù)(步驟134)執(zhí)行,然后是零階保持(步驟136)。然后與事件A相關(guān)聯(lián)的任務(wù)執(zhí)行(步驟138)而沒有在此前執(zhí)行延遲,因?yàn)樽陨洗蜛執(zhí)行后B并沒有執(zhí)行。然后在該高優(yōu)先級任務(wù)(步驟138)之后執(zhí)行零階保持(步驟140)。然后執(zhí)行與B相關(guān)聯(lián)的低優(yōu)先級任務(wù)(步驟142),并被高優(yōu)先級任務(wù)中斷(步驟144)。在完成高優(yōu)先級任務(wù)(步驟144)之后,低優(yōu)先級任務(wù)(步驟142)恢復(fù)而零階保持不執(zhí)行,因?yàn)榈蛢?yōu)先級任務(wù)已經(jīng)啟動。過程然后繼續(xù),依次執(zhí)行延遲(步驟146),高優(yōu)先級任務(wù)(步驟148)和零階保持(步驟150)。
除了確保數(shù)據(jù)完整性外,事件轉(zhuǎn)換塊對于事件傳播期間解析(resolution)也是必需的。但是,當(dāng)在相同任務(wù)中的事件之間轉(zhuǎn)換時,該塊將它的輸入值復(fù)制到它的永久輸出。然后可以嘗試后期編譯來減小該塊。應(yīng)該注意轉(zhuǎn)換塊需要InitialCondition(初始條件)參數(shù)來初始化它們的存儲器。在一個實(shí)施中,該參數(shù)的缺省值是零。
事件還可以用于處理模型執(zhí)行時遇到的錯誤。當(dāng)錯誤發(fā)生時,模型可以“以異常的方式發(fā)布事件”。以異常的方式發(fā)布的事件稱為“異常事件”。異常事件的關(guān)鍵特征是,以不同于以非異常方式發(fā)布的事件或“正常事件”不同的方式處理它。具體來說,當(dāng)一個事件發(fā)布另一個異常事件時,該第一事件的函數(shù)從不在退出異常事件的函數(shù)時恢復(fù)執(zhí)行。換言之,如果B以異常方式中斷A,則在B完成之后,A的執(zhí)行不被恢復(fù)。注意在相同模型中可以同時以正常方式和異常方式調(diào)用事件。
圖7A中描述了在模型中使用異常事件。在模型160中,上方組件屬于事件A的處理程序的一部分。如果輸入u1 162的量值小于或等于1e-6,則由異常子系統(tǒng)164中的拋出塊166以異常方式發(fā)布事件B或簡稱為“拋出”。如果輸入u1 162小于等于1e-6,則異常子系統(tǒng)164評估輸入162和并僅拋出事件B。拋出塊166在功能上與發(fā)布塊相似,例外的是它以異常方式而非正常方式發(fā)布事件。當(dāng)拋出事件B時,事件B的處理程序執(zhí)行,將數(shù)據(jù)存儲168設(shè)為大的固定常量。當(dāng)事件B的處理程序完成時,控制不返回到事件A的處理程序,因?yàn)槭录﨎作為異常被拋出,而非返回到調(diào)用進(jìn)程。表示圖7A所描述的過程的代碼可以表示為如下void model_step(){A();}void A(){u2=fabs(u1);u3=u2<=1.0e-6;if(fabs(u1)<=1.0e-6){B();/*return from B()exceptionally*/return;}v4=rt_sgn(4*(v1/u1));x=rt_lookup(rtP.lookup,v4);}void B(){x =1.0e6;}如果以正常方式而非作為異常發(fā)布了事件B,則當(dāng)事件B的處理程序完成時,事件A的處理程序會完成執(zhí)行。圖8中以抽象方式描述了這兩個對比場景。本領(lǐng)域技術(shù)人員將理解,具有一種精確的機(jī)制以在將事件引入到模型中時控制如何排序塊是重要的,因?yàn)槭录跀?shù)據(jù)相關(guān)性隱含的因果關(guān)系之上和之外引入一個因果關(guān)系。
圖7A中的模型利用了原子子系統(tǒng)來強(qiáng)制要求排序的塊次序,其中拋出塊先于乘積塊執(zhí)行,其意圖是有條件地通過異常事件B來繞開該塊。因?yàn)樵谂判虻膲K列表中原子子系統(tǒng)早于乘積塊,所以包括拋出塊的其內(nèi)容將先于乘積決執(zhí)行。原子子系統(tǒng)的一個缺點(diǎn)在于,其內(nèi)容不是在相同的圖形級作為其母圖形來呈示,使得其內(nèi)容較不容易辨認(rèn)。
使用原子子系統(tǒng)來控制執(zhí)行次序的一個備選機(jī)制是,對離開塊的分支指派優(yōu)先級,然后分支中的所有塊繼承該塊的優(yōu)先級,只要這種繼承是唯一的且明確的。圖7B示出“分支優(yōu)先級塊”170的安置,它指定下方分支中的塊應(yīng)該先于上方分支中的塊執(zhí)行。圖7C指示圖7B的分支優(yōu)先級塊170指示的執(zhí)行次序。分支優(yōu)先級塊170中的編號“1”(172)指示下方分支應(yīng)該首先執(zhí)行。分支優(yōu)先級塊170中的編號“2”指示上方分支應(yīng)該第二地執(zhí)行。
圖7D描述了使用原子子系統(tǒng)來控制執(zhí)行次序的再一個備選。圖7D描述了“塊組”的使用。在排序的塊列表中,組1(176)中的塊將出現(xiàn)在組2(178)中的塊之前。
在圖8中左邊示出兩個事件的正常發(fā)布過程的塊圖中,模型的執(zhí)行(步驟180)觸發(fā)事件A(步驟182)。事件A的執(zhí)行期間,事件B以正常方式發(fā)生并被處理(步驟184)。在處理事件B(步驟184)之后,恢復(fù)事件A的處理(步驟182)。在事件A的執(zhí)行(步驟182)完成之后,控制返回到事件A出現(xiàn)(步驟180)之前模型執(zhí)行中的點(diǎn)上。
在圖8中右邊示出兩個事件的異常發(fā)布過程的塊圖中,模型的執(zhí)行(步驟190)觸發(fā)事件A(步驟192)。事件A的執(zhí)行(步驟192)期間,事件B以異常方式發(fā)生并被處理(步驟194)。因?yàn)橐援惓7绞教幚硎录﨎,控制傳遞回事件A出現(xiàn)(步驟190)之前所存在的模型執(zhí)行中的點(diǎn)上,而不恢復(fù)事件A的處理。
與異常事件相關(guān)聯(lián)的“早期返回”還可以幫助防止無用地執(zhí)行源于錯誤條件中所含信號的計(jì)算下游。例如,在圖7的示例中,u1的量值的檢查作為原子子系統(tǒng)執(zhí)行的一部分在乘積塊和乘積塊的塊下游之前發(fā)生。因?yàn)樵缙诜祷卦从诒恢袛嗟氖录?,所以如果事件B被拋出,則那些塊免于(無用)執(zhí)行。
如上所述,可以以正?;虍惓7绞桨l(fā)布事件。發(fā)布塊用于以正常方式發(fā)布事件,而拋出塊用于以異常方式發(fā)布事件。此外,用戶指定的S-函數(shù)API也可以用于以正?;虍惓7绞桨l(fā)布事件。模型組件可以在事件以正常方式被拋出或以異常方式被拋出但是不能同時這兩種情況時,處理該事件。可以將塊的采樣時間指定為“A”,以指示在以正常方式發(fā)布時它處理事件A,或指定為“A.exception”,以指示在以異常方式發(fā)布時它處理事件A。當(dāng)以異常方式發(fā)布事件A時,具有采樣時間A的塊不處理它,以及當(dāng)以正常方式發(fā)布事件A時,具有采樣時間A.exception的塊不處理它。
以異常方式發(fā)布的顯式事件應(yīng)該具有非空處理程序;在以異常方式處理該事件的模型中應(yīng)該有至少一個塊。如果情況不是這樣,則產(chǎn)生錯誤。此要求通過用戶花時間創(chuàng)建的模型組件發(fā)布顯式異常事件以及應(yīng)該由該模型來處理事件的認(rèn)識來驗(yàn)證。如果有非空處理程序,則以正常方式發(fā)布隱式事件。如果沒有模型組件正在處理以正常方式發(fā)布的隱式事件,則反之以異常方式發(fā)布該時間。拋出塊可以再次發(fā)布它正在以正常方式處理為異常事件的事件。當(dāng)不能保證以正常方式成功處理事件時,可以利用此場景。在初次嘗試之后,可以以異常方式處理該事件。
圖9描述了適于實(shí)現(xiàn)本發(fā)明的示范實(shí)施例的環(huán)境。電子設(shè)備200擁有圖形建模和執(zhí)行環(huán)境202,如SimulinkTM或StateflowTM應(yīng)用程序。電子設(shè)備200可以是工作站或服務(wù)器、膝上型計(jì)算機(jī)、PDA、網(wǎng)絡(luò)連接的器具或能夠支持圖形建模和執(zhí)行環(huán)境202的某種其他數(shù)字電子設(shè)備。圖形建模和執(zhí)行環(huán)境202包括上文論述的至少一個圖形模型204和事件處理程序206。電子設(shè)備200與顯示設(shè)備208接口,該顯示設(shè)備208為用戶212顯示模型204的視窗210。顯示設(shè)備208和用戶212可以處在電子設(shè)備200的本地或遠(yuǎn)程位置。本領(lǐng)域技術(shù)人員將認(rèn)識到在本發(fā)明的范圍內(nèi)可以有許多不同的可能軟件和硬件配置。
圖10中示出本發(fā)明的示范實(shí)施例遵循的步驟的一個高級順序。該順序開始于圖形建模和執(zhí)行環(huán)境202中模型204的執(zhí)行(步驟220)。然后,確定模型執(zhí)行期間先前指定的事件的出現(xiàn)(步驟222)。將事件出現(xiàn)發(fā)布到事件處理程序206(步驟224)。事件處理程序通知其采樣速率與事件發(fā)生相關(guān)的注冊塊(步驟226)。通知之后,其采樣速率依賴的事件發(fā)生的塊執(zhí)行(步驟228)。
因?yàn)樵诓槐畴x本發(fā)明范圍的前提下可以進(jìn)行某些更改,所以上文描述所含或附圖所示的所有內(nèi)容應(yīng)該解釋為說明性的而不應(yīng)作字面上的解釋。本領(lǐng)域的實(shí)施者將意識到,本文圖示和描述的系統(tǒng)配置是落在本發(fā)明范圍內(nèi)的多種可能系統(tǒng)配置的示例。同樣地,本文論述的步驟的順序是落在本發(fā)明范圍內(nèi)的可能的示范而非排他性的步驟順序。
權(quán)利要求
1.在具有含多個可執(zhí)行基于時間的組件的至少一個模型且提供所述模型的視窗的圖形建模環(huán)境中,一種方法包括如下步驟監(jiān)控所述模型的執(zhí)行,以確定指定的事件的發(fā)生,所述事件加有標(biāo)號;在所述模型的執(zhí)行期間確定所述指定的事件的出現(xiàn);以及將所述圖形建模環(huán)境中所述事件的出現(xiàn)發(fā)布到事件處理程序,所述發(fā)布將所述事件的發(fā)生通知所述事件處理程序;以及響應(yīng)所述通知執(zhí)行來自所述多個組件的至少一個組件,所述組件與所述標(biāo)號相關(guān)聯(lián)。
2.如權(quán)利要求1所述的方法,還包括如下步驟將所述多個組件的至少其中之一注冊到所述事件處理程序;以及在所述發(fā)布之后,在注冊到所述事件處理程序的所述多個組件的至少其中之一上,接收所述事件的出現(xiàn)的通知。
3.如權(quán)利要求1所述的方法,還包括如下步驟在所述視窗上顯示發(fā)布組件,所述發(fā)布組件指定導(dǎo)致所述發(fā)布發(fā)生的條件。
4.如權(quán)利要求1所述的方法,還包括如下步驟將至少一個組件的初始執(zhí)行的采樣時間設(shè)為所述指定的事件的發(fā)生。
5.如權(quán)利要求4所述的方法,還包括如下步驟將所述采樣時間傳播到所述模型中的至少一個其他組件,所述至少一個其他組件配置為繼承采樣速率。
6.如權(quán)利要求4所述的方法,還包括如下步驟將所述模型中的多個非鄰接組件的采樣時間設(shè)為所述事件的發(fā)生。
7.如權(quán)利要求6所述的方法,其中設(shè)置多個非鄰接組件的所述采樣時間,而不調(diào)整所述視窗中顯示的組件之間的可視連接。
8.如權(quán)利要求4所述的方法,還包括如下步驟以所述視窗中的事件ID指示將所述至少一個組件的采樣時間設(shè)到所述事件。
9.如權(quán)利要求4所述的方法,其中所述事件是用戶設(shè)置的顯式事件。
10.如權(quán)利要求4所述的方法,其中所述事件是所述模型執(zhí)行導(dǎo)致的隱式事件。
11.如權(quán)利要求10所述的方法,其中所述隱式事件是開機(jī)、關(guān)機(jī)和初始化的其中之一。
12.如權(quán)利要求10所述的方法,其中所述隱式事件對應(yīng)于子系統(tǒng)的啟用和禁用的其中之一。
13.如權(quán)利要求2所述的方法,還包括如下步驟以所述視窗中用戶可配置的顏色指示組件接收哪個事件。
14.如權(quán)利要求1所述的方法,將正在監(jiān)控所述模型的執(zhí)行所針對的所述指定的事件的執(zhí)行范圍限制于所述模型的一部分。
15.如權(quán)利要求1所述的方法,其中所述模型中的每個事件基于一一對應(yīng)的方式映射到事件處理程序,所述事件處理程序是函數(shù)。
16.如權(quán)利要求15所述的方法,其中所述函數(shù)被嵌入。
17.如權(quán)利要求1所述的方法,其中分支優(yōu)先級塊響應(yīng)所述通知指示塊的至少兩個分支之間的執(zhí)行次序。
18.如權(quán)利要求1所述的方法,其中多于一個塊組執(zhí)行以響應(yīng)所述通知,所述塊組是用戶選擇的塊分組,所述塊組的執(zhí)行次序由用戶指定。
19.在具有含多個可執(zhí)行組件的至少一個模型的建模環(huán)境中,一種方法包括如下步驟監(jiān)控所述模型的執(zhí)行,以確定指定的事件的發(fā)生;在所述模型的執(zhí)行期間確定所述指定的事件的出現(xiàn);響應(yīng)所述指定的事件發(fā)生的確定中斷執(zhí)行事件的執(zhí)行;以及響應(yīng)所述指定的事件發(fā)生的確定執(zhí)行所述模型中的操作。
20.如權(quán)利要求19所述的方法,其中所述指定的事件作為正常事件而被處理,并且害包括如下步驟恢復(fù)所述被中斷的事件的執(zhí)行。
21.如權(quán)利要求19所述的方法,其中所述指定的事件作為異常事件而被處理,并且還包括如下步驟將所述模型的執(zhí)行的控制返回到調(diào)用所述被中斷執(zhí)行的事件的調(diào)用過程,而不恢復(fù)所述被中斷的事件的執(zhí)行。
22.如權(quán)利要求19所述的方法,其中所述指定的事件是使用例示的事件對象來指定的。
23.如權(quán)利要求22所述的方法,其中所述事件是顯式事件。
24.如權(quán)利要求22所述的方法,其中所述事件是隱式事件。
25.如權(quán)利要求22所述的方法,其中所述事件對象與任務(wù)對象相關(guān)聯(lián),所述任務(wù)對象對應(yīng)于操作系統(tǒng)任務(wù)。
26.如權(quán)利要求25所述的方法,其中所述任務(wù)對象具有指定的執(zhí)行速率和優(yōu)先級的至少其中之一。
27.如權(quán)利要求26所述的方法,其中具有不同任務(wù)的至少兩個事件正在模型中執(zhí)行,并且還包括如下步驟使用事件轉(zhuǎn)換組件來調(diào)度與所述至少兩個事件相關(guān)聯(lián)的組件的執(zhí)行,所述事件轉(zhuǎn)換組件將與所述至少兩個事件相關(guān)聯(lián)的所述組件的執(zhí)行分開。
28.如權(quán)利要求19所述的方法,其中所述操作由分支優(yōu)先級塊中指示的執(zhí)行次序來控制。
29.如權(quán)利要求19所述的方法,其中所述操作是多于一個塊組的執(zhí)行,所述塊組是用戶選擇的塊分組,所述塊組的執(zhí)行次序由用戶指定。
30.在建模環(huán)境中,一種系統(tǒng)包括至少一個具有多個可執(zhí)行組件的圖形模型;事件處理程序,所述事件處理程序從發(fā)生指定的事件的所述模型接收通知;以及至少一個接收組件,所述接收塊從所述事件處理程序接收有關(guān)所述指定的事件的發(fā)生的通知,并響應(yīng)所述通知而執(zhí)行。
31.如權(quán)利要求30所述的系統(tǒng),其中所述事件是所述模型的執(zhí)行滋生的錯誤事件。
32.如權(quán)利要求30所述的系統(tǒng),其中所述指定的事件的發(fā)生導(dǎo)致所述模型中多于一個組件執(zhí)行。
全文摘要
公開了一種指定和配置圖形模型的動態(tài)性與該模型的組件的執(zhí)行之間的因果關(guān)系的方法。模型組件執(zhí)行依賴于模型事件的出現(xiàn)。首先在建模環(huán)境中定義模型事件。在事件定義中指定的模型中出現(xiàn)條件促使事件被“發(fā)布”。已與事件的出現(xiàn)相關(guān)聯(lián)的模型組件“接收到”發(fā)布事件的通知,然后執(zhí)行??梢灾概稍谧酉到y(tǒng)內(nèi)隨機(jī)的組件以在出現(xiàn)事件時執(zhí)行,與模型內(nèi)不鄰接的組件所能夠執(zhí)行的一樣。可以不在模型的視窗中繪制連接組件的圖形指示符而指定模型事件和組件執(zhí)行之間的關(guān)聯(lián)性。
文檔編號G06F9/46GK1965293SQ200580007811
公開日2007年5月16日 申請日期2005年1月6日 優(yōu)先權(quán)日2004年1月15日
發(fā)明者P·什帕克, M·恩萊哈特 申請人:數(shù)學(xué)工程公司