模型的層次設(shè)計(jì)

使用Simulink/Stateflow進(jìn)行控制策略建模相信對(duì)于校長(zhǎng)星粉們而言都是小菜一碟,早已掌握了的基本技能。但是會(huì)建模和建模建的好,是兩回事;把建模的工作完成跟建模的藝術(shù)更是兩回事。本文校長(zhǎng)將基于MAAB的建模層次規(guī)范講述建模時(shí)應(yīng)該如何架構(gòu)好層次,并在層次內(nèi)做好設(shè)計(jì)細(xì)節(jié)工作,讓工程師的作品層次更上一個(gè)臺(tái)階。
Simulink的模型可以分為四個(gè)層次:
Top Layer頂層
Trigger Layer任務(wù)觸發(fā)層(根據(jù)該層是否存在決定整體架構(gòu)是Type A還是Type B)
Structure Layer結(jié)構(gòu)層
Data flow Layer數(shù)據(jù)流層

Top Layer
頂層模型一般分為輸入,控制器,輸出三個(gè)部分,輸入輸出是控制器對(duì)外界的數(shù)據(jù)交互端口,控制器是一個(gè)原子子系統(tǒng),僅對(duì)外暴露數(shù)據(jù)接口。Trigger, Enable等模塊是不應(yīng)該出現(xiàn)在頂層模型中的。一般頂層模型示意圖如下:

Triggered Layer
觸發(fā)層則主要是基于Trigger或者Function-Call信號(hào)進(jìn)行設(shè)計(jì),目的是為了將不同定時(shí)周期執(zhí)行的任務(wù),或者由外部事件調(diào)用的任務(wù)進(jìn)行分離,使用不同的任務(wù)觸發(fā)信號(hào)分別進(jìn)行管理。這樣可以表現(xiàn)出系統(tǒng)的多任務(wù)調(diào)度,也使得任務(wù)之間保持高度的獨(dú)立性。觸發(fā)信號(hào)可以由狀態(tài)機(jī)的Chart的Event輸出信號(hào)形成。其一般示意圖如下:

觸發(fā)層中,彼此獨(dú)立的任務(wù)由Triggered子系統(tǒng)或者Function-Call子系統(tǒng)構(gòu)成,那么可能存在某個(gè)采樣時(shí)刻多個(gè)任務(wù)都需要執(zhí)行的情況,這時(shí)可以設(shè)置子系統(tǒng)的優(yōu)先度Priority,使得同一個(gè)采樣時(shí)刻下需要執(zhí)行的多個(gè)任務(wù)具有明確的先后順序。另外,還需要注意觸發(fā)信號(hào)源的名字其關(guān)鍵字應(yīng)該被對(duì)應(yīng)的子系統(tǒng)的名字所包含。如Task4ms的觸發(fā)信號(hào)源,其調(diào)用的Triggered Subsystem的名字中包含Task4ms的字樣。
Structural Layer
結(jié)構(gòu)層的模型需要由同類型的模塊構(gòu)成。所謂同類型,是指該層次下所有的模塊要么全部都是Subsystem,要么全部都是基本模塊構(gòu)成的。當(dāng)然,類似Bus Creator, Bus Selector, Mux, Inport, Outport,Merge,F(xiàn)rom,Goto之類的通用模塊是被允許使用的,它們可以在任意模型層次中出現(xiàn)。而Enable,Trigger,F(xiàn)unction-Call模塊除了Top Layer以外的層次也是都可以被安排。當(dāng)前層次下全部都是Subsystem模塊的就是結(jié)構(gòu)層,全是基礎(chǔ)模塊構(gòu)成的就是Data flow Layer數(shù)據(jù)流層,數(shù)據(jù)流層就是最底層。
不使用觸發(fā)層的架構(gòu)下,結(jié)構(gòu)層的模型是不帶有Enable,Trigger,F(xiàn)unction-Call模塊的,為了明確的表示采樣時(shí)間,往往需要在Inport和Subsystem的模塊屬性中顯示出tsample采樣時(shí)間。

當(dāng)模型的架構(gòu)中帶有觸發(fā)層時(shí),結(jié)構(gòu)層就會(huì)帶有Trigger,Enable,F(xiàn)unciton-call模塊。首先,這些觸發(fā)源模塊必須放置在當(dāng)前層次的最高層,可以直接將觸發(fā)源的調(diào)度周期標(biāo)注在觸發(fā)模塊上,因?yàn)榇藭r(shí)的結(jié)構(gòu)層是一個(gè)原子子系統(tǒng),所有模塊都采用相同的采樣時(shí)間,由觸發(fā)源信號(hào)決定。此種類型的結(jié)構(gòu)層示意圖如下:

結(jié)構(gòu)層可以嵌套多個(gè)層次,并非僅存在一層。子系統(tǒng)內(nèi)部可以嵌套子系統(tǒng),子系統(tǒng)的劃分是根據(jù)軟件的功能需求聚集為子系統(tǒng),而不是僅僅因?yàn)槟P筒季址奖憔蛯⑵浯俪勺酉到y(tǒng)。這一點(diǎn)校長(zhǎng)的星粉們一定要銘記在心。
Data flow Layer
數(shù)據(jù)流層,顧名思義,就是根據(jù)基本計(jì)算模塊讓數(shù)據(jù)流動(dòng)起來(lái)的模型層。此層次為模型的最底層,層次中的模塊都是用Commonly Used Block中的模塊搭建而成,形成最常被復(fù)用的軟件組件,如濾波器,PID控制器,做簡(jiǎn)單模式切換的Chart模塊等。示意圖如:

數(shù)據(jù)流層中最常被使用到的模塊包括Inport,Outport,Lookup Table, Add, Product, Gain, Switch, Logic Operator,Relational Operator,multiport switch,Saturation,Bus Creator,Bus Selector以及放置到庫(kù)中的Atomic Subsystem等。B站小伙伴們注意保持小而美的軟件組件復(fù)用。