1. 程式人生 > >關於RS485匯流排通訊協議開發注意事項

關於RS485匯流排通訊協議開發注意事項

關於RS485匯流排通訊協議開發注意事項

1       前言

近段時間發現我們系統在進行裝置組態時,採用的串列埠複用方式在同一個RS485串列埠上掛載多個智慧裝置進行通訊、監控。而往往在系統組態的時候就會發現部分裝置通訊不上,或者工程交付之後出現智慧裝置經常通訊中斷的情況。本文描述RS485匯流排協議的工作原理,從根本上剖析導致以上問題的根本原因。

2       RS485匯流排硬體特點

2.1     拓撲結構

RS485匯流排一般採用111對多的組網方式,很少有多對多的場合,主要原因是RS485沒有匯流排仲裁,多對多會導致多個裝置在總線上訊號衝撞,最終無法正常通訊。

2.2     匯流排掛載能力

RS485的匯流排掛載能力一般有三種等級,32節點(MAX485)、128節點(MAX1487)、256節點(MAX1483)。

3       RS485匯流排軟體特點

3.1     互動方式

RS485基本上採用一問一答的互動方式,主裝置向從裝置傳送一條指令,從裝置執行指令之後,返回一條應答命令。

特殊情況下,在資料互動不頻繁的場合中,為了提高反應速度,也有從裝置主動向主裝置傳送資料的用法。

3.2     地址

為了區分主裝置以及多個從裝置,在互動的訊息幀當中的從裝置的地址是必需的,否則無法區分具體的裝置。

如果一大堆從裝置當中有地址相同的話,將導致通訊異常。

3.3     校驗

RS485匯流排一般具備校驗,主要是因為通訊線路很長,存在干擾的可能性很大,校驗是對資料準確性的必要檢驗手段。

4       協議處理

4.1     幀結構分析

4.1.1 問題

早期485裝置的處理器大多采用8為低速微控制器。在協議的解析處理上因資源受限,往往做得不是很完善,導致在多裝置組網的情況下,發生通訊異常的情況。

4.1.2 有起始符和結束符

SOH

ADDR

LEN

DATA0

………

DATAn

CRC

EOH

常用的SOH例如0x7E,EOH例如0x0D

特點是具備特殊定義的起始符和結束符,在接收端很容易判斷是否有接收到完整的資料幀。接收完畢後再進行後處理。後處理包括地址判斷、CRC

校驗、以及協議解析。

4.1.3 無起始符

ADDR

LEN

DATA0

………

DATAn

CRC

因為沒有起始符,很難判斷是否收到一個完整的資料幀,每收到一個位元組都要處理一次。處理起來很痛苦,但是微控制器程式恰恰相反,喜歡這麼做。

4.2     接收處理方法。

4.2.1 對於有起始符和結束符的協議來說,很少出問題,畢竟只要通過2個字元就可從總線上獲取一個完整的資料幀。如果總線上掛的裝置都是這種協議的裝置,很少發生故障。

4.2.2 對於沒有特殊字元的協議幀,處理起來比較麻煩,問題也比較多。

4.2.2.1  方法1

接收到第1個字元之後,就立刻判斷是否與本機地址匹配,如果不是,則停止接收資料,等待一段時間之後再接收。停止接收資料的目的在於丟掉該幀後續的資料。

特點:處理方式簡單,CPU開銷比較少。但是因為停止接收的時間段一般是固定的且預留得比較寬,有可能在停止接收的這個時間段內收到屬於本機的資料幀,卻沒收到。

4.2.2.2  方法2

收到第1個字元之後,不立即處理,直到接收完整的長度描述符(LEN)後,再根據長度描述符定義的長度,接收完一幀之後再處理。處理包括地址判斷、CRC校驗、以及協議解析等。

特點:能很快的接收到完整的資料包,但是不是本地的資料包也接收進來了,對低端的CPU來說是個壓力。

4.2.2.3  方法3

收到1個字元之後,如果超過多長時間沒有接收到下一個字元,則認為是資料包結束,對資料進行處理。

特點:和方法2類似,對低端的CPU來說是個壓力。另外的好處就是可以降低處理函式的複雜度,不需要計算資料包的長度,並依次接收。

但是字元超時的時間很難把控,如果雙發都是自己廠家的裝置問題不大,如果接了很多品牌的裝置,就會出現其他問題。

4.2.2.4  方法4

結合方法2和方法3,對CPU有一定的壓力,但是接收效果最好。響應迅速。

4.2.3 協議解析的錯誤做法

4.2.3.1  有些協議需要回送確認。例如控制檯。

4.2.3.2  有些協議智慧在接收到正確的資料包之後才能回送。但是某些裝置接收到了非法的資料之後也回送錯誤程式碼應答,導致與匯流排其他廠家裝置衝突。

4.3     帶來的問題

4.3.1 對於方法1,停止接收的時間段一般是固定的且預留得比較寬,有可能在停止接收的這個時間段內收到屬於本機的資料幀,卻沒收到。如過總線上資料量大的話,可能會一直存在這種問題,一直通訊不上。

4.3.2 對於方法2,接收端是沒有問題的,但是可能會影響到使用了方法1和方法3的裝置,因為方法2接收得快,應答的也快。對於方法1而言,應答的2個數據包緊跟在一起,長度比較長,時間也比較長,有可能接收到中間的部分資料,結果是錯誤的。更嚴重的是,因為接收到了錯誤的資料,從裝置會回送一個錯誤應答,與原有的其他裝置的正確資料衝突,導致所有的通訊都失敗。

5       解決辦法

5.1     在協議組態的時候,因為現場裝置已經安裝好,並且很多並不是我們廠家的裝置,讓其他廠家來配合我們調整程式並不現實,那麼可以通過一下方式來解決這些問題。

5.2     錯開波特率

不同廠家裝置之間,使用不同的波特率,且錯開也大越好,例如兩個廠家都支援120038400,則一個廠家用最低的,另一個廠家用最高的。

5.3     增加命令之間的間隔時間

5.3.1 在同一個裝置當中,需要讀取多條指令才能完成資料的採集,那麼在每條指令之間做個延時(200ms-500ms)。

5.3.2 在不同裝置切換時,上述時間可以更長一點(500ms-2S)。

5.3.3 以上時間可以根據現場情況進行適當調整,多次測試,獲取最佳的時間,既要保證可靠的通訊,又不能讓系統的響應速度受到明顯的影響。

5.4     歸零

傳送指令之前,先清空接收緩衝區,預防累加有其他無效的資料。

相關推薦

關於RS485匯流排通訊協議開發注意事項

關於RS485匯流排通訊協議開發注意事項 1       前言 近段時間發現我們系統在進行裝置組態時,採用的串列埠複用方式在同一個RS485串列埠上掛載多個智慧裝置進行通訊、監控。而往往在系統組態的時候就會發現部分裝置通訊不上,或者工程交付之後出現智慧裝置經常通訊中斷的情況

socket程式設計UDP協議以及注意事項

//伺服器 #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <

android開發注意事項

1.下載Android Studio完成後,第一次啟動又會卡住,彈出 "Fetching android sdk component information" 對話方塊,這是Android Studio在檢查sdk的更新,我們會被牆;解決方法:在Android Studio的安裝目錄的bin資料夾下

文章索引-軟體開發注意事項(未完待續)

  此處整理解決一些問題的關鍵點。   Windows:   防火牆: Exercising the Firewall using C++  。 VC2010編譯,Win7,Win10實驗成功,Exe需要管理員執行。 降低-記憶體(

購物商城app開發注意事項

隨著科技網際網路的飛速發展和不斷創新,目前有很多APP開發不斷在市場上湧現,就目前而言,網上商城app開發引起很多人關注,最受大眾關注的焦點是購物商城app開發價格,下面小編展開來進行分析。 下面就具體談到關於影響到“購物類app軟體開發費用”的幾個因素如下: 1、app軟體的一個開發

Web 安全開發注意事項

一、背景 最近開發公司的WEB專案,商密技術研究部領導推出了一套測試規範,規範中包括web端安全測試掃描,掃描結果不盡如人意,因此蒐集及整理如下web安全開發事項。 二、編碼安全策略 簡述:不要相信任何來自客戶端提交的資料,比如URL和引數,HTTP頭部、javascript或者其他嵌入程式碼提交的資料

springboot下多執行緒開發注意事項

基於springboot的多執行緒程式開發過程中,由於本身也需要注入spring容器進行管理,才能發揮springboot的優勢。所以這篇文字主要用來記錄開發中兩者結合時需要注意的一些事項。 第一步我們把執行緒類的例項注入sping容器進行管理 @Configuration @SpringBootAppli

ssm之路(15)整合ssm+逆向工程開發注意事項(Result Maps collection already contains value for cn.itcast.ssm.mapper.It)

這裡有個結合逆向工程來使用的坑: 上一章中整合遇到問題,有個關於逆向工程的坑,這裡需要說明一下: 因為我是通過mapper代理方式來整合的,所以當我再mapper裡新建我要自定義的檔案時,會造成無意不遵循規範的錯誤 我是通過mapper代理開發的方式來弄的,通過Ma

移動端那些事兒(一)移動端開發注意事項

對於手機網站建設,總結了如下幾點注意: 1、 安卓瀏覽器看背景圖片,有些裝置會模糊。 用同等比例的圖片在PC機上很清楚,但是手機上很模糊,原因是什麼呢? 經過研究,是devicePixelRatio作怪,因為手機解析度太小,如果按照解析度來顯示網頁,這樣字會非常小,所以蘋果當初就把iPhone 4的9

64位平臺C/C++開發注意事項(轉載)

Lesson 01. What 64-bit systems are.Lesson 02. Support of 32-bit applications.Lesson 03. Porting code to 64-bit systems. The pros and cons.Lesson 04.

電商類APP開發注意事項彙總

怎麼開發電商App才“靠譜”?這是一個刁鑽的問題,因為好的電商類App開發取決於多個方面,包括App價格,App功能,公司開發實力,營銷渠道等。 1 App價格便宜 App開發費用總是人們考慮的第一位,現在市場對於價格問題仍然比較敏感。 從大體上來講,刨除App開發的差異性

Go語言中編譯、執行,以及開發注意事項

** 編譯 ** 1.有了go原始檔,通過編譯器將其編譯成機器可以識別的二進位制原始碼檔案 2.在該原始檔目錄下,通過go build對原始檔.go進行編譯,可以指定生成的可執行檔名,在Windows下必須是.exe字尾 go build -o 新檔名.exe 原始檔名.go

Android開發注意事項(時刻謹記)

異常處理 1、 空指標異常。物件都有生命週期,使用一個物件時需要對其狀態進行判斷。 2、 越界異常。 3、 OOM。 4、 BadTokenException。 體驗優化 1、 頁面載入速度。 2、 頁面響應速度。 測試 1、 測試Log使用特有的格式,方便刪除 2、 測試程式碼通過@T

微信分享到朋友圈、傳送給朋友開發注意事項

1、invalid url domain 當前頁面所在域名與使用的appid沒有繫結,請確認正確填寫繫結的域名,如果使用了埠號,則配置的繫結域名也要加上埠號(一個appid可以繫結三個有效域名,見 目錄1.1.1)。 2、invalid signature簽名錯誤。 建議按如下順序檢查:

一個程式設計師的總結——開發注意事項

    一年到頭了,作為本命年的我,今年發生了太多的事情,但是不幸的是,都是好事兒,有點太過得意洋洋了,不過,不管一年順抑或不順,都是需要總結的,畢竟,總結,才能讓人成長,首先,想注意的事情就是開發注意事項。     特別想說一件事情,公司每個功能上線之前都要測試,在測試環

微信小程式和微信公眾號開發注意事項(有些是從微信開發文件中摘抄出來的)

先從簡單的說起 (會提醒你的一些注意事項) 1、微信公眾號和小程式名稱可以由中文、數字、英文。長度在3-20個字元之間,一箇中文字等於2個字元。 2、微信公眾號和小程式名稱不得與公眾平臺已有的訂閱號

java web,開發注意事項

匯出的jar如何讓springMVC能掃描到? 開發中發現,打包成jar然後再匯入到專案中springMVC掃描不到,於是查詢資料終於解決了這個問題。 怎麼匯出jar? 將jar配置到專案? 新建一個資料夾用於存放jar的 然後選擇要設定的jar,點選f

關於apicloud開發注意事項

1、apicloud   api地址http://www.apicloud.com需要用到的模組  技術      mcm  極光推送  db   restapi 2、apicloud是用json格

SQL開發注意事項

不要使用count(列名)或count(常亮)代替 count()。說明:count()會統計值為null的行,而count(列)不會統計此列為null值的行。 當某一列的值全為null時,count(col)的返回結果為0,但sum(col)的結果為null,所以使用sum(

Android 開發注意事項

1、平時Intent 傳遞圖片的時候,不要直接傳data,要傳遞 URL 來處理,否則大圖片容易傳輸失敗。 E/JavaBinder(29445): !!! FAILED BINDER TRANSACTION !!! (parcel size = 2560292)2、通