【玩轉(zhuǎn)485】18.modbus RTU報(bào)文格式1
林慧玲
發(fā)布于2015-03-05 11:16
28
0
標(biāo)簽:通訊
之前在自由口的文章中我已經(jīng)通過自定義的通訊協(xié)議向大家講解了什么是報(bào)文,以及如何使用報(bào)文發(fā)送和接收數(shù)據(jù)。從本文開始我就一起剖析一下。modbus RTU協(xié)議的具體結(jié)構(gòu),幫助大家徹底掌握modbus RTU協(xié)議。
1、地址分類 modbus RTU協(xié)議中將數(shù)據(jù)地址類型分成4種,分別是離散量輸入,線圈,輸入寄存器和保持寄存器,下面我們一起來看看這些地址類型的特點(diǎn)。
這里大家需要注意的是0和1開頭的地址每個(gè)通道都是1個(gè)位的大小,3和4開頭的地址每個(gè)通道都是16位也就是1個(gè)字的大小??赡芸吹竭@里大家還是對(duì)這種地址的表達(dá)方式?jīng)]有概念,那我們來看一下當(dāng)S7-200PLC做modbus RTU從站時(shí)S7-200PLC中的地址是如何與上面的地址類型對(duì)應(yīng)的。
線圈:對(duì)應(yīng)S7-200中Q區(qū),地址00001 =Q0.0
離散量輸入:對(duì)應(yīng)S7-200中I區(qū),地址10001 = I0.0
輸入寄存器:對(duì)應(yīng)S7-200中AI區(qū),地址30001 =AIW0
保持寄存器:具體對(duì)應(yīng)地址可以進(jìn)行設(shè)定,一般對(duì)應(yīng)V區(qū)。
2、功能碼01
功能碼01的作用是讀取線圈狀態(tài),下面我們來看看具體的報(bào)文格式。
主站請(qǐng)求報(bào)文:
圖2-1
從站應(yīng)答報(bào)文:
圖2-2
下面我們先將從站庫指令下載到S7-200PLC中讓S7-200PLC成為modbus RTU 從站具體從站參數(shù)設(shè)定可以參看圖 2?3。
圖 2-3
將S7-200PLC設(shè)定成從站后我將S7-200PLC中Q0.0和Q0.2置位為1,Q0.1保持為0然后用調(diào)試軟件發(fā)送報(bào)文查詢Q0.0、Q0.1、Q0.2的狀態(tài)。
圖 2-4
圖 2-4所示我們向從站發(fā)送03 01 00 00 00 03 7D E9其中03是從站地址,01是功能碼,00 00是指起始地址是Q0.0, 00 03是指讀取3個(gè)線圈,7D E9是前面數(shù)據(jù)的crc校驗(yàn)碼。
注: 這里需要注意我們按照crc校驗(yàn)算出來的校驗(yàn)碼的順序應(yīng)該是E9 7D,而modbus RTU中crc校驗(yàn)計(jì)算出來后需要高低字節(jié)進(jìn)行交換所以是7D E9
圖 2-5
圖 2-5PLC返回?cái)?shù)值是03 01 01 05 90 33,其中03是PLC站地址,01是功能碼,01是返回給主站的數(shù)據(jù)小于或者等于1個(gè)字節(jié),05的二進(jìn)制代碼是101表示Q0.0 = 1、Q0.1 = 0、Q0.2 = 1,90 33是前面數(shù)值的crc校驗(yàn)碼。
以上就是01功能碼的含義和用法,下一篇文章我們繼續(xù)介紹其他功能碼。
作者:馬樂
版權(quán)為技成所有,盜取必究!