本篇內(nèi)容介紹了“C#框架的總體設(shè)計(jì)知識(shí)點(diǎn)有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)提供網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì),成都品牌網(wǎng)站建設(shè),1元廣告等致力于企業(yè)網(wǎng)站建設(shè)與公司網(wǎng)站制作,10余年的網(wǎng)站開(kāi)發(fā)和建站經(jīng)驗(yàn),助力企業(yè)信息化建設(shè),成功案例突破數(shù)千家,是您實(shí)現(xiàn)網(wǎng)站建設(shè)的好選擇.
作為插件式應(yīng)用框架,要有一個(gè)宿主程序來(lái)承載、加載插件,為插件、驅(qū)動(dòng)提供可運(yùn)行的環(huán)境,使宿主程序與插件無(wú)縫對(duì)接。宿主程序與插件的關(guān)系是水和魚(yú)的關(guān)系,有水沒(méi)魚(yú),水就失去了價(jià)值;有魚(yú)沒(méi)水,魚(yú)就會(huì)死去。從關(guān)系的角度來(lái)分析,開(kāi)發(fā)框架的目的是什么?是與其他事物發(fā)生關(guān)系,包括:開(kāi)發(fā)者、二次開(kāi)發(fā)者、應(yīng)用者、插件、甚至其他軟件或組件等。發(fā)生的關(guān)系越多、相處越融洽,證明這個(gè)框架的價(jià)值越高。所以說(shuō),一個(gè)好的框架平臺(tái),不僅體現(xiàn)了開(kāi)發(fā)者的技術(shù),同時(shí)反應(yīng)了開(kāi)發(fā)者的情商。
SuperIO框架使用NET反射技術(shù)開(kāi)發(fā)插件管理機(jī)制,在本章中不詳細(xì)介紹具體的技術(shù)細(xì)節(jié),在《第8章 插件引擎設(shè)計(jì)》中再進(jìn)行詳細(xì)的介紹技術(shù)應(yīng)用。
那么一個(gè)框架的宿主程序應(yīng)該怎么樣去設(shè)計(jì)呢?或是說(shuō)從哪些方面去考慮設(shè)計(jì)問(wèn)題?在開(kāi)發(fā)SuperIO框架的時(shí)候,一直在思考這個(gè)問(wèn)題。首先,這個(gè)問(wèn)題不應(yīng)該從技術(shù)角度去考慮,而應(yīng)該從人的角度去考慮如何做,應(yīng)用者的角度、二次開(kāi)發(fā)者的角度來(lái)規(guī)劃宿主程序。
從應(yīng)用角度來(lái)分析,宿主程序應(yīng)該包括:用戶(hù)管理、設(shè)備驅(qū)動(dòng)管理、設(shè)備狀態(tài)監(jiān)視方式、自定義UI插件顯示方式、自定義輸出數(shù)據(jù)插件操作方式、服務(wù)插件的服務(wù)方式、軟件運(yùn)行的監(jiān)視方式、串口IO通道監(jiān)視方式、網(wǎng)絡(luò)IO通道監(jiān)視方式等等。這些是我們從大的方向規(guī)劃的,還需要再進(jìn)一步細(xì)化,指引我們的開(kāi)發(fā)工作。
用戶(hù)管理,要支持多用戶(hù)以及用戶(hù)權(quán)限分配。針對(duì)實(shí)時(shí)數(shù)據(jù)采集框架,面對(duì)現(xiàn)場(chǎng)應(yīng)用的時(shí)候,肯定會(huì)涉及到兩個(gè)角色:使用人員、工程師人員。針對(duì)使用人員的權(quán)限定位:可以查看參數(shù)和數(shù)據(jù)信息。針對(duì)工程師人員的權(quán)限定位:不僅擁有使用人員的權(quán)限,還可以修改參數(shù)。用戶(hù)管理的菜單,如下圖:

設(shè)備驅(qū)動(dòng)管理,設(shè)備驅(qū)動(dòng)(插件)是通過(guò)接口、抽象類(lèi)設(shè)計(jì)的框架核心部分之一,可以把二次開(kāi)發(fā)好的設(shè)備插件加載到框架中運(yùn)行,完成數(shù)據(jù)采集、校驗(yàn)、解析、處理等相關(guān)操作,以及進(jìn)行命令、數(shù)據(jù)的交互。同時(shí),設(shè)備驅(qū)動(dòng)管理還應(yīng)該具體刪除相關(guān)的設(shè)備插件的功能。增加設(shè)備插件,如下圖:

設(shè)備狀態(tài)監(jiān)視方式,我們可以把它稱(chēng)為“設(shè)備運(yùn)行器”,它并不是對(duì)不同類(lèi)型設(shè)備驅(qū)動(dòng)的所有參數(shù)、屬性等數(shù)據(jù)進(jìn)行簡(jiǎn)單顯示,而是對(duì)設(shè)備通用參數(shù)、屬性、實(shí)時(shí)狀態(tài)等數(shù)據(jù)進(jìn)行顯示、監(jiān)視,例如:設(shè)備ID、設(shè)備名稱(chēng)、地址、通訊類(lèi)型、IO參數(shù)、IO狀態(tài)、通訊狀態(tài)、設(shè)備狀態(tài)、報(bào)警狀態(tài)、設(shè)備類(lèi)型和編號(hào)等。如下圖:

自定義UI插件顯示方式,二次開(kāi)發(fā)者在規(guī)范的接口基礎(chǔ)上開(kāi)發(fā)數(shù)據(jù)顯示方式,掛載到框架的配置文件中,當(dāng)用戶(hù)單擊某一個(gè)顯示視圖的時(shí)候,以Tab Form的形式顯示,并且可以單擊按鈕進(jìn)行關(guān)閉,如下圖:

自定義輸出數(shù)據(jù)插件操作方式,這種輸出數(shù)據(jù)的是對(duì)實(shí)時(shí)數(shù)據(jù)的導(dǎo)出,更多的是以事務(wù)性的服務(wù)存在,可以把一類(lèi)的設(shè)備數(shù)據(jù)輸出成多種數(shù)據(jù)格式。輸出數(shù)據(jù)插件可以通過(guò)配置文件進(jìn)行加載,只要設(shè)備驅(qū)動(dòng)有數(shù)據(jù)更新,就把數(shù)據(jù)通過(guò)接口傳遞給輸出數(shù)據(jù)插件,進(jìn)行輸出操作。不在配置文件中配置插件信息,則程序不進(jìn)行加載,不進(jìn)行輸出操作。所以,這種事務(wù)性的服務(wù)不需要界面來(lái)完成,可以在宿主程序啟動(dòng)時(shí)通過(guò)代碼來(lái)完成。
服務(wù)插件的服務(wù)方式,這種服務(wù)是長(zhǎng)期運(yùn)行的事務(wù)性任務(wù),所以更復(fù)雜一些。有些服務(wù)需要隨宿主程序啟動(dòng)而自動(dòng)運(yùn)行,有些服務(wù)需要人工手動(dòng)啟動(dòng)才運(yùn)行。在宿主程序啟動(dòng)的時(shí)候要把服務(wù)的信息加載到菜單上,菜單里顯示的這些服務(wù)可能有些已經(jīng)啟動(dòng)了,有些需要通過(guò)單擊操作,顯示窗體并填寫(xiě)必要的信息后才可能啟動(dòng)。所以,宿主程序與服務(wù)插件不是單向交互,而是雙向數(shù)據(jù)、事件交互。例如:把設(shè)備的數(shù)據(jù)采集上來(lái)、處理之后,要把數(shù)據(jù)上傳到服務(wù)中心或其他區(qū)域,就可以開(kāi)發(fā)一個(gè)插件來(lái)完成這項(xiàng)任務(wù),如下圖:

軟件運(yùn)行的監(jiān)視方式,這是一種實(shí)時(shí)日志監(jiān)視器,可以監(jiān)視框架運(yùn)行情況、以及設(shè)備的運(yùn)行情況。把異常的信息可以友好的顯示出來(lái),把異常的詳細(xì)信息保存到日志文件。我們可以把它稱(chēng)為“運(yùn)行監(jiān)測(cè)器”,對(duì)于實(shí)時(shí)數(shù)據(jù)采集框架的運(yùn)行是很有幫助的。如下圖:

串口IO通道監(jiān)視方式,當(dāng)某一個(gè)設(shè)備驅(qū)動(dòng)以串口方式通訊時(shí),當(dāng)串口參數(shù)動(dòng)態(tài)發(fā)生改變時(shí)會(huì)在串口監(jiān)視器反映當(dāng)前串口IO狀態(tài),例如:增加串口、刪除串口、串口號(hào)和波特率的改變等。如下圖:

網(wǎng)絡(luò)IO通道監(jiān)視方式,相對(duì)好設(shè)計(jì)一些,只需要對(duì)Socket實(shí)例的連接和斷開(kāi)進(jìn)行事件反映,Socket實(shí)例有效時(shí)把信息增加到網(wǎng)絡(luò)監(jiān)視器中,Socket實(shí)例無(wú)效時(shí),并釋放了相關(guān)資源后,從網(wǎng)絡(luò)監(jiān)視器刪除相關(guān)信息。如下圖:

基于以上的分析,我們需要構(gòu)建一個(gè)完整的宿主程序,必要的功能要有,但是這個(gè)程序不一定很復(fù)雜,因?yàn)橛行┕δ堋㈨憫?yīng)、屬性、數(shù)據(jù)等可以放到設(shè)備插件中完成,在《第3章 設(shè)備驅(qū)動(dòng)的設(shè)計(jì)》中詳細(xì)介紹設(shè)計(jì)情況。構(gòu)建的宿主程序,如下圖:

如果光有了宿主程序,那么還沒(méi)有分析全面。還需要以二次開(kāi)發(fā)者的角度分析宿主程序是否能夠與二次開(kāi)發(fā)者保持良好的關(guān)系。這里涉及到宿主程序存在的形式問(wèn)題,宿主程序作為SuperIO框架的一部分,是一個(gè)整體的組件。希望二次開(kāi)發(fā)者繼承宿主程序就可以快速構(gòu)建一個(gè)自己的主程序,可以在此基礎(chǔ)上擴(kuò)展功能,這樣的話(huà),需要把宿主程序的關(guān)鍵控件的訪問(wèn)權(quán)限設(shè)置成protected。另外,宿主程序還需要一個(gè)配置文件,把二次開(kāi)發(fā)者關(guān)心的參數(shù)可設(shè)置,例如:標(biāo)題、版本號(hào)、公司名稱(chēng)等。
經(jīng)過(guò)上述的過(guò)程,我們就對(duì)宿主程序有一個(gè)清晰認(rèn)識(shí)和規(guī)劃。界面的骨架已經(jīng)搭建出來(lái),在后期的開(kāi)發(fā)過(guò)程序中從細(xì)節(jié)著手,逐步實(shí)現(xiàn)這些功能。但是,這樣一個(gè)簡(jiǎn)單的界面需要很多類(lèi)、模塊等支撐。以后章節(jié)會(huì)對(duì)每個(gè)模塊進(jìn)行詳細(xì)設(shè)計(jì)說(shuō)明。
對(duì)于實(shí)時(shí)數(shù)據(jù)采集框架,通訊部分始終是軟件的核心,要求高實(shí)時(shí)性、高穩(wěn)定性。軟件框架決定了軟件運(yùn)行的穩(wěn)定性,以及以后的擴(kuò)展性,所以需要對(duì)通訊機(jī)制、控制方式進(jìn)行良好的設(shè)計(jì)。
在《1.通訊框架介紹》中的已經(jīng)對(duì)應(yīng)用場(chǎng)景進(jìn)行了介紹,所以決定了軟件框架在通訊方面的應(yīng)用有兩種方式:主動(dòng)請(qǐng)求和被動(dòng)接收。
主動(dòng)請(qǐng)求方式又可以稱(chēng)之為呼叫應(yīng)答方式或主從方式。也就是說(shuō),主動(dòng)權(quán)在軟件框架端,只有軟件框架主動(dòng)發(fā)送請(qǐng)求命令,從機(jī)(硬件設(shè)備、傳感器等)接收到命令后并且檢驗(yàn)數(shù)據(jù)的完整性,以及確定是否發(fā)給自己的命令,校驗(yàn)成功后,返回指定的數(shù)據(jù)信息,完成一次完整的鏈路通訊過(guò)程。呼叫應(yīng)答通訊方式,如下圖:

被動(dòng)接收方式是軟件框架實(shí)時(shí)監(jiān)測(cè)IO通道,只要有數(shù)據(jù)信息就會(huì)提取出來(lái),進(jìn)行數(shù)據(jù)校驗(yàn),檢驗(yàn)成功后,分析、處理、保存數(shù)據(jù)信息。例如設(shè)備、傳感器等定時(shí)發(fā)送狀態(tài)數(shù)據(jù)。這種通訊方式,如下圖:

在復(fù)雜的應(yīng)用場(chǎng)景中,這兩種通訊方式都有可能存在,此類(lèi)情況一般是采用以太網(wǎng)鏈路進(jìn)行通訊。針對(duì)只有外接串口的設(shè)備可以通過(guò)以太網(wǎng)轉(zhuǎn)換模塊來(lái)接入。
由于串口通訊的特性限制,避免多個(gè)硬件設(shè)備連接到串口總線出現(xiàn)數(shù)據(jù)混亂
現(xiàn)象,一般采用輪詢(xún)模式的呼叫應(yīng)答通訊機(jī)制。
當(dāng)有多個(gè)設(shè)備連接到通訊平臺(tái)時(shí),通訊平臺(tái)會(huì)輪詢(xún)調(diào)度設(shè)備進(jìn)行通訊任務(wù)。某一時(shí)刻只能有一個(gè)設(shè)備發(fā)送請(qǐng)求命令、等待接收返回?cái)?shù)據(jù),這個(gè)設(shè)備完成發(fā)送、接收(如果遇到超時(shí)情況,則自動(dòng)返回)后,下一個(gè)設(shè)備才進(jìn)行通訊任務(wù),依次輪詢(xún)?cè)O(shè)備。如下圖:

輪詢(xún)通訊機(jī)制是保證數(shù)據(jù)有序的發(fā)送、接收,避免并發(fā)數(shù)據(jù)在串口總線上出現(xiàn)混亂,但是這種通訊機(jī)制是以降低性能為代價(jià)的,適用于串口通訊,在以太網(wǎng)通訊中顯然無(wú)法充分利用網(wǎng)絡(luò)通訊的優(yōu)勢(shì)。以太網(wǎng)是獨(dú)立信道、可以全雙工通訊。為了充分發(fā)揮以太網(wǎng)的優(yōu)勢(shì),在輪詢(xún)通訊機(jī)制的基礎(chǔ)上增加了并發(fā)通訊模式、自控通訊模式。一是為了提高通訊的性能,二是為了二次開(kāi)發(fā)有更多自主控制權(quán)。
以太網(wǎng)輪詢(xún)通訊模式與串口通訊模式一致,如下圖:

并發(fā)通訊模式是集中發(fā)送所有設(shè)備的請(qǐng)求指令,現(xiàn)在SuperIO框架是采用循環(huán)同步方式發(fā)送請(qǐng)求命令。還有進(jìn)一步提高的機(jī)會(huì),采用并行異步方式集中發(fā)送請(qǐng)求命令。硬件設(shè)備接收到指令后進(jìn)行校驗(yàn),校驗(yàn)成功后返回對(duì)應(yīng)指令的數(shù)據(jù),通訊平臺(tái)異步監(jiān)聽(tīng)到數(shù)據(jù)信息后,進(jìn)行接收操作,然后再進(jìn)行數(shù)據(jù)的分發(fā)、處理等。如下圖:

自控通訊模式與并發(fā)通訊模式類(lèi)似,區(qū)別在于發(fā)送指令操作交給設(shè)備驅(qū)動(dòng)本身進(jìn)行控制,或者說(shuō)交給二次開(kāi)發(fā)者,二次開(kāi)發(fā)者可以通過(guò)時(shí)鐘定時(shí)用事件驅(qū)動(dòng)的方式發(fā)送指令數(shù)據(jù)。硬件設(shè)備接收到指令后進(jìn)行校驗(yàn),校驗(yàn)成功后返回對(duì)應(yīng)指令的數(shù)據(jù),通訊平臺(tái)異步監(jiān)聽(tīng)到數(shù)據(jù)信息后,進(jìn)行接收操作,然后再進(jìn)行數(shù)據(jù)的分發(fā)、處理等。
自控通訊模式可以為二次開(kāi)發(fā)者提供精確的定時(shí)請(qǐng)求實(shí)時(shí)數(shù)據(jù)機(jī)制,使通訊機(jī)制更靈活、自主。如下圖:

并發(fā)模式和自控模式都可被動(dòng)接收數(shù)據(jù),應(yīng)用場(chǎng)景更加靈活,使軟件框架和硬件設(shè)備的開(kāi)發(fā)過(guò)工作更自由。


“C#框架的總體設(shè)計(jì)知識(shí)點(diǎn)有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
分享文章:C#框架的總體設(shè)計(jì)知識(shí)點(diǎn)有哪些
標(biāo)題鏈接:http://www.chinadenli.net/article6/isjoog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、自適應(yīng)網(wǎng)站、靜態(tài)網(wǎng)站、網(wǎng)站建設(shè)、企業(yè)建站、電子商務(wù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
營(yíng)銷(xiāo)型網(wǎng)站建設(shè)知識(shí)