RTU模式和ASCII模式。
RTU模式:
地址碼 功能碼 資料 校驗碼 一位元組 一位元組 n位元組 兩位元組(CRC) 從機都有相應的地址碼,便於主機識別。其中資料已幀為單位進行資料傳輸,每幀最長為252位元組,最短為0。如果一byte資料的傳輸時間為T,那麼每兩幀之間的間隔最小應該要大於3.5T,否則從機不能分辨這是兩幀。第二,同一幀連續的兩個資料之間的間隔時間不能超過1.5T,否則節點會認為這一幀資料不完整,這說明我們在modbus傳輸的時候要使能一個定時器的工作。
ASCII模式:
起始 地址碼 功能碼 資料 校驗 回車換行 字元 ':'(冒號) 兩位元組 兩位元組 0到2 * 252位元組 兩位元組(LRC校驗) 兩位元組(CR,LF) 幀的起始一字元 ' : '冒號開始,結束為回車換行,其對應的16進位制可以到ASCII表中進行查詢。位元組間傳輸的間隔時間不能大於1s,大於1s認為這一幀資料丟失.同樣我們可以計算出來ASCII幀的最大長度是513位元組。
RTU使用CRC校驗,ASCII使用LRC校驗。
正確的應答格式:
地址碼 功能碼 資料碼 校驗 從機自己的 與傳送的保持一致(範圍:0x00-0x7f) 根據功能需求 校驗碼
錯誤應答:
功能碼加0x80,原本功能碼最高位不會為1,加0x80最高位為1,判斷出錯,資料位的異常碼可以知道大概是什麼錯誤。
地址碼 功能碼 資料碼 校驗 從機自己的 與傳送的保持一致(範圍:0x00-0x7f) + 0x80 異常碼 校驗碼
異常碼:
功能碼:
0x01: 讀線圈暫存器(可讀可寫線圈)
0x02: 讀離散輸入暫存器(可讀不可寫線圈)
0x03: 讀保持暫存器(可讀可寫暫存器)
0x04: 讀輸入暫存器(可讀不可寫暫存器)
0x05: 寫單個線圈暫存器(可寫單個線圈不可讀)
0x06: 寫單個保持暫存器(可寫單個暫存器不可讀)
0x0f: 寫多個線圈暫存器(可寫多個線圈不可讀)
0x10: 寫多個保持暫存器(可寫多個暫存器不可讀)
01H-->讀線圈暫存器
地址碼 功能碼 資料 校驗 傳送 01 01 00 20 00 05 FD C3 響應 01 01 01 15 90 47 傳送資料:讀取地址:00 20,從0x20處開始讀取,00 05 讀取5個暫存器。
響應資料:01,只有5個暫存器,小於8,5/8=0,加1,所以為1,假設有9個,則為02,以此類推。15,二進位制:00010101,在5個暫存器中有3個處於開的狀態,在此功能下只能讀取從機狀態。
02H--->讀離散輸入暫存器
地址碼 功能碼 資料 校驗 傳送 01 02 00 20 00 05 B9 C3 響應 01 02 01 02 20 49 傳送資料:讀取地址:00 20,從0x20處開始讀取,00 05 讀取5個暫存器。
響應資料:01,只有5個暫存器,小於8,5/8=0,加1,所以為1,假設有9個,則為02,以此類推。02,二進位制:00000010,在5個暫存器中有1個處於開的狀態,在此功能下只能讀取從機狀態。
03-->讀保持暫存器
地址碼 功能碼 資料 校驗 傳送 01 03 00 14 00 03 45 CF 響應 01 03 06 00 14 00 1E 00 00 71 70 傳送資料:讀取地址:00 20,從0x20處開始讀取,00 05 讀取3個暫存器。
響應資料:06,後面有6位,00 14,傳送的資料0x14,00 1E傳送的資料0x1E,00 00傳送的資料0X00。
04--> 讀輸入暫存器
地址碼 功能碼 資料 校驗 傳送 01 04 00 14 00 03 F0 0F 響應 01 04 06 00 14 00 1E 00 00 30 96 傳送資料:讀取地址:00 20,從0x20處開始讀取,00 05 讀取3個暫存器。
響應資料:06,後面有6位,00 14,傳送的資料0x14,00 1E傳送的資料0x1E,00 00傳送的資料0X00。
05-->寫單個線圈暫存器
地址碼 功能碼 資料 校驗 傳送 01 05 00 20 00 00 CC 00 響應 01 05 00 20 00 00 CC 00 傳送資料:讀取地址:00 20,從0x20處開始寫入,00 00 寫入值。
響應資料:跟傳送的一樣。
06-->寫單個保持暫存器
地址碼 功能碼 資料 校驗 傳送 01 06 00 01 00 03 XX XX 響應 01 06 00 01 00 03 XX XX 傳送資料:讀取地址:00 20,從0x20處開始寫入,00 03 寫入值。
響應資料:跟傳送的一樣。
0F-->寫多個線圈暫存器
地址碼 功能碼 資料 校驗 傳送 01 0F 00 14 00 03 01 00 CC 00 響應 01 0F 00 14 00 03 CC 00 傳送資料:讀取地址:00 20,從0x20處開始寫入,00 03 寫入3個值,01,3小於8,00,寫入的3個資料都為0。
響應資料:00 14,寫入地址,00 03,3個資料。
10-->寫多個保持暫存器
地址碼 功能碼 資料 校驗 傳送 01 10 00 34 00 02 04 0C 02 12 45 XX XX 響應 01 10 00 34 00 02 XX XX 傳送資料:讀取地址:00 34,從0x34處開始寫入,00 02 寫入2個值,04後面有4位元,0C 02和12 45都為資料。
響應資料:00 14,寫入地址,00 02,2個資料。
CRC校驗: