劉子杰,王 凱,2
(1.上海理工大學光電信息與計算機工程學院;2.上海出版印刷高等專科學校,上海 200093)
生產(chǎn)生活中電機扮演著至關重要的角色,其中永磁同步電機(PMSM)具有運行可靠性高、轉矩波動小、體積小、控制精度高等特點,在新能源汽車、生產(chǎn)設備、機器人等方面大量使用[1]。永磁同步電機系統(tǒng)雖然在很多方面都有優(yōu)勢,但是它是一個集控制、電氣、機械等領域于一體的復雜系統(tǒng),耦合性高、模型復雜、非線性。為了更好地研究電機系統(tǒng)的復雜特性,一般使用Simulink 等工具進行仿真,但是無法脫離平臺使用,而且模型重用性很差,微服務應運而生。
微服務[2-3]是將單個應用程序實現(xiàn)為一組小型且獨立的服務,服務之間通過輕量級機制相互通信。微服務具有可伸縮、易維護、可獨立部署和可擴展等優(yōu)點。隨著工業(yè)互聯(lián)網(wǎng)的興起,微服務體系架構[4]成為軟件開發(fā)的新趨勢。在此背景下,本文提出一種可將傳統(tǒng)電機模型轉變成微服務并在微服務架構上運行的方法。該方法可提高模型的重用率,模型可脫離平臺運行,可通過網(wǎng)頁對模型進行遠程調(diào)參以及實時查看模型的波形變化。
永磁同步電機模型仿真研究較多。文獻[5]設計了永磁同步電機調(diào)速系統(tǒng)仿真,文獻[6]對永磁同步電機的空間矢量控制進行研究,文獻[7]基于OpenModelica 進行永磁同步電機系統(tǒng)仿真研究,文獻[8]基于Spring Cloud 對微服務架構應用進行研究。這些永磁同步電機建模在使用不同控制策略基礎上采用傳統(tǒng)建模方法進行建模,微服務架構研究也大多是商業(yè)性的。針對上述問題,本文提出一個永磁同步電機模型微服務的實現(xiàn)方法,該方法總結了永磁同步電機建模和商業(yè)微服務的優(yōu)點,以OpenModelica 平臺為建模工具,Spring Cloud 為微服務架構,實現(xiàn)了永磁同步電機微服務。
永磁同步電機模型微服務化步驟如下:①根據(jù)電機運行原理建立數(shù)學模型,使用Modelica 語言[9]進行動態(tài)建模仿真,導出.FMU 文件;②將.FMU 文件通過Python、Java 語言進行封裝調(diào)用;③在微服務框架上進行微服務部署。
Spring Cloud[10]是 由Pivotal團隊研發(fā)用于實現(xiàn)微服務架構應用的框架集合,包括Spring Cloud Consul、Spring Cloud Netflix、Spring Cloud Config 等,它還提供配置管理、服務發(fā)現(xiàn)、數(shù)據(jù)監(jiān)控、熔斷降級、負載均衡等功能,這些功能都可通過Spring Cloud的子項目實現(xiàn),如由服務發(fā)現(xiàn)(Eureka)、智能路由(Zuul)、客戶端負載均衡(Ribbon)等組件組成的Spring Cloud Netflix,可以解決服務間通信、服務注冊發(fā)現(xiàn)、負載均衡等問題;通過Spring Cloud Config 可以統(tǒng)一管理配置,實現(xiàn)統(tǒng)一配置中心。因為Spring Cloud 功能強大,開發(fā)效率高,所以本文將其作為微服務框架。
Modelica 是一種面向對象的語言[11],該語言主要通過文本方式和圖形建模工具兩種方式建模,與一些傳統(tǒng)的建模工具相比優(yōu)勢明顯。如Simulink 仿真需要每個模型都有明確的輸入和輸出信號,因此用戶必須先將組件的微分方程和代數(shù)方程轉換成帶有輸入和輸出的塊,根據(jù)輸入和輸出關系建立組件模型,這種方法使電機的動態(tài)仿真受限于繁瑣和復雜的計算。
Modelica 遵循FMI 標準,F(xiàn)MI 標準是一個在全球廣泛應用、可以實現(xiàn)聯(lián)合仿真和模型重用的接口標準。通過FMI標準可以將模型導出為以.FMU 結尾的文件壓縮包形式,將模型轉化成FMU 文件是將模型微服務化的必備環(huán)節(jié)。目前,基于Modelica 語言進行建模與動態(tài)仿真的平臺很多,如MWorks、Dymola、SimulationX 和OpenModelica 等,其中OpenModelica 是一個由非盈利組織(OSMC)研發(fā)的開源仿真平臺。綜上所述,傳統(tǒng)建模多使用Simulink 進行動態(tài)仿真,使用OpenModelica 平臺進行PMSM 建模是一種嘗試,采用OpenModelica 是本文建模平臺的最佳選擇。
電機模塊、控制驅動模塊[12]以及逆變器模塊組成了基本的永磁同步電機運行系統(tǒng)。本文基于OpenModelica 平臺分別對上述3 個模塊進行建模,然后根據(jù)各個模塊預留的接口進行連接,拼裝成一個完整的系統(tǒng)后進行電機動態(tài)仿真。模塊化建模有很多優(yōu)點,例如可以提高模塊的復用率、節(jié)約建模時間,可拓展性高,可根據(jù)需要隨時在該模塊上添加組件,同時不會影響其他模塊運行等。
作為一項成熟的技術,永磁同步電機應用非常廣泛,該電機由一個定子和一個轉子組成。通過兩相同步旋轉d-q 坐標系搭建永磁同步電機數(shù)學模型[13]。為了簡化分析步驟,假設定子和轉子的繞組在空間上呈正弦分布,不考慮磁滯和傅科電流損耗,機器參數(shù)在運行過程中恒定,不考慮飽和效應和集膚效應。
經(jīng)過坐標系旋轉后,定子電壓方程表示為:
式(1)中,umq、umd分別代表經(jīng)過坐標旋轉后的定子電壓,Rs為定子電阻,imq、imd分別代表q、d 軸上的定子電流,Ψmq、Ψmd分別代表q、d 軸上的定子磁鏈大小,ωv為轉子角速度。
磁鏈方程如下:
式(2)中,Ψfm代表永磁體磁鏈,Lq、Ld分別代表q、d 軸上的定子電感。
根據(jù)磁鏈方程可計算出電磁轉矩方程如下:
如果永磁同步電機為表貼式永磁電動機[14],則Ld=Lq,即無凸級效應,沒有轉矩磁阻。上式可進一步化簡為:
式(3)、式(4)中的np代表極對數(shù)。
轉子運動方程如下:
式(5)中,TL代表負載轉矩;J代表轉動慣量。
根據(jù)上述方程以及永磁同步電機運行原理,使用OpenModelica 對電機模塊進行非因果建模。復用Modelica語言標準庫,通過組件建模建立電機模塊仿真,如圖1 所示。該電機模型主要包含永磁體、三相空間相量變換模塊(spacePhasorS)、定子電感、電阻、氣隙(airGapR)模塊等。輸入電流通過三相空間相量變換模塊進行Park 變換。氣隙模塊結合按式(4)計算磁鏈并且輸出。通過恒電流方式勵磁等價于永磁體模塊。另外,為了更符合現(xiàn)實系統(tǒng),在圖1 中還添加了損耗模塊。一般來說,永磁同步電機損耗主要由鐵耗、銅耗、雜散耗和機械損耗組成。對損耗機理的分析可查閱文獻[15-16]。
Fig.1 Motor simulation model圖1 電機仿真模型
本文討論的永磁同步電機是不具有位置傳感器的電機[17-18],主要有兩種方法驅動該類型電機:①矢量控制[19]。磁極位置主要通過電機電流、電動勢以及d-q 軸上的電感來判斷;②V/F 開環(huán)控制[20]。V/F 控制中的V 和F 分別代表輸出電壓和頻率,也就是通過V 和F 成正比來保證恒定磁通。OpenModelica 平臺標準庫中有VFcontroller 模塊,可以直接使用,所以本設計選擇V/F 開環(huán)控制。
在運行系統(tǒng)中,PMSM 運行需要交流電供電,直流電源若想驅動電機則需要通過DC/AC 逆變器變成三相交流電,并經(jīng)過電機模型內(nèi)部的Park 變換才可以驅動電機。本文的逆變器模型以簡單方式建模,使用OpenModelica 標準庫設計逆變器模型。理想狀態(tài)下,逆變器的輸入輸出功率相等,所以直流端的輸入電流可通過式(6)計算得到。另外,交流端功率由OpenModelica 組件庫中的功率傳感器測量,直流端電壓由電壓傳感器測量,再通過絕對值模塊求絕對值,信號電流模塊可以控制直流端電流大小。逆變器模型設計如圖2 所示。
Fig.2 Inverter model圖2 逆變器模型
基于OpenModelica 平臺將封裝好的逆變器模型、電機模型、V/F 控制器模型、模擬負載等通過接口進行連接,最終達到PMSM 動態(tài)仿真目的,具體連接如圖3 所示。電機模型的正常運行需要設置合適的參數(shù),smpmData 模塊主要對電機參數(shù)進行設置,角度傳感器模塊主要是檢測轉子滯后角,ramp 模塊主要提供斜坡信號。
Fig.3 PMSM system simulation model圖3 永磁同步電機系統(tǒng)仿真模型
電機模型在OpenModelica 平臺上建立和拼接完成后,因為平臺遵循FMI 標準,所以模型可以輸出FMU 壓縮文件。對FMU 文件進行封裝調(diào)用,實現(xiàn)模型的微服務化。
根據(jù)導出的FMU 壓縮包還不能實現(xiàn)模型微服務,需要采用Python、Java 語言進行封裝調(diào)用,以及在微服務架構上進行部署。操作流程如圖4 所示。
Fig.4 Model microservice implementation process圖4 模型微服務實現(xiàn)流程
API[21]指應用程序編程接口,描述了與外界進行通信的規(guī)則:怎樣接受響應和發(fā)送請求。顧名思義,RESTful API[22]就是具有RESTful風格的應用程序編程接口,其 中RESTful 在互聯(lián)網(wǎng)中指一個軟件架構。RESTful API的實現(xiàn)需要兩步操作:①在Python 中安裝pyfmi 包,使得Python 可以調(diào)用FMU 文件;②使用flask 框架對第①步中調(diào)用的文件進行處理,生成帶有RESTful API 接口的服務,部分代碼如圖5 所示。
Fig.5 RESTful API interface implementation code圖5 RESTful API 接口實現(xiàn)代碼
微服務封裝后依靠IDEA 開發(fā)工具搭建Eureka 服務注冊中心。搭建Eureka 服務端(即服務注冊中心)和客戶端(電機模型微服務)方法大同小異,以搭建Eureka 服務端為例,步驟如下:①一個maven 項目由IDEA 開發(fā)工具建立;②將項目相關的依賴添加到pom.xml 文件中;③建立一個項目啟動類;④在resources 文件夾下建立一個以.yml 結尾的配置文件,并在該文件下配置Eureka 服務端的端口號和IP 地址等;⑤配置結束啟動類運行;⑥在瀏覽器中輸入Eureka 服務端的端口號和IP 地址,查看服務器端啟動情況。Eureka 服務端結構如圖6 所示。
Fig.6 Eureka server structure圖6 Eureka 服務端結構
Eureka 客戶端即電機模型微服務,將該服務在Eureka服務端進行注冊并運行啟動類。在瀏覽器中輸入Eureka服務端的端口號和IP 地址,即可看到運行界面,如圖7所示。
Fig.7 Eureka service registry center圖7 Eureka 服務注冊中心
從服務注冊中心的界面可以看到端口號為8503的電機模型微服務,為驗證電機模型微服務的正確性,對該微服務進行調(diào)用,看是否能產(chǎn)生正確波形。
電機模型微服務中的默認仿真時間為0~10s,該模型由ramp 模塊產(chǎn)生一個斜率為1的頻率信號驅動,在0~1s的時間內(nèi)頻率信號從0 增加到50 Hz,并在后續(xù)運行過程中保持不變。為了驗證電機模型微服務界面的參數(shù)設置是否有效,同時便于觀察波形,電機模型微服務實驗時將界面中的仿真開始時間和結束時間設置為0 和2。另外,雖然可以在注冊中心觀察到電機模型微服務,但是不能判斷電機模型微服務是否能夠正常輸出波形,以及輸出的波形是否精確,本文通過運行電機模型微服務進行驗證。
在電機模型微服務運行過程中,V/F 控制器產(chǎn)生的電壓控制信號隨著ramp 模塊輸出的斜坡信號變化而變化,逆變器輸出電壓的大小由V/F 控制器決定,逆變器輸出的電壓信號如圖8 所示。
Fig.8 Phase voltage signal圖8 相電壓信號
負載力矩變化以及電機轉速曲線如圖9、圖10 所示。從圖9 可以看出,電機在1.2s 時添加了一個負載。從圖10中可以看出:因為電機啟動不是空載運行,所以轉速上升很快,在1.1s 左右達到電機額定轉速,在1.2 s 時對電機施加一個負載,負載的加入使電機轉速在1.2s 處產(chǎn)生振蕩,短時間內(nèi)會恢復同步轉速。
Fig.9 Load moment variation圖9 負載力矩變化
Fig.10 Motor speed curve圖10 電機轉速曲線
從上述仿真結果波形圖可以看出,電機模型微服務的仿真波形和實際分析結果一樣,界面參數(shù)設置有效。實驗證明將傳統(tǒng)模型轉變成微服務的設計可行。
隨著工業(yè)互聯(lián)網(wǎng)的發(fā)展,工業(yè)微服務變得非常流行。本文在傳統(tǒng)建模仿真基礎上,使用Python、Java 語言對通過OpenModelic 平臺導出的FMU 文件進行封裝調(diào)用,形成電機模型微服務,最后部署在Spring Cloud 架構上。通過對電機模型微服務的實驗仿真可知,將傳統(tǒng)模型轉變成微服務是可行的。雖然實驗已經(jīng)達到預期效果,但是微服務架構中部署的微服務用例只有電機模型微服務,后續(xù)研究將逐漸完善注冊中心的微服務用例,并通過用例之間的接口進行組合,形成具有新功能的微服務。