国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種面向?qū)ο蟮亩嘣O(shè)備驅(qū)動(dòng)軟件分析

2022-05-08 07:15:26
關(guān)鍵詞:基類應(yīng)用層二次開發(fā)

朱 旭

(中國航發(fā)西安動(dòng)力控制科技有限公司,陜西 西安 710077)

引言

CAN(Controller Area Network,控制器局域網(wǎng)絡(luò))總線是20 世紀(jì)80 年代提出的一種串行數(shù)據(jù)通訊總線,已在包括航空工業(yè)在內(nèi)的眾多領(lǐng)域中得到廣泛應(yīng)用[1]。在航空發(fā)動(dòng)機(jī)測試、使用過程中,通常需要針對CAN 設(shè)備進(jìn)行二次開發(fā),用于與各設(shè)備間的數(shù)據(jù)傳輸。二次開發(fā)的應(yīng)用軟件將人機(jī)交互程序分為應(yīng)用層與驅(qū)動(dòng)層,見圖1。驅(qū)動(dòng)程序負(fù)責(zé)操控設(shè)備的相關(guān)信息,應(yīng)用程序負(fù)責(zé)功能實(shí)現(xiàn)。

目前在市場上存在多品牌、多種類的CAN 通訊設(shè)備,盡管不同品牌的CAN 通訊設(shè)備功能一樣,但每個(gè)設(shè)備的原理、使用方法卻不盡完全相同,導(dǎo)致使用者(二次開發(fā)者)在使用過程中,針對各類設(shè)備的二次開發(fā),需配合不同應(yīng)用程序,這樣會(huì)影響生產(chǎn)效率,甚至容易導(dǎo)致出錯(cuò)。本文提出一種利用C#工具開發(fā)驅(qū)動(dòng)程序方法,在應(yīng)用程序中添加后,只提供同一接口給應(yīng)用層調(diào)用。因此當(dāng)使用不同設(shè)備后,只需在驅(qū)動(dòng)層中添加或更改相應(yīng)模塊,不會(huì)影響應(yīng)用層功能,在降低程序開發(fā)復(fù)雜度的同時(shí)提高了二次開發(fā)程序的通用性。

1 程序設(shè)計(jì)思路

本文在VS2010 工具下完成C#程序開發(fā)工作[2]。采用面向?qū)ο蠹夹g(shù),將所有CAN 通訊設(shè)備歸結(jié)為一個(gè)類,作為基類。每個(gè)CAN 設(shè)備看成一個(gè)基類的派生類,這樣,派生類擁有基類的特性。再將特定的方法和屬性組合,封裝為一個(gè)特定功能集合(稱為接口),每個(gè)實(shí)例的具體內(nèi)容在其接口中進(jìn)行定義實(shí)現(xiàn)[3-4]。

基類完成共同功能的設(shè)計(jì),將基類設(shè)定為抽象類,每個(gè)設(shè)備作為一實(shí)例,派生于基類。這樣每個(gè)實(shí)例就擁有了基類的屬性和方法,各實(shí)例的不同功能在實(shí)例的接口中分別具體實(shí)現(xiàn),針對不同情況,做出適應(yīng)性更改。這樣既滿足了相同功能的一致性,又達(dá)到不同設(shè)備靈活使用的現(xiàn)實(shí)需求。

上位機(jī)程序設(shè)計(jì)分為驅(qū)動(dòng)層和應(yīng)用層兩個(gè)部分。驅(qū)動(dòng)層主要用于配置設(shè)備參數(shù),使其能夠正常通訊。針對使用設(shè)備進(jìn)行類的實(shí)例化,繼承基類的共有屬性和方法,完成共同狀態(tài)的配置。對于具體功能方法,需要引用不同接口,在接口中進(jìn)行定制化和個(gè)性化的詳細(xì)功能實(shí)現(xiàn)。在驅(qū)動(dòng)層通過基類和接口完成不同設(shè)備的驅(qū)動(dòng),同時(shí)為應(yīng)用層提供了相同的入口參數(shù)。應(yīng)用層接受驅(qū)動(dòng)層傳遞的數(shù)據(jù),進(jìn)過分析、識(shí)別判斷,完成最終程序的功能,如數(shù)據(jù)物理量的轉(zhuǎn)換、顯示。在此只考慮與驅(qū)動(dòng)接口的數(shù)據(jù)類型和格式是否一致,不需關(guān)心驅(qū)動(dòng)層的設(shè)備類型。

按照上述設(shè)計(jì)思路,UML表示法如下頁圖2 所示。

圖2 軟件架構(gòu)UML 圖

2 人機(jī)交互軟件設(shè)計(jì)

本文通過CAN 通訊卡實(shí)現(xiàn)上位機(jī)和嵌入式控制器之間的數(shù)據(jù)交互,從而對控制器中相應(yīng)內(nèi)容進(jìn)行管理、更改、維護(hù)。如下頁圖3 所示,上位機(jī)的人機(jī)界面發(fā)送指令到控制器,控制器接受到指令,先判斷格式是否正確,然后按照通訊協(xié)議,分析出指令的具體內(nèi)容,執(zhí)行相應(yīng)動(dòng)作,完成后反饋信號或發(fā)送數(shù)據(jù)到上位機(jī),以通知其執(zhí)行結(jié)果。上位機(jī)接收到數(shù)據(jù),同樣要進(jìn)行數(shù)據(jù)的甄別、判斷,若正確則將結(jié)果顯示于界面,提示用戶執(zhí)行結(jié)果。

圖3 系統(tǒng)框圖

假設(shè)整個(gè)系統(tǒng)中使用了2 種不同品牌的CAN 通訊卡,對于用戶而言,接入任意設(shè)備,其使用方法應(yīng)完全一致。

在進(jìn)入程序時(shí),如圖4 所示,首先在人機(jī)界面選擇設(shè)備類型。后續(xù)進(jìn)入主程序時(shí)根據(jù)之前的選擇自動(dòng)完成設(shè)備初始化工作,并在主界面提示設(shè)備狀態(tài)。初始化完成后根據(jù)指令,進(jìn)行數(shù)據(jù)傳輸和發(fā)送等功能,并將數(shù)據(jù)解析的結(jié)果顯示在程序主界面。如圖5 所示。

圖4 初始化界面

圖5 程序主界面

2.1 驅(qū)動(dòng)程序設(shè)計(jì)

設(shè)備1、2 分別提供不同的動(dòng)態(tài)鏈接文件,完成各自的驅(qū)動(dòng)和功能實(shí)現(xiàn)。

每種設(shè)備的提供的動(dòng)態(tài)鏈接文件格式和使用方法都不一樣,因此,在驅(qū)動(dòng)設(shè)計(jì)時(shí),將2 個(gè)設(shè)備分別定義為DevCan1、DevCan2 類,根據(jù)使用情況進(jìn)行選擇,然后實(shí)例化對象,在實(shí)例化時(shí)將抽象類的虛方法進(jìn)行重寫。

首先,定義一個(gè)抽象基類DevClass。類定義包含ID、波特率、數(shù)據(jù)格式等字段,用以配置使用環(huán)境?;惙椒ò↖nitialCan()和CloseCan()方法,這兩個(gè)方法用于設(shè)備初始化和關(guān)閉。在函數(shù)內(nèi)分別各自調(diào)用原廠家提供的動(dòng)態(tài)鏈接庫實(shí)現(xiàn)。再次,定義2 個(gè)接口,分別為發(fā)送數(shù)據(jù)ISendMessage、接收數(shù)據(jù)IRec-Data 函數(shù)。每個(gè)接口實(shí)現(xiàn)函數(shù)的返回值一致(例如,0表示失敗,1 表示成功)。因此,同樣結(jié)果對應(yīng)用層處理邏輯就是一致的。

若使用設(shè)備1,則實(shí)例化對象設(shè)備1,并繼承于基類,支持發(fā)送、接收2 個(gè)接口。在發(fā)送和接收過程中,將待發(fā)送和接收的數(shù)據(jù)存放于數(shù)組中,供應(yīng)用層調(diào)配。

同理,若使用設(shè)備2,則實(shí)例化設(shè)備2,并完成相應(yīng)配置。

下面以初始化為例,具體實(shí)現(xiàn)代碼如下:

2.2 應(yīng)用層程序設(shè)計(jì)

應(yīng)用層與驅(qū)動(dòng)層的數(shù)據(jù)交互采用共享數(shù)組的方式。驅(qū)動(dòng)層完成設(shè)備驅(qū)動(dòng)后,將事件和所需數(shù)據(jù)整理后,傳遞到應(yīng)用層。應(yīng)用層負(fù)責(zé)接收、響應(yīng)事件,并解析、處理數(shù)據(jù)。在主程序中定義委托,將方法封裝在委托對象內(nèi),實(shí)現(xiàn)傳遞回調(diào)函數(shù)的作用,多個(gè)委托可以完成多種事件的訂閱,事件訂閱對于使用的設(shè)備可不必關(guān)心。程序中將接收和發(fā)送數(shù)據(jù)事件分別定義,具體代碼(以設(shè)備1 為例)如下:

在應(yīng)用層建立2 個(gè)線程,分別用于接收數(shù)據(jù)、發(fā)送指令,各線程獨(dú)立工作,互不影響,從而提高程序的執(zhí)行效率。線程中處理委托中的訂閱事件,執(zhí)行相應(yīng)操作,實(shí)現(xiàn)數(shù)據(jù)交換和通訊功能。程序架構(gòu)如圖6所示。

圖6 程序架構(gòu)

3 結(jié)論

本文設(shè)計(jì)了針對不同CAN 通信設(shè)備的通用上位機(jī)應(yīng)用程序,在同一應(yīng)用程序中,利用接口和類完成不同設(shè)備的驅(qū)動(dòng),為應(yīng)用層提供數(shù)據(jù)和事件。應(yīng)用層只負(fù)責(zé)事件和數(shù)據(jù)處理,與驅(qū)動(dòng)的設(shè)備無關(guān),應(yīng)用層針對不同設(shè)備的事件處理邏輯一致。在實(shí)際使用中,新增設(shè)備只需進(jìn)行驅(qū)動(dòng)部分的設(shè)計(jì),完成對應(yīng)接口的功能,就能直接使用,這樣能夠快速開發(fā)完成程序,提高通用性,縮短了開發(fā)周期。經(jīng)過試驗(yàn)驗(yàn)證,此方法能夠有效、正確實(shí)現(xiàn)多設(shè)備同時(shí)驅(qū)動(dòng)的目標(biāo)。

猜你喜歡
基類應(yīng)用層二次開發(fā)
基于C#面向?qū)ο蟪绦蛟O(shè)計(jì)的封裝、繼承和多態(tài)分析
淺談基于Revit平臺(tái)的二次開發(fā)
甘肅科技(2020年20期)2020-04-13 00:30:02
淺談Mastercam后處理器的二次開發(fā)
模具制造(2019年3期)2019-06-06 02:11:02
西門子Easy Screen對倒棱機(jī)床界面二次開發(fā)
基于分級保護(hù)的OA系統(tǒng)應(yīng)用層訪問控制研究
空戰(zhàn)游戲設(shè)計(jì)實(shí)例
新一代雙向互動(dòng)電力線通信技術(shù)的應(yīng)用層協(xié)議研究
一種基于用戶興趣的STC改進(jìn)算法
虛機(jī)制在《面向?qū)ο蟪绦蛟O(shè)計(jì)C++》中的教學(xué)方法研究
物聯(lián)網(wǎng)技術(shù)在信息機(jī)房制冷系統(tǒng)中的應(yīng)用
华容县| 社旗县| 西充县| 贵州省| 青海省| 阜南县| 五台县| 自贡市| 资源县| 句容市| 镇坪县| 巴彦淖尔市| 育儿| 尚义县| 东乌珠穆沁旗| 会昌县| 庆云县| 深圳市| 从化市| 平阴县| 鄂托克前旗| 牡丹江市| 镇坪县| 华容县| 宿迁市| 五寨县| 贞丰县| 娱乐| 烟台市| 淳化县| 朝阳市| 犍为县| 阿拉善右旗| 亚东县| 九台市| 万盛区| 邢台市| 枣庄市| 新昌县| 呼和浩特市| 沽源县|