溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#的二次開發(fā)及應(yīng)用舉例分析

發(fā)布時(shí)間:2021-11-26 16:20:12 來源:億速云 閱讀:586 作者:iii 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容主要講解“C#的二次開發(fā)及應(yīng)用舉例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“C#的二次開發(fā)及應(yīng)用舉例分析”吧!

二次開發(fā)及應(yīng)用

    支持二次開發(fā)是框架的重要特點(diǎn),作為設(shè)計(jì)者或架構(gòu)師能使自己的作品廣泛被使用是一件很榮幸的一件事。不管做過多少項(xiàng)目,能夠有自己的代表作品是一件很不容易的一件事,能夠通過一個(gè)作品廣泛的結(jié)交一些朋友也是一件很慶幸的事。所以,一直努力讓SuperIO更穩(wěn)定、更好的支持二次開發(fā)、更快的構(gòu)建一個(gè)通訊平臺(tái)。

   這部分主要介紹利用SuperIO進(jìn)行二次開發(fā),開發(fā)流程如下圖:

 C#的二次開發(fā)及應(yīng)用舉例分析

12.1     項(xiàng)目配制

1)目標(biāo)框架選擇Framework4.0

 C#的二次開發(fā)及應(yīng)用舉例分析

2)生成的目標(biāo)平臺(tái)采用x86

 C#的二次開發(fā)及應(yīng)用舉例分析

     所有事例程序的目標(biāo)平臺(tái)采用x86。主要考慮到32位操作系統(tǒng)與64操作系統(tǒng)的兼容性。

12.2     引用相關(guān)組件

     在“開發(fā)包”中引用相關(guān)組件。如下圖:

 C#的二次開發(fā)及應(yīng)用舉例分析

12.3     構(gòu)建主程序

   通過繼承SuperIO.UI.MainForm窗體類可以構(gòu)建自己的宿主程序,這只是一個(gè)基本的界面框架,可以在此基礎(chǔ)上進(jìn)行擴(kuò)展。構(gòu)建好的宿主程序如下圖:

 C#的二次開發(fā)及應(yīng)用舉例分析

12.4     設(shè)備驅(qū)動(dòng)的開發(fā)

12.4.1假定通訊協(xié)議

12.4.1.1 發(fā)送讀實(shí)時(shí)數(shù)據(jù)命令協(xié)議

    計(jì)算機(jī)發(fā)送0x61指令為讀實(shí)時(shí)數(shù)據(jù)命令,共發(fā)送6個(gè)字節(jié),校驗(yàn)和為從“從機(jī)地址”開始的累加和,不包括“數(shù)據(jù)報(bào)頭”、“校驗(yàn)和”和“協(xié)議結(jié)束”。

    發(fā)送指令數(shù)據(jù)幀如下:

幀結(jié)構(gòu)

數(shù)據(jù)報(bào)頭

從機(jī)地址

指令代碼

校驗(yàn)和

協(xié)議結(jié)束

0x55

0xAA

 

0x61

 

0x0D

字節(jié)數(shù)

1

1

1

1

1

1

12.4.1.2 解析實(shí)時(shí)數(shù)據(jù)協(xié)議

   下位機(jī)接收到讀實(shí)時(shí)數(shù)據(jù)命令后,并校驗(yàn)成功,返回實(shí)時(shí)數(shù)據(jù),校驗(yàn)和為從“從機(jī)地址”開始的累加和,不包括“數(shù)據(jù)報(bào)頭”、“校驗(yàn)和”和“協(xié)議結(jié)束”。

   接收數(shù)據(jù)幀如下:

幀結(jié)構(gòu)

數(shù)據(jù)報(bào)頭

從機(jī)地址

指令代碼

流量

信號(hào)

校驗(yàn)和

協(xié)議結(jié)束

0x55

0xAA

 

0x61

浮點(diǎn)型

浮點(diǎn)型

 

0x0D

字節(jié)數(shù)

1

1

1

1

4

4

1

1

12.4.1.3 發(fā)送和接收數(shù)據(jù)事例

發(fā)送(十六進(jìn)制):0x55 0xaa 0x00 0x61 0x61 0x0d

接收(十六進(jìn)制):0x55 0xaa 0x00 0x61 0x43 0x7a 0x00 0x00 0x43 0xb4 0x15 0x0d

流量數(shù)據(jù)為:250.00

信號(hào)數(shù)據(jù)為:360.00

12.4.2新建設(shè)備模塊

   如下圖:

 C#的二次開發(fā)及應(yīng)用舉例分析

     增加對(duì)SuperIO.dll的引用,如下圖:

C#的二次開發(fā)及應(yīng)用舉例分析 

12.4.3構(gòu)建協(xié)議驅(qū)動(dòng)

      新建兩個(gè)類:MySendProtocol 和MyReceiveProtocol,MySendProtocol繼承SuperIO.Device.DeviceSendProtocol基類,MyReceiveProtocol類繼承SCL.Device.DeviceReceiveProtocol。

MySendProtocol 和MyReceiveProtocol兩個(gè)類都重寫(override)

      “Function61”函數(shù),MySendProtocol類中的Function61函數(shù)完成打包發(fā)送命令操作,MyReceiveProtocol類中的Function61函數(shù)完成解析數(shù)據(jù)操作,F(xiàn)unctionXX在兩個(gè)類中都會(huì)成對(duì)出現(xiàn),主要是為了好記。

 在MySendProtocol實(shí)例中可以調(diào)用DriverFunction函數(shù),傳入相應(yīng)的命令,例如:0x61。會(huì)自動(dòng)調(diào)用“Function61”函數(shù),作為調(diào)用相應(yīng)命令函數(shù)的驅(qū)動(dòng)接口。GetSendCmdBytes函數(shù)接口是在DriverFunction函數(shù)基礎(chǔ)上封裝的,同樣也可以使用,但是要把“isbox“設(shè)置成false,否則會(huì)對(duì)發(fā)送的數(shù)據(jù)做特殊的處理。

      在MyReceiveProtocol實(shí)例中可以調(diào)用DriverFunction函數(shù),傳入相應(yīng)的命令,例如:0x61。會(huì)自動(dòng)調(diào)用“Function61”函數(shù),作為調(diào)用相應(yīng)命令函數(shù)的驅(qū)動(dòng)接口。GetAnalysisData函數(shù)是在DriverFunction函數(shù)基礎(chǔ)上封裝的,同樣可以使用,只是多調(diào)用了一層GetCommand函數(shù)接口。

      具體代碼請(qǐng)參見:DeviceDemo項(xiàng)目。

12.4.4構(gòu)建參數(shù)和實(shí)時(shí)數(shù)據(jù)實(shí)例類

    新建兩個(gè)類:MyDeviceParameter和MyDeviceRTDataMyDeviceParameter繼承SuperIO.Device.DeviceParameter類,用于保存?zhèn)鋮?shù),可以在此類中增加新的設(shè)備參數(shù)。

    MyDeviceRTData繼承SuperIO.Device.DeviceRealTimeData類,用于保存設(shè)備的實(shí)時(shí)數(shù)據(jù),可以根據(jù)通訊協(xié)議自定義設(shè)備的實(shí)時(shí)數(shù)據(jù)。

    這兩個(gè)類繼承基類后會(huì)自動(dòng)繼承SaveSerialize和GetSerialize兩個(gè)泛型函數(shù),SaveSerialize函數(shù)是把當(dāng)前對(duì)象序列化成XML,GetSerialize是把序列化的XML反向生成對(duì)象實(shí)例。SuperIO.Device.DeviceParameter類和SuperIO.Device.DeviceRealTimeData類是繼承自SerializeOperation類,他們的接口是IserializeOperation,SerializeOperation只是一個(gè)簡(jiǎn)單的序列化XML操作類庫(kù)。

如果開發(fā)者想完全自定義一個(gè)數(shù)據(jù)持久文件,那么可以繼承IserializeOperation接口,重寫相應(yīng)的接口函數(shù),自定義存儲(chǔ)數(shù)據(jù)的方式。

12.4.5構(gòu)建設(shè)備驅(qū)動(dòng)

    “構(gòu)建協(xié)議驅(qū)動(dòng)”和“構(gòu)建參數(shù)和實(shí)時(shí)數(shù)據(jù)實(shí)例類”兩節(jié)都是為構(gòu)建運(yùn)行設(shè)備做的前期準(zhǔn)備,將作為運(yùn)行設(shè)備的屬性。

     新建一個(gè)設(shè)備類:MyDevice,它繼承自SuperIO.Device. RunDevice1。

     開發(fā)者注意到還有一個(gè)SuperIO.Device. RunDevice類,它是比較早的運(yùn)行設(shè)備類,考慮的平臺(tái)的兼容性,現(xiàn)在還在繼承使用,但是新開發(fā)的設(shè)備模型不建議使用SuperIO.Device. RunDevice1類。它們都是繼承自IRunDevice接口。

12.5     圖形顯示的開發(fā)

  1. 增加對(duì)SuperIO組件的引用。

  2. 新建Form窗體,繼承SuperIO.Show.IGraphicsShow接口,并且實(shí)現(xiàn)接口功能。

  3. 通過UpdateDevice接口實(shí)現(xiàn)解析對(duì)象,并顯示解析對(duì)象后的數(shù)據(jù)。

12.6     數(shù)據(jù)導(dǎo)出的開發(fā)

  1. 增加對(duì)SuperIO組件的引用。

  2. 新建類,繼承SuperIO.Export.IExportData接口,并且實(shí)現(xiàn)接口功能。

  3. 通過UpdateDevice接口實(shí)現(xiàn)解析對(duì)象,并輸出格式化后的數(shù)據(jù)。

12.7     服務(wù)組件的開發(fā)

  1. 增加對(duì)SuperIO組件的引用。

  2. 新建類,繼承SuperIO.Services.AppService抽象類,并且實(shí)現(xiàn)接口功能。

  3. 可以通過UpdateDevice接口函數(shù)更新設(shè)備的緩存數(shù)據(jù)。

12.8     配置工具的應(yīng)用

     手動(dòng)對(duì)框架平臺(tái)的配置文件進(jìn)行修改,對(duì)配置信息不容易理解,也容易影響配置文件的格式,所以寫了一個(gè)配置工具“ConfigTool.exe”,對(duì)框架平臺(tái)的全局參數(shù)和驅(qū)動(dòng)信息進(jìn)行掛載、刪除等。

12.8.1參數(shù)配置

    參數(shù)配置主要涉及到:軟件信息、安裝操作、網(wǎng)絡(luò)和串口通訊等信息。配置內(nèi)容如下圖

 C#的二次開發(fā)及應(yīng)用舉例分析

12.8.2驅(qū)動(dòng)掛載

    配置工具也可以掛載驅(qū)動(dòng)和插件,配置好之后,啟動(dòng)框架平臺(tái)可以對(duì)其進(jìn)行操作,以掛載設(shè)備驅(qū)動(dòng)為例如下圖:

 C#的二次開發(fā)及應(yīng)用舉例分析

到此,相信大家對(duì)“C#的二次開發(fā)及應(yīng)用舉例分析”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI