相信很多人都會(huì)和simulink打交道,用來仿真算法、生成代碼、構(gòu)建plant做測試。simulink的好處就是模塊拖過來、一連線就可以用,所見即所得,so easy!為什么還要談規(guī)范呢?
我們建立模型的目的,是為了實(shí)現(xiàn)一定的功能。如果是你一個(gè)人參與的工作,模型搭建完一段時(shí)間后你也許還會(huì)回來打開重新看看,解決一下bug、重理一下思路。如果你們是一個(gè)團(tuán)隊(duì),每個(gè)人做一部分建模的工作,就需要統(tǒng)一大家的建模風(fēng)格,這樣任何一個(gè)人的工作都能確保別人在短時(shí)間內(nèi)能理解和使用。如果大家有過代碼編程的經(jīng)歷,相信都知道拿到別人的混亂的代碼,去理解他背后的設(shè)計(jì)思想是一件多么痛苦的事情。如果這個(gè)別人就是你自己,你在心里就會(huì)反復(fù)的在問自己當(dāng)初為什么,為什么!
模型也跟代碼一樣,只是它是用圖形化的方式去表達(dá)設(shè)計(jì)思想而已。沒有規(guī)矩就不成方圓,合理的統(tǒng)一建模規(guī)范,有很多好處,比如:
- 便于將各子模型做集成
- 統(tǒng)一接口定義
- 模型、代碼、文檔的統(tǒng)一風(fēng)格顯示
- 模型復(fù)用性
- 模型易讀性
- 模型易維護(hù)性
- 模型無障礙交流、傳遞
如果你不知道上述優(yōu)點(diǎn)的具體含義,你就理解為建模可以更 高大上 、逼格更高就行了。
那具體的建模規(guī)范內(nèi)容有哪些?怎么遵循呢?這就不得不提MAAB了。
MAAB
mathworks自己在官網(wǎng)上已經(jīng)發(fā)布了具體的建模規(guī)范,MAAB( MathWorks Automotive Advisory Board)。
這個(gè)規(guī)范最開始的初衷并不是要弄一個(gè)建模規(guī)范出來,而是mathworks在汽車行業(yè)里有些重要的客戶,比如 Ford, Daimler Benz, and Toyota等,他們?cè)谑褂胹imulink的過程中,會(huì)對(duì)mathworks公司提出很多新功能的需求,為了統(tǒng)一他們提需求的規(guī)范,建立了MAAB。現(xiàn)在MAAB更新到3.0了,度娘第一屏結(jié)果就能找到。
舉個(gè)栗子
MAAB里面講了simulink和stateflow的建模規(guī)范,100多頁,上百條的規(guī)范。以后有時(shí)間我會(huì)挑一些重要的內(nèi)容寫出來。這里給大家舉個(gè)簡單的例子,看看都是哪些類型的建模規(guī)范。
比如項(xiàng)目要實(shí)現(xiàn)一個(gè)模塊,模塊的輸入是一個(gè)模擬量in,模塊的輸出分兩部分,一是out1=3*in+1,二是如果in大于1,就輸出真,否則就輸出假。
于是很快就得到了下面的模型
這模型很簡單吧,這樣搭建肯定能實(shí)現(xiàn)功能需求,但從建模規(guī)范的角度,有很多不合理的地方。修改了一下,得到如下模型,大家可以找找不同。
命名規(guī)范
maab中關(guān)于文件、路徑、變量、信號(hào)的命名都有規(guī)定。通常來說只能用大小寫字母、阿拉伯?dāng)?shù)字和“_”。最常犯的錯(cuò)誤就是用 空格 。可以想想C語言里面,變量命名能加空格嗎?用空格對(duì)于后期寫腳本處理,也會(huì)帶來麻煩。
當(dāng)然有的公司自定義的規(guī)范里,也不許用"_",那命名就只能用駱駝方法,寫成MyIn,MyOut1, MyOut2這樣。
信號(hào)流向
按照大家的閱讀習(xí)慣,信號(hào)一定要從左到右流動(dòng)。也即輸入口在左邊,輸出口在右邊。讀模型的時(shí)候,大家的習(xí)慣都是先找輸入模塊,然后再看信號(hào)經(jīng)過了哪些模塊的處理,到哪里輸出了。
上面的錯(cuò)誤例子里面,讀者打開模型后,首先要找到正上方的輸入口,然后還要看goto連到了哪些from模塊,腦子要轉(zhuǎn)一大圈,很費(fèi)勁,體驗(yàn)感很差。
信號(hào)名
對(duì)于模型的輸入輸出口(包括bus、goto等),一定要有明確的命名,這主要是從模型易讀性、代碼生成、后期驗(yàn)證測試等方面考慮的。
模塊名
如果通過模塊的外觀,就能很明確的知道該模塊的功能,那就應(yīng)該隱藏模塊名。比如例子里面的add、constant、compare等模塊。
模塊參數(shù)
重要的模塊參數(shù),應(yīng)該顯式的表示出來。比如例子里面的乘法系數(shù)3、加法1、比較值1等。
具體的實(shí)現(xiàn)方法是,模型點(diǎn)擊右鍵properties->block annotaiton。
有人會(huì)問,例子里面的乘法系數(shù)不是已經(jīng)在模塊中間顯示出來了,為啥還要多此一舉?想想這種情況,如果gain的參數(shù)不是一個(gè)很短的一個(gè)數(shù)字,如果是3.1414926怎么辦?是把gain模塊拉得很長來顯示嗎?
比較模塊
盡量用顯示比較模塊,這樣更容易閱讀。特別是switch模塊,輸入最好用u2~=0選項(xiàng)。
錯(cuò)誤的例子:
正確的例子:
-
處理器
+關(guān)注
關(guān)注
68文章
19168瀏覽量
229153 -
比較器
+關(guān)注
關(guān)注
14文章
1636瀏覽量
107102 -
C語言
+關(guān)注
關(guān)注
180文章
7599瀏覽量
136213 -
simulink仿真
+關(guān)注
關(guān)注
0文章
75瀏覽量
8560
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論