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