C#與宇電溫控表自定義協議通信實例


寫在前面

通信協議是做上位機開發經常會聽到的一個詞。無論是單片機開發常用的串口通信協議,還是上位機開發常用TCP/IP通信協議,以及網絡通信常用的Http協議,可以這么說,通信協議無處不在。公眾號:【dotNet工控上位機:thinger_swj】

對於通信協議,官方性解釋是指計算機通信網絡中兩台計算機之間進行通信所必須共同遵守的規定或規則。通俗地說,為了保證機器與機器之間能夠正常對話,兩者之間需要共同使用同一種語言,這種語言就是通信協議,就和中國人之間溝通使用普通話、本地人之間溝通使用方言、不同國家的人之間溝通使用英語是一個道理。

1 通信協議剖析

本文主要針對的硬件是國內儀表市場占有率比較高的一個品牌——廈門宇電AI系列儀表。廈門宇電自動化科技有限公司專門為AI 系列顯示控制儀表開發了一個通訊協議——AIBUS,這個AIBUS會有一系列的協議說明,對上位機開發人員來說,這就是一個自定義協議。

如果要和一個自定義協議的儀表進行通信,我們需要從以下幾個環節着手去做:通信協議剖析、硬件配置及環境搭建、根據協議編寫通信庫、編寫測試軟件進行測試。

這里首先找到了該儀表的通信協議說明書,一般儀表或者PLC的通信協議可以通過供應商提供或者官網下載,宇電儀表通信協議下載鏈接:

在協議說明書中,找到通信的核心報文部分:

AI 儀表采用 16 進制數據格式來表示各種指令代碼及數據。AI 儀表軟件通訊指令經過優化設計,標准的通訊指令只有兩條,一條為讀指令,一條為寫指令,兩條指令使得上位機軟件編寫容易,但能 100%完整地對儀表進行操作;標准讀和寫指令分別如下:

讀: 地址代號+52H(82)+要讀的參數代號+00+00+校驗碼

寫: 地址代號+43H(67)+要寫的參數代號+寫入低字節+寫入高字節+校驗碼

地址代號:為了在一個通訊接口上連接多台 AI 儀表,需要給每台 AI 儀表編一個互不相同的通訊地址,有效的地址為 0-80(部分型號為 0-100),所以一條通訊線路上最多可連接 81 台 AI 儀表,儀表的通訊地址由參數 Addr 決定。儀表內部采用兩個重復的 128-208(16 進制為 80H-D0H)之間數值來表示地址代號,由於大於 128的數較少用到(如 ASC 方式的協議通常只用 0-127 之間的數),因此可降低因數據與地址重復造成沖突的可能性。

參數代號:AI 儀表通訊協議規定,地址代號為兩個相同的字節,數值為(儀表地址+80H)。 例如:儀表參數 Addr=10(16 進制數為0AH,0A+80H=8AH),則該地址代號: 8AH 8AH 參數代號:儀表的參數用1個8位二進制數(一個字節,寫為 16 進制數)的參數代號來表示,它在指令中表示要讀/寫的參數名。

校驗碼:校驗碼采用 16 位求和校驗方式,其中讀指令的校驗碼計算方法為:

要讀參數的代號×256+82+ADDR

寫指令的校驗碼計算方法為:

要寫的參數代號×256+67+要寫的參數值+ADDR

公式中 ADDR為儀表地址參數值,范圍是 0~80(注意不要加上 80H)。校驗碼為以上公式做二進制16位整數加法后得到的余數,余數為2 個字節,其低字節在前,高字節在后。要寫的參數值用16位二進 制整數表示。

返回數據:無論是讀還是寫,儀表都返回以下 10 個字節數據:

測量值 PV+給定值 SV+輸出值MV及報警狀態+所讀/寫參數值+校驗碼

其中 PV、SV 及所讀參數值均各占 2 個字節,代表一個 16 位二進制有符號補碼整數,低位字節在前,高位字節在后,整數無法表示小數點,要求用戶在上位機處理;MV 占一個字節,按 8 位有符號二進制數格式,數值范圍-110~+110,狀態位占一個字節,校驗碼占 2個字節,共 10個字節。

通過以上說明,可以發現AIBUS這個通信協議相對來說還是比較簡單的,我們只需要按照規定,將組織好的報文發送給控制器,即可獲取到測量值、給定值、輸出值、報警狀態及參數值。

2 硬件環境搭建

將整個環境搭建起來,需要涉及以下硬件:

  • Pt100鉑熱電阻

· 宇電溫控表

· RS485轉USB

· 工控機電腦

· 根據宇電溫控表的接線圖,整體硬件接線如下圖所示:

注意:接線完成后,需要按照宇電溫控表說明書,對宇電儀表進行相關的設置,包含通信參數設置、從站地址、輸入類型等。

3 通信庫開發

通信庫開發是本文的核心內容,這里需要有一定的C#編程基礎,同時對通信協議有一定的認識和了解。

  • 初始化通訊:初始化通信主要是進行串口連接及斷開連接方法的編寫:

· 為了方便進行報文的組織,編寫了一個報文拼接類ByteArray:

  • 校驗:AIBUS協議中的校驗采用校驗和的方式:

讀指令的校驗碼計算方法為:要讀參數的代號×256+82+ADDR

寫指令的校驗碼計算方法為:要寫的參數代號×256+67+要寫的參數值+ADDR

· 讀取參數:AIBUS讀取參數報文格式如下:

· 寫入參數:AIBUS寫入參數報文格式如下:

4 通信軟件開發

完成通信庫開發后,再寫通信軟件就非常簡單了,直接通過創建通信對象,調用相關的方法即可獲取到相應的數據。

5、寫在最后

本文主要針對C#與廈門宇電溫控表之間的自定義協議通信做了較為詳細的描述,相信對於很多電氣工程師,尤其是以西門子PLC為主的電氣工程師來說,會有很大幫助。近幾年隨着人工智能、物聯網的流程,工控行業發生了很大的變化,每一位電氣工程師都應該及時作出調整,至少學習一門高級編程語言,未雨綢繆,以更好的姿態來應對即將到來的智能制造2025。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM