前言
今天我們繼續(xù)來介紹TSMaster新功能—MATLAB自動(dòng)化控制模塊。該模塊提供了大量用于MBD開發(fā)的小工具。還包含了這個(gè)可以將c代碼自動(dòng)轉(zhuǎn)化為stateflow代碼的程序。
MATLAB的自動(dòng)化對(duì)象
MATLAB automation object /
> 首先點(diǎn)擊連接,連接到matlab的自動(dòng)化對(duì)象,需要啟動(dòng)matlab的主程序,一旦連上之后,matlab程序就可以實(shí)時(shí)被TSMaster軟件來控制。那么我們點(diǎn)擊之后可以看到連接按鈕變灰,然后斷開連接按鈕變成高亮,那么這個(gè)時(shí)候就可以通過我們的軟件來控制matlab程序了。
> 然后我們可以點(diǎn)擊這個(gè)c代碼轉(zhuǎn)stateflow,點(diǎn)擊解析,會(huì)實(shí)現(xiàn)一個(gè)邏輯樹,然后再點(diǎn)擊生成代碼。這個(gè)時(shí)候我們就可以看到,我們的示例代碼就可以自動(dòng)轉(zhuǎn)換成stateflow代碼,該功能可以迅速的將已有的C代碼的邏輯一鍵轉(zhuǎn)換成完全等價(jià)的stateflow的邏輯,從而提高M(jìn)BD的開發(fā)效率。那么轉(zhuǎn)化完成的效果就是這樣,雙擊chart1展開之后就可以看到跟剛才的c腳本完全對(duì)應(yīng)的stateflow的邏輯。
SIL和HIL環(huán)境的自動(dòng)構(gòu)建
Automatic build of SIL and HIL /
只要我們擁有可以生成代碼的Simulink的仿真模型,就可以通過此模塊來實(shí)現(xiàn)該模型在TSMaster環(huán)境中的實(shí)時(shí)運(yùn)行。從而讓我們的算法可以在軟件設(shè)計(jì)的前期就可以參與到HIL和SIL的實(shí)時(shí)仿真中來,同時(shí)有了小程序的加持,我們還可以對(duì)算法進(jìn)行細(xì)致入微的調(diào)試、監(jiān)控,甚至將二進(jìn)制文件發(fā)布給其他的用戶,進(jìn)行聯(lián)合仿真,那么具體如何實(shí)現(xiàn)呢?
> 我們還是從0開始,舉一個(gè)例子來說明:首先我們切換到第一個(gè)頁(yè)面,SIL and HIL頁(yè)面,可以看到這個(gè)頁(yè)面有4個(gè)步驟,按照這4個(gè)步驟順序執(zhí)行,就可以迅速搭建一個(gè)HIL環(huán)境。那么第一步是算法模型的配置,他給了兩個(gè)輸入,一個(gè)是我們的小程序的名稱,第二個(gè)是Simulink模型文件。對(duì)于第一個(gè)輸入,只要給我們的新構(gòu)建的小程序起個(gè)名字就可以了,比如說這個(gè)默認(rèn)的Model1,我們輸入之后點(diǎn)擊最右邊的綠色的勾,它的作用就是判斷Model1是否存在。如果不存在就創(chuàng)建一個(gè),如果存在就使用這個(gè)Model1。
> 這樣可以將我們新的算法集成到我們現(xiàn)有的小程序中,在這里就需要填入現(xiàn)有的小程序的模型名稱,也就是從中可以選擇我們的小程序名稱。那么這一步成功之后,就來到了Simulink模型文件的設(shè)置過程。在此我們需要找一個(gè)Simulink的實(shí)例程序進(jìn)行講解,我們首先打開Simulink,在Simulink的啟動(dòng)頁(yè)會(huì)有很多的實(shí)例。我們找一個(gè)比如展開這個(gè)stateflow,里面有空白圖、簡(jiǎn)單圖分層圖等等。我們選擇這個(gè)分層圖,就打開了一個(gè)名為untitled的模型,我們看到這個(gè)模型,包含了一個(gè)run和一個(gè)cooldown。這兩個(gè)大的狀態(tài)run了30秒之后,會(huì)冷卻 5秒,然后5秒之后繼續(xù)run,從此循環(huán)往復(fù),而在這個(gè)run的過程中,是每隔1秒就讓輸出在10和1之間切換,這就是當(dāng)前stateflow的簡(jiǎn)單邏輯。
> 我們按esc返回到頂層,可以看到這個(gè)模型只有一個(gè)輸出,我們加一個(gè)示波器來看看波形。按F5運(yùn)行,當(dāng)然這個(gè)運(yùn)行需要將當(dāng)前的工作目錄切換掉,我們可以選擇隨便一個(gè)目錄比如說新建個(gè)文件夾,然后我們回到剛才的模型按F5運(yùn)行成功,那么打開示波器我們可以看到輸出和我們之前的推斷是完全吻合的。也就是運(yùn)行了30秒之后休息5秒,然后繼續(xù)運(yùn)行。我們將這個(gè)模型另存為simple,接下來將這個(gè)示波器刪除,并且添加一個(gè)out接口,將這個(gè)模型配置成可以代碼生成的模型,隨后我們就要配置一下代碼生成的細(xì)節(jié)。
> 我們進(jìn)入模型的設(shè)置,點(diǎn)擊代碼生成,首先要將這個(gè)grt改為ert.tlc。因?yàn)槟繕?biāo)的環(huán)境是嵌入式環(huán)境,同時(shí)勾選僅生成代碼,然后展開代碼生成,進(jìn)入到模板中,將“生成示例主程序”的勾去掉,這樣就不會(huì)自動(dòng)生成main函數(shù)。因?yàn)檫@個(gè)main函數(shù)的文件往往是不會(huì)用的。至此配置完成。我們點(diǎn)擊保存并且關(guān)閉這個(gè)模型。
MATLAB控制模塊
MATLAB Control module /
> 接下來就回到matlab控制模塊中,選擇Simulink模型文件,點(diǎn)擊綠色的箭頭按鈕,選中我們剛才的simple.slx,那么可以看到前兩步過了之后步驟1就算執(zhí)行完成。接下來就到了cache文件夾和codegen文件夾的設(shè)定,那么留空就表示生成到默認(rèn)的位置。我們可以將這兩個(gè)位置改掉,還是點(diǎn)擊綠色的按鈕,然后可以選擇我們的cache文件夾,我們可以新建一個(gè)cache,并且選擇這個(gè)文件夾,那么cache文件夾就已經(jīng)設(shè)置成功。接下來就是codegen,還是一樣,我們可以在cache旁邊建一個(gè)codegen,點(diǎn)擊選擇,那么這兩個(gè)文件夾也就設(shè)置完畢。
> 然后就到了代碼生成的環(huán)節(jié)。我們只要點(diǎn)擊啟動(dòng)Simulink代碼生成,等待代碼生成完畢就可以了。那么生成的代碼就會(huì)存放到剛才設(shè)定的codegen這個(gè)文件夾中。第一次生成會(huì)耗費(fèi)一點(diǎn)時(shí)間,我們需要耐心的等待。那么Simulink的執(zhí)行過程是同步的,而且比較慢,所以TSMaster可能會(huì)報(bào)警?,F(xiàn)在我們可以看到代碼生成已經(jīng)完成。
> 那么接下去就是自動(dòng)復(fù)制已生成的代碼到我們的小程序的代碼庫(kù)里面,點(diǎn)擊之后可以顯示已copy6個(gè)文件,那么接下去第二步就已經(jīng)完成。也就是代碼生成的過程已經(jīng)成功實(shí)現(xiàn),再往下就是代碼集成。代碼集成目的就是將算法給調(diào)用起來,我們點(diǎn)擊編輯小程序的源碼按鈕,打開Model1這個(gè)小程序,我們首先看一下屬性,然后點(diǎn)擊代碼庫(kù)的路徑,可以看到simple.c和.h文件以及其他的一些用到的頭文件。打開這兩個(gè)文件,首先我們看一下simple.h文件,那么這個(gè)文件是一個(gè)接口文件,可以看到這里面有三個(gè)函數(shù),初始化step和terminate函數(shù),我們需要分別將這三個(gè)函數(shù)的調(diào)用拷貝到Model1小程序里面。首先就是要用這個(gè)simple.h頭文件。
> 我們回到小程序,點(diǎn)擊全局定義#include,"simple.h"。那么接下來就是COPY。我們雙擊這個(gè)simple初始化,然后到小程序的初始化事件中,粘貼然后再copy step到我們的小程序的step函數(shù)中,粘貼然后就是terminate,回到我們小程序的停止事件,同樣粘貼,這樣就實(shí)現(xiàn)了函數(shù)調(diào)用。那么需要注意的就是step函數(shù)的周期了,默認(rèn)周期是5毫秒,但模型中肯定不是。我們首先還是打開這個(gè)simple.slx,然后我們到模型的屬性看一下這個(gè)模型的相關(guān)的求解器的屬性。它是定步長(zhǎng),并且步長(zhǎng)是0.1秒,那么0.1秒在TSMaster里面就是100毫秒,雙擊step函數(shù),將周期改為100,那么接下來我們需要觀測(cè)一下out1這個(gè)信號(hào)。
> 我們可以直接在變量點(diǎn)右鍵,添加變量,輸入我們這個(gè)out1,那么就新建了一個(gè)out1的變量,然后我們就需要在代碼里找到這個(gè)變量,那么可以看到這個(gè)extern,這里寫的是outports,那就是simple y這個(gè)變量,它有一個(gè)成員叫out1,就是我們需要用到的變量,我們可以在這里寫下out1.set,把剛才這個(gè)out1拷貝過來,這樣就實(shí)現(xiàn)了變量的賦值。那么小程序就算編寫完畢。
執(zhí)行HIL和SIL的仿真
Perform emulation of HIL and SIL /
> 在此我們可以直接點(diǎn)擊運(yùn)行仿真,那么我們的算法模型其實(shí)就已經(jīng)實(shí)時(shí)的在運(yùn)行,這個(gè)時(shí)候如果需要觀測(cè)信號(hào),首先要啟動(dòng)我們的TSMaster的仿真,然后我們可以打開一個(gè)觀測(cè)窗口,比如說圖形,打開之后我們可以點(diǎn)右鍵添加系統(tǒng)變量,通過內(nèi)部變量,找到model 1的out 1這個(gè)變量,然后我們可以修改他的范圍,比如說改成1—15 -1—15,那么就可以看到這個(gè)圖形的顯示跟我們剛才看到的Simulink示波器畫面是完全一樣的。
> 這個(gè)信號(hào)是可以設(shè)成豎線顯示,這樣就更符合這個(gè)信號(hào)代表的邏輯含義,那么這個(gè)out1的信號(hào)是實(shí)時(shí)刷新的,這就意味著我們可以通過總線接口將此算法模型接入到整車網(wǎng)絡(luò),可以與實(shí)際的控制器進(jìn)行互動(dòng),那么以上就是matlab控制模塊進(jìn)行HIL的簡(jiǎn)單的方法。
以上就是我們本期介紹的TSMaster新功能之MATLAB自動(dòng)化控制模塊,我們下期再見?。ň唧w操作解說可以觀看我們B站視頻哦)
-
自動(dòng)化
+關(guān)注
關(guān)注
28文章
5444瀏覽量
78926
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論