0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MODBUS標(biāo)準(zhǔn)協(xié)議講解

工控論壇 ? 來源:工控論壇 ? 作者:工控論壇 ? 2022-03-14 11:22 ? 次閱讀

bb09eef2-a340-11ec-952b-dac502259ad0.jpg

一、什么是MODBUS?

1.基本概念

MODBUS 是MODICON公司(現(xiàn)為施耐德電氣公司的一個品牌)最先倡導(dǎo)的一種軟的通訊規(guī)約,經(jīng)過大多數(shù)公司 的實際應(yīng)用,逐漸被認(rèn)可,成為一種標(biāo)準(zhǔn)的通訊規(guī)約,只要按照這種規(guī)約進(jìn)行 數(shù)據(jù)通訊或傳輸,不同的系統(tǒng)就可以通訊。目前,在RS232/RS485通訊過程中, 更是廣泛采用這種規(guī)約。

常用的MODBUS 通訊規(guī)約有兩種,一種是MODBUS ASCII,一種是MODBUS RTU。一般來說,通訊數(shù)據(jù)量少而且主要是文本的通訊則采用MODBUS ASCII規(guī)約,通訊數(shù)據(jù)數(shù)據(jù)量大而且是二進(jìn)制數(shù)值時,多采用MODBUS RTU規(guī)約。

在實際的應(yīng)用過程中,為了解決某一個特殊問題,人們喜歡自己修改MODBUS規(guī)約來滿足自己的需要(事實上,人們經(jīng)常使用自己定義的規(guī)約來通訊,這樣能解決問題,但不太規(guī)范)。更為普通的用法是,少量修改規(guī)約,但將規(guī)約格式附在軟件說明書一起,或直接放在幫助中,這樣就方便了用戶的通訊。

2.MODBUS協(xié)議簡述

ACRXXXE系列儀表使用的是MODBUS-RTU通訊協(xié)議,MODBUS協(xié)議詳細(xì)定義了校驗碼、數(shù)據(jù)序列等,這些都是特定數(shù)據(jù)交換的必要內(nèi)容。MODBUS協(xié)議在一根通訊線上 使用主從應(yīng)答式連接(半雙工),這意味著在一根單獨的通訊線上信號沿著相反的兩個方向傳輸。首先,主計算機(jī)的信號尋址到一臺唯一的終端設(shè)備(從機(jī)),然后,終端設(shè)備發(fā)出的應(yīng)答信號以相反的方向傳輸給主機(jī)。

MODBUS協(xié)議只允許在主機(jī)(PC,PLC等)和終端設(shè)備之間通訊,而不允許獨立的終端設(shè)備之間的數(shù)據(jù)交換,這樣各終端設(shè)備不會在它們初始化時占據(jù)通訊線路,而僅限于響應(yīng)到達(dá)本機(jī)的查詢信號。

3.查詢—回應(yīng)周期

查詢

查詢消息中的功能代碼告之被選中的從設(shè)備要執(zhí)行何種功能。數(shù)據(jù)段包含了從設(shè)備要執(zhí)行功能的任何附加信息。例如功能代碼03是要求從設(shè)備讀保持寄存器并返回它 們的內(nèi)容。數(shù)據(jù)段必須包含要告之從設(shè)備的信息:從何寄存器開始讀及要讀的寄存器數(shù)量。錯誤檢測域為從設(shè)備提供了一種驗證消息內(nèi)容是否正確的方法。

回應(yīng)

如果從設(shè)備產(chǎn)生一正常的回應(yīng),在回應(yīng)消息中的功能代碼是在查詢消息中的功能代碼的回應(yīng)。數(shù)據(jù)段包括了從設(shè)備收集的數(shù)據(jù):如寄存器值或狀態(tài)。如果有錯誤發(fā)生, 功能代碼將被修改以用于指出回應(yīng)消息是錯誤的,同時數(shù)據(jù)段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設(shè)備確認(rèn)消息內(nèi)容是否可用。

4.傳輸方式:

傳輸方式是指一個數(shù)據(jù)幀內(nèi)一系列獨立的數(shù)據(jù)結(jié)構(gòu)以及用于傳輸數(shù)據(jù)的有限規(guī)則,下面定義了與MODBUS 協(xié)議– RTU方式相兼容的傳輸方式。

每個字節(jié)的位:

· 1個起始位

· 8個數(shù)據(jù)位,最小的有效位先發(fā)送

· 無奇偶校驗位

· 1個停止位

錯誤檢測(Error checking):CRC(循環(huán)冗余校驗)

5.協(xié)議

當(dāng)數(shù)據(jù)幀到達(dá)終端設(shè)備時, 它通過一個簡單的“端口”進(jìn)入被尋址到的設(shè)備,該設(shè)備去掉數(shù)據(jù)幀的“信封”(數(shù)據(jù)頭),讀取數(shù)據(jù),如果沒有錯誤,就執(zhí)行數(shù)據(jù)所請求的任務(wù),然后,它將自己 生成的數(shù)據(jù)加入到取得的“信封”中,把數(shù)據(jù)幀返回給發(fā)送者。返回的響應(yīng)數(shù)據(jù)中包含了以下內(nèi)容:終端從機(jī)地址(Address)、被執(zhí)行了的命令(Function)、執(zhí)行命令生成的被請求數(shù)據(jù)(Data)和一個校驗碼(Check)。發(fā)生任何錯誤都不會有成功的響應(yīng),或者返回一個錯誤指示幀。

6.數(shù)據(jù)幀格式

Address Function Data Check
8-Bits 8-Bits N x 8-Bits 16-Bits

7.地址(Address)域

bb1fdd16-a340-11ec-952b-dac502259ad0.jpg

地址域在幀的開始部分,由 一個字節(jié)(8位二進(jìn)制碼)組成,十進(jìn)制為0~255,在我們的系統(tǒng)中只使用1~247,其它地址保留。這些位標(biāo)明了用戶指定的終端設(shè)備的地址,該設(shè)備將接 收來自與之相連的主機(jī)數(shù)據(jù)。每個終端設(shè)備的地址必須是唯一的,僅僅被尋址到的終端會響應(yīng)包含了該地址的查詢。當(dāng)終端發(fā)送回一個響應(yīng),響應(yīng)中的從機(jī)地址數(shù)據(jù) 便告訴了主機(jī)哪臺終端正與之進(jìn)行通信。

8.功能(Function)域

功能域代碼告訴了被尋址到的終端執(zhí)行何種功能。下表列出了該系列儀表用到的功能碼,以及它們的意義和功能。

代碼 意義 行為
03 讀數(shù)據(jù)寄存器 獲得一個或多個寄存器的當(dāng)前二進(jìn)制值
16 預(yù)置多寄存器 設(shè)定二進(jìn)制值到一系列多寄存器中(不對ACRXXXE開放)

9.數(shù)據(jù)(Data)域

數(shù)據(jù)域包含了終端執(zhí)行特定 功能所需要的數(shù)據(jù)或者終端響應(yīng)查詢時采集到的數(shù)據(jù)。這些數(shù)據(jù)的內(nèi)容可能是數(shù)值、參考地址或者設(shè)置值。例如:功能域碼告訴終端讀取一個寄存器,數(shù)據(jù)域則需要 指明從哪個寄存器開始及讀取多少個數(shù)據(jù),內(nèi)嵌的地址和數(shù)據(jù)依照類型和從機(jī)之間的不同內(nèi)容而有所不同。

10.錯誤校驗(Check)域

該域允許主機(jī)和終端檢查傳 輸過程中的錯誤。有時,由于電噪聲和其它干擾,一組數(shù)據(jù)在從一個設(shè)備傳輸?shù)搅硪粋€設(shè)備時在線路上可能會發(fā)生一些改變,出錯校驗?zāi)軌虮WC主機(jī)或者終端不去響 應(yīng)那些傳輸過程中發(fā)生了改變的數(shù)據(jù),這就提高了系統(tǒng)的安全性和效率,錯誤校驗使用了16位循環(huán)冗余的方法(CRC16)。

11.錯誤檢測的方法

錯誤校驗(CRC)域占用兩個字節(jié),包含了一個16位的二進(jìn)制值。CRC值由傳輸設(shè)備計算出來,然后附加到數(shù)據(jù)幀上,接收設(shè)備在接收數(shù)據(jù)時重新計算CRC值,然后與接收到的CRC域中的值進(jìn)行比較,如果這兩個值不相等,就發(fā)生了錯誤。

CRC運(yùn)算時,首先將一個 16位的寄存器預(yù)置為全1,然后連續(xù)把數(shù)據(jù)幀中的每個字節(jié)中的8位與該寄存器的當(dāng)前值進(jìn)行運(yùn)算,僅僅每個字節(jié)的8個數(shù)據(jù)位參與生成CRC,起始位和終止位 以及可能使用的奇偶位都不影響CRC。在生成CRC時,每個字節(jié)的8位與寄存器中的內(nèi)容進(jìn)行異或,然后將結(jié)果向低位移位,高位則用“0”補(bǔ)充,最低位 (LSB)移出并檢測,如果是1,該寄存器就與一個預(yù)設(shè)的固定值(0A001H)進(jìn)行一次異或運(yùn)算,如果最低位為0,不作任何處理。

上述處理重復(fù)進(jìn)行,直到執(zhí)行完了8次移位操作,當(dāng)最后一位(第8位)移完以后,下一個8位字節(jié)與寄存器的當(dāng)前值進(jìn)行異或運(yùn)算,同樣進(jìn)行上述的另一個8次移位異或操作,當(dāng)數(shù)據(jù)幀中的所有字節(jié)都作了處理,生成的最終值就是CRC值。

12.生成一個CRC的流程為:

? 預(yù)置一個16位寄存器為0FFFFH(全1),稱之為CRC寄存器。

? 把數(shù)據(jù)幀中的第一個字節(jié)的8位與CRC寄存器中的低字節(jié)進(jìn)行異或運(yùn)算,結(jié)果存回CRC寄存器。

? 將CRC寄存器向右移一位,最高位填以0,最低位移出并檢測。

? 如果最低位為0:重復(fù)第三步(下一次移位);如果最低位為1:將CRC寄存器與一個預(yù)設(shè)的固定值(0A001H)進(jìn)行異或運(yùn)算。

? 重復(fù)第三步和第四步直到8次移位。這樣處理完了一個完整的八位。

? 重復(fù)第2步到第5步來處理下一個八位,直到所有的字節(jié)處理結(jié)束。

? 最終CRC寄存器的值就是CRC的值。

此外還有一種利用預(yù)設(shè)的表格計算CRC的方法,它的主要特點是計算速度快,但是表格需要較大的存儲空間,該方法此處不再贅述,請參閱相關(guān)資料。

13.通訊應(yīng)用格式祥解

本節(jié)所舉實例將盡可能的使用如圖所示的格式,(數(shù)字為16進(jìn)制)。

Addr Fun Data start reg hi Data start reg lo Data #of regs hi Data #of regs lo CRC16 lo CRC16hi
01H 03H 00H 00H 00H 03H 05H CBH

Addr:從機(jī)地址

Fun:功能碼

Data start reg hi:數(shù)據(jù)起始地址 寄存器高字節(jié)

Data start reg lo:數(shù)據(jù)起始地址 寄存器低字節(jié)

Data #of reg hi:數(shù)據(jù)讀取個數(shù) 寄存器高字節(jié)

Data #of reg lo:數(shù)據(jù)讀取個數(shù) 寄存器低字節(jié)

CRC16 Hi: 循環(huán)冗余校驗 高字節(jié)

CRC16 Lo: 循環(huán)冗余校驗 低字節(jié)

14.讀數(shù)據(jù)(功能碼03)

查詢數(shù)據(jù)幀

此功能允許用戶獲得設(shè)備采集與記錄的數(shù)據(jù)及系統(tǒng)參數(shù)。主機(jī)一次請求的數(shù)據(jù)個數(shù)沒有限制,但不能超出定義的地址范圍。下面的例子是從01號從機(jī)讀3個采集到的基本數(shù)據(jù)(數(shù)據(jù)幀中每個地址占用2個字節(jié))UA、UB、UC,其中UA的地址為0025H, UB的地址為0026H, UC的地址為0027H。

Addr Fun Data start
Addr hi
Datastart
Addr lo
Data#of
regs hi
Data #of
regs lo
CRC16 lo CRC16 hi
01H 03H 00H 25H 00H 03H 14H 00H

響應(yīng)數(shù)據(jù)幀

響應(yīng)包含從機(jī)地址、功能碼、數(shù)據(jù)的數(shù)量和CRC錯誤校驗。下面的例子是讀取UA、UB、UC (UA=082CH,UB=082AH,UC=082CH的響應(yīng)。

Addr Fun Byte count Data1 hi Data1 lo Data2 hi Data2 lo Data3 hi Data3 lo CRC16 lo CRC16 hi
01H 03H 06H 08H 2CH 08H 2AH 08H 2CH 94H 4EH

錯誤指示碼

如果主機(jī)請求的地址不存在則返回錯誤指示碼:FFH。

二、特點

Modbus具有以下幾個特點

1、標(biāo)準(zhǔn)、開放,用戶可以免費(fèi)、放心地使用Modbus協(xié)議,不需要交納許可證費(fèi),也不會侵犯知識產(chǎn)權(quán)。目前,支持Modbus的廠家超過400家,支持Modbus的產(chǎn)品超過600種。

2、Modbus可以支持多種電氣接口,如RS-232、RS-485等,還可以在各種介質(zhì)上傳送,如雙絞線、光纖、無線等。

3、Modbus的幀格式簡單、緊湊,通俗易懂。用戶使用容易,廠商開發(fā)簡單。

三、功能碼定義

1.ModBus功能碼

01 READ COIL STATUS
02 READ INPUT STATUS
03 READ HOLDING REGISTER
04 READ INPUT REGISTER
05 WRITE SINGLE COIL
06 WRITE SINGLE REGISTER
15 WRITE MULTIPLE COIL
16 WRITE MULTIPLE REGISTER

四、傳輸方式

在ModBus系統(tǒng)中有2種傳輸模式可選擇。這2種傳輸模式與從機(jī)PC通信的能力是同等的。選擇時應(yīng)視所用ModBus主機(jī)而定,每個ModBus系統(tǒng)只能使用一種模式,不允許2種模式混用。一種模式是ASCII(美國信息 交換碼),另一種模式是RTU(遠(yuǎn)程 終端設(shè)備)。

用戶選擇想要的模式,包括 串口通信參數(shù)( 波特率、校驗方式等),在配置每個控制器的時候,在一個Modbus網(wǎng)絡(luò)上的所有設(shè)備都必須選擇相同的傳輸模式和串口參數(shù)。所選的ASCII或RTU方式僅適用于標(biāo)準(zhǔn)的Modbus網(wǎng)絡(luò),它定義了在這些網(wǎng)絡(luò)上連續(xù)傳輸?shù)南⒍蔚拿恳晃?,以及決定怎樣將信息打包成消息域和如何解碼。在其它網(wǎng)絡(luò)上(像MAP和Modbus Plus)Modbus消息被轉(zhuǎn)成與串行傳輸無關(guān)的幀。

1.傳輸模式特性

ASCII可打印字符便于故障檢測,而且對于用高級語言(如Fortran)編程的主計算機(jī)及主PC很適宜。RTU則適用于 機(jī)器語言編程的計算機(jī)和PC主機(jī)。

用RTU模式傳輸?shù)臄?shù)據(jù)是8位二進(jìn)制字符。如欲轉(zhuǎn)換為ASCII模式,則每個RTU字符首先應(yīng)分為高位和低位兩部分,這兩部分各含4位,然后轉(zhuǎn)換成十六進(jìn)制等量值。用以構(gòu)成 報文的ASCII字符都是十六進(jìn)制字符。ASCII模式使用的 字符雖是RTU模式的兩倍,但ASCII數(shù)據(jù)的譯碼和處理更為容易一些,此外,用RTU模式時報文字符必須以連續(xù)數(shù)據(jù)流的形式傳送,用ASCII模式,字符之間可產(chǎn)生長達(dá)1s的間隔,以適應(yīng)速度較慢的機(jī)器。

控制器能設(shè)置為兩種傳輸模式(ASCII或RTU)中的任何一種在標(biāo)準(zhǔn)的Modbus網(wǎng)絡(luò)通信

2.ASCII模式

當(dāng)控制器設(shè)為在Modbus網(wǎng)絡(luò)上以ASCII(美國標(biāo)準(zhǔn)信息交換代碼)模式通信,一個信息中的每8位字節(jié)作為2個ASCII字符傳輸,如數(shù)值63H用ASCII方式時,需發(fā)送兩個字節(jié),即ASCII“6"(0110110)和ASCII”3“(0110011),ASCII字符占用的位數(shù)有7位和8位,國際通用7位為多。這種方式的主要優(yōu)點是字符發(fā)送的時間間隔可達(dá)到1秒而不產(chǎn)生錯誤。

代碼系統(tǒng)

十六進(jìn)制,ASCII 字符0...9,A...F

消息中的每個ASCII字符都是一個十六進(jìn)制字符組成 每個字節(jié)的位

1個起始位

7個 數(shù)據(jù)位,最小的有效位先發(fā)送

1個 奇偶校驗位,無校驗則無 1個停止位(有校驗時),2個Bit(無校驗時) 錯誤檢測域

LRC(縱向冗長檢測)

3.RTU模式

當(dāng)控制器設(shè)為在Modbus網(wǎng)絡(luò)上以RTU模式通信,在消息中的每個8Bit字節(jié)按照原值傳送,不做處理,如63H,RTU將直接發(fā)送01100011。這種方式的主要優(yōu)點是:數(shù)據(jù)幀傳送之間沒有間隔,相同波特率下傳輸數(shù)據(jù)的密度要比ASCII高,傳輸速度更快。

代碼系統(tǒng)

8位二進(jìn)制, 十六進(jìn)制數(shù)0...9,A...F

消息中的每個8 位域都是一或兩個十六進(jìn)制字符組成

每個字節(jié)的位 1個起始位 8個 數(shù)據(jù)位,最小的有效位先發(fā)送

1個 奇偶校驗位,無校驗則無

1個停止位(有校驗時),2個Bit(無校驗時)

五、數(shù)據(jù)校驗方式

1.CRC

CRC域是兩個字節(jié),包含一16位的二進(jìn)制值。它由傳輸設(shè)備計算后加入到消息中。接收設(shè)備重新計算收到消息的CRC,并與接收到的CRC域中的值比較,如果兩值不同,則有誤。

CRC是先調(diào)入一值是全“1”的16位寄存器,然后調(diào)用一過程將消息中連續(xù)的8位字節(jié)和當(dāng)前寄存器中的值進(jìn)行處理。僅每個字符中的8Bit數(shù)據(jù)對CRC有效,起始位和停止位以及 奇偶校驗位均無效。

CRC產(chǎn)生過程中,每個8位字符都單獨和寄存器內(nèi)容相異或(XOR),結(jié)果向最低有效位方向移動,最高有效位以0填充。LSB被提取出來檢測,如果LSB為1,寄存器單獨和預(yù)置的值或一下,如果LSB為0,則不進(jìn)行。整個過程要重復(fù)8次。在最后一位(第8位)完成后,下一個8位字節(jié)又單獨和寄存器的當(dāng)前值相異或(XOR)。最終寄存器中的值,是消息中所有的字節(jié)都執(zhí)行之后的CRC值。

CRC添加到消息中時,低字節(jié)先加入,然后高字節(jié)。

CRC-16錯誤校驗程序如下:報文(此處只涉及 數(shù)據(jù)位,不指起始位、停止位和任選的 奇偶校驗位)被看作是一個連續(xù)的二進(jìn)制,其最高有效位(MSB)首選發(fā)送。報文先與X↑16相乘(左移16位),然后看X↑16+X↑15+X↑2+1除,X↑16+X↑15+X↑2+1可以表示為二進(jìn)制數(shù)11000,0000,0000,0101。整數(shù)商位忽略不記,16位余數(shù)加入該報文(MSB先發(fā)送),成為2個CRC校驗字節(jié)。余數(shù)中的1全部初始化,以免所有的零成為一條報文被接收。經(jīng)上述處理而含有CRC字節(jié)的報文,若無錯誤,到接收設(shè)備后再被同一多項式(X↑16+X↑15+X↑2+1)除,會得到一個零余數(shù)(接收設(shè)備核驗這個CRC字節(jié),并將其與被傳送的CRC比較)。全部運(yùn)算以2為模(無進(jìn)位)。

習(xí)慣于成串發(fā)送數(shù)據(jù)的設(shè)備會首選送出字符的最右位(LSB-最低有效位)。而在生成CRC情況下,發(fā)送首位應(yīng)是被除數(shù)的最高有效位MSB。由于在運(yùn)算中不用進(jìn)位,為便于操作起見,計算CRC時設(shè)MSB在最右位。生成多項式的位序也必須反過來,以保持一致。多項式的MSB略去不記,因其只對商有影響而不影響余數(shù)。

生成CRC-16校驗字節(jié)的步驟如下:

①裝如一個16位 寄存器,所有數(shù)位均為1。

②該16位寄存器的高位 字節(jié)與開始8位字節(jié)進(jìn)行“異或”運(yùn)算。運(yùn)算結(jié)果放入這個16位寄存器。

③把這個16寄存器向右移一位。

④若向右(標(biāo)記位)移出的數(shù)位是1,則生成多項式10,1000,000,0000,001和這個寄存器進(jìn)行“異或”運(yùn)算;若向右移出的數(shù)位是0,則返回③。

⑤重復(fù)③和④,直至移出8位。

⑥另外8位與該十六位寄存器進(jìn)行“異或”運(yùn)算。

⑦重復(fù)③~⑥,直至該 報文所有字節(jié)均與16位 寄存器進(jìn)行“異或”運(yùn)算,并移位8次。

⑧這個16位寄存器的內(nèi)容即2字節(jié)CRC錯誤校驗,被加到報文的最高有效位。另外,在某些非ModBus通信協(xié)議中也經(jīng)常使用CRC16作為校驗手段,而且產(chǎn)生了一些CRC16的變種,他們是使用CRC16多項式X↑16+X↑15+X↑2+1,單首次裝入的16位寄存器為0000;使用CRC16的反序X↑16+X↑14+X↑1+1,首次裝入寄存器值為0000或FFFFH。

2.LRC

LRC錯誤校驗用于ASCII模式。這個錯誤校驗是一個8位二進(jìn)制數(shù),可作為2個ASCII十六進(jìn)制字節(jié)傳送。把十六進(jìn)制字符轉(zhuǎn)換成二進(jìn)制,加上無循環(huán)進(jìn)位的二進(jìn)制字符和二進(jìn)制補(bǔ)碼結(jié)果生成LRC錯誤校驗(參見圖)。這個LRC在接收設(shè)備進(jìn)行核驗,并與被傳送的LRC進(jìn)行比較,冒號(:)、回車符號(CR)、換行字符(LF)和置入的其他任何非ASCII十六進(jìn)制字符在運(yùn)算時忽略不計。

Modbus與PROFIBUS-DP協(xié)議比較

Modbus的協(xié)議內(nèi)容是完全公開的,內(nèi)容是簡單滴,實現(xiàn)起來是非常容易滴,單片機(jī)、PLC、DCS統(tǒng)統(tǒng)都能輕易實現(xiàn)。

Profibus則要復(fù)雜一些,關(guān)鍵是需要專用芯片進(jìn)行二次開發(fā),并且需要得到上級組織的認(rèn)證,開發(fā)成本肯定高不少 。

當(dāng)然從性能上講,基于串口的modbus rtu/ASCII通訊性能肯定比不過profibus dp,但是就一些儀表級的簡單通訊或者控制器級別的小數(shù)據(jù)量通訊,modbus是足以勝任的。說白了,就是modbus是*絲,profibus是高富帥!

Modbus支持的功能碼

功能碼 名稱 作用
01 讀取線圈狀態(tài) 取得一組邏輯線圈的當(dāng)前狀態(tài)(ON/OFF)
02 讀取輸入狀態(tài) 取得一組開關(guān)輸入的當(dāng)前狀態(tài)(ON/OFF)
03 讀取保持寄存器 在一個或多個保持寄存器中取得當(dāng)前的二進(jìn)制值
04 讀取輸入寄存器 在一個或多個輸入寄存器中取得當(dāng)前的二進(jìn)制值
05 強(qiáng)置單線圈 強(qiáng)置一個邏輯線圈的通斷狀態(tài)
06 預(yù)置單寄存器 把具體二進(jìn)值裝入一個保持寄存器
07 讀取異常狀態(tài) 取得8個內(nèi)部線圈的通斷狀態(tài),這8個線圈的地址由控制器決定
08 回送診斷校驗 把診斷校驗報文送從機(jī),以對通信處理進(jìn)行評鑒
09 編程(只用于484) 使主機(jī)模擬編程器作用,修改PC從機(jī)邏輯
10 控詢(只用于484) 可使主機(jī)與一臺正在執(zhí)行長程序任務(wù)從機(jī)通信,探詢該從機(jī)是否已完成其操作任務(wù),僅在含有功能碼9的報文發(fā)送后,本功能碼才發(fā)送
11 讀取事件計數(shù) 可使主機(jī)發(fā)出單詢問,并隨即判定操作是否成功,尤其是該命令或其他應(yīng)答產(chǎn)生通信錯誤時
12 讀取通信事件記錄 可是主機(jī)檢索每臺從機(jī)的ModBus事務(wù)處理通信事件記錄。如果某項事務(wù)處理完成,記錄會給出有關(guān)錯誤
13 編程(184/384 484 584) 可使主機(jī)模擬編程器功能修改PC從機(jī)邏輯
14 探詢(184/384 484 584) 可使主機(jī)與正在執(zhí)行任務(wù)的從機(jī)通信,定期控詢該從機(jī)是否已完成其程序操作,僅在含有功能13的報文發(fā)送后,本功能碼才得發(fā)送
15 強(qiáng)置多線圈 強(qiáng)置一串連續(xù)邏輯線圈的通斷
16 預(yù)置多寄存器 把具體的二進(jìn)制值裝入一串連續(xù)的保持寄存器
17 報告從機(jī)標(biāo)識 可使主機(jī)判斷編址從機(jī)的類型及該從機(jī)運(yùn)行指示燈的狀態(tài)
18 (884和MICRO 84) 可使主機(jī)模擬編程功能,修改PC狀態(tài)邏輯
19 重置通信鏈路 發(fā)生非可修改錯誤后,是從機(jī)復(fù)位于已知狀態(tài),可重置順序字節(jié)
20 讀取通用參數(shù)(584L) 顯示擴(kuò)展存儲器文件中的數(shù)據(jù)信息
21 寫入通用參數(shù)(584L) 把通用參數(shù)寫入擴(kuò)展存儲文件,或修改之
22~64 保留作擴(kuò)展功能備用
65~72 保留以備用戶功能所用 留作用戶功能的擴(kuò)展編碼
73~119 非法功能
120~127 保留 留作內(nèi)部作用
128~255 保留 用于異常應(yīng)答

功能碼命令詳解

在這些功能碼中較長使用的是1、2、3、4、5、6號功能碼,使用它們即可實現(xiàn)對下位機(jī)的數(shù)字量和模擬量的讀寫操作。

1、01號命令,讀可讀寫數(shù)字量寄存器(線圈狀態(tài)):

計算機(jī)發(fā)送命令:[設(shè)備地址] [命令號01] [起始寄存器地址高8位] [低8位] [讀取的寄存器數(shù)高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]

例:[11][01][00][13][00][25][CRC低][CRC高]

意義如下:

<1>設(shè)備地址:在一個485總線上可以掛接多個設(shè)備,此處的設(shè)備地址表示想和哪一個設(shè)備通訊。例子中為想和17號(十進(jìn)制的17是十六進(jìn)制的11)通訊。

<2>命令號01:讀取數(shù)字量的命令號固定為01。

<3>起始地址高8位、低8位:表示想讀取的開關(guān)量的起始地址(起始地址為0)。比如例子中的起始地址為19。

<4>寄存器數(shù)高8位、低8位:表示從起始地址開始讀多少個開關(guān)量。例子中為37個開關(guān)量。

<5>CRC校驗:是從開頭一直校驗到此之前。設(shè)備響應(yīng):[設(shè)備地址] [命令號01] [返回的字節(jié)個數(shù)][數(shù)據(jù)1][數(shù)據(jù)2]...[數(shù)據(jù)n] [CRC校驗的高8位] [CRC校驗的低8位]

例:[11][01][05][CD][6B][B2][0E][1B] [CRC高] [CRC低]

意義如下:

<1>設(shè)備地址和命令號和上面的相同。

<2>返回的字節(jié)個數(shù):表示數(shù)據(jù)的字節(jié)個數(shù),也就是數(shù)據(jù)1,2...n中的n的值。

<3>數(shù)據(jù)1...n:由于每一個數(shù)據(jù)是一個8位的數(shù),所以每一個數(shù)據(jù)表示8個開關(guān)量的值,每一位為0表示對應(yīng)的開關(guān)斷開,為1表示閉合。比如例子中,表示20號(索引號為19)開關(guān)閉合,21號斷開,22閉合,23閉合,24斷開,25斷開,26閉合,27閉合...如果詢問的開關(guān)量不是8的整倍數(shù),那么最后一個字節(jié)的高位部分無意義,置為0。

<4>CRC校驗同上。

2、05號命令,寫數(shù)字量(線圈狀態(tài)):

計算機(jī)發(fā)送命令:[設(shè)備地址] [命令號05] [需下置的寄存器地址高8位] [低8位] [下置的數(shù)據(jù)高8位] [低8位] [CRC校驗的低8位] [CRC校驗的高8位]

例:[11][05][00][AC][FF][00][CRC高][CRC低]

意義如下:

<1>設(shè)備地址和上面的相同。

<2>命令號:寫數(shù)字量的命令號固定為05。

<3>需下置的寄存器地址高8位,低8位:表明了需要下置的開關(guān)的地址。

<4>下置的數(shù)據(jù)高8位,低8位:表明需要下置的開關(guān)量的狀態(tài)。例子中為把該開關(guān)閉合。注意,此處只可以是[FF][00]表示閉合[00][00]表示斷開,其他數(shù)值非法。

<5>注意此命令一條只能下置一個開關(guān)量的狀態(tài)。

設(shè)備響應(yīng):如果成功把計算機(jī)發(fā)送的命令原樣返回,否則不響應(yīng)。

3、03號命令,讀可讀寫模擬量寄存器(保持寄存器):

計算機(jī)發(fā)送命令:[設(shè)備地址] [命令號03] [起始寄存器地址高8位] [低8位] [讀取的寄存器數(shù)高8位] [低8位] [CRC校驗的高8位] [CRC校驗的低8位]

例:[11][03][00][6B][00][03] [CRC高][CRC低]

意義如下:

<1>設(shè)備地址和上面的相同。

<2>命令號:讀模擬量的命令號固定為03。

<3>起始地址高8位、低8位:表示想讀取的模擬量的起始地址(起始地址為0)。比如例子中的起始地址為107。

<4>寄存器數(shù)高8位、低8位:表示從起始地址開始讀多少個模擬量。例子中為3個模擬量。注意,在返回的信息中一個模擬量需要返回兩個字節(jié)。

設(shè)備響應(yīng):[設(shè)備地址] [命令號03] [返回的字節(jié)個數(shù)][數(shù)據(jù)1][數(shù)據(jù)2]...[數(shù)據(jù)n] [CRC校驗的高8位] [CRC校驗的低8位]

例:[11][03][06][02][2B][00][00][00][64] [CRC高] [CRC低]

意義如下:

<1>設(shè)備地址和命令號和上面的相同。

<2>返回的字節(jié)個數(shù):表示數(shù)據(jù)的字節(jié)個數(shù),也就是數(shù)據(jù)1,2...n中的n的值。例子中返回了3個模擬量的數(shù)據(jù),因為一個模擬量需要2個字節(jié)所以共6個字節(jié)。

<3>數(shù)據(jù)1...n:其中[數(shù)據(jù)1][數(shù)據(jù)2]分別是第1個模擬量的高8位和低8位,[數(shù)據(jù)3][數(shù)據(jù)4]是第2個模擬量的高8位和低8位,以此類推。例子中返回的值分別是555,0,100。

<4>CRC校驗同上。

4、06號命令,寫單個模擬量寄存器(保持寄存器)

計算機(jī)發(fā)送命令:[設(shè)備地址] [命令號06] [需下置的寄存器地址高8位] [低8位] [下置的數(shù)據(jù)高8位] [低8位] [CRC校驗的高8位] [CRC校驗的低8位]

例:[11][06][00][01][00][03] [CRC高] [CRC低]

意義如下:

<1>設(shè)備地址和上面的相同。

<2>命令號:寫模擬量的命令號固定為06。

<3>需下置的寄存器地址高8位,低8位:表明了需要下置的模擬量寄存器的地址。

<4>下置的數(shù)據(jù)高8位,低8位:表明需要下置的模擬量數(shù)據(jù)。比如例子中就把1號寄存器的值設(shè)為3。

<5>注意此命令一條只能下置一個模擬量的狀態(tài)。

設(shè)備響應(yīng):如果成功把計算機(jī)發(fā)送的命令原樣返回,否則不響應(yīng)。

5、16號命令,寫多個模擬量寄存器(保持寄存器)

計算機(jī)發(fā)送命令:[設(shè)備地址] [命令號16] [需下置的寄存器地址高8位] [低8位] [數(shù)據(jù)數(shù)量高8位] [數(shù)據(jù)數(shù)量低8位] [下置的數(shù)據(jù)高8位] [低8位][……][……] [CRC校驗的高8位] [CRC校驗的低8位]

bb2f7a5a-a340-11ec-952b-dac502259ad0.jpg

例:[11][16][00][01][00][01][00][05] [CRC高] [CRC低]

意義如下:

<1>設(shè)備地址和上面的相同。

<2>命令號:寫模擬量的命令號固定為16。

<3>需下置的寄存器地址高8位,低8位:表明了需要下置的模擬量寄存器的地址。

<4>需下置的數(shù)據(jù)數(shù)量高8位,低8位:表明了需要下置的數(shù)據(jù)數(shù)量,這里為1。

<5>下置的數(shù)據(jù)高8位,低8位:表明需要下置的模擬量數(shù)據(jù)。比如例子中就把1號寄存器的值設(shè)為5。

設(shè)備響應(yīng):如果成功把計算機(jī)返回的如下命令,否則不響應(yīng)。設(shè)備響應(yīng):[設(shè)備地址] [命令號16] [需下置的寄存器地址高8位] [低8位] [數(shù)據(jù)數(shù)量高8位] [數(shù)據(jù)數(shù)量低8位] [CRC校驗的高8位] [CRC校驗的低8位],如上例返回:[11][16][00][01][00][01] [CRC高] [CRC低]

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 協(xié)議
    +關(guān)注

    關(guān)注

    2

    文章

    606

    瀏覽量

    39282
  • MODBUS
    +關(guān)注

    關(guān)注

    28

    文章

    1815

    瀏覽量

    77153

原文標(biāo)題:大神講解MODBUS標(biāo)準(zhǔn)協(xié)議,趕緊收藏!

文章出處:【微信號:gkongbbs,微信公眾號:工控論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    modbus入門教程 Modbus協(xié)議節(jié)點講解之【EsDA應(yīng)用】Modbus應(yīng)用詳解

    。 ?? Modbus簡介 Modbus是一種串行通信協(xié)議,由于其公開、免費(fèi)、易于部署和維護(hù)的優(yōu)點,被廣泛應(yīng)用于工業(yè)電子領(lǐng)域,并且已經(jīng)成為工業(yè)領(lǐng)域通信協(xié)議的業(yè)界
    的頭像 發(fā)表于 07-18 11:55 ?2555次閱讀
    <b class='flag-5'>modbus</b>入門教程 <b class='flag-5'>Modbus協(xié)議</b>節(jié)點<b class='flag-5'>講解</b>之【EsDA應(yīng)用】<b class='flag-5'>Modbus</b>應(yīng)用詳解

    淺談Modbus通信協(xié)議

    Modbus通信協(xié)議是一種工業(yè)現(xiàn)場總線協(xié)議標(biāo)準(zhǔn),常用的Modbus協(xié)議有以下三種類型:Modbus TCP、
    發(fā)表于 09-20 15:56 ?4868次閱讀
    淺談<b class='flag-5'>Modbus</b>通信<b class='flag-5'>協(xié)議</b>

    什么是Modbus通訊協(xié)議?Modbus通訊協(xié)議有什么特點?

    。  Modbus 協(xié)議是應(yīng)用于電子控制器上的一種通用語言。通過此協(xié)議,控制器相互之間、控制器經(jīng)由網(wǎng)絡(luò)(例如以太網(wǎng))和其它設(shè)備之間可以通信。它已經(jīng)成為一通用工業(yè)標(biāo)準(zhǔn)。有了它,不同廠商生
    發(fā)表于 11-11 10:35

    modbus rtu 標(biāo)準(zhǔn)協(xié)議,無線遙控433 modbus

    `modbus rtu 標(biāo)準(zhǔn)協(xié)議,無線遙控433 modbushttps://item.taobao.com/item.htm?spm=a230r.1.14.126.px3iJL&
    發(fā)表于 06-08 15:51

    modbus協(xié)議講解modbus-rtu以及modbus-tcp協(xié)議詳解

    modbus協(xié)議講解modbus-rtu以及modbus-tcp協(xié)議詳解,見附件。
    發(fā)表于 03-01 10:14

    Modbus TCP協(xié)議學(xué)習(xí)筆記分享

    公司于1979年開發(fā),是一種工業(yè)現(xiàn)場總線協(xié)議標(biāo)準(zhǔn)。1996年施耐德公司推出基于以太網(wǎng)TCP/IP的modbus協(xié)議:modbusTCP。Modbus協(xié)議是一項應(yīng)用層報文傳輸協(xié)議,包括A
    發(fā)表于 07-01 10:36

    modbus協(xié)議筆記

    已經(jīng)成為工業(yè)領(lǐng)域通信協(xié)議的業(yè)界標(biāo)準(zhǔn),并且現(xiàn)在是工業(yè)電子設(shè)備之間常用的連接方式。Modbus作為目前工業(yè)領(lǐng)域應(yīng)用最廣泛的協(xié)議,與其他通信協(xié)議
    發(fā)表于 07-02 07:17

    LabVIEW編程LabVIEW開發(fā)Modbus協(xié)議講解

    LabVIEW編程LabVIEW開發(fā)Modbus協(xié)議講解Modbus是一種工業(yè)協(xié)議,于1979年開發(fā),旨在實現(xiàn)自動化設(shè)備之間的通信。 Modbus
    發(fā)表于 01-25 20:23

    modbus標(biāo)準(zhǔn)協(xié)議中是否有錯誤重發(fā)機(jī)制?

    modbus標(biāo)準(zhǔn)協(xié)議里面到底有沒有這個重發(fā)的機(jī)制
    發(fā)表于 10-16 06:32

    HLP_SV_Modbus標(biāo)準(zhǔn)通訊協(xié)議格式

    HLP_SV_Modbus標(biāo)準(zhǔn)通訊協(xié)議格式,工業(yè)通信的標(biāo)準(zhǔn)格式。
    發(fā)表于 03-10 11:47 ?18次下載

    HLPA+_Modbus標(biāo)準(zhǔn)通訊協(xié)議格式

    HLPA+ Modbus標(biāo)準(zhǔn)通訊協(xié)議格式.pdf
    發(fā)表于 07-12 10:36 ?10次下載

    Modbus通訊協(xié)議的原理和標(biāo)準(zhǔn)

    Modbus通訊協(xié)議分為RTU和ASCLL兩種傳輸模式,已經(jīng)成為一種標(biāo)準(zhǔn)工業(yè)控制協(xié)議。
    發(fā)表于 11-02 18:31 ?12次下載

    使用單片機(jī)實現(xiàn)Modbus通訊協(xié)議的實例程序和講解分析

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用單片機(jī)實現(xiàn)Modbus通訊協(xié)議的實例程序和講解分析。
    發(fā)表于 09-06 17:26 ?47次下載
    使用單片機(jī)實現(xiàn)<b class='flag-5'>Modbus</b>通訊<b class='flag-5'>協(xié)議</b>的實例程序和<b class='flag-5'>講解</b>分析

    解讀Modbus通訊協(xié)議

    作為工控人,Modbus 通訊協(xié)議想必都不陌生,Modbus 通訊協(xié)議可以說是工業(yè)自動化領(lǐng)域應(yīng)用最為廣泛的通訊協(xié)議,因為他的開放性、可擴(kuò)充性
    的頭像 發(fā)表于 11-09 16:39 ?1697次閱讀

    Modbus通訊協(xié)議的詳細(xì)資料講解

    作為工控人,Modbus 通訊協(xié)議想必都不陌生,Modbus 通訊協(xié)議可以說是工業(yè)自動化領(lǐng)域應(yīng)用最為廣泛的通訊協(xié)議,因為他的開放性、可擴(kuò)充性
    發(fā)表于 11-27 02:01 ?54次下載
    <b class='flag-5'>Modbus</b>通訊<b class='flag-5'>協(xié)議</b>的詳細(xì)資料<b class='flag-5'>講解</b>