18luck网站

18luck网站電子設計 | 18luck网站Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 18luck网站 >> 18luck平台 >> PLC基礎及應用 >> 正文

ModBus通信協議

作者:佚名    文章來源:本站原創    點擊數:    更新時間:2022-04-05

ModBus通信協議
1 1. 主從(cong) 模式

RS-485上的軟件層協議ModBus主要依賴於(yu) 主從(cong) 模式。主從(cong) 模式是指在半雙工通訊方式上,2個(ge) 或者2個(ge) 以上的設備組成的通訊係統中: 
ModBus通信協議 主從(cong) 模式 
(1) 至少且隻有一個(ge) 主機,其他的都是從(cong) 機
(2) 不管任何時候,從(cong) 機都不能主動向主機發送數據

(3) 主機具有訪問從(cong) 機的權限,從(cong) 機不可以主動訪問從(cong) 機,任何一次數據交換,都要由主機發起
(4)不管是主機還是從(cong) 機,係統一旦上電,都要把自己置於(yu) 接收狀態(或者稱為(wei) 監聽狀態)

主從(cong) 機的數據交互,需要:
a. 主機將自己轉為(wei) 發送狀態
b. 主機按照預先約定的格式發出尋址數據幀。
所謂的約定,可是主機開發者和從(cong) 機開發者約定好的規約,好,例如主機要通過從(cong) 機控製接在從(cong) 機的電機,主機要啟動電機就往從(cong) 機發0x1,停止電機就往從(cong) 機發0x2。這就是一種預
先約定好的格式,但是這樣做,互換性、兼容性、通用性差,例如其他公司是約定發送0x03讓電機轉動,發0x04讓電機停止。導致不同廠家的主機、從(cong) 機不能相互通訊。用戶需要的,就像網絡操作,隻要接入有網的網線那麽(me) 計算機都能上網。
所以說,我們(men) 需要一種大家都共同遵循的規則(可以是ModBus,也可以是TCP/IP等上層協議),這種大家認可,共同遵循的軟件層協議。軟件層協議主要是解決(jue) 如何解析傳(chuan) 輸的數據,即傳(chuan) 輸的目的或者更加可靠的傳(chuan) 輸數據。
半雙工通訊中,都是主機尋找從(cong) 機,主機的目的無非有: 主機要發數據給從(cong) 機,或者主機要從(cong) 從(cong) 機中獲取數據。
c. 主機恢複自身的接收狀態
主機等待自身所尋址的從(cong) 機作回應,也就是說從(cong) 機接收到主機的尋址命令、數據後一定要回應主機,不然主機會(hui) 認為(wei) 從(cong) 機通訊異常。回應數據包也是要按照ModBus協議規約(其實不局限ModBus,像TCP/IP也需要回應是吧!~)
2. ModBus通訊協議

通俗點來講,ModBus規約了起停電機,主機要分別發送什麽(me) 命令給從(cong) 機。ModBus規定主從(cong) 機之間數據的交互,需要遵循什麽(me) 樣的格式,如何保證數據在傳(chuan) 輸過程中不發生衝(chong) 突。隻要都遵循這個(ge) 協議,那麽(me) 不同廠家的主從(cong) 機就可以共用了。
ModBus一般是工作在一主多從(cong) 的場景,還是這個(ge) 圖: 
 
主機和從(cong) 機之間的連線不一定是非要485來作為(wei) 載體(ti) ,也可以是IIC,SPI。因為(wei) ModBus是軟件層的協議,它既可以規約485硬件接線方式,也可以規約其他硬件接線方式。很多資料會(hui) 寫(xie) ”基於(yu) RS-485的ModBus通訊協議”,意思是底層的0、1數據是通過RS-485方式去傳(chuan) 輸的,0、1的意義(yi) 則是通過ModBus去解析的。強調,硬件協議可以確保數據得以傳(chuan) 輸出去,軟件協議保障數據的有序傳(chuan) 輸,數據不會(hui) 發生衝(chong) 突。
ModBus規定:
(1) 主從(cong) 模式
有的協議規定是多主模式,意思是係統中的設備都是主機,它們(men) 並沒有主從(cong) 之分,任何時刻,誰想發送數據都可以往總線上發送,例如網絡通信、CAN總線通訊,自然它們(men) 自有一套防止數據衝(chong) 突機製,485由於(yu) 不具備衝(chong) 突檢測的硬件機製,所以它必須遵循主從(cong) 模式。主從(cong) 模式的原則是,整個(ge) 係統隻能有一個(ge) 主機,每一個(ge) 從(cong) 機都必須有一個(ge) 唯一的地址
(2) 從(cong) 機的地址是作為(wei) 每個(ge) 從(cong) 機的唯一標識。地址取值是0-247,0號地址表示廣播地址,廣播地址由主機保留,當主機向0號地址發數據包的時候,每一個(ge) 從(cong) 機設備都會(hui) 收到數據包。也就是說,當主機發出的尋址幀的地址是0的時候,所有從(cong) 機都要執行主機要求的動作。按理說,從(cong) 機收到主機的尋址幀之後,是要做出應答包的,但是現在是0號地址,也就是要回的話每台從(cong) 機都要回,那麽(me) 肯定會(hui) 造成RS-485通訊線上的數據混亂(luan) ,因此所有從(cong) 機在主機發0號地址時候不予返回數據包應答。
從(cong) 機的地址有兩(liang) 個(ge) 作用
a. 主機向目標從(cong) 機發尋址幀時其地址部分為(wei) 從(cong) 機地址,這樣主機才可以檢索到目標從(cong) 機
b. 對於(yu) 主機的目標從(cong) 機,當收到主機發來的非0地址時,要做出數據包應答,假設從(cong) 機要返回數據包給主機,自然是要把數據包放到RS-485總線上,因為(wei) 每台從(cong) 機,其物理連線是在一起的,所以這就會(hui) 造成其他從(cong) 機認為(wei) 數據是要發送給它的現象,所以在從(cong) 機回複主機的數據包中,加上從(cong) 機自身的地址,那麽(me) 其他從(cong) 機讀取到這個(ge) 地址值跟自己的地址不相同,就不會(hui) 去響應了。
(3) ModBus數據包的格式
主機要尋找某台從(cong) 機,需要發出相應格式的信息,這就需要談到ModBus的兩(liang) 種傳(chuan) 輸方式:
a. RTU傳(chuan) 輸方式
RTU實際上也成為(wei) 二進製方式。假設主機要發送0x23,那就是發送0010 0011,按照485通訊協議,先發高位,即1100 0100。前後分別加上起始、停止位: “起始位 1100 0100 停止位”共10位數據
b. ASC傳(chuan) 輸方式
同樣要發送0x23,它是十六進製數,會(hui) 將其拆成十位的’2’和個(ge) 位的’3’,將它們(men) 的asc碼依次發出去,’0’的asc碼是0x32,’3’的asc是0x33,轉為(wei) 二進製為(wei) 0011 0010和0011 0011,同樣要加上停止、起始位,共20位數據
很明顯,asc傳(chuan) 輸方式比較低,但是由於(yu) 它傳(chuan) 輸的是asc碼,所以可以利用一些串口終端將其數值打印出來。

特別提醒,RS-485硬件協議決(jue) 定,對於(yu) 每一個(ge) 字節數據的傳(chuan) 輸是先發高位,再發地位,所以假設數組u8型數組revArr[2]存放著接收到的數據,那麽(me) 接收端解析數據應該是u16型data = revArr[0] * 256 + revArr[1]。

Tags:ModBus,通信協議  
責任編輯:admin
請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
1分 2分 3分 4分 5分

還可以輸入 200 個字
[ 查看全部 ] 網友評論
推薦文章
最新推薦
關於我們 - 聯係我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁麵
下到頁底
晶體管查詢