程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> [連載]《C#通訊(串口和網絡)框架的設計與實現》- 7.外部接口的設計,

[連載]《C#通訊(串口和網絡)框架的設計與實現》- 7.外部接口的設計,

編輯:C#入門知識

[連載]《C#通訊(串口和網絡)框架的設計與實現》- 7.外部接口的設計,


目       錄

第七章           外部接口的設計... 2

7.1           插件接口... 2

7.2           圖形顯示接口... 3

7.3           數據導出接口... 5

7.4           服務組件接口... 6

7.5           插件管理器... 8

7.6           框架整合、重構... 9

7.7           小結... 10

第七章     外部接口的設計

開發者不僅可以二次開發設備驅動,還可以二次開發自定義圖形顯示形式、

自定義數據導出格式和多種業務服務,並且設備驅動接口與這三種接口進行事件響應和數據交互。

7.1    插件接口

    圖形顯示接口、數據導出接口和服務組件接口都繼承自統一的插件接口(IPlugins),主要是方便管理和擴展。插件接口的代碼定義如下:

public interface IPlugins : IDisposable
{
       /// <summary>
       /// 服務Key,要求唯一
       /// </summary>
       string ThisKey { get; }

       /// <summary>
       /// 服務名稱
       /// </summary>
       string ThisName { get; }

       /// <summary>
       /// 更新設備數據,用於接收來自設備驅動的數據信息
       /// </summary>
       /// <param name="devid">設備ID</param>
       /// <param name="obj">設備對象</param>
       void UpdateDevice(int devid, object obj);

       /// <summary>
       /// 移除設備,當框架平台刪除設備的時候進行響應。
       /// </summary>
       /// <param name="devid">設備ID</param>
       void RemoveDevice(int devid);
}

     圖形顯示接口、數據導出接口和服務組件接口與插件接口的繼承關系如下圖:

 

     設備驅動只要有更新數據就會通過事件把數據傳送到UpdateDevice接口裡,這個接口內部到底怎麼處理完全由二次開發者來決定。當觸發設備驅動的刪除事件,就會調用RemoveDevice接口,以刪除、釋放資源。

7.2    圖形顯示接口

    框架平台通訊設備驅動把數據采集上來的只是原始數據,經過處理後要形成業務數據,那麼就會有顯示、分析、查詢、打印、報表等業務功能,並且針對同樣的數據信息,不同的用戶要求處理的方式有很大的不同。這部分功能變動很大,但是又不能每次有變動就要去修改框架平台,因為框架是“穩定”的部分,形成版本控制後就不隨便改變了。

   基於這樣考慮,作為框架要提供一個機制,能夠加載二次開發者設計的UI窗體。用於顯示采集終端設備的數據,可以把不同類型設備的數據以多種形式集成顯示在不同界面上。方便為用戶提供多種的、更友好的人機交互界面。

   首先,框架平台不能在啟動的時候就顯示所有UI窗體,具體要顯示哪個UI窗體完全由用戶自己決定,所以,我們要通過配置文件的形式把二次開發的組件信息加載到菜單裡,提供可觸發的顯示事件入口,如下圖:

 

   其次,那麼以什麼樣的形式顯示窗體呢?像很多管理系統一樣,我們采用Form Tab的方式顯示,如下圖:

 public interface IGraphicsShow : IPlugins { /// <summary> /// 關閉窗體事件時發生 /// </summary> event GraphicsShowClosedHandler GraphicsShowClosedHandler; /// <summary> /// 單擊右鍵 /// </summary> event MouseRightContextMenuHandler MouseRightContextMenuHandler; }

7.3    數據導出接口

    在數據集成系統項目中,要麼是集成其他廠家的設備數據,要麼是其他廠家集成自己家的設備數據,在沒有統一的標准前提下,會有各種集成數據的格式。為了滿足此類的場景,為設備導出數據專門設計了接口,開發者可以繼承該接口,設備在處理完數據後,會把數據自動傳輸到該接口,可以按規定的數據格式進行輸出了。

     對設備驅動實時數據導出,可以把一類的設備數據導出成多種數據格式。

     導出數據插件可以通過配置文件進行加載,只要設備驅動有數據更新,就把數據通過事件傳遞給導出數據接口。不在配置文件中配置插件信息,則程序不進行加載,不進行導出操作。所以,這種事務性的服務不需要界面來完成,可以在宿主程序啟動時通過代碼來完成。

    IExportData數據導出接口代碼定義如下:

public interface IExportData:IPlugins
{
       /// <summary>
       /// 格式化數據
       /// </summary>
       /// <param name="devid"></param>
       /// <param name="obj"></param>
       /// <returns></returns>
       object FormatDataString(int devid, object obj, DeviceType devicetype);
}

7.4    服務組件接口

     圍繞著設備驅動模塊采集的數據,根據應用場、需求,可以提供多種應用服務,例如:數據轉發服務、4-20mA服務、短信服務、LED服務、OPC服務、以及復雜的實時數據分析服務等。在保障數據實時性、穩定性的前提下,服務接口可以提供統一的服務機制,方便開發者進行二次開發。

     服務插件的服務方式,這種服務是長期運行的事務性任務,所以更復雜一些。

    有些服務需要隨宿主程序啟動而自動運行,有些服務需要人工手動啟動才運行。在宿主程序啟動的時候通過配制文件要把服務的信息加載到菜單上,菜單裡顯示的服務可能有些已經啟動了;有些需要通過單擊操作,顯示窗體並填寫必要的信息後才可能啟動。所以,宿主程序與服務插件不是單向交互,而是雙向數據、事件交互。

    IappService服務接口在IPlugins基礎上進行擴展,增加了函數、屬性和事件,代碼定義如下:

public interface IAppService : IPlugins
{
        /// <summary>
       ///     啟動服務
       /// </summary>
       void StartService();

       /// <summary>
       ///     是否自動啟動
       /// </summary>
       bool IsAutoStart { set; get; }
      
         /// <summary>
       ///     服務類型
       /// </summary>
       ServiceType ServiceType { set; get; }

       /// <summary>
       ///     單擊事件,關聯菜單
       /// </summary>
       void OnClick();

       /// <summary>
       ///     釋放服務
       /// </summary>
       void ReleaseService();

       /// <summary>
       ///     寫日志事件
       /// </summary>
       event WriteLogHandler WriteLogHandler;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved