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

工程化應用框架建立中相關模塊實現方法

2015-12-18 06:13:24程西娜蔡文齋
計算機與網絡 2015年1期

程西娜 蔡文齋

(中國電子科技集團公司第三十九研究所陜西西安 710065)

1 引言

該題目來源于本承研單位統一標準化天線監控程序設計開發項目,鑒于以前工程監控程序分為各工程組開發模式之弊端,該研發室欲開發出一款通用的天線類應用程序框架,在該框架基礎上再加入各自工程特點的業務邏輯模塊,最終形成某工程使用的監控軟件。經有關專家充分論證后,欲開發出一種通用的與工程無關的底層控制類框架平臺,用來完成整個控制工程最關鍵的功能如通訊、線程調度和消息傳遞機制等等,對業務邏輯開發者而言,無需關心硬件層的操作,只需依據具體項目要求編制有關的數據處理工作即可,這樣可以提高研制效率。本文主要論述了此框架中相關模塊的實現方法,諸如多串口通訊模塊、網絡通訊模塊和主控線程模塊。

2 研制背景

整個框架運行在windowsxp3系統上,使用Delphi XE2開發[1-4]。采用抽象構架與應用邏輯相結合的開發方法。首先設計一個與控制工程項目無關的核心框架,完成整個系統硬件級通信調度和調試等功能,該框架主要功能模塊為:所有硬件層設備通信模塊、調度模塊、主工作線程模塊、動態調試支持模塊、存儲線程和日志線程工作模塊。框架模塊與具體控制工程無關,一旦調試完成,其函數級文件即可使用在以后其它任何該類工程中。該框架設計方法已經由導師發表[5],不再贅述。該文主要討論在新開發環境下DELPHIXE2如何實現出工程用的部分模塊。

框架將通訊用數據定義為抽象緩沖區形式,當框架代碼段完成設備讀后,發一個用戶定義的消息給前臺應用邏輯窗口給界面,通知硬件層數據已準備就緒。這樣業務邏輯中僅實現讀消息函數即可完成數據處理和顯示等工作,這樣設計的好處在于軟件結構清晰明了,這兩部分可以獨立開發。因為這次開發工具的版本提升,以前的許多實現方法都做了調整,本文主要討論在新環境下這些部分功能塊是如何實現的。

3 解決方案

3.1 多路串口通訊實現

多路串口分別使用ComPort組件和MoxaPcomm組件庫實現,ComPort組件為VCL組件,可以在DELPHI環境下無縫使用,MoxaPcomm為臺灣專業串口廠商提供的串口庫,可在DELPHI環境下使用DLL技術加載[6],這里重點介紹多路串口初始化參數配置的技術實現。

該應用程序框架為了適用于所有這一類項目,設計時考慮的的是通用性,所以將該部分設計為具備可以配置的動態自調整功能,例如工程1使用12個串口,工程2使用32路串口等等,使用一抽象的串口結構定義串口類,再使用動態數組形式定義串口實例,在窗口創建函數中首先枚舉系統中所有串口數量,根據系統中串口數量設置動態數組長度,再使用程序方法自動生成配置界面,配置界面使用DELPHI的屬性頁技術展現,采用NextSuite組件集的NxInspector組件實現,該組件在設計時定制是較方便的,但當串口較多時,每個串口都有10個參數,程序員工作量較大,而且不能夠動態生成,經反復試驗,使用如下關鍵代碼實現了程序自動生成:

運行程序Inspector組件中的COM 樹已生成,在COM參數配置樹中勾選需要打開的串口,配置波特率、數據位、終止位、校驗位和超時值等參數,配置完畢后點擊。點擊apply按鈕,對應的串口指示燈變亮,表明已經打開成功,如圖1所示。

圖1 串口配置樹

Moxa串口庫編程與ComPort編程方法有差異,Moxa串口庫使用動態鏈接庫方式提供,底層實現與ComPort不同,但多參數配置部分仍然可以使用屬性頁方式編程,串口的讀寫仍然使用動態分派機制。

3.2 網絡通訊實現

網絡部分使用了多頁組件PageControl,分別為UDP、TCP/IP和組播3個頁面[7]。網絡的讀寫采用了Indy10.0.52組件開發,分為客戶端和服務器端,通過界面設置IP地址和端口,數據以數組的形式發送,delphi 2007以上版本使用Indy10組件,與以前版本差異較大。Indy9組件[8]的讀是采用流方式,如UDP讀的重載函數為IdUDPServerUDP Read(Sender:TObject;AData:TStream;ABinding:TIdSocket Handle);,讀緩存區的內容需要用AData.Read(ReadBuffer,AData.Size)函數獲得;而Indy10組件的讀是直接采用緩存區的方式,如UDP讀的重載函數為IdUDPServerUDPRead (AThread:TIdUDPListener Thread;AData:TBytes;ABinding:

TIdSocket Handle),讀緩存區的內容直接從AData里獲得。

3.2.1 UDP方法的實現

UDP通訊的特點是點對點的通訊方式,服務器開放端口,客戶端只需要將數據發至該服務器開放的端口即可,由于它不屬于連接型協議,即發送時不需要接收方確認,可能會出現丟包現象,但是它具有處理速度快和資源消耗小的優點。

采用了組件包中IdUDPServer和IdUDPClient實現了8路服務器端的讀操作和1路客戶端的寫操作。服務器端的設置同樣采用了Inspector組件,以配置樹的形式展現,點擊需要開放的服務器的“Enable”,對應的端口被激活;客戶端的設置需填入遠程地址和端口號,勾選“激活”后客戶端打開成功,如圖2所示。

圖2 服務器和客戶端配置

服務器和客戶端打開成功后,重載服務器組件IdUDPServer的OnUDPRead函數,該函數在每讀取到一幀數據時自動執行,通過TIdSocketHandle類的ABinding變量可以獲得客戶端的IP地址和端口號,在TBytes類型的AData變量中可以獲得讀取的緩存區的內容。再采用內存拷貝函數,將AData內的字節放到對應的讀服務器緩存區。函數如下:

3.2.2 TCP/IP方法的實現

TCP是面向連接的通信協議,通過3次握手建立連接,通訊完成時要拆除連接,具有穩定性好的特點[9]。采用了組件包中IdTCPServer和IdTCPClient組件實現。

客戶端寫的操作實現:從界面獲得遠端IP和端口號,在服務器打開的前提下,連接服務器。此時如果服務器沒有打開,界面會有提示需先打開服務器。連接成功后,給客戶端的寫緩存區里賦值需要發送的字節,調用IdTCPClient組件的IO句柄的Write(TCPWriteBuffer)函數,完成客戶端寫的功能。

服務器端的讀操作實現:重載了服務器組件IdTCPServer的OnConnect函數,OnDisconnect函數和OnExecute函數。其中OnConnect函數和OnDisconnect函數是在客戶端連接和斷開服務器時的動作,發給界面連接或斷開的提示。讀服務器是采用了OnExecute函數,該函數在每讀取到一幀數據時自動執行,用TIdContext類的AContext變量的IO 句柄的ReadBytes(TCPReadBuffer)函數,將讀到的數據放到服務器的讀緩存區。部分代碼如下:

3.2.3 組播方法的實現

組播協議與現在廣泛使用的單播協議不同之處在于,一個主機用單播協議向n個主機發送相同的數據時,發送主機需要分別向n個主機發送,并發送n次。而組播協議只需要發送一次,其數據由網絡中的路由器和交換機逐級復制并發給各個接收方,是一種一對多的通訊方式,這樣既節省服務器資源也節省網絡主干的帶寬資源[10]。

組播中的讀是在客戶端實現,寫是在服務器中實現,這一點與前2種方法正好相反。采用了組件包的IdIPMCastClient實現了1路客戶端的讀操作和IdIPMCastServer實現了1路服務器端的寫操作。

服務器端的寫操作:給服務器端的寫緩存區里賦值需要發送的字節,使用IdIPMCastServer組件的Send函數即可實現寫操作。

客戶端的讀操作:重載IdIPMCastClient組件的OnIPMCastRead函數,該函數在每讀到一幀數據時自動執行,在TBytes類型的AData變量中可以獲得讀取的緩存區的內容。再采用內存拷貝函數,將AData內的字節放到對應的讀服務器緩存區。部分代碼如下:

3.3 控制主線程和中斷

控制主線程由主控制事件驅動,線程開始后永遠等待該主控制事件對象,當該事件對象變為有信號態時,復位該數據對象到無信號態,調主控函數完成控制操作,再次進入線程開始進入另一次等待。事件的有信號態由中斷線程的中斷服務線程設置,該部分與硬件接口形式有關系,一般使用Modam狀態變化或者TTL電平形式的硬件接入方式。主控線程流程圖如圖3所示。

圖3 主線程框圖

4 結束語

由整體基礎架構由承研單位有關專家負責,作者編程并調試出文中介紹的各部分模塊,經連接測試,代碼無誤功能齊全。調試期間網絡通訊部分樣例太少阻力較大,經專家指導及反復試驗最終使用文中介紹的方法實現了設計。

[1]譚 燕,趙 磊,李之明.Delphi 高級輔助工具精解[M].北京:中國鐵道出版社,2003:28-55.

[2]李之明,高玉琢.Delphi7 組件經典解析[M].北京:中國鐵道出版社,2003:88-105.

[3]CANTU M.Delphi Xe Handbook:A Guide to New Features in Delphi Xe[M].USA:Createspace,2011:88-92.

[4]李 慧.Delphi 程序開發范例寶典(第三版)[M].北京:人民郵電出版社,2012:285-291.

[5]蔡文齋.Win32 環境下一種通用控制軟件的實現方法[J].現代電子技術,2005(8):51.

[6]張秀關.單片機與計算機串口通信實踐[M].北京:電子工業出版社,2013:30-37.

[7]胡 鳴.Windows 網絡編程技術[M].北京:科學出版社,2008:67-89.

[8]蔡文齋.應用INDY 組件設計網絡調試器[J].現代電子技術,2006(24):94.

[9]尹圣雨.TCP/IP 網絡編程[M].北京:人民郵電出版社,2014:24-55.

[10]劉 瑩,徐 恪.Internet 組播體系結構[M].北京:科學出版社,2008:44-58.

主站蜘蛛池模板: 亚洲成在人线av品善网好看| 亚洲综合一区国产精品| 国产成人精品男人的天堂| 在线99视频| 国产精品一区二区国产主播| 一级香蕉人体视频| 国产日本欧美在线观看| 这里只有精品在线播放| 永久天堂网Av| 狠狠色香婷婷久久亚洲精品| 亚洲男人的天堂在线| 国产成人精彩在线视频50| 99这里只有精品免费视频| 性欧美久久| 成人在线欧美| 亚洲资源在线视频| 日韩午夜福利在线观看| 91精品专区国产盗摄| 米奇精品一区二区三区| 午夜不卡视频| 国内精自视频品线一二区| 综合五月天网| 日本成人精品视频| 国产午夜在线观看视频| 日韩欧美91| 国产精品吹潮在线观看中文| 国产原创第一页在线观看| a网站在线观看| 国产人妖视频一区在线观看| 国产福利免费在线观看| 成人午夜天| 激情无码视频在线看| 国产无吗一区二区三区在线欢| 亚洲 日韩 激情 无码 中出| 日韩国产亚洲一区二区在线观看| 国产日韩丝袜一二三区| 欧美日韩综合网| 六月婷婷激情综合| 国产精品久久自在自线观看| 国产91无毒不卡在线观看| 一级毛片中文字幕| 91欧美在线| 天堂在线www网亚洲| 97无码免费人妻超级碰碰碰| 青青草原偷拍视频| 日韩美毛片| 国产精品美乳| 国产一级裸网站| 天堂亚洲网| 国产视频久久久久| 国产成人精品视频一区二区电影| 制服丝袜在线视频香蕉| 99热这里只有免费国产精品| 国产精品午夜福利麻豆| 国产第八页| 97国产精品视频自在拍| AV熟女乱| 亚洲人成网站色7777| 在线精品亚洲国产| 国产精品蜜芽在线观看| 91精品亚洲| 亚洲美女视频一区| 激情视频综合网| 亚洲综合18p| 亚洲国产成熟视频在线多多 | 欧美午夜视频在线| 激情综合图区| 国产黑丝视频在线观看| 久久久精品无码一区二区三区| 在线观看国产精品第一区免费| 呦女精品网站| 亚洲人免费视频| 99久久精彩视频| 欧美成人午夜影院| 国产成人免费手机在线观看视频| 97无码免费人妻超级碰碰碰| 国内精品久久人妻无码大片高| 国产激情无码一区二区三区免费| 在线播放精品一区二区啪视频 | 亚洲国产欧美国产综合久久 | 性69交片免费看| 亚洲中文字幕久久无码精品A|