999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Scintilla的PLC結構化文本語言編輯器的設計

2016-01-18 02:44:35
自動化與儀表 2016年9期
關鍵詞:文本語言功能

(南瑞集團公司(國網電力科學研究院),南京 210003)

結構化文本(structured text)語言是IEC61131-3中規定的PLC的5種編程語言之一,與梯形圖相比,結構化文本語言簡單高效、易于掌握,用于數據處理和數據計算方面的PLC編程,程序結構更清晰,易于理解和維護。目前國外的主流PLC產品如AB、施耐德、三菱等已經支持結構化文本語言編程,并可以結合各自公司提供的PLC組態軟件使用,功能十分完備[1-2]。

南瑞集團自主設計與研發的MB系列PLC,汲取了國際主流PLC的成功經驗,并根據當今PLC的最新發展方向,采用了計算機、通訊、電子和自動控制等方面的國際先進技術,在CPU操作系統、IO信號處理、網絡通訊、軟件開發等方面具有優越的性能,適用于各種自動化控制的編程需求[3]。但是,目前的PLC組態軟件MBPro還不支持結構化文本語言編程。為了提高MB PLC編程的可用性和穩定性,增加產品的綜合實力和市場競爭力,MBPro升級版本增加了對結構化文本語言的編程支持[4]。

完整的結構化文本語言編程支持包括前臺和后臺兩部分,前臺負責編程語言的編輯和存儲,后臺負責編譯結構化文本程序生成針對目標平臺的可執行程序。本文主要介紹前臺編輯界面的設計和實現。

1 Scintilla介紹

Scintilla是一個免費、跨平臺、支持語法高亮的開源編輯控件。它完整支持源代碼的編輯和調試,包括語法高亮、錯誤指示、代碼完成和調用提示,能包含標記的頁邊,可用于標記斷點、折疊和高亮當前行。

受益于開源軟件的蓬勃發展,Scintilla廣泛應用于許多軟件中,其中包括文本編輯器NotePad、微型集成開發環境Code::Blocks、IDE插件Visual Assist、版本控制工具Tortoise SVN等。但是,大量拿來主義的簡單封裝使得這些軟件具有嚴重的同質化,對于編輯功能只是軟件的部分功能的項目,對Scintilla的封裝使用符合重用的開發理念,避免了“重復制造輪子”,但是對于一些本來就是開發編輯器的項目,一味機械使用卻不改進提升,對Scintilla的發展是不利的。

Scintilla在版本3.3.3中新增了對結構化文本語言的Lexer支持,方便用來對關鍵字著色和語法塊折疊;另外,對于MBPro軟件支持ST語言,編輯界面只是部分功能,并且受制于開發進度和開發力量的限制,利用開源軟件可顯著提高開發效率,可以易于保證軟件質量,增強軟件的可維護性。

2 結構化文本語言編輯器總體結構

本文實現的結構化文本語言編輯器可以靈活嵌入MBPro,MBPro是MB系列智能可編程控制器的標準化編程軟件,它主要完成硬件配置、測點組態、軟件編程以及相關的調試下載工作,提供了梯形圖、流程圖等標準化編程語言。該編程軟件為工程技術人員提供了一套簡單實用的軟件編程和聯機調試的工具。

MBPro軟件基于Windows環境的VC開發,整體程序的功能結構如圖1所示。

圖1 MBPro功能結構示意Fig.1 MBPro function structure diagram

結構化文本語言編輯器以MBPro為基礎,功能上和梯形圖編輯器以及流程圖編輯器類似,當需要新建或者編輯結構化文本程序時,MBPro軟件右側的編輯子窗口自動切換為結構化文本編輯器,針對結構化文本語言的關鍵字進行語法高亮渲染,同時還支持語法折疊等功能,界面友好、操作簡易,從而滿足工程應用中結構化文本編程需求。

3 結構化文本編輯器的設計和實現

本文實現的結構化文本語言編輯器,基于開源軟件Scintilla,進行了2層封裝,第一層利用VC消息映射機制,將Scintilla提供的dll封裝為一個VC控件;第二層根據MVC設計模式,將控件封裝成一個VC基礎CView類的衍生類CStEditView,方便MBPro軟件直接調用。編輯器的封裝結構如圖2所示。

圖2 編輯器封裝結構Fig.2 Editor encapsulation diagram

3.1 Scintilla源碼獲取和編譯

Scintilla的源碼可以在 http://scintilla.sourceforge.net/ScintillaDownload.html獲取,目前最新的版本為3.5.2。另外還有Scinilla相關的庫下載,比如wxScintilla就是Scintilla的wxWidgets移植版。另外,Scintilla的作者為了演示Scinilla的功能,編寫了一個叫SciTE的演示程序。這個演示程序的功能很強大,甚至可以作為我們的常用代碼編輯器。

下載的源碼根目錄下包含README文檔,文檔中有Windows平臺下編譯的具體步驟,可以用VC的nmake,也可以用mingw的mingw32-make,編譯完成后,在 bin目錄里會得到 Scintilla.dll和SciLexer.dll文件,SciLexer.dll是包含了語法解析器的Scintilla控件。

SciLexer.dll中包含了lexers目錄下所有語言的語法解析器,所以比較大,可以只保留ST語言的語法解析器,減小SciLexer.dll的大小,步驟如下:

步驟1進到lexers目錄里,移除除LexSTTXT. cxx以外的所有Lex*.cxx文件

步驟 2執行 LexGen.py重建 make文件和KeyWords.cxx文件(需要安裝Python)。

步驟3重新編譯。

3.2 Scintilla的第一層封裝

編譯好的SciLexer.dll可以直接在VC項目中加載使用,程序中以Scintilla作為類名注冊一個窗體類,可以直接用這個類名建立窗體。配置和使用Scintilla,可以直接使用SendMessage API,具體方式如下:

SendMessage(hwndScintilla,sci_command,wparam,lparam)。但是這種方式速度慢、效率不高,所以對Scintilla進行一層封裝,先獲取直接控制函數,然后用函數來配置和使用Scintilla,具體步驟如下:

步驟 1創建一個 CWnd的子類型 CScintillaCtrl,Scintilla所有的方法都由 CScintillaCtrl對外提供。

步驟2利用SCI_GETDIRECTFUNCTION和SCI_GETDIRECTPOINTER消息獲取直接函數和指針。

步驟3封裝一個CALL函數,使用函數指針調用SendMessage函數。

步驟4通過CALL函數封裝Scintilla的各種消息配置函數,如設置字體信息、獲取光標位置等。

封裝好的CScintillaCtrl類,可以直接供上層調用,避免使用SendMessage速度過慢的問題。

3.3 Scintilla的第二層封裝

CScintillaCtrl類中封裝了Scintilla支持的全部消息,所以接口多達六百多個,直接使用時查找很不方便。實際應用中,基于MFC的多文檔程序結構,可以將ST語言編輯器進一步封裝成一個CView的子類CStEditView,這個類持有一個CScintillaCtrl類型的私有成員變量,通過這個成員變量可以獲取Scintilla所有的消息接口。CStEditView通過提供盡量少的對外接口,簡化使用復雜度,例如提供了初始化接口 OnInitialUpdate(),內部再調用 CScintillaCtrl的關鍵字設置、字號字體設置、頁邊距設置等初始化設置。

經過二次封裝的CStEditView類,可以直接供MBPro系統中的Doc類調用,屏蔽了CScintillaCtrl內部過多的復雜細節,專注與上層應用,不用關心下層細節,便于分層管理和降低模塊間的耦合,易于測試及擴展。

3.4 運行效果

圖3所示為實際運行的MBPro軟件,當編輯結構化文本語言程序時,右側編輯窗口即為編輯器窗口,能識別語言關鍵字,進行顏色渲染,同時對語句塊能進行識別,支持語句塊折疊。

圖3 ST編輯器運行效果Fig.3 Running effect of the editor

4 結語

南瑞MB系列PLC產品是其依靠在水電自動化控制領域多年的經驗的智慧結晶,目前在電力、水利、紡織、冶金、樓宇自動化等多個領域得到了廣泛應用,組態軟件MBPro新增對ST語言編程的支持,完善了PLC產品的功能,增強了產品的綜合競爭力。

[1]劉成俊,彭文才,趙涌.PLC熱備冗余的研究與設計[J].自動化與儀表,2015,30(2):46-49.

[2]王善永.MB系列智能可編程邏輯控制器[J].電力系統自動化,2005,29(10):82-84.

[3]陳思寧.MB系列智能可編程控制器的軟件設計[J].水電廠自動化,2006(4):45-48.

[4]張紅芳,劉書良,周霞.MB系列智能PLC編程軟件MBPro[J].PLC與工控機,2010(10):57-59.

猜你喜歡
文本語言功能
也談詩的“功能”
中華詩詞(2022年6期)2022-12-31 06:41:24
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
在808DA上文本顯示的改善
基于doc2vec和TF-IDF的相似文本識別
電子制作(2018年18期)2018-11-14 01:48:06
讓語言描寫搖曳多姿
關于非首都功能疏解的幾點思考
累積動態分析下的同聲傳譯語言壓縮
文本之中·文本之外·文本之上——童話故事《坐井觀天》的教學隱喻
我有我語言
中西醫結合治療甲狀腺功能亢進癥31例
主站蜘蛛池模板: 国产精品爽爽va在线无码观看 | 欧美成人手机在线观看网址| 国产乱子精品一区二区在线观看| 超清无码熟妇人妻AV在线绿巨人 | 国产精品网拍在线| 91色老久久精品偷偷蜜臀| 91黄色在线观看| 久久久久亚洲AV成人人电影软件| 精品国产香蕉在线播出| 中文字幕1区2区| 欧美日韩国产高清一区二区三区| 婷婷亚洲最大| 亚洲无码91视频| 最新无码专区超级碰碰碰| 操美女免费网站| 夜夜高潮夜夜爽国产伦精品| 制服丝袜一区| 伊人无码视屏| av一区二区人妻无码| 亚洲综合激情另类专区| 天天躁夜夜躁狠狠躁躁88| 国产毛片不卡| 亚洲中文字幕在线观看| 伊人久久精品无码麻豆精品| 91亚洲影院| 五月激情综合网| 欧美啪啪网| 日本国产精品一区久久久| 91国内视频在线观看| 99精品在线看| 欧美日韩在线第一页| 狠狠色香婷婷久久亚洲精品| 色老头综合网| 伊人激情综合| 97国产精品视频人人做人人爱| 55夜色66夜色国产精品视频| 国产人成网线在线播放va| 国产麻豆另类AV| 99成人在线观看| 国内自拍久第一页| 色成人综合| 国产91蝌蚪窝| 欧美精品导航| 麻豆a级片| 欧美在线黄| 色综合成人| 欧美a级完整在线观看| 精品成人一区二区三区电影| 真实国产乱子伦视频 | 国产成人夜色91| 亚洲欧洲国产成人综合不卡| 一级成人a毛片免费播放| 国产菊爆视频在线观看| 无码专区在线观看| 国产高清国内精品福利| 久青草国产高清在线视频| 国产精品一区二区无码免费看片| 97在线免费| 影音先锋亚洲无码| 国产人成在线视频| 538国产视频| 亚洲国产91人成在线| 国产18在线| 国产尤物在线播放| 免费人成又黄又爽的视频网站| 亚洲一区无码在线| 91av成人日本不卡三区| 国产精品女主播| 女人毛片a级大学毛片免费| 中文字幕啪啪| 亚洲激情99| 欧美精品aⅴ在线视频| 国产精品刺激对白在线| 亚洲自偷自拍另类小说| 欧美日韩午夜| 亚洲中文字幕无码mv| 四虎永久免费地址在线网站| 成人午夜天| 久久影院一区二区h| 九九热在线视频| www.91在线播放| 国产69精品久久久久孕妇大杂乱 |