Modbus通信協議簡介
Modbus協議,首先從字面理解它包括Mod和Bus兩部分,首先它是一種bus,即總線協議,和I2C、SPI類似,總線就意味著有主機,有從機,這些設備在同一條總線上。

Modbus支持單主機,多個從機,最多支持247個從機設備。關于Mod,因為這種協議最早被用在PLC控制器中,準確的說是Modicon公司的PLC控制器,這也是Mod-Bus名稱的由來。
Modbus在7層OSI參考模型中屬于第七層應用層,數據鏈路層有兩種:基于標準串口協議和TCP協議,物理層可使用3線232、2線485、4線422,或光纖、網線、無線等多種傳輸介質。

Modbus協議是一種請求/應答方式的交互過程,主機主動發起通訊請求,從機響應主機的請求,從機在沒有收到主機的請求時,不會主動發送數據,從機之間不會進行通訊。
Modbus通信協議特點
(1) 標準、開放,用戶可以免費、放心地使用Modbus協議,不需要交納許可證費,也不會侵犯知識產權。
(2) Modbus可以支持多種電氣接口,如RS-232、RS-485等,還可以在各種介質上傳送,如雙絞線、光纖、無線等。
(3) Modbus的幀格式簡單、緊湊,通俗易懂。用戶使用容易,廠商開發簡單。

Modbus4種數據類型
Modbus協議規定,進行讀寫操作的數據類型,按照讀寫屬性和類型可分為以下4種:
1.離散量輸入(Discretes Input):1位,只讀;
2.線圈(Coils):1位,讀寫;
3.輸入寄存器(Input Registers ):16位,只讀;
4.保持寄存器(Holding Registers):16位,讀寫。

Modbus協議版本
Modbus協議目前存在用于串口、以太網以及其他支持互聯網協議的網絡的版本。
大多數Modbus設備通信通過串口485物理層進行。
對于串行連接,存在兩個變種,它們在數值數據表示不同和協議細節上略有不同。Modbus RTU是一種緊湊的,采用二進制表示數據的方式,Modbus ASCII是一種人類可讀的,冗長的表示方式。這兩個變種都使用串行通信(serial communication)方式。RTU格式后續的命令/數據帶有循環冗余校驗的校驗和,而ASCII格式采用縱向冗余校驗的校驗和。被配置為RTU變種的節點不會和設置為ASCII變種的節點通信,反之亦然。
對于通過TCP/IP(例如以太網)的連接,存在多個Modbus/TCP變種,這種方式不需要校驗和計算。

對于所有的這三種通信協議在數據模型和功能調用上都是相同的,只有封裝方式是不同的。
Modbus有一個擴展版本ModbusPlus(Modbus+或者MB+),不過此協議是Modicon專有的,和Modbus不同。它需要一個專門的協處理器來處理類似HDLC的高速令牌旋轉。它使用1Mbit/s的雙絞線,并且每個節點都有轉換隔離裝置,是一種采用轉換/邊緣觸發而不是電壓/水平觸發的裝置。連接Modbus Plus到計算機需要特別的接口,通常是支持ISA(SA85),PCI或者PMCIA總線的板卡。
所以當我們提及Modbus協議時,要確定是哪種模式,不同的模式之間區別還是很大的。
Modbus數據幀格式
首先我們要知道一幀正常的MODBUS數據幀包含的內容有:地址域 + 功能碼 + 數據 + 差錯校驗,再者無論是上述哪種協議版本,Modbus幀格式都是一樣的:

主要包括:
1.地址域:即主站要訪問的從站地址,其范圍0~240;
2.功能碼:即主站想要對從站進行何種操作;
3.數據:如果主站的請求是讀數據,那么該“數據”要包含的信息有:從哪里開始讀數據 + 讀多少數據。如果主站的請求是向從站寫數據,那么該“數據”要包含的信息有:從哪里開始寫數據 + 寫多少個字節數據 + 要寫的具體數據;
4.差錯校驗:為了保證數據傳輸的正確性,Modbus協議會在數據幀最后面加上兩個字節的差錯校驗。

894059743
19966773269