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