技術領域
本發(fā)明屬于機械仿真技術領域,具體而言涉及一種基于Modelica的建模仿真工具軟件。
背景技術:
Modelica是國際仿真界于1997年提出的一種開放的全新多領域統(tǒng)一建模語言,它歸納和統(tǒng)一了先前多種建模語言,且融合了鍵合圖的非因果建模思想、Java語言的面向對象技術和Matlab的數(shù)值與矩陣機制,因而具備極其強大的建模功能。面向對象性和非因果性是Modelica 語言最大的優(yōu)點。面向對象的建模方法具有數(shù)據封裝、分層、連接和繼承等特征,易于減少錯誤的發(fā)生并容易實現(xiàn)模型的重用。所謂非因果性建模,就是以一種中性、自然的形式表達模型方程,從而不必更多的考慮計算順序,避免了對模型方程的繁瑣推導,從而提高了建模效率,并使部件模型易于被重復使用。Modelica語言采用陳述式、基于方程的非因果建模方法建立模型,通過定義接口,使模型接口的標準化,因此采用Modelica建??梢允刮锢硐到y(tǒng)各子系統(tǒng)之間既能完全獨立又可互相統(tǒng)一。
基于擴展性的考慮,Modelica支持以外部函數(shù)的方式調用C/C++、Python等多種編程語言函數(shù),在傳統(tǒng)的Modelica語言建模工具軟件中,僅支持以文本編輯的方式引入外部函數(shù),需要以Modelica語言編碼制定外部函數(shù)的來源、參數(shù)和描述信息等,若能以圖形化的方式進行外部函數(shù)編輯,不僅能夠提高界面友好性,使軟件易于上手,對于不熟悉Modelica語法的使用者來說,還能自動根據用戶圖形化操作生成Modelica代碼,減少工作量。
技術實現(xiàn)要素:
為克服現(xiàn)有技術中的不足,本發(fā)明的目的在于提供一種Modelica外部函數(shù)圖形化編輯系統(tǒng),該系統(tǒng)可供用戶通過圖形化用戶界面,將外部函數(shù)封裝為Modelica函數(shù),并將Modelica函數(shù)與模型組件進行關聯(lián),從而實現(xiàn)組件調用外部函數(shù)。
本發(fā)明的另一目的在于提供一種Modelica外部函數(shù)圖形化編輯系統(tǒng)的實現(xiàn)方法。
為實現(xiàn)上述技術目的,達到上述技術效果,本發(fā)明通過以下技術方案實現(xiàn):
一種Modelica外部函數(shù)圖形化編輯系統(tǒng),其包括一輸入參數(shù)模塊、一函數(shù)編輯模塊、一輸出變量模塊和一代碼生成模塊;
所述輸入參數(shù)模塊對應于可視化的輸入參數(shù)配置面板,采集用戶配置的兩個外部函數(shù)配置項,并傳遞給所述代碼生成模塊,所述的兩個外部函數(shù)配置項分別為輸入參數(shù)類型和輸入參數(shù)名稱;
所述輸出變量模塊對應于可視化的輸出變量配置面板,采集用戶配置的另外兩個外部函數(shù)配置項,并傳遞給所述代碼生成模塊,所述的另外兩個外部函數(shù)配置項分別為輸出變量類型和輸出變量名稱;
所述函數(shù)編輯模塊對應于可視化的外部函數(shù)編輯面板,所述外部函數(shù)編輯模塊可以直接輸入函數(shù)代碼或者指定函數(shù)鏈接庫位置,所述函數(shù)編輯模塊采集所述函數(shù)代碼的信息或者所述函數(shù)鏈接庫位置的信息傳遞給所述代碼生成模塊;
所述代碼生成模塊采集所述輸入參數(shù)模塊、所述輸出變量模塊和所述函數(shù)編輯模塊的數(shù)據,分別通過語法解析,信息有效性和完整性鑒別,最后生成符合Modelica語法的,已被封裝為Modelica外部函數(shù)的Modelica function組件,該組件可以直接被其他模型使用,實現(xiàn)一次編輯,重復利用。
本系統(tǒng)的工作邏輯如下:
所述輸入參數(shù)模塊、所述函數(shù)編輯模塊和所述輸出變量模塊開放給用戶用來設置輸入參數(shù)信息、輸出參數(shù)信息以及編輯外部函數(shù)內容,這些信息向下傳遞給代碼生成模塊,根據用戶的配置自動生成基于Modelica語法的模型組件,實現(xiàn)以可視化操作的方式將其他程序語言的函數(shù)封裝為Modelica外部函數(shù)。
一種Modelica外部函數(shù)圖形化編輯系統(tǒng)的實現(xiàn)方法,其包括以下制備步驟:
步驟0:用戶在輸入參數(shù)配置面板配置每個輸入參數(shù)的類型、名稱、注釋以及初始值信息,在輸出變量配置面板配置輸出變量的類型和名稱,在函數(shù)編輯面板配置函數(shù)體內容或函數(shù)動態(tài)庫路徑,這些配置信息傳遞到底層代碼生成模塊;
步驟1:代碼生成模塊獲取上層輸入后解析輸入參數(shù);
步驟2:檢查輸入參數(shù)類型、名稱和注釋是否一一對應,其中,每個輸入參數(shù)必須具有類型和名稱,注釋可以為空,若一一對應,則跳轉到步驟3,否則邏輯結束,輸出錯誤信息;
步驟3:檢查輸入參數(shù)信息是否符合Modelica語義,若均符合語義規(guī)定則跳轉到步驟4,否則邏輯結束,輸出錯誤信息;
步驟4:檢查輸出參數(shù)類型、名稱、注釋是否一一對應,輸出參數(shù)必須具有類型和名稱,注釋可以為空,若一一對應,則跳轉到步驟5,否則邏輯結束,輸出錯誤信息;
步驟5:檢查輸出參數(shù)信息是否符合Modelica語義,若均符合語義規(guī)定則跳轉到步驟6,否則邏輯結束,輸出錯誤信息;
步驟6:生成輸入參數(shù)信息,每個輸入參數(shù)均與Modelica語義中的input對應,對于每個輸入參數(shù)信息,生成如下Modelica代碼:
input 輸入參數(shù)類型 輸入參數(shù)名稱;“輸入參數(shù)注釋”
步驟7:生成輸出變量信息,每個輸出變量均與Modelica語義中的output對應,對于每個輸出變量信息,生成如下Modelica代碼:
out 輸出變量類型 輸出變量名稱;“輸出變量注釋”;
步驟8:校驗函數(shù)配置信息,判斷函數(shù)配置類型,跳轉到步驟9;
步驟9:解析函數(shù)文本是否符合語法規(guī)則,或解析配置函數(shù)庫是否存在及可用,若是則跳轉到步驟10;
步驟10:對于符合規(guī)范的函數(shù)文本生成Modelica代碼,或根據配置的函數(shù)庫路徑生成Modelica代碼;
步驟11:將生成的Modelica代碼進行組合,插入組件名稱,外部函數(shù)編輯器將生成一個Modelica function組件,完成從其他語言函數(shù)到Modelica function外部函數(shù)的自動封裝。
與現(xiàn)有技術相比,本發(fā)明具有以下有益效果:
1)Modelica引用外部函數(shù)的相關語法復雜難懂,通過圖形化的方式自動根據用戶配置將外部函數(shù)進行封裝,降低了建模門檻;
2)圖形化可讀性好,封裝為Modelica外部函數(shù)的Modelica function組件可以直接被其他模型使用,實現(xiàn)一次編輯,重復利用,方便后期修改與維護。
上述說明僅是本發(fā)明技術方案的概述,為了能夠更清楚了解本發(fā)明的技術手段,并可依照說明書的內容予以實施,以下以本發(fā)明的較佳實施例并配合附圖詳細說明如后。本發(fā)明的具體實施方式由以下實施例及其附圖詳細給出。
附圖說明
此處所說明的附圖用來提供對本發(fā)明的進一步理解,構成本申請的一部分,本發(fā)明的示意性實施例及其說明用于解釋本發(fā)明,并不構成對本發(fā)明的不當限定。在附圖中:
圖1示出了本發(fā)明的Modelica外部函數(shù)圖形化編輯系統(tǒng)的系統(tǒng)架構圖。
具體實施方式
下面將參考附圖并結合實施例,來詳細說明本發(fā)明。
參見圖1所示,一種Modelica外部函數(shù)圖形化編輯系統(tǒng),其包括一輸入參數(shù)模塊1、一函數(shù)編輯模塊2、一輸出變量模塊3和一代碼生成模塊4;
所述輸入參數(shù)模塊1對應于可視化的輸入參數(shù)配置面板,采集用戶配置的兩個外部函數(shù)配置項,并傳遞給所述代碼生成模塊4,所述的兩個外部函數(shù)配置項分別為輸入參數(shù)類型和輸入參數(shù)名稱;
所述輸出變量模塊3對應于可視化的輸出變量配置面板,采集用戶配置的另外兩個外部函數(shù)配置項,并傳遞給所述代碼生成模塊4,所述的另外兩個外部函數(shù)配置項分別為輸出變量類型和輸出變量名稱;
所述函數(shù)編輯模塊2對應于可視化的外部函數(shù)編輯面板,所述外部函數(shù)編輯模塊可以直接輸入函數(shù)代碼或者指定函數(shù)鏈接庫位置,所述函數(shù)編輯模塊2采集所述函數(shù)代碼的信息或者所述函數(shù)鏈接庫位置的信息傳遞給所述代碼生成模塊4;
所述代碼生成模塊4采集所述輸入參數(shù)模塊1、所述輸出變量模塊2和所述函數(shù)編輯模塊3的數(shù)據,分別通過語法解析,信息有效性和完整性鑒別,最后生成符合Modelica語法的,已被封裝為Modelica外部函數(shù)的Modelica function組件,該組件可以直接被其他模型使用,實現(xiàn)一次編輯,重復利用。
本系統(tǒng)的工作邏輯如下:
所述輸入參數(shù)模塊1、所述函數(shù)編輯模塊2和所述輸出變量模3塊開放給用戶用來設置輸入參數(shù)信息、輸出參數(shù)信息以及編輯外部函數(shù)內容,這些信息向下傳遞給代碼生成模塊4,根據用戶的配置自動生成基于Modelica語法的模型組件,實現(xiàn)以可視化操作的方式將其他程序語言的函數(shù)封裝為Modelica外部函數(shù)。
一種Modelica外部函數(shù)圖形化編輯系統(tǒng)的實現(xiàn)方法,其包括以下制備步驟:
步驟0:用戶在輸入參數(shù)配置面板配置每個輸入參數(shù)的類型、名稱、注釋以及初始值信息,在輸出變量配置面板配置輸出變量的類型和名稱,在函數(shù)編輯面板配置函數(shù)體內容或函數(shù)動態(tài)庫路徑,這些配置信息傳遞到底層代碼生成模塊;
步驟1:代碼生成模塊獲取上層輸入后解析輸入參數(shù);
步驟2:檢查輸入參數(shù)類型、名稱和注釋是否一一對應,其中,每個輸入參數(shù)必須具有類型和名稱,注釋可以為空,若一一對應,則跳轉到步驟3,否則邏輯結束,輸出錯誤信息;
步驟3:檢查輸入參數(shù)信息是否符合Modelica語義,若均符合語義規(guī)定則跳轉到步驟4,否則邏輯結束,輸出錯誤信息;
步驟4:檢查輸出參數(shù)類型、名稱、注釋是否一一對應,輸出參數(shù)必須具有類型和名稱,注釋可以為空,若一一對應,則跳轉到步驟5,否則邏輯結束,輸出錯誤信息;
步驟5:檢查輸出參數(shù)信息是否符合Modelica語義,若均符合語義規(guī)定則跳轉到步驟6,否則邏輯結束,輸出錯誤信息;
步驟6:生成輸入參數(shù)信息,每個輸入參數(shù)均與Modelica語義中的input對應,對于每個輸入參數(shù)信息,生成如下Modelica代碼:
input 輸入參數(shù)類型 輸入參數(shù)名稱;“輸入參數(shù)注釋”;
步驟7:生成輸出變量信息,每個輸出變量均與Modelica語義中的output對應,對于每個輸出變量信息,生成如下Modelica代碼:
out 輸出變量類型 輸出變量名稱;“輸出變量注釋”;
步驟8:校驗函數(shù)配置信息,判斷函數(shù)配置類型,跳轉到步驟9;
步驟9:解析函數(shù)文本是否符合語法規(guī)則,或解析配置函數(shù)庫是否存在及可用,若是則跳轉到步驟10;
步驟10:對于符合規(guī)范的函數(shù)文本生成如下Modelica代碼:
external "C" data = getIntServer(輸入變量1名稱, 輸入變量1名稱, ……)annotation
(Include="函數(shù)文本")
,或根據配置的函數(shù)庫路徑生成如下Modelica代碼:
external "C" data = getIntServer(輸入變量1名稱, 輸入變量1名稱, ……)annotation (Include = "#include \"頭文件名稱\"",
IncludeDirectory = "頭文件尋址目錄",
Library = "庫文件名稱",
LibraryDirectory = "庫文件尋址目錄");
;
步驟11:將生成的Modelica代碼進行組合,插入組件名稱,外部函數(shù)編輯器將生成一個Modelica function組件,完成從其他語言函數(shù)到Modelica function外部函數(shù)的自動封裝。
以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領域的技術人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內。