我是 Modbus RTU協(xié)議,我是 Modbus家族的成員。我和我的兄弟 Modbus ASCII就是在1971年開始的。之后,施耐德電器買下 Modicon,并于1997年發(fā)布 Modbus TCP協(xié)議。中國(guó)國(guó)家標(biāo)準(zhǔn)委于2004年正式將 Modbus列為國(guó)家標(biāo)準(zhǔn),開創(chuàng)了中國(guó)工業(yè)通訊事業(yè)的新一頁(yè)。
我們?nèi)值茉诠I(yè)通信中應(yīng)用廣泛,我和我大哥(Modbus ASClII)主要活躍在串行通信領(lǐng)域,而我三弟(Modbus TCP)則擅長(zhǎng)以太網(wǎng)通信。
在串行鏈路中,我們采用了一個(gè)簡(jiǎn)單的主從協(xié)議(client/server protocol)。客戶端充當(dāng)主站,將請(qǐng)求發(fā)送到服務(wù)器;在收到請(qǐng)求之后,服務(wù)器(從站)會(huì)分析和回復(fù)該請(qǐng)求。我和朋友的通信框架叫做 ADU,由通信地址段、功能代碼段、數(shù)據(jù)段和檢驗(yàn)段組成,如下所示:
先弄明白下面的東西。
1、報(bào)文
一個(gè)報(bào)文就是一幀數(shù)據(jù),一個(gè)數(shù)據(jù)幀就一個(gè)報(bào)文:指的是一串完整的指令數(shù)據(jù),就像上面的一串?dāng)?shù)據(jù)。
2、CRC校驗(yàn)
意義:例如上面的98 04是它前面的數(shù)據(jù)(0106 0001 00 17)通過一算法(見附錄2,很簡(jiǎn)單的)計(jì)算出來的結(jié)果,其實(shí)就像是計(jì)算累加和那樣
(累加:就是010600010017加起來的值,然后它的算法就是加法)。
作用:在數(shù)據(jù)傳輸過程中可能數(shù)據(jù)會(huì)發(fā)生錯(cuò)誤,CRC檢驗(yàn)檢測(cè)接收的數(shù)據(jù)是否正確。比如主機(jī)發(fā)出0106 00 01 00 17 98 04,那么從機(jī)接收到后要根據(jù)0106 00 01 00 17
再計(jì)算CRC校驗(yàn)值,從機(jī)判斷自己計(jì)算出來的CRC校驗(yàn)是否與接收的CRC校驗(yàn)(9804主機(jī)計(jì)算的)相等,如果不相等那么說明數(shù)據(jù)傳輸有錯(cuò)誤這些數(shù)據(jù)不能要。
3、MODBUS請(qǐng)求與響應(yīng)
看MODBUS協(xié)議手冊(cè),中文第10頁(yè)開始,英文第24頁(yè)開始。手冊(cè)非常詳細(xì)舉例說明了MODBUS協(xié)議各個(gè)功能號(hào)的請(qǐng)求與響應(yīng)。
Modbus一個(gè)工業(yè)上常用的通訊協(xié)議、一種通訊約定。Modbus協(xié)議包括RTU、ASClII、TCP。其中MODBUS-RTU最常用,比較簡(jiǎn)單,在單片機(jī)上很容易實(shí)現(xiàn)。雖然RTU比較簡(jiǎn)單,但是看協(xié)議資料、手冊(cè)說得太專業(yè)了,起初很多內(nèi)容都很難理解。
所謂的協(xié)議是什么?就是互相之間的約定嘛,如果不讓別人知道那就是暗號(hào)?,F(xiàn)在就來定義一個(gè)新的最簡(jiǎn)單協(xié)議。例如,
協(xié)議:“A”--"LED滅”“B”--"報(bào)警”“C”--"LED亮”
Modbus RTU協(xié)議具備簡(jiǎn)易、靠譜、靈便等特點(diǎn)。了解和掌握Modbus RTU協(xié)議對(duì)工程師和技術(shù)人員尤為重要