[連載]《C#通訊(串列埠和網路)框架的設計與實現》- 12.二次開發及應用
目 錄
第十二章 二次開發及應用... 2
12.1 專案配製... 3
12.2 引用相關元件... 4
12.3 構建主程式... 5
12.4 裝置驅動的開發... 6
12.4.1 假定通訊協議... 6
12.4.1.1 傳送讀實時資料命令協議... 6
12.4.1.2 解析實時資料協議... 6
12.4.1.3 傳送和接收資料事例... 7
12.4.2 新建裝置模組... 7
12.4.3 構建協議驅動... 8
12.4.4 構建引數和實時資料例項類... 8
12.4.5 構建裝置驅動... 9
12.5 圖形顯示的開發... 9
12.6 資料匯出的開發... 9
12.7 服務元件的開發... 10
12.8 配置工具的應用... 10
12.8.1 引數配置... 10
12.8.2 驅動掛載... 11
12.9 小結... 11
第十二章 二次開發及應用
支援二次開發是框架的重要特點,作為設計者或架構師能使自己的作品廣泛被使用是一件很榮幸的一件事。不管做過多少專案,能夠有自己的代表作品是一件很不容易的一件事,能夠通過一個作品廣泛的結交一些朋友也是一件很慶幸的事。所以,一直努力讓SuperIO更穩定、更好的支援二次開發、更快的構建一個通訊平臺。
這部分主要介紹利用SuperIO進行二次開發,開發流程如下圖:
12.1 專案配製
1)目標框架選擇Framework4.0
2)生成的目標平臺採用x86
所有事例程式的目標平臺採用x86。主要考慮到32位作業系統與64作業系統的相容性。
12.2 引用相關元件
在“開發包”中引用相關元件。如下圖:
12.3 構建主程式
通過繼承SuperIO.UI.MainForm窗體類可以構建自己的宿主程式,這只是一個基本的介面框架,可以在此基礎上進行擴充套件。構建好的宿主程式如下圖:
12.4 裝置驅動的開發
12.4.1假定通訊協議
12.4.1.1 傳送讀實時資料命令協議
計算機發送0x61指令為讀實時資料命令,共傳送6個位元組,校驗和為從“從機地址”開始的累加和,不包括“資料報頭”、“校驗和”和“協議結束”。
傳送指令資料幀如下:
幀結構 |
資料報頭 |
從機地址 |
指令程式碼 |
校驗和 |
協議結束 |
|
0x55 |
0xAA |
0x61 |
0x0D |
|||
位元組數 |
1 |
1 |
1 |
1 |
1 |
1 |
12.4.1.2 解析實時資料協議
下位機接收到讀實時資料命令後,並校驗成功,返回實時資料,校驗和為從“從機地址”開始的累加和,不包括“資料報頭”、“校驗和”和“協議結束”。
接收資料幀如下:
幀結構 |
資料報頭 |
從機地址 |
指令程式碼 |
流量 |
訊號 |
校驗和 |
協議結束 |
|
0x55 |
0xAA |
0x61 |
浮點型 |
浮點型 |
0x0D |
|||
位元組數 |
1 |
1 |
1 |
1 |
4 |
4 |
1 |
1 |
12.4.1.3 傳送和接收資料事例
傳送(十六進位制):0x55 0xaa 0x00 0x61 0x61 0x0d
接收(十六進位制):0x55 0xaa 0x00 0x61 0x43 0x7a 0x00 0x00 0x43 0xb4 0x15 0x0d
流量資料為:250.00
訊號資料為:360.00
12.4.2新建裝置模組
如下圖:
增加對SuperIO.dll的引用,如下圖:
12.4.3構建協議驅動
新建兩個類:MySendProtocol 和MyReceiveProtocol,MySendProtocol繼承SuperIO.Device.DeviceSendProtocol基類,MyReceiveProtocol類繼承SCL.Device.DeviceReceiveProtocol。
MySendProtocol 和MyReceiveProtocol兩個類都重寫(override)
“Function61”函式,MySendProtocol類中的Function61函式完成打包傳送命令操作,MyReceiveProtocol類中的Function61函式完成解析資料操作,FunctionXX在兩個類中都會成對出現,主要是為了好記。
在MySendProtocol例項中可以呼叫DriverFunction函式,傳入相應的命令,例如:0x61。會自動呼叫“Function61”函式,作為呼叫相應命令函式的驅動介面。GetSendCmdBytes函式介面是在DriverFunction函式基礎上封裝的,同樣也可以使用,但是要把“isbox“設定成false,否則會對傳送的資料做特殊的處理。
在MyReceiveProtocol例項中可以呼叫DriverFunction函式,傳入相應的命令,例如:0x61。會自動呼叫“Function61”函式,作為呼叫相應命令函式的驅動介面。GetAnalysisData函式是在DriverFunction函式基礎上封裝的,同樣可以使用,只是多呼叫了一層GetCommand函式介面。
具體程式碼請參見:DeviceDemo專案。
12.4.4構建引數和實時資料例項類
新建兩個類:MyDeviceParameter和MyDeviceRTDataMyDeviceParameter繼承SuperIO.Device.DeviceParameter類,用於儲存備引數,可以在此類中增加新的裝置引數。
MyDeviceRTData繼承SuperIO.Device.DeviceRealTimeData類,用於儲存裝置的實時資料,可以根據通訊協議自定義裝置的實時資料。
這兩個類繼承基類後會自動繼承SaveSerialize和GetSerialize兩個泛型函式,SaveSerialize函式是把當前物件序列化成XML,GetSerialize是把序列化的XML反向生成物件例項。SuperIO.Device.DeviceParameter類和SuperIO.Device.DeviceRealTimeData類是繼承自SerializeOperation類,他們的介面是IserializeOperation,SerializeOperation只是一個簡單的序列化XML操作類庫。
如果開發者想完全自定義一個數據持久檔案,那麼可以繼承IserializeOperation介面,重寫相應的介面函式,自定義儲存資料的方式。
12.4.5構建裝置驅動
“構建協議驅動”和“構建引數和實時資料例項類”兩節都是為構建執行裝置做的前期準備,將作為執行裝置的屬性。
新建一個裝置類:MyDevice,它繼承自SuperIO.Device. RunDevice1。
開發者注意到還有一個SuperIO.Device. RunDevice類,它是比較早的執行裝置類,考慮的平臺的相容性,現在還在繼承使用,但是新開發的裝置模型不建議使用SuperIO.Device. RunDevice1類。它們都是繼承自IRunDevice介面。
12.5 圖形顯示的開發
- 增加對SuperIO元件的引用。
- 新建Form窗體,繼承SuperIO.Show.IGraphicsShow介面,並且實現介面功能。
- 通過UpdateDevice介面實現解析物件,並顯示解析物件後的資料。
12.6 資料匯出的開發
- 增加對SuperIO元件的引用。
- 新建類,繼承SuperIO.Export.IExportData介面,並且實現介面功能。
- 通過UpdateDevice介面實現解析物件,並輸出格式化後的資料。
12.7 服務元件的開發
- 增加對SuperIO元件的引用。
- 新建類,繼承SuperIO.Services.AppService抽象類,並且實現介面功能。
- 可以通過UpdateDevice介面函式更新裝置的快取資料。
12.8 配置工具的應用
手動對框架平臺的配置檔案進行修改,對配置資訊不容易理解,也容易影響配置檔案的格式,所以寫了一個配置工具“ConfigTool.exe”,對框架平臺的全域性引數和驅動資訊進行掛載、刪除等。
12.8.1引數配置
引數配置主要涉及到:軟體資訊、安裝操作、網路和串列埠通訊等資訊。配置內容如下圖
12.8.2驅動掛載
配置工具也可以掛載驅動和外掛,配置好之後,啟動框架平臺可以對其進行操作,以掛載裝置驅動為例如下圖:
12.9 小結
對裝置驅動的開發進行了詳細的介紹,對於其他外掛請根據具體的情況進行開發,詳情請參見《二次開發手冊》。
作者:唯笑志在
Email:[email protected]
QQ:504547114
.NET開發技術聯盟:54256083