本發(fā)明涉及一種在工業(yè)組態(tài)軟件中二次開發(fā)的方法。
背景技術:
VCMS、EZSCADA等工業(yè)組態(tài)軟件具有強大的圖形開發(fā)工具,能夠開發(fā)出適合反映各種工業(yè)自動化控制工況的人機交互圖形界面(HMI)。例如,在岸橋、軌道吊、輪胎吊等碼頭集裝箱裝卸設備上大多都安裝有此類工業(yè)組態(tài)軟件。但是,VCMS、EZSCADA等工業(yè)組態(tài)軟件主要是采用微軟基礎類庫(MFC)語言編寫的,其提供的可擴展能力較差,不便于用戶進行二次開發(fā)。
技術實現(xiàn)要素:
本發(fā)明要解決的技術問題是提供一種工業(yè)組態(tài)軟件中二次開發(fā)的方法,能夠在采用MFC語言編寫的工業(yè)組態(tài)軟件中使用Csharp(即C#)語言進行二次開發(fā),提高了工業(yè)組態(tài)軟件的可擴展性。為解決上述技術問題,本發(fā)明提供了一種在工業(yè)組態(tài)軟件中二次開發(fā)的方法,所述工業(yè)組態(tài)軟件采用MFC語言編寫,所述方法包括:所述工業(yè)組態(tài)軟件通過調用用戶控制動態(tài)庫來加載Csharp編輯器,所述用戶控制動態(tài)庫采用C++/CLR(CommonLanguageRuntime,公共語言運行時)語言編寫;對所述工業(yè)組態(tài)軟件接收到的用戶操作進行截取,并通過所述用戶控制動態(tài)庫將所述用戶操作轉發(fā)至所述Csharp編輯器;在所述Csharp編輯器中采用Csharp語言編寫二次開發(fā)代碼;對所述二次開發(fā)代碼進行編譯,生成對應的動態(tài)庫文件;所述工業(yè)組態(tài)軟件調用.Net運行庫執(zhí)行所述動態(tài)庫文件。可選地,所述方法還包括:加載本地計算機上已經安裝的.Net動態(tài)庫列表、COM(ComponentObject Model,組件對象模型)組件列表以及所述工業(yè)組態(tài)軟件提供的動態(tài)庫列表,以供在編寫所述二次開發(fā)代碼時引用??蛇x地,所述方法還包括:采用Csharp語言的平臺調用技術將所述工業(yè)組態(tài)軟件中的API(ApplicationProgrammingInterface,應用程序編程接口)函數(shù)分別封裝為對應的動態(tài)庫,以供在所述Csharp編輯器中進行引用??蛇x地,所述API函數(shù)包括畫面、服務和工程API函數(shù)??蛇x地,對所述二次開發(fā)代碼進行編譯時,還生成對應于所述動態(tài)庫文件的配置文件,所述配置文件中具有指定的子目錄,在執(zhí)行所述動態(tài)庫文件前自動將所需的動態(tài)庫復制到所述子目錄中??蛇x地,在執(zhí)行所述動態(tài)庫文件時還保存運行時的對應關系表,在運行類的實例時首先在所述對應關系表中進行查找,如果存在則直接運行該實例,否則生成該實例并將其保存至所述對應關系表中??蛇x地,所述用戶操作包括剪切、復制、粘帖、注釋、取消注釋、撤消、重復、查找、鍵盤操作。與現(xiàn)有技術相比,本發(fā)明具有以下優(yōu)點:本發(fā)明實施例的工業(yè)組態(tài)軟件中二次開發(fā)的方法中,采用C++/CLR語言編寫用戶控制動態(tài)庫來連接工業(yè)組態(tài)軟件和Csharp編輯器,工業(yè)組態(tài)軟件調用該用戶控制動態(tài)庫,在執(zhí)行到打開Csharp編輯器時加載Csharp編輯器,之后截取工業(yè)組態(tài)軟件接收到的用戶操作并轉發(fā)至Csharp編輯器,使得用戶能夠在Csharp編輯器中編寫二次開發(fā)代碼,以此來實現(xiàn)工業(yè)組態(tài)軟件本身很難實現(xiàn)的各種功能,增強了工業(yè)組態(tài)軟件的外延性和擴展性。附圖說明圖1是本發(fā)明實施例在工業(yè)組態(tài)軟件中二次開發(fā)的方法的流程示意圖。具體實施方式下面結合具體實施例和附圖對本發(fā)明作進一步說明,但不應以此限制本發(fā)明的保護范圍。圖1示出了本實施例中在工業(yè)組態(tài)軟件中二次開發(fā)的方法的流程示意圖,包括:步驟S11,所述工業(yè)組態(tài)軟件通過調用用戶控制動態(tài)庫來加載Csharp編輯器,所述用戶控制動態(tài)庫采用C++/CLR語言編寫;步驟S12,對所述工業(yè)組態(tài)軟件接收到的用戶操作進行截取,并通過所述用戶控制動態(tài)庫將所述用戶操作轉發(fā)至所述Csharp編輯器;步驟S13,在所述Csharp編輯器中采用Csharp語言編寫二次開發(fā)代碼;步驟S14,對所述二次開發(fā)代碼進行編譯,生成對應的動態(tài)庫文件;步驟S15,所述工業(yè)組態(tài)軟件調用.Net運行庫執(zhí)行所述動態(tài)庫文件。其中,工業(yè)組態(tài)軟件是采用MFC語言編寫的,例如可以是VCMS工業(yè)組態(tài)軟件、EZSCADA工業(yè)組態(tài)軟件等。由于工業(yè)組態(tài)軟件是用MFC語言編寫的,而Csharp語言需要.Net環(huán)境支持,因而在步驟S11中,用戶可以利用C++/CLR語言編寫用戶控制動態(tài)庫UserControlBase.dll,以此來連接工業(yè)組態(tài)軟件和Csharp編輯器。工業(yè)組態(tài)軟件通過C++方式調用用戶控制動態(tài)庫UserControlBase.dll,在執(zhí)行到打開二次開發(fā)所采用的Csharp編輯器時,用戶控制動態(tài)庫UserControlBase.dll通過CLR技術和.Net相互支持的方式對Csharp編輯器進行加載。在加載Csharp編輯器的同時,還可以將工業(yè)組態(tài)軟件所需打開的文件路徑等信息一并傳遞到Csharp編輯器中。由于進行代碼編輯的剪切、復制、粘帖、全選等鍵盤和菜單事件都是在工業(yè)組態(tài)軟件中實現(xiàn)的,而Csharp編輯器接收不到此類事件,因而在步驟S12中,對工業(yè)組態(tài)軟件接收到的用戶操作進行截取,并通過用戶控制動態(tài)庫UserControlBase.dll轉發(fā)給Csharp編輯器,使得Csharp編輯器在接收到事件后能夠根據不同的事件信息分別進行處理,從而解決了工業(yè)組態(tài)軟件和Csharp編輯器之間的信息交互問題。本實施例中,相關的用戶操作包括剪切、復制、粘帖、注釋、取消注釋、撤消、重復、查找、鍵盤操作等,但并不限于此。通過截取和轉發(fā),Csharp編輯器的最外層繼承了用戶控制動態(tài)庫UserControlBase.dll并實現(xiàn)了打開、保存、關閉等接口,工業(yè)組態(tài)軟件通過加載用戶控制動態(tài)庫UserControlBase.dll并調用其中相應的打開接口即可調用Csharp編輯器打開對應的二次開發(fā)文件進行編輯。本實施例中,Csharp編輯器主要由三方面內容組成,第一部分是工具欄,實現(xiàn)包括剪切、復制、粘帖、注釋、取消注釋、撤消、重復、查找等功能,幫助用戶快速、方便地編寫所需要的代碼,同時還支持鍵盤操作;第二部分是文本編輯界面,用戶在上面可以編寫二次開發(fā)代碼,在文本編輯界面上具有編寫的類和方法的索引列表,選擇其中某一項可以自動跳轉到對應的代碼位置,在編寫代碼過程中,Csharp編輯器可以根據已經編寫的代碼來分析出是否是關鍵詞,并采用不同的顏色來進行區(qū)分顯示;第三部分是動態(tài)庫的引用,采用樹形結構顯示當前已經添加的動態(tài)庫的名稱,并允許用戶進行添加,這一部分將在下文中進行詳細說明。具體地,本實施例還可以在Csharp編輯器的編輯界面上加載本地計算機上已經安裝的.Net動態(tài)庫列表、COM組件列表、工業(yè)組態(tài)軟件提供的動態(tài)庫列表供用戶在編寫二次開發(fā)代碼時進行選擇引用。當用戶引用COM組件、工業(yè)組態(tài)軟件提供的動態(tài)庫以及其他動態(tài)庫時,Csharp編輯器還可以自動判斷所選的文件是否符合引用要求并根據文件信息來確定是否需要轉換成.Net動態(tài)庫。另外,本實施例中還采用Csharp語言的平臺調用技術將工業(yè)組態(tài)軟件中的API函數(shù)分別封裝為對應的動態(tài)庫。例如,采用平臺調用技術編寫Rcw.ScreenAPI.dll、Rcw.ServerAPI.dll和Rcw.ProjectAPI.dll三個動態(tài)庫將工業(yè)組態(tài)軟件中的畫面服務和工程三方面中的API函數(shù)重新封裝,使得用戶能夠在Csharp編輯器中進行引用,以此來進行相應各方面的編程控制。在編寫二次開發(fā)代碼過程中,用戶可以最大限度地通過操作上述API函數(shù)來設計安排整個工程項目的重要部分。同時,還可以利用Csharp語言的特色,將部分API函數(shù)的功能用屬性的方式來表示,以方便用戶進行操作。在Csharp編輯器中編寫完成二次開發(fā)代碼之后,對其進行編譯,生成對應的動態(tài)庫文件。代碼在編寫過程中產生的語法錯誤會在編譯時通過輸出框顯示出來,用戶可以直接雙擊錯誤記錄來直接定位到出錯的代碼行。為了解決運行引用動態(tài)庫中函數(shù)的正確性,在編譯二次開發(fā)代碼時還生成對應于動態(tài)庫文件的配置文件,在配置文件中根據不同的動態(tài)庫文件指定不同的子目錄路徑,在運行該動態(tài)庫文件前自動將所需的動態(tài)庫復制到指定的子目錄中,以保證程序運行過程中的正確性。編譯生成動態(tài)庫文件之后,工業(yè)組態(tài)軟件調用.Net運行庫執(zhí)行生成的動態(tài)庫 文件,完成相應的功能。具體地,工業(yè)組態(tài)軟件在執(zhí)行到調用二次開發(fā)代碼時,.Net將自動加載之前生成的Csharp動態(tài)庫文件,并根據傳入的命名空間、類名以及函數(shù)名查找對應的函數(shù)并執(zhí)行,如果執(zhí)行過程中出錯,則將錯誤信息通過對話框的形式通知用戶。運行時執(zhí)行的函數(shù)都是存在于類的實例中的,本實施例還保存運行時的對應關系表,在運行動態(tài)庫文件的類的實例時,首先在對應關系表中根據關鍵字進行查找,如果已經存在則直接運行已有的實例,否則生成該實例并將其保存到對應關系表中,然后再由生成的實例來運行指定的函數(shù)。采用上述手段,可以避免執(zhí)行所編寫的類的函數(shù)過程中,如果將每個函數(shù)作為單獨的個體進行運行時,不同函數(shù)操作本類中的同一變量導致的不一致的問題。綜上,本實施例充分發(fā)揮了Csharp語言的簡單、方便、易于操作的優(yōu)點,能夠將Csharp編輯器嵌入到工業(yè)組態(tài)軟件的編程環(huán)境中并很好地進行數(shù)據信息交互。通過強大的二次開發(fā)編程功能,使得用戶能夠在使用工業(yè)組態(tài)軟件本身的功能之外,還可以通過操作不同的API函數(shù)以及.Net提供的諸多功能來完成其他期望實現(xiàn)的功能,從而實現(xiàn)了工業(yè)組態(tài)軟件的外延性和擴展性。本發(fā)明雖然以較佳實施例公開如上,但其并不是用來限定本發(fā)明,任何本領域技術人員在不脫離本發(fā)明的精神和范圍內,都可以做出可能的變動和修改,因此本發(fā)明的保護范圍應當以本發(fā)明權利要求所界定的范圍為準。