詳解MODBUS標(biāo)準(zhǔn)協(xié)議——下篇
二、特點(diǎn)
Modbus具有以下幾個(gè)特點(diǎn):
1、標(biāo)準(zhǔn)、開放,用戶可以免費(fèi)、放心地使用Modbus協(xié)議,不需要交納許可證費(fèi),也不會(huì)侵犯知識(shí)產(chǎn)權(quán)。目前,支持Modbus的廠家超過400家,支持Modbus的產(chǎn)品超過600種。
2、Modbus可以支持多種電氣接口,如RS-232、RS-485等,還可以在各種介質(zhì)上傳送,如雙絞線、光纖、無線等。
3、Modbus的幀格式簡(jiǎn)單、緊湊,通俗易懂。用戶使用容易,廠商開發(fā)簡(jiǎn)單。
三、功能碼定義
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通信的能力是同等的。選擇時(shí)應(yīng)視所用ModBus主機(jī)而定,每個(gè)ModBus系統(tǒng)只能使用一種模式,不允許2種模式混用。一種模式是ASCII(美國(guó)信息 交換碼),另一種模式是RTU(遠(yuǎn)程 終端設(shè)備)。
用戶選擇想要的模式,包括 串口通信參數(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ù)南⒍蔚拿恳晃唬约皼Q定怎樣將信息打包成消息域和如何解碼。在其它網(wǎng)絡(luò)上(像MAP和Modbus Plus)Modbus消息被轉(zhuǎn)成與串行傳輸無關(guān)的幀。
1.傳輸模式特性:
ASCII可打印字符便于故障檢測(cè),而且對(duì)于用高級(jí)語(yǔ)言(如Fortran)編程的主計(jì)算機(jī)及主PC很適宜。RTU則適用于 機(jī)器語(yǔ)言編程的計(jì)算機(jī)和PC主機(jī)。
用RTU模式傳輸?shù)臄?shù)據(jù)是8位二進(jìn)制字符。如欲轉(zhuǎn)換為ASCII模式,則每個(gè)RTU字符首先應(yīng)分為高位和低位兩部分,這兩部分各含4位,然后轉(zhuǎn)換成十六進(jìn)制等量值。用以構(gòu)成 報(bào)文的ASCII字符都是十六進(jìn)制字符。ASCII模式使用的 字符雖是RTU模式的兩倍,但ASCII數(shù)據(jù)的譯碼和處理更為容易一些,此外,用RTU模式時(shí)報(bào)文字符必須以連續(xù)數(shù)據(jù)流的形式傳送,用ASCII模式,字符之間可產(chǎn)生長(zhǎng)達(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(美國(guó)標(biāo)準(zhǔn)信息交換代碼)模式通信,一個(gè)信息中的每8位字節(jié)作為2個(gè)ASCII字符傳輸,如數(shù)值63H用ASCII方式時(shí),需發(fā)送兩個(gè)字節(jié),即ASCII“6"(0110110)和ASCII”3“(0110011),ASCII字符占用的位數(shù)有7位和8位,國(guó)際通用7位為多。這種方式的主要優(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)位,無校驗(yàn)則無 1個(gè)停止位(有校驗(yàn)時(shí)),2個(gè)Bit(無校驗(yàn)時(shí)) 錯(cuò)誤檢測(cè)域
LRC(縱向冗長(zhǎng)檢測(cè))
3.RTU模式:
當(dāng)控制器設(shè)為在Modbus網(wǎng)絡(luò)上以RTU模式通信,在消息中的每個(gè)8Bit字節(jié)按照原值傳送,不做處理,如63H,RTU將直接發(fā)送01100011。這種方式的主要優(yōu)點(diǎn)是:數(shù)據(jù)幀傳送之間沒有間隔,相同波特率下傳輸數(shù)據(jù)的密度要比ASCII高,傳輸速度更快。
代碼系統(tǒng)
8位二進(jìn)制, 十六進(jìn)制數(shù)0...9,A...F
消息中的每個(gè)8 位域都是一或兩個(gè)十六進(jìn)制字符組成
每個(gè)字節(jié)的位 1個(gè)起始位 8個(gè) 數(shù)據(jù)位,最小的有效位先發(fā)送
1個(gè) 奇偶校驗(yàn)位,無校驗(yàn)則無
1個(gè)停止位(有校驗(yàn)時(shí)),2個(gè)Bit(無校驗(yàn)時(shí))
五、數(shù)據(jù)校驗(yàn)方式
1.CRC:
CRC域是兩個(gè)字節(jié),包含一16位的二進(jìn)制值。它由傳輸設(shè)備計(jì)算后加入到消息中。接收設(shè)備重新計(jì)算收到消息的CRC,并與接收到的CRC域中的值比較,如果兩值不同,則有誤。
CRC是先調(diào)入一值是全“1”的16位寄存器,然后調(diào)用一過程將消息中連續(xù)的8位字節(jié)和當(dāng)前寄存器中的值進(jìn)行處理。僅每個(gè)字符中的8Bit數(shù)據(jù)對(duì)CRC有效,起始位和停止位以及 奇偶校驗(yàn)位均無效。
CRC產(chǎn)生過程中,每個(gè)8位字符都單獨(dú)和寄存器內(nèi)容相異或(XOR),結(jié)果向最低有效位方向移動(dòng),最高有效位以0填充。LSB被提取出來檢測(cè),如果LSB為1,寄存器單獨(dú)和預(yù)置的值或一下,如果LSB為0,則不進(jìn)行。整個(gè)過程要重復(fù)8次。在最后一位(第8位)完成后,下一個(gè)8位字節(jié)又單獨(dú)和寄存器的當(dāng)前值相異或(XOR)。最終寄存器中的值,是消息中所有的字節(jié)都執(zhí)行之后的CRC值。
CRC添加到消息中時(shí),低字節(jié)先加入,然后高字節(jié)。
CRC-16錯(cuò)誤校驗(yàn)程序如下:報(bào)文(此處只涉及 數(shù)據(jù)位,不指起始位、停止位和任選的 奇偶校驗(yàn)位)被看作是一個(gè)連續(xù)的二進(jìn)制,其最高有效位(MSB)首選發(fā)送。報(bào)文先與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ù)加入該報(bào)文(MSB先發(fā)送),成為2個(gè)CRC校驗(yàn)字節(jié)。余數(shù)中的1全部初始化,以免所有的零成為一條報(bào)文被接收。經(jīng)上述處理而含有CRC字節(jié)的報(bào)文,若無錯(cuò)誤,到接收設(shè)備后再被同一多項(xiàng)式(X↑16+X↑15+X↑2+1)除,會(huì)得到一個(gè)零余數(shù)(接收設(shè)備核驗(yàn)這個(gè)CRC字節(jié),并將其與被傳送的CRC比較)。全部運(yùn)算以2為模(無進(jìn)位)。
習(xí)慣于成串發(fā)送數(shù)據(jù)的設(shè)備會(huì)首選送出字符的最右位(LSB-最低有效位)。而在生成CRC情況下,發(fā)送首位應(yīng)是被除數(shù)的最高有效位MSB。由于在運(yùn)算中不用進(jìn)位,為便于操作起見,計(jì)算CRC時(shí)設(shè)MSB在最右位。生成多項(xiàng)式的位序也必須反過來,以保持一致。多項(xiàng)式的MSB略去不記,因其只對(duì)商有影響而不影響余數(shù)。
生成CRC-16校驗(yàn)字節(jié)的步驟如下:
①裝如一個(gè)16位 寄存器,所有數(shù)位均為1。
②該16位寄存器的高位 字節(jié)與開始8位字節(jié)進(jìn)行“異或”運(yùn)算。運(yùn)算結(jié)果放入這個(gè)16位寄存器。
③把這個(gè)16寄存器向右移一位。
④若向右(標(biāo)記位)移出的數(shù)位是1,則生成多項(xiàng)式10,1000,000,0000,001和這個(gè)寄存器進(jìn)行“異或”運(yùn)算;若向右移出的數(shù)位是0,則返回③。
⑤重復(fù)③和④,直至移出8位。
⑥另外8位與該十六位寄存器進(jìn)行“異或”運(yùn)算。
⑦重復(fù)③~⑥,直至該 報(bào)文所有字節(jié)均與16位 寄存器進(jìn)行“異或”運(yùn)算,并移位8次。
⑧這個(gè)16位寄存器的內(nèi)容即2字節(jié)CRC錯(cuò)誤校驗(yàn),被加到報(bào)文的最高有效位。 另外,在某些非ModBus通信協(xié)議中也經(jīng)常使用CRC16作為校驗(yàn)手段,而且產(chǎn)生了一些CRC16的變種,他們是使用CRC16多項(xiàng)式X↑16+X↑15+X↑2+1,單首次裝入的16位寄存器為0000;使用CRC16的反序X↑16+X↑14+X↑1+1,首次裝入寄存器值為0000或FFFFH。CRC簡(jiǎn)單函數(shù)如下:
2.LRC:
LRC錯(cuò)誤校驗(yàn)用于ASCII模式。這個(gè)錯(cuò)誤校驗(yàn)是一個(gè)8位二進(jìn)制數(shù),可作為2個(gè)ASCII十六進(jìn)制字節(jié)傳送。把十六進(jìn)制字符轉(zhuǎn)換成二進(jìn)制,加上無循環(huán)進(jìn)位的二進(jìn)制字符和二進(jìn)制補(bǔ)碼結(jié)果生成LRC錯(cuò)誤校驗(yàn)(參見圖)。這個(gè)LRC在接收設(shè)備進(jìn)行核驗(yàn),并與被傳送的LRC進(jìn)行比較,冒號(hào)(:)、回車符號(hào)(CR)、換行字符(LF)和置入的其他任何非ASCII十六進(jìn)制字符在運(yùn)算時(shí)忽略不計(jì)。
Modbus與PROFIBUS-DP協(xié)議比較
Modbus的協(xié)議內(nèi)容是完全公開的,內(nèi)容是簡(jiǎn)單滴,實(shí)現(xiàn)起來是非常容易滴,單片機(jī)、PLC、DCS統(tǒng)統(tǒng)都能輕易實(shí)現(xiàn)。
Profibus則要復(fù)雜一些,關(guān)鍵是需要專用芯片進(jìn)行二次開發(fā),并且需要得到上級(jí)組織的認(rèn)證,開發(fā)成本肯定高不少 。
當(dāng)然從性能上講,基于串口的modbus rtu/ASCII通訊性能肯定比不過profibus dp,但是就一些儀表級(jí)的簡(jiǎn)單通訊或者控制器級(jí)別的小數(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 | 讀取保持寄存器 | 在一個(gè)或多個(gè)保持寄存器中取得當(dāng)前的二進(jìn)制值 |
04 | 讀取輸入寄存器 | 在一個(gè)或多個(gè)輸入寄存器中取得當(dāng)前的二進(jìn)制值 |
05 | 強(qiáng)置單線圈 | 強(qiáng)置一個(gè)邏輯線圈的通斷狀態(tài) |
06 | 預(yù)置單寄存器 | 把具體二進(jìn)值裝入一個(gè)保持寄存器 |
07 | 讀取異常狀態(tài) | 取得8個(gè)內(nèi)部線圈的通斷狀態(tài),這8個(gè)線圈的地址由控制器決定 |
08 | 回送診斷校驗(yàn) | 把診斷校驗(yàn)報(bào)文送從機(jī),以對(duì)通信處理進(jìn)行評(píng)鑒 |
09 | 編程(只用于484) | 使主機(jī)模擬編程器作用,修改PC從機(jī)邏輯 |
10 | 控詢(只用于484) | 可使主機(jī)與一臺(tái)正在執(zhí)行長(zhǎng)程序任務(wù)從機(jī)通信,探詢?cè)搹臋C(jī)是否已完成其操作任務(wù),僅在含有功能碼9的報(bào)文發(fā)送后,本功能碼才發(fā)送 |
11 | 讀取事件計(jì)數(shù) | 可使主機(jī)發(fā)出單詢問,并隨即判定操作是否成功,尤其是該命令或其他應(yīng)答產(chǎn)生通信錯(cuò)誤時(shí) |
12 | 讀取通信事件記錄 | 可是主機(jī)檢索每臺(tái)從機(jī)的ModBus事務(wù)處理通信事件記錄。如果某項(xiàng)事務(wù)處理完成,記錄會(huì)給出有關(guān)錯(cuò)誤 |
13 | 編程(184/384 484 584) | 可使主機(jī)模擬編程器功能修改PC從機(jī)邏輯 |
14 | 探詢(184/384 484 584) | 可使主機(jī)與正在執(zhí)行任務(wù)的從機(jī)通信,定期控詢?cè)搹臋C(jī)是否已完成其程序操作,僅在含有功能13的報(bào)文發(fā)送后,本功能碼才得發(fā)送 |
15 | 強(qiáng)置多線圈 | 強(qiáng)置一串連續(xù)邏輯線圈的通斷 |
16 | 預(yù)置多寄存器 | 把具體的二進(jìn)制值裝入一串連續(xù)的保持寄存器 |
17 | 報(bào)告從機(jī)標(biāo)識(shí) | 可使主機(jī)判斷編址從機(jī)的類型及該從機(jī)運(yùn)行指示燈的狀態(tài) |
18 | (884和MICRO 84) | 可使主機(jī)模擬編程功能,修改PC狀態(tài)邏輯 |
19 | 重置通信鏈路 | 發(fā)生非可修改錯(cuò)誤后,是從機(jī)復(fù)位于已知狀態(tài),可重置順序字節(jié) |
20 | 讀取通用參數(shù)(584L) | 顯示擴(kuò)展存儲(chǔ)器文件中的數(shù)據(jù)信息 |
21 | 寫入通用參數(shù)(584L) | 把通用參數(shù)寫入擴(kuò)展存儲(chǔ)文件,或修改之 |
22~64 | 保留作擴(kuò)展功能備用 | |
65~72 | 保留以備用戶功能所用 | 留作用戶功能的擴(kuò)展編碼 |
73~119 | 非法功能 | |
120~127 | 保留 | 留作內(nèi)部作用 |
128~255 | 保留 | 用于異常應(yīng)答 |
功能碼命令詳解:
在這些功能碼中較長(zhǎng)使用的是1、2、3、4、5、6號(hào)功能碼,使用它們即可實(shí)現(xiàn)對(duì)下位機(jī)的數(shù)字量和模擬量的讀寫操作。
1、01號(hào)命令,讀可讀寫數(shù)字量寄存器(線圈狀態(tài)):
計(jì)算機(jī)發(fā)送命令:[設(shè)備地址] [命令號(hào)01] [起始寄存器地址高8位] [低8位] [讀取的寄存器數(shù)高8位] [低8位] [CRC校驗(yàn)的低8位] [CRC校驗(yàn)的高8位]
例:[11][01][00][13][00][25][CRC低][CRC高]
意義如下:
<1>設(shè)備地址:在一個(gè)485總線上可以掛接多個(gè)設(shè)備,此處的設(shè)備地址表示想和哪一個(gè)設(shè)備通訊。例子中為想和17號(hào)(十進(jìn)制的17是十六進(jìn)制的11)通訊。
<2>命令號(hào)01:讀取數(shù)字量的命令號(hào)固定為01。
<3>起始地址高8位、低8位:表示想讀取的開關(guān)量的起始地址(起始地址為0)。比如例子中的起始地址為19。
<4>寄存器數(shù)高8位、低8位:表示從起始地址開始讀多少個(gè)開關(guān)量。例子中為37個(gè)開關(guān)量。
<5>CRC校驗(yàn):是從開頭一直校驗(yàn)到此之前。設(shè)備響應(yīng):[設(shè)備地址] [命令號(hào)01] [返回的字節(jié)個(gè)數(shù)][數(shù)據(jù)1][數(shù)據(jù)2]...[數(shù)據(jù)n] [CRC校驗(yàn)的高8位] [CRC校驗(yàn)的低8位]
例:[11][01][05][CD][6B][B2][0E][1B] [CRC高] [CRC低]
意義如下:
<1>設(shè)備地址和命令號(hào)和上面的相同。
<2>返回的字節(jié)個(gè)數(shù):表示數(shù)據(jù)的字節(jié)個(gè)數(shù),也就是數(shù)據(jù)1,2...n中的n的值。
<3>數(shù)據(jù)1...n:由于每一個(gè)數(shù)據(jù)是一個(gè)8位的數(shù),所以每一個(gè)數(shù)據(jù)表示8個(gè)開關(guān)量的值,每一位為0表示對(duì)應(yīng)的開關(guān)斷開,為1表示閉合。比如例子中,表示20號(hào)(索引號(hào)為19)開關(guān)閉合,21號(hào)斷開,22閉合,23閉合,24斷開,25斷開,26閉合,27閉合...如果詢問的開關(guān)量不是8的整倍數(shù),那么最后一個(gè)字節(jié)的高位部分無意義,置為0。
<4>CRC校驗(yàn)同上。
2、05號(hào)命令,寫數(shù)字量(線圈狀態(tài)):
計(jì)算機(jī)發(fā)送命令:[設(shè)備地址] [命令號(hào)05] [需下置的寄存器地址高8位] [低8位] [下置的數(shù)據(jù)高8位] [低8位] [CRC校驗(yàn)的低8位] [CRC校驗(yàn)的高8位]
例:[11][05][00][AC][FF][00][CRC高][CRC低]
意義如下:
<1>設(shè)備地址和上面的相同。
<2>命令號(hào):寫數(shù)字量的命令號(hào)固定為05。
<3>需下置的寄存器地址高8位,低8位:表明了需要下置的開關(guān)的地址。
<4>下置的數(shù)據(jù)高8位,低8位:表明需要下置的開關(guān)量的狀態(tài)。例子中為把該開關(guān)閉合。注意,此處只可以是[FF][00]表示閉合[00][00]表示斷開,其他數(shù)值非法。
<5>注意此命令一條只能下置一個(gè)開關(guān)量的狀態(tài)。
設(shè)備響應(yīng):如果成功把計(jì)算機(jī)發(fā)送的命令原樣返回,否則不響應(yīng)。
3、03號(hào)命令,讀可讀寫模擬量寄存器(保持寄存器):
計(jì)算機(jī)發(fā)送命令:[設(shè)備地址] [命令號(hào)03] [起始寄存器地址高8位] [低8位] [讀取的寄存器數(shù)高8位] [低8位] [CRC校驗(yàn)的高8位] [CRC校驗(yàn)的低8位]
例:[11][03][00][6B][00][03] [CRC高][CRC低]
意義如下:
<1>設(shè)備地址和上面的相同。
<2>命令號(hào):讀模擬量的命令號(hào)固定為03。
<3>起始地址高8位、低8位:表示想讀取的模擬量的起始地址(起始地址為0)。比如例子中的起始地址為107。
<4>寄存器數(shù)高8位、低8位:表示從起始地址開始讀多少個(gè)模擬量。例子中為3個(gè)模擬量。注意,在返回的信息中一個(gè)模擬量需要返回兩個(gè)字節(jié)。
設(shè)備響應(yīng):[設(shè)備地址] [命令號(hào)03] [返回的字節(jié)個(gè)數(shù)][數(shù)據(jù)1][數(shù)據(jù)2]...[數(shù)據(jù)n] [CRC校驗(yàn)的高8位] [CRC校驗(yàn)的低8位]
例:[11][03][06][02][2B][00][00][00][64] [CRC高] [CRC低]
意義如下:
<1>設(shè)備地址和命令號(hào)和上面的相同。
<2>返回的字節(jié)個(gè)數(shù):表示數(shù)據(jù)的字節(jié)個(gè)數(shù),也就是數(shù)據(jù)1,2...n中的n的值。例子中返回了3個(gè)模擬量的數(shù)據(jù),因?yàn)橐粋€(gè)模擬量需要2個(gè)字節(jié)所以共6個(gè)字節(jié)。
<3>數(shù)據(jù)1...n:其中[數(shù)據(jù)1][數(shù)據(jù)2]分別是第1個(gè)模擬量的高8位和低8位,[數(shù)據(jù)3][數(shù)據(jù)4]是第2個(gè)模擬量的高8位和低8位,以此類推。例子中返回的值分別是555,0,100。
<4>CRC校驗(yàn)同上。
4、06號(hào)命令,寫單個(gè)模擬量寄存器(保持寄存器):
計(jì)算機(jī)發(fā)送命令:[設(shè)備地址] [命令號(hào)06] [需下置的寄存器地址高8位] [低8位] [下置的數(shù)據(jù)高8位] [低8位] [CRC校驗(yàn)的高8位] [CRC校驗(yàn)的低8位]
例:[11][06][00][01][00][03] [CRC高] [CRC低]
意義如下:
<1>設(shè)備地址和上面的相同。
<2>命令號(hào):寫模擬量的命令號(hào)固定為06。
<3>需下置的寄存器地址高8位,低8位:表明了需要下置的模擬量寄存器的地址。
<4>下置的數(shù)據(jù)高8位,低8位:表明需要下置的模擬量數(shù)據(jù)。比如例子中就把1號(hào)寄存器的值設(shè)為3。
<5>注意此命令一條只能下置一個(gè)模擬量的狀態(tài)。
設(shè)備響應(yīng):如果成功把計(jì)算機(jī)發(fā)送的命令原樣返回,否則不響應(yīng)。
5、16號(hào)命令,寫多個(gè)模擬量寄存器(保持寄存器):
計(jì)算機(jī)發(fā)送命令:[設(shè)備地址] [命令號(hào)16] [需下置的寄存器地址高8位] [低8位] [數(shù)據(jù)數(shù)量高8位] [數(shù)據(jù)數(shù)量低8位] [下置的數(shù)據(jù)高8位] [低8位][……][……] [CRC校驗(yàn)的高8位] [CRC校驗(yàn)的低8位]
例:[11][16][00][01][00][01][00][05] [CRC高] [CRC低]
意義如下:
<1>設(shè)備地址和上面的相同。
<2>命令號(hào):寫模擬量的命令號(hào)固定為16。
<3>需下置的寄存器地址高8位,低8位:表明了需要下置的模擬量寄存器的地址。
<4>需下置的數(shù)據(jù)數(shù)量高8位,低8位:表明了需要下置的數(shù)據(jù)數(shù)量,這里為1。
<5>下置的數(shù)據(jù)高8位,低8位:表明需要下置的模擬量數(shù)據(jù)。比如例子中就把1號(hào)寄存器的值設(shè)為5。
設(shè)備響應(yīng):如果成功把計(jì)算機(jī)返回的如下命令,否則不響應(yīng)。設(shè)備響應(yīng):[設(shè)備地址] [命令號(hào)16] [需下置的寄存器地址高8位] [低8位] [數(shù)據(jù)數(shù)量高8位] [數(shù)據(jù)數(shù)量低8位] [CRC校驗(yàn)的高8位] [CRC校驗(yàn)的低8位],如上例返回:[11][16][00][01][00][01] [CRC高] [CRC低]