Modbus �(xié)議是�(yīng)用于電子控制�上的一種通用�(yǔ)言。通過(guò)此協(xié)�,控制器相互之間、控制器�(jīng)由網(wǎng)�(luò)(例如以太網(wǎng))和其它�(shè)備之間可以通信。Modbus �(xié)議定義了一�(gè)控制器能�(rèn)�(shí)使用的消息結(jié)�(gòu),而不管它們是�(jīng)�(guò)何種�(wǎng)�(luò)�(jìn)行通信�。它描述了一控制器請(qǐng)求訪�(wèn)其它�(shè)備的�(guò)�,如果回�(yīng)�(lái)自其它設(shè)備的�(qǐng)�,以及怎樣偵測(cè)�(cuò)誤并記錄。它制定了消息域格局和內(nèi)容的公共格式�
控制器能�(shè)置為兩種傳輸模式(ASCII或RTU)中的任何一種在�(biāo)�(zhǔn)的Modbus�(wǎng)�(luò)通信。用戶選擇想要的模式,包括串口通信參數(shù)(波特率、校�(yàn)方式等),在配置每�(gè)控制器的�(shí)�,在一�(gè)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)成與串行傳輸�(wú)�(guān)的幀�
1、ASCII模式
�(dāng)控制器設(shè)為在Modbus�(wǎng)�(luò)上以ASCII(美�(guó)�(biāo)�(zhǔn)信息交換代碼)模式通信,在消息中的每�(gè)8Bit
字節(jié)都作為兩�(gè)ASCII字符�(fā)�。這種方式的主要優(yōu)�(diǎn)是字符發(fā)送的�(shí)間間隔可�(dá)�1秒而不�(chǎn)生錯(cuò)誤�
代碼系統(tǒng)
十六�(jìn)�,ASCII字符0...9,A...F
消息中的每�(gè)ASCII字符都是一�(gè)十六�(jìn)制字符組�
每�(gè)字節(jié)的位
1�(gè)起始�
7�(gè)�(shù)�(jù)�,最小的有效位先�(fā)�
1�(gè)奇偶校驗(yàn)�,無(wú)校驗(yàn)則無(wú)
1�(gè)停止位(有校�(yàn)�(shí)��2�(gè)Bit(無(wú)校驗(yàn)�(shí)�
�(cuò)誤檢�(cè)�
LRC(縱向冗長(zhǎng)檢測(cè))
2、RTU模式
�(dāng)控制器設(shè)為在Modbus�(wǎng)�(luò)上以RTU(遠(yuǎn)程終端單元)模式通信,在消息中的每�(gè)8Bit字節(jié)包含�
�(gè)4Bit的十六�(jìn)制字�。這種方式的主要優(yōu)�(diǎn)是:在同樣的波特率下,可比ASCII方式傳送更多的�(shù)�(jù)�
代碼系統(tǒng)
8位二�(jìn)�,十六�(jìn)制數(shù)0...9,A...F
消息中的每�(gè)8位域都是一�(gè)兩�(gè)十六�(jìn)制字符組�
每�(gè)字節(jié)的位
1�(gè)起始�
8�(gè)�(shù)�(jù)�,最小的有效位先�(fā)�
1�(gè)奇偶校驗(yàn)位,�(wú)校驗(yàn)則無(wú)
1�(gè)停止位(有校�(yàn)�(shí)��2�(gè)Bit(無(wú)校驗(yàn)�(shí)�
�(cuò)誤檢�(cè)�
CRC(循環(huán)冗長(zhǎng)檢測(cè))
兩種傳輸模式中(ASCII或RTU),傳輸�(shè)備以將Modbus消息�(zhuǎn)為有起點(diǎn)和終�(diǎn)的幀,這就允許接收的設(shè)備在消息起始處開(kāi)始工�,讀地址分配信息,判斷哪一�(gè)�(shè)備被選中(廣播方式則傳給所有設(shè)備),判知何�(shí)信息已完成。部分的消息也能偵測(cè)到并且錯(cuò)誤能�(shè)置為返回�(jié)��
1、ASCII幀
使用ASCII模式,消息以冒號(hào)�:)字符(ASCII� 3AH)開(kāi)�,以回車(chē)換行符結(jié)束(ASCII� 0DH,0AH��
其它域可以使用的傳輸字符是十六�(jìn)制的0...9,A...F。網(wǎng)�(luò)上的�(shè)備不斷偵�(cè)�:”字符,�(dāng)有一�(gè)冒號(hào)接收到時(shí),每�(gè)�(shè)備都解碼下�(gè)域(地址域)�(lái)判斷是否�(fā)給自己的�
消息中字符間�(fā)送的�(shí)間間隔最�(zhǎng)不能超過(guò)1�,否則接收的�(shè)備將�(rèn)為傳輸錯(cuò)�。一�(gè)典型消息幀如下所示:
�1 ASCII消息幀
2、RTU幀
使用RTU模式,消息發(fā)送至少要�3.5�(gè)字符�(shí)間的停頓間隔�(kāi)�。在�(wǎng)�(luò)波特率下多樣的字符時(shí)間,這是最容易�(shí)�(xiàn)�(如下圖的T1-T2-T3-T4所�)。傳�?shù)膫€(gè)域是�(shè)備地址??梢允褂玫膫鬏斪址鞘M(jìn)制的0...9,A...F。網(wǎng)�(luò)�(shè)備不斷偵�(cè)�(wǎng)�(luò)總線,包括停頓間隔時(shí)間內(nèi)。當(dāng)�(gè)域(地址域)接收�,每�(gè)�(shè)備都�(jìn)行解碼以判斷是否�(fā)往自己�。在一�(gè)傳輸字符之后,一�(gè)至少3.5�(gè)字符�(shí)間的停頓�(biāo)定了消息的結(jié)�。一�(gè)新的消息可在此停頓后�(kāi)始�
整�(gè)消息幀必須作為一連續(xù)的流�(zhuǎn)�。如果在幀完成之前有超�(guò)1.5�(gè)字符�(shí)間的停頓�(shí)間,接收�(shè)備將刷新不完整的消息并假定下一字節(jié)是一�(gè)新消息的地址�。同樣地,如果一�(gè)新消息在小于3.5�(gè)字符�(shí)間內(nèi)接著前�(gè)消息�(kāi)�,接收的�(shè)備將�(rèn)為它是前一消息的延�(xù)。這將�(dǎo)致一�(gè)�(cuò)�,因?yàn)樵诘腃RC域的值不可能是正確的。一典型的消息幀如下所示:
�2 RTU消息幀
3、地址�
消息幀的地址域包含兩�(gè)字符(ASCII)或8Bit(RTU�。可能的從設(shè)備地址�0...247 (十�(jìn)�)。單�(gè)�(shè)備的地址范圍�1...247。主�(shè)備通過(guò)將要�(lián)�(luò)的從�(shè)備的地址放入消息中的地址域來(lái)選通從�(shè)��
�(dāng)從設(shè)備發(fā)送回�(yīng)消息�(shí),它把自己的地址放入回應(yīng)的地址域中,以便主�(shè)備知道是哪一�(gè)�(shè)備作出回�(yīng)�
地址0是用作廣播地址,以使所有的從設(shè)備都能認(rèn)�(shí)。當(dāng)Modbus�(xié)議用于更高水�(zhǔn)的網(wǎng)�(luò),廣播可能不允許或以其它方式代替�
4、如何處理功能域
消息幀中的功能代碼域包含了兩�(gè)字符(ASCII)或8Bits(RTU�。可能的代碼范圍是十�(jìn)制的1...255�
�(dāng)�,有些代碼是適用于所有控制器,有此是�(yīng)用于某種控制�,還有些保留以備后用�
�(dāng)消息從主�(shè)備發(fā)往從設(shè)備時(shí),功能代碼域?qū)⒏嬷畯脑O(shè)備需要執(zhí)行哪些行�。例如去讀取輸入的�(kāi)�(guān)狀�(tài),讀一組寄存器的數(shù)�(jù)�(nèi)�,讀從設(shè)備的診斷狀�(tài),允許調(diào)�、記�、校�(yàn)在從�(shè)備中的程序等�
�(dāng)從設(shè)備回�(yīng)�(shí),它使用功能代碼域來(lái)指示是正?;貞?yīng)(�(wú)�)還是有某種錯(cuò)誤發(fā)生(�(chēng)作異議回�(yīng)��
�(duì)�?;貞?yīng),從�(shè)備僅回應(yīng)相應(yīng)的功能代碼。對(duì)異議回應(yīng),從�(shè)備返回一等同于正常代碼的代碼,但最重要的位置為邏輯1�
例如:一從主�(shè)備發(fā)往從設(shè)備的消息要求讀一組保持寄存器,將�(chǎn)生如下功能代碼:
0 0 0 0 0 0 1 1 (十六�(jìn)�03H�
�(duì)正常回應(yīng),從�(shè)備僅回應(yīng)同樣的功能代碼。對(duì)異議回應(yīng),它返回�
1 0 0 0 0 0 1 1 (十六�(jìn)�83H�
除功能代碼因異議�(cuò)誤作了修改外,從�(shè)備將一�(dú)特的代碼放到回應(yīng)消息的數(shù)�(jù)域中,這能告訴主設(shè)備發(fā)生了什么錯(cuò)誤�
主設(shè)備應(yīng)用程序得到異議的回應(yīng)�,典型的處理�(guò)程是重發(fā)消息,或者診斷發(fā)給從�(shè)備的消息并報(bào)告給操作��
5、數(shù)�(jù)�
�(shù)�(jù)域是由兩�(gè)十六�(jìn)制數(shù)集合�(gòu)成的,范�00...FF。根�(jù)�(wǎng)�(luò)傳輸模式,這可以是由一�(duì)ASCII字符組成或由一RTU字符組成�
從主�(shè)備發(fā)給從�(shè)備消息的�(shù)�(jù)域包含附加的信息:從�(shè)備必須用于�(jìn)行執(zhí)行由功能代碼所定義的所為。這包括了象不連續(xù)的寄存器地址,要處理�(xiàng)的數(shù)�,域中實(shí)際數(shù)�(jù)字節(jié)�(shù)�
例如,如果主�(shè)備需要從�(shè)備讀取一組保持寄存器(功能代�03�,數(shù)�(jù)域指定了起始寄存器以及要讀的寄存器�(shù)�。如果主�(shè)備寫(xiě)一組從�(shè)備的寄存器(功能代碼10十六�(jìn)制),數(shù)�(jù)域則指明了要�(xiě)的起始寄存器以及要寫(xiě)的寄存器�(shù)�,數(shù)�(jù)域的�(shù)�(jù)字節(jié)�(shù),要�(xiě)入寄存器的數(shù)�(jù)�
如果�(méi)有錯(cuò)誤發(fā)生,從從�(shè)備返回的�(shù)�(jù)域包含請(qǐng)求的�(shù)�(jù)。如果有�(cuò)誤發(fā)�,此域包含一異議代碼,主�(shè)備應(yīng)用程序可以用�(lái)判斷采取下一步行�(dòng)�
在某種消息中�(shù)�(jù)域可以是不存在的�0�(zhǎng)度)。例�,主�(shè)備要求從�(shè)備回�(yīng)通信事件記錄(功能代�0B十六�(jìn)制),從�(shè)備不需任何附加的信��
6、錯(cuò)誤檢�(cè)�
�(biāo)�(zhǔn)的Modbus�(wǎng)�(luò)有兩種錯(cuò)誤檢�(cè)方法。錯(cuò)誤檢�(cè)域的�(nèi)容視所選的檢測(cè)方法而定�
ASCII�(dāng)選用ASCII模式作字符幀,錯(cuò)誤檢�(cè)域包含兩�(gè)ASCII字符。這是使用LRC(縱向冗�(zhǎng)檢測(cè))方�
�(duì)消息�(nèi)容計(jì)算得出的,不包括�(kāi)始的冒號(hào)符及回車(chē)換行符。LRC字符附加在回�(chē)換行符前��
RTU�(dāng)選用RTU模式作字符幀,錯(cuò)誤檢�(cè)域包含一16Bits�(用兩�(gè)8位的字符�(lái)�(shí)�(xiàn))。錯(cuò)誤檢�(cè)域的�(nèi)容是通過(guò)�(duì)消息�(nèi)容�(jìn)行循�(huán)冗長(zhǎng)檢測(cè)方法得出的。CRC域附加在消息�,添加時(shí)先是低字節(jié)然后是高字節(jié)。故CRC的高位字節(jié)是發(fā)送消息的一�(gè)字節(jié)�
7、字符的連續(xù)傳輸
�(dāng)消息在標(biāo)�(zhǔn)的Modbus系列�(wǎng)�(luò)傳輸�(shí),每�(gè)字符或字節(jié)以如下方式發(fā)送(從左到右):
有效�...有效�
使用ASCII字符幀�(shí),位的序列是�
�3. 位順序(ASCII�
使用RTU字符幀�(shí),位的序列是�
�4. 位順序(RTU�
Modbus �(xié)議是�(yīng)用于電子控制器上的一種通用�(yǔ)言�
1、在Modbus�(wǎng)�(luò)上轉(zhuǎn)�
�(biāo)�(zhǔn)的Modbus口是使用一RS-232C兼容串行接口,它定義了連接口的針腳、電纜、信�(hào)�、傳輸波特率、奇偶校�(yàn)??刂破髂苤苯踊蚪?jīng)由Modem組網(wǎng)�
控制器通信使用主—從技�(shù),即僅一�(shè)備(主設(shè)備)能初始化傳輸(查詢)。其它設(shè)備(從設(shè)備)根據(jù)主設(shè)備查詢提供的�(shù)�(jù)作出相應(yīng)反應(yīng)。典型的主設(shè)備:主機(jī)和可編程儀�。典型的從設(shè)備:可編程控制器�
主設(shè)備可單獨(dú)和從�(shè)備通信,也能以廣播方式和所有從�(shè)備通信。如果單�(dú)通信,從�(shè)備返回一消息作為回應(yīng),如果是以廣播方式查詢的,則不作任何回應(yīng)。Modbus�(xié)議建立了主設(shè)備查詢的格式:設(shè)備(或廣播)地址、功能代碼、所有要�(fā)送的�(shù)�(jù)、一�(cuò)誤檢�(cè)域�
從設(shè)備回�(yīng)消息也由Modbus�(xié)議構(gòu)�,包括確�(rèn)要行�(dòng)的域、任何要返回的數(shù)�(jù)、和一�(cuò)誤檢�(cè)��
如果在消息接收過(guò)程中�(fā)生一�(cuò)�,或從設(shè)備不能執(zhí)行其命令,從�(shè)備將建立一�(cuò)誤消息并把它作為回應(yīng)�(fā)送出去�
2、在其它�(lèi)型網(wǎng)�(luò)上轉(zhuǎn)�
在其它網(wǎng)�(luò)�,控制器使用�(duì)等技�(shù)通信,故任何控制都能初始和其它控制器的通信。這樣在單�(dú)的通信�(guò)程中,控制器既可作為主設(shè)備也可作為從�(shè)�。提供的多�(gè)�(nèi)部通道可允許同�(shí)�(fā)生的傳輸�(jìn)程�
在消息位,Modbus�(xié)議仍提供了主—從原則,盡管網(wǎng)�(luò)通信方法是“對(duì)等�。如果一控制器發(fā)送一消息,它只是作為主設(shè)�,并期望從從�(shè)備得到回�(yīng)。同樣,�(dāng)控制器接收到一消息,它將建立一從設(shè)備回�(yīng)格式并返回給�(fā)送的控制器�
3、查詢—回�(yīng)周期
?�?)查�
查詢消息中的功能代碼告之被選中的從設(shè)備要�(zhí)行何種功能。數(shù)�(jù)段包含了從設(shè)備要�(zhí)行功能的任何附加信息。例如功能代�03是要求從�(shè)備讀保持寄存器并返回它們的�(nèi)�。數(shù)�(jù)段必須包含要告之從設(shè)備的信息:從何寄存器�(kāi)始讀及要讀的寄存器�(shù)�。錯(cuò)誤檢�(cè)�?yàn)閺脑O(shè)備提供了一種驗(yàn)證消息內(nèi)容是否正確的方法�
�2)回�(yīng)
如果從設(shè)備產(chǎn)生一正常的回�(yīng),在回應(yīng)消息中的功能代碼是在查詢消息中的功能代碼的回�(yīng)。數(shù)�(jù)段包括了從設(shè)備收集的�(shù)�(jù):象寄存器值或狀�(tài)。如果有�(cuò)誤發(fā)�,功能代碼將被修改以用于指出回應(yīng)消息是錯(cuò)誤的,同�(shí)�(shù)�(jù)段包含了描述此錯(cuò)誤信息的代碼。錯(cuò)誤檢�(cè)域允許主�(shè)備確�(rèn)消息�(nèi)容是否可��
維庫(kù)電子�,電子知�(shí),一查百��
已收錄詞�153979�(gè)