LuoBeice
自學時遇到了一個問題整了好幾天才弄好,有需要的朋友可以借鑒借鑒,
問題描述:有一段很長的matlab程式,希望拿到LabVIEW里面去運行,通常可以使用LabVIEW自帶的“Mathcript節點”和“matlab腳本節點”
(這兩個節點可以在“函式”-“數學”-“腳本和公式”里面找到,如果沒有,則需要下載LabVIEW相應的工具包).但是可能因為我是新手的原因,這兩個
節點用起來很麻煩,“Mathcript節點”我感覺它好像只能識別Matlab里面一些簡單的函式,復雜的(我使用的是一些影像處理的函式)就用報錯,“matlab腳本節點”
使用效果很好(我感覺這個節點就相當于把代碼直接放入Matlab里面去運行),但是缺點是呼叫這個節點時,LabVIEW會自動啟動電腦里面的matlab,
如果電腦里沒有Matlab就會報錯,而且,使用這個節點還會出現點小問題,比如我matlab程式里面有需要外界輸入的函式input,呼叫公式節點的時候就會沒有
這個提示,而且不知道為何,第一次運行程式呼叫這個節點時,LabVIEW總會崩潰,第二次運行程式才會正常,有知道的大佬歡迎指點,
解決辦法:看了一個b站up主“加油小林哥"的視頻(很nice的一個up主),知道了LabVIEW可以呼叫dll(動態連接庫),而我又去搜索了下,Matlab是可以將m檔案
生成dll檔案的,這給了我信心,經過一番搜索,我找到了一個認為可行的方法:首先將一段matlab程式封裝成函式,然后將其轉換成c代碼,在vs中將c代碼生成dll檔案供
LabVIEW使用,我是照著以下博文操作的:https://blog.csdn.net/rmrgjxeivt/article/details/104521287,這個博主很強,朋友們可以去看看,我會把我自己操作的詳細程序
記錄下來,
準備工具(我自己的軟體版本):LabVIEW2021sp1,VS2019,Matlab2019Ra,
前言:
使用Matlab Coder是可以直接生成dll檔案的,但是因為我的Matlab是64位的,生成的dll也是64位的,而我的LabVIEW是32位的,直接呼叫的話會報錯,如下圖所示:

因此,怕麻煩的朋友可以將自己的Matlab換成32的,這樣就能直接生成32的dll供LabVIEW使用了,我這里就相當于使用vs這個”中轉站“來解決這個32位64位不兼容的問題,
方法:
1.在Matlab中新建Function

注意:這里的m檔案保存時,保存的檔案名要和函式名一致,
2.在matlab里面再新建一個m檔案,運行剛才的fuction

運行一下,呼叫剛才的Function,沒有問題,

3.打開coder
Matlab自帶的工具箱,在”App“里可以找到,

4.按照coder的指示一步一步來
輸入函式名,然后點擊右下角的“next”

下面這個頁面不用管,直接next

接下來按照要求定義資料型別,我們可以輸入一個m檔案,coder會自動定義每個資料的型別,我這里輸入的就是上面那個名為test的m檔案,當然也可以自己點擊下面那個
”let me enter..."來自定義輸入輸出的型別,

定義好后按回車,顯示下面這個界面就是coder自己定義好的,(如果是自定義的話可能會不一樣,不過不影響)

點擊next,再點擊“check for issues",顯示如下界面,

注意:我這里全部都是綠色的勾,朋友們如果有的像下圖一樣最后一個不是綠色而是報錯,可以直接忽略,直接點擊”next“,這個不影響,

這個錯誤是因為有的matlab里面沒有MGW-w64編譯器,但重申一遍這個不要緊,有需要的朋友可以自己去安裝一個,具體做法參考:
https://blog.csdn.net/weixin_46428351/article/details/116237962,這樣的話就都是綠色了,
接著點擊next,到了如下界面時,直接點擊”Generate",

編譯成功


5.打開vs2019,生成win32專案,生成dll檔案,
打開之后點擊“新建專案”,找到“window桌面向導”,

配置新專案時選擇默認即可,然后點擊“創建”
新專案這里,將“應用程式型別”這里選擇為”動態連接庫“,”其他選項“這里選擇”空專案“,這樣win32專案就新建好了,

注意:接下來找到”tmwtypes.h"檔案,這一步很重要,是那個博主沒有提到的,我找了好久才摸索出來的(本人也不會vs),
這里搞不好就會報錯“找不到tmwtypes.h"或者”無法打開tmwtypes.h",找到自己的matlab安裝路徑(我自己是通過右擊matlab快捷方式
,點擊”在檔案夾中顯示“找到的)下的“extern\include"檔案夾,里面就有tmwtypes.h檔案,復制,粘貼到matlab生成的c代碼檔案夾下,添加好后
如下圖所示,

接著打開新建的vs專案,在專案名這里右鍵-”添加“-”現有項“,添加上面的"Add.c"檔案,

接著添加新專案,新建一個def檔案,如下圖所示,

添加好之后,顯示如下界面,里面也有”tmwtype.h"頭檔案,也是可以打開的狀態,

接著在def檔案中寫入以下內容,注意:
第一行雙引號內隨意填寫,第二行寫"EXPORTS",第三行寫入函式名“Add”,

再點擊生成解決方案即可,

6.在LabVIEW里面參考dll,
打開LabVIEW2021,新建專案,新建vi,在程式框圖中右擊,“函式”-“互接介面”-“庫與可執行程式”-"呼叫庫函式節點“,路徑和函式選擇好,

引數設定方面:按照實際情況設定就行,




這樣就設定好呼叫庫函式節點了,接下來除錯一下,輸入和在matlab的test.m里面一樣的引數,注意:注意:在節點輸入的時候,在這個例子中,輸出是2*3的陣列,
所以,必須給輸出初始化一個同維度的常量,初始化的值可以隨便給,但不能為空,為空的話,LabVIEW會直接崩潰,點擊運行,結果如下,算是大功告成了,

雖然看起來沒多少作業量,但是這對于我一個初學者來說,屬實不易,這才是一個簡單的函式,而我實際需要封裝的是一大段稀奇古怪的代碼,不知道能否成功,
LabVIEW,MatLab接觸不久,coder,vs沒接觸過,這點東西琢磨了快5天才東拼西湊弄出來,希望對有需要的朋友能提供幫助,也希望大佬們能給出好的建議,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/456948.html
標籤:.NET技术
