性色av一区二区三区,天堂中文а√在线,天堂…在线最新版资源,色诱久久久久综合网ywww

手機(jī)版
位置:筑能財(cái)經(jīng) > 滾動(dòng) >

Simulink模型打包發(fā)布:使用MATLAB Engine和PyQt

來源:嗶哩嗶哩 | 2023-07-29 10:53:05

為實(shí)現(xiàn)一些相對復(fù)雜的系統(tǒng)開發(fā)或建模仿真,可以借助MathWorks? Simulink在圖形化的工程界面中編輯和測試模型,或者使用MathWorks提供的現(xiàn)成實(shí)例與模塊以零基礎(chǔ)快速搭建所需的仿真環(huán)境。但若要讓他人運(yùn)行自己搭建的模型,并根據(jù)需要自行修改部分模型參數(shù),或是發(fā)布為可供他人使用的仿真工具,則需要將模型打包為獨(dú)立的可執(zhí)行文件,并設(shè)計(jì)前端圖形化界面以查看仿真輸出結(jié)果、修改仿真參數(shù)。

模型打包的官方推薦做法是使用MATLAB?自帶的Simulink Compiler工具,將編譯好的 Simulink模型和用于設(shè)置、運(yùn)行和分析仿真的 MATLAB代碼一起打包,且可以附帶由 MATLAB App設(shè)計(jì)工具設(shè)計(jì)的UI。該方法理論上實(shí)現(xiàn)不難,打包出的程序只需Runtime環(huán)境即可運(yùn)行。但MATLAB App設(shè)計(jì)工具并非主流前端設(shè)計(jì)工具,需要學(xué)習(xí)成本,且制作的UI界面較為簡單,不滿足對前端界面要求較高的場景;此外,打包生成的代碼可讀性較差,網(wǎng)上現(xiàn)有的案例資源等又極少,一旦報(bào)錯(cuò),很難定位錯(cuò)誤,效率不高。


(資料圖)

解決方案提出:

為解決該問題,就需要拋棄官方提供的MATLAB App設(shè)計(jì)工具和Simulink Compiler打包工具,自行設(shè)計(jì)前端界面、獲取Simulink運(yùn)行數(shù)據(jù)并打包發(fā)布。一種可行的方案是通過主流前端設(shè)計(jì)工具制作前端GUI界面,并通過外部會(huì)話訪問MATLAB,以此控制Simulink模型運(yùn)行并獲取運(yùn)行時(shí)的數(shù)據(jù),如可以采用官方提供的用于Python的MATLAB Engine API(/help/matlab/matlab_external/),通過Python會(huì)話在后臺調(diào)用MATLAB,將仿真實(shí)時(shí)狀態(tài)和模型參數(shù)等顯示在以PyQt制作的前端UI界面中,最后通過Pyinstaller打包發(fā)布。

該方案可以實(shí)現(xiàn)復(fù)雜的前端軟件設(shè)計(jì)與Simulink模型仿真相結(jié)合,且體積不大、兼容性較好,但需安裝有MATLAB環(huán)境而非Runtime,即發(fā)布給他人時(shí)除軟件本體外還需附帶完整MATLAB安裝包或?qū)Ψ揭寻惭bMATLAB(若未安裝則Simulink仿真部分不可用,但不影響軟件其他功能)。本質(zhì)上Simulink模型并沒有被編譯發(fā)布,只是調(diào)用了相關(guān)api接口使模型在后臺仿真運(yùn)行。官方文檔(/help/matlab/)中也指出了:

“MATLAB Engine API for Python 可提供一個(gè)包,供 Python 將 MATLAB 作為計(jì)算引擎來調(diào)用。引擎應(yīng)用程序需要已安裝版本的 MATLAB;您無法在只有 MATLAB Runtime 的機(jī)器上運(yùn)行 MATLAB Engine。”

目前,該方案在網(wǎng)上可供參考的資源不多,文中可能存在錯(cuò)誤和可優(yōu)化的部分。我使用的Simulink模型為純電動(dòng)汽車建模(EvReferenceApplication),模型細(xì)節(jié)可參考的我的另一篇文章(/article1)。前端GUI界面使用PyQt5設(shè)計(jì),制作一個(gè)小型仿真系統(tǒng)軟件界面來控制電動(dòng)汽車模型仿真的啟停以及部分模型參數(shù)的修改,同時(shí)實(shí)時(shí)讀取并顯示仿真輸出數(shù)據(jù)。軟件界面設(shè)計(jì)需在保證功能完整的前提下盡量高效美觀。

安裝用于 Python 的 MATLAB Engine API

安裝前需要確認(rèn)電腦中的Python和MATLAB版本是否兼容,可以查看官方文檔頁面。(/support/requirements/)

在MATLAB根目錄\extern\engines\python文件夾中找到,即自動(dòng)安裝腳本文件;控制臺進(jìn)入該目錄(若Python安裝在虛擬環(huán)境則要在對應(yīng)虛擬環(huán)境終端進(jìn)入),輸入指令python install,安裝會(huì)自動(dòng)執(zhí)行。安裝完成后MATLAB Engine會(huì)以Python包的形式存在,可以通過pip list查詢。

除此之外,MATLAB R2022b及以上也可以通過pip安裝,詳情可參考官方文檔。(/help/matlab/matlab_external/)

MATLAB Engine需要讀取_文件中的地址信息來調(diào)用電腦中的MATLAB,該文件默認(rèn)存放于Python包文件夾\matlab\engine中,且僅在安裝時(shí)自動(dòng)生成,記錄本機(jī)MATLAB地址。若本機(jī)MATLAB地址改變、_文件丟失等都會(huì)導(dǎo)致尋址失敗。因此不難想到,若要在打包發(fā)布時(shí)將MATLAB Engine以python包的形式包含,移植到他人電腦中運(yùn)行,則必須手動(dòng)修改_文件中的地址信息為對方電腦中的MATLAB地址,否則無法正常運(yùn)行。

MATLAB Engine需要讀取的文件地址信息(即_文件)如下:

修改python包代碼

為保證MATLAB Engine在打包移植后仍能正常讀取配置文件,獲取目標(biāo)系統(tǒng)環(huán)境信息及MATLAB地址,需對包中部分代碼進(jìn)行修改。

在本機(jī)Python包文件夾\matlab\engine\__init__.py中找到調(diào)用_文件所在代碼:

_arch_filename = (_module_folder, "_")

將其改為:

_arch_filename = (('.'), "")

其中“”可以是任意文本文件,需自行編寫代碼,在程序運(yùn)行時(shí)根據(jù)當(dāng)前系統(tǒng)環(huán)境在程序運(yùn)行根目錄下生成該文件,從而實(shí)現(xiàn)MATLAB Engine包尋址。

在python中調(diào)用MATLAB Engine

官方文檔(/help/matlab/matlab_external/)中給出了在python中調(diào)用MATLAB Engine的代碼示例和說明可供參考,但大多較為簡略,且實(shí)際編程時(shí)還需結(jié)合以編程方式運(yùn)行仿真(/help/simulink/ug/),用代碼代替Simulink? UI 與仿真進(jìn)行交互,如果以前從未接觸過Simulink的代碼形式,可能遇到不少問題。本仿真系統(tǒng)中用到的部分代碼見下表。

其中,本仿真系統(tǒng)用到的部分set_param中的parameter參數(shù)與對應(yīng)的value值見下表。需注意表中所有參數(shù)均為字符串。

另外需要注意的是,在python中調(diào)用MATLAB Engine相當(dāng)于訪問外部會(huì)話,屬于耗時(shí)操作,若寫在主程序線程中將會(huì)導(dǎo)致線程阻塞,影響前端GUI界面運(yùn)行,需要利用多線程通信來解決該問題。

打包發(fā)布

使用pyinstaller打包發(fā)布python程序,但pyinstaller無法正確識別MATLAB Engine包,此時(shí)需要手動(dòng)復(fù)制該包;若需要打包為單一可執(zhí)行程序(.exe),則需要配置hooks來添加指定包。

在主程序.py目錄下新建文件夾,命名為hooks,其內(nèi)新建py文件,內(nèi)容如下:

from import collect_all

datas, binaries, hiddenimports = collect_all('matlab')

打包時(shí)額外添加指令:--additional-hooks-dir=hooks。如:

pyinstaller -F -w --additional-hooks-dir=hooks 主程序.py

即可正確打包為單一可執(zhí)行程序。

由于B站專欄格式限制,部分內(nèi)容或代碼可能存在格式異常。原文內(nèi)容請前往/article1

標(biāo)簽:

精彩放送

新聞資訊

  1. 【焦點(diǎn)復(fù)盤】大金融板塊引領(lǐng)指數(shù)逼空上漲 中信證券3年來罕見漲停 新一輪行情正式開啟?
  1. 廣東防風(fēng)應(yīng)急響應(yīng)降為Ⅳ級 仍需防范次生災(zāi)害
  1. 1688陶管家官網(wǎng)(1688陶管家)
  1. 行政拘留!以虛假證明、惡意投訴騙取關(guān)懷,招行信用卡堅(jiān)決拒絕
  1. 常寶華和侯寶林誰的輩分高_(dá)馬三立和侯寶林誰輩分高
  1. 一甲基二氯氫硅烷商品報(bào)價(jià)動(dòng)態(tài)(2023-07-28)
  1. 高等數(shù)學(xué)常用導(dǎo)數(shù)(常用導(dǎo)數(shù))
  1. 高質(zhì)量發(fā)展調(diào)研行|“鄉(xiāng)村合伙人”唱響山鄉(xiāng)“振興曲”
  1. 天晟新材漲20.04%
  1. 首發(fā)陣容強(qiáng)大 新出土文物重磅亮相 三星堆博物館新館來了
  1. 紅星閥門5.3*2.2米大型水利閘門成功投產(chǎn)并交付
  1. 宮崎駿封鏡之作《男孩和蒼鷺》 成為多倫多揭幕片
  1. 高質(zhì)量發(fā)展調(diào)研行|“鄉(xiāng)村合伙人”唱響山鄉(xiāng)“振興曲”
  1. “蓉火”傳遞 青春與夢想交相輝映
  1. 大運(yùn)會(huì),成都準(zhǔn)備好了
  1. 凡人微光|成為閃光的自己
  1. 科普|發(fā)胖、爆痘、體毛多,看生殖醫(yī)生如何“相面識病”
  1. 這是一支熊貓含量“超標(biāo)”的視頻
  1. 云意電氣(300304)7月28日主力資金凈賣出409.39萬元
  1. 習(xí)近平和彭麗媛為出席成都第31屆世界大學(xué)生夏季運(yùn)動(dòng)會(huì)開幕式的國際貴賓舉行歡迎宴會(huì)
  1. 孕產(chǎn)婦護(hù)理專家方案(關(guān)于孕產(chǎn)婦護(hù)理專家方案簡述)
  1. 石榴種植方法盆栽 石榴種植方法
  1. 梁家輝劉嘉玲是夫妻嗎知乎(梁家輝劉嘉玲是夫妻嗎)
  1. 協(xié)鑫集成首個(gè)TOPCon電池項(xiàng)目投產(chǎn)
  1. 交通運(yùn)輸部啟動(dòng)防御臺風(fēng)I級響應(yīng)
  1. 獨(dú)家視頻丨習(xí)近平:建立中格戰(zhàn)略伙伴關(guān)系 把雙邊關(guān)系定位提高到新水平
  1. 顛覆認(rèn)識:揭秘起亞EV技術(shù)流的真正實(shí)力
  1. 起底上海被指低俗營銷咖啡廳 被指低俗營銷咖啡廳剛獲食品許可證
  1. 白酒股震蕩走強(qiáng),貴州茅臺漲超3%
  1. 孕產(chǎn)婦實(shí)用醫(yī)學(xué)百科(關(guān)于孕產(chǎn)婦實(shí)用醫(yī)學(xué)百科簡述)
  1. 趙又廷 家境(趙又廷家是豪門嗎)
  1. 快手怎么做營銷?有哪些營銷模式?
  1. 碧玉青玉白玉墨玉
  1. 兩次領(lǐng)先都不贏,2-2AC米蘭又受挫,遭斑馬軍團(tuán)阻擊,連續(xù)2場不勝
  1. 榮旗科技7月28日加速下跌
  1. 再傳利好消息!樓市,又要熱鬧起來了?
  1. 崗石圖片(崗石)
  1. 物理暴擊寶珠名字(物理暴擊寶珠)
  1. 墨玉怎么看是哪個(gè)產(chǎn)地
  1. 何向榮帶隊(duì)在天津等地考察學(xué)習(xí)
  1. 10股獲基金調(diào)研 美??萍甲钍荜P(guān)注
  1. 擺脫頑固性便秘!南華醫(yī)院全科醫(yī)學(xué)科腸菌移植解憂愁
  1. 唐宋詩人愛題壁
  1. Mysteel調(diào)研:全國建筑鋼材本周及下周停復(fù)產(chǎn)情況統(tǒng)計(jì)(2023年7月28日)
  1. 紅米12c可以刷什么系統(tǒng)
  1. 2023安徽池州市考試錄用公務(wù)員錄用手續(xù)辦理通知(六)
  1. 證券ETF基金(512900)漲4.20%,天風(fēng)證券、太平洋漲停
  1. 國內(nèi)需求不足,應(yīng)加大宏觀調(diào)控力度
  1. 世界氣象組織表示 今年7月或?qū)⒊蔀橛杏涗浺詠碜顭岬脑路?/a>
  1. 承達(dá)集團(tuán)旗下公司年內(nèi)被起訴逾70次,營收凈利連續(xù)兩年下滑
  1. 中信建投:美聯(lián)儲(chǔ)本輪加息周期或?qū)㈦A段性結(jié)束 為A股反彈創(chuàng)造有利窗口
  1. 華西證券給予華能國際買入評級
  1. 女足今晚變陣迎戰(zhàn)海地隊(duì)
  1. 關(guān)注 | 李凱爾與中國男籃會(huì)合 大概率不會(huì)出戰(zhàn)與埃及熱身賽
  1. 男籃世界杯 | 曾凡博腰部不適 正在進(jìn)行恢復(fù)治療
  1. 艾伯維發(fā)布2023年第二季度業(yè)績
  1. 風(fēng)暴眼 | 國足主帥星夜返回籌備世預(yù)賽 9月熱身第2個(gè)對手難覓
  1. 大金融股持續(xù)走高 財(cái)富趨勢漲超10%
  1. 3項(xiàng)違法事實(shí)!陜煤集團(tuán)1800萬噸煤礦又被罰了!
  1. 遙感三十六號衛(wèi)星順利升空 長征火箭連續(xù)150次發(fā)射成功創(chuàng)紀(jì)錄
  1. 張予曦演過的電影有哪些(張予曦演過赤狐先生嗎)
  1. 清鎮(zhèn)市青龍山街道:當(dāng)好和諧社會(huì)“保衛(wèi)者”給群眾看得見的安全感
  1. 菏澤一小學(xué)老師手繪肖像 送給80多名畢業(yè)學(xué)生
  1. 美騰科技:7月27日融資買入460.44萬元,融資融券余額4009.8萬元
  1. A股市場投資策略周報(bào):政治局會(huì)議一錘定音 市場信心將逐步提振
  1. 麥當(dāng)勞二季度利潤接近翻番 中國需求推動(dòng)國際特許市場銷售額增14%
  1. 原創(chuàng)丨一個(gè)車皮來大慶的老侯走了
  1. 房地產(chǎn)ETF(512200)漲0.90%,濱江集團(tuán)漲4.61%
  1. 東方甄選旗下抖音自營品店鋪被關(guān)三天原因曝光:講解配料表露出商品包裝二維碼 被判定引流
  1. 今年已虧20%!還能拿住嗎?
  1. 黃白玉牌里有氣泡
  1. AMD發(fā)R9 7945HX3D移動(dòng)處理器 128MB超大緩存ROG獨(dú)占
  1. 掃清肝炎防治路上的“攔路虎”
  1. 上半年重慶汽車消費(fèi)補(bǔ)貼3000萬元 惠及1.1萬人,帶動(dòng)銷售額19.13億元
  1. 青海三江源牧民攝影師:用相機(jī)呈現(xiàn)生態(tài)影像長卷
  1. 【開盤】A股三大股指集體低開,滬指逼近3200點(diǎn)關(guān)口
  1. 緊急提醒:不建議兒童使用!
  1. 通遼:2023年食品安全風(fēng)險(xiǎn)預(yù)警交流會(huì)商會(huì)議召開
  1. 河南援非醫(yī)療50年:“中國白求恩”梅庚年遺志代代傳續(xù)
  1. 多位患者治療僅過半程 九州牙管家醫(yī)院關(guān)門一月引不滿
  1. 河北省第十四屆人民代表大會(huì)常務(wù)委員會(huì)公告(第8號)
  1. 杭州啟動(dòng)地鐵志愿服務(wù)共建項(xiàng)目 用 “有愛”助力“無礙”
  1. 雙臺風(fēng)來襲!剛剛,我市發(fā)布臺風(fēng)藍(lán)色預(yù)警!
  1. 中國博物館參觀“護(hù)照” 記錄參觀歷史之旅
  1. 上半年用電加速回升 產(chǎn)業(yè)優(yōu)化顯效
  1. 中信建投:新消費(fèi)何去何從——日本資產(chǎn)負(fù)債表“躺平”后消費(fèi)并非“佛系”
  1. 遼寧:“十四五”時(shí)期培育認(rèn)定約20個(gè)特色產(chǎn)業(yè)集群
  1. 摩根士丹利基金方旭赟:善用大類資產(chǎn)配置策略管理“固收+”產(chǎn)品
  1. 中老年想要養(yǎng)生該如何飲食?飲食清單都在這,照著吃或能長壽
  1. 低位增配權(quán)益 公募FOF“騰籠換鳥”布局后市
  1. 首款基金投顧參與的家庭服務(wù)信托今日面市
  1. 臺風(fēng)“杜蘇芮”即將在福建惠安到廈門一帶沿海登陸
  1. 二季度資金追捧 多只ETF規(guī)模增長居前
  1. 7月27日基金凈值:工銀金融地產(chǎn)混合A最新凈值2.344,漲0.26%
  1. “9+N”產(chǎn)業(yè)支撐明顯,煙臺有色及貴金屬產(chǎn)業(yè)產(chǎn)值邁上千億級
  1. 不只是快樂:“村超”給中國西南小城帶來了什么?
  1. 九豐能源07月27日獲滬股通增持12.54萬股
  1. 精檢細(xì)修保安全
  1. 免費(fèi)安全工程師視頻,免費(fèi)安全工程師視頻軟件
  1. 邪光斬裝備搭配_邪光