同步發(fā)電機(jī)勵磁調(diào)節(jié)器控制程序的二次開發(fā)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種同步發(fā)電機(jī)勵磁調(diào)節(jié)器控制程序的實(shí)現(xiàn)方法,具體來說,涉及一種開發(fā)周期短,擴(kuò)展能力強(qiáng),維護(hù)成本低,相對獨(dú)立運(yùn)行的同步發(fā)電機(jī)勵磁調(diào)節(jié)器控制程序集成嵌入式語言的二次開發(fā)方法。
【背景技術(shù)】
[0002]現(xiàn)有的勵磁調(diào)節(jié)器控制程序一般在實(shí)時操作系統(tǒng)上進(jìn)行直接開發(fā),或者使用組態(tài)軟件以及使用PLC進(jìn)行開發(fā)。雖然使用組態(tài)軟件和PLC進(jìn)行開發(fā)技術(shù)難度低,開發(fā)測試周期短,但是,缺點(diǎn)也很明顯,缺點(diǎn)在于不夠靈活,開發(fā)有局限性;而直接在實(shí)時操作系統(tǒng)上開發(fā)的控制程序設(shè)計靈活,使用方便,但缺點(diǎn)在于編程難度較組態(tài)與PLC開發(fā)高,項目需求的改變需要重新開發(fā)支線程序。上述三種方式開發(fā)出來的應(yīng)用程序?qū)椖啃枨蟮淖兓疾痪哂锌蓴U(kuò)展能力,在需要少量修改、增加、刪除部分信號狀態(tài)、計算方法或控制邏輯的情況下都需要重新修改,測試,下載整個應(yīng)用程序,重要的是如果主線版本的控制程序有升級,各分支版本的控制程序都需要逐個合并,測試升級,這會給程序版本管理帶來麻煩,同時程序維護(hù)成本會隨著支線版本程序的不斷增多而增加。
【發(fā)明內(nèi)容】
[0003]針對以上的不足,本發(fā)明提供了一種開發(fā)周期短,擴(kuò)展能力強(qiáng),維護(hù)成本低,相對獨(dú)立運(yùn)行的同步發(fā)電機(jī)勵磁調(diào)節(jié)器控制程序集成嵌入式語言的二次開發(fā)方法,它包括:
[0004]1)編譯嵌入式腳本程序;
[0005]2)根據(jù)使用的操作系統(tǒng)和編譯器修改腳本程序的運(yùn)行環(huán)境程序,以將腳本程序的運(yùn)行環(huán)境以程序庫的方式鏈入到宿主程序中;
[0006]3)編寫從宿主程序調(diào)用腳本程序的接口函數(shù),以及從腳本程序訪問宿主程序的接口函數(shù);
[0007]4)初始化腳本程序的運(yùn)行環(huán)境和運(yùn)行狀態(tài),在宿主程序中完成從宿主程序調(diào)用腳本程序的接口函數(shù)的注冊,以便于宿主程序通過調(diào)用腳本程序的接口函數(shù)實(shí)現(xiàn)讀入、編譯和執(zhí)行腳本程序。
[0008]為了進(jìn)一步實(shí)現(xiàn)本發(fā)明,所述宿主程序與腳本程序之間的交互采用選擇控制邏輯輸出模式、順序控制邏輯輸出模式、并聯(lián)控制邏輯輸出模式,或者上述三種模式中任意至少兩種的組合邏輯。
[0009]為了進(jìn)一步實(shí)現(xiàn)本發(fā)明,所述腳本程序采用lua腳本語言進(jìn)行二次嵌入式程序開發(fā)而來,宿主程序?yàn)樵趘xworks實(shí)時操作系統(tǒng)上開發(fā)的勵磁調(diào)節(jié)器C語言控制程序,宿主程序通過調(diào)用lua_register函數(shù)向lua語言程序環(huán)境注冊新的C語言程序,這樣lua語言可以直接訪問注冊的新的C語言函數(shù),宿主程序使用lua_getgl0bal C API函數(shù)封裝C語言到lua語言的接口,C應(yīng)用程序通過接口訪問lua語言程序。
[0010]為了進(jìn)一步實(shí)現(xiàn)本發(fā)明,所述選擇控制邏輯輸出模式是通過選擇開關(guān)來選擇運(yùn)行宿主程序,還是運(yùn)行腳本程序。
[0011]為了進(jìn)一步實(shí)現(xiàn)本發(fā)明,所述順序控制邏輯輸出模式是通過選擇開關(guān)選擇是否將腳本程序串聯(lián)到宿主程序中。
[0012]為了進(jìn)一步實(shí)現(xiàn)本發(fā)明,所述并聯(lián)控制邏輯輸出模式是通過選擇開關(guān)選擇是否將腳本程序與宿主程序并行運(yùn)行。
[0013]為了進(jìn)一步實(shí)現(xiàn)本發(fā)明,所述宿主程序通過判斷邏輯選擇開關(guān)的位置信息來確定是否執(zhí)行腳本程序。
[0014]為了進(jìn)一步實(shí)現(xiàn)本發(fā)明,當(dāng)腳本程序的腳本編譯、執(zhí)行出現(xiàn)錯誤時,腳本程序立刻暫停執(zhí)行,腳本程序?qū)ⅰ俺霈F(xiàn)錯誤”的錯誤代碼返回給宿主程序,由宿主程序控制選擇開關(guān)切換至OFF位置,同時將獲取的錯誤位置,錯誤代碼和錯誤時間信息輸出。
[0015]本發(fā)明的有益效果:
[0016]1、本發(fā)明的二次開發(fā)的腳本程序的源碼可以動態(tài)的被宿主程序從文件系統(tǒng)加載到C語言應(yīng)用程序中,并對腳本程序的代碼進(jìn)行編譯、運(yùn)行、暫停或退出,這些操作不影響宿主程序其它功能的正確性;另外,腳本程序與宿主程序的修改、升級相互不影響;再有,腳本程序的日志信息(包括文件路徑、錯誤位置、錯誤代碼、發(fā)生時間等信息)可以以文本方式寫入文件,并最終顯示在終端。
[0017]2、本發(fā)明的開發(fā)周期短,擴(kuò)展能力強(qiáng),維護(hù)成本低,在宿主程序或者腳本程序出現(xiàn)修改時,并不會影響對方的正常運(yùn)行。
【附圖說明】
[0018]圖1為本發(fā)明的選擇控制邏輯輸出模式的原理圖;
[0019]圖2為本發(fā)明的順序控制邏輯輸出模式的原理圖;
[0020]圖3為本發(fā)明的并聯(lián)控制邏輯輸出模式的原理圖。
【具體實(shí)施方式】
[0021]下面結(jié)合附圖對本發(fā)明進(jìn)行進(jìn)一步闡述。
[0022]本發(fā)明的同步發(fā)電機(jī)勵磁調(diào)節(jié)器控制程序集成嵌入式語言的二次開發(fā)方法的實(shí)現(xiàn)過程如下:
[0023]1)采用lua語言編譯嵌入式腳本程序,并將腳本程序的語言運(yùn)行環(huán)境以應(yīng)用程序庫的方式鏈入到宿主程序中,宿主程序?yàn)樵趘xworks實(shí)時操作系統(tǒng)上開發(fā)的勵磁調(diào)節(jié)器C語言控制程序,根據(jù)操作系統(tǒng)及編譯器的類型修改腳本環(huán)境程序,并編譯通過返回狀態(tài)指針。
[0024]2)按照函數(shù)原型、輸入?yún)?shù)、輸出三個部分編寫從腳本程序訪問宿主程序的接口函數(shù):從lua訪問C語言程序的接口函數(shù)都需要具有相同的原型typedef int(*lua_CFunct1n) (lua_State*L)的接口形式編寫;在編寫的新函數(shù)結(jié)構(gòu)中,通過C API中的lua_toXXX函數(shù)獲取腳本程序傳遞來的參數(shù);需要返回結(jié)果時,由lua_pushXXX函數(shù)將結(jié)果壓入棧中,再返回結(jié)果個數(shù)。
[0025]3)編寫通過宿主程序調(diào)用腳本程序的接口函數(shù),按照以下步驟編寫:首先,接口函數(shù)通過C API中的lua_getglobal函數(shù)將腳本函數(shù)名壓桟;然后,使用lua_pushXXX函數(shù)將需要的參數(shù)按順序壓入虛擬棧,再使用lua_pcall函數(shù)執(zhí)行腳本程序;最后,使用lua_toXXX函數(shù)獲取腳本應(yīng)用程序的運(yùn)行結(jié)果。
[0026]4)編寫錯誤處理函數(shù):當(dāng)lua運(yùn)行拋出異常時,通過lua_tostring函數(shù)從桟空間獲取腳本錯誤代碼,并將從操作系統(tǒng)獲取的時間以及位置等信息保存到日志文件,并送至終端顯示。
[0027]5)初始化腳本程序的運(yùn)行環(huán)境和運(yùn)行狀態(tài):
[0028]51)使用 C API 中的 luaL_ne