工業控制已從單機控制走向集中監控、集散控制,如今已進入網絡時代,工業控制器連網也為網絡管理提供了方便。Modbus就是工業控制器的網絡協議中的一種。
丨Modbus通信協議簡介
Modbus協議,首先從字面理解它包括Mod和Bus兩部分,首先它是一種bus,即總線協議,和I2C、SPI類似,總線就意味著有主機,有從機,這些設備在同一條總線上。
Modbus支持單主機,多個從機,最多支持247個從機設備。關于Mod,因為這種協議最早被用在PLC控制器中,準確的說是Modicon公司的PLC控制器,這也是Mod-Bus名稱的由來。
后來Modicon被施耐德(Schneider)收購,Modbus協議廣泛應用在工業控制器、HMI和傳感器上,逐漸被其他廠商所接受,成為了一種主流的通訊協議,用于和外圍設備進行通訊。
Modbus在7層OSI參考模型中屬于第七層應用層,數據鏈路層有兩種:基于標準串口協議和TCP協議,物理層可使用3線232、2線485、4線422,或光纖、網線、無線等多種傳輸介質。
Modbus協議是一種請求/應答方式的交互過程,主機主動發起通訊請求,從機響應主機的請求,從機在沒有收到主機的請求時,不會主動發送數據,從機之間不會進行通訊。
目前關于Modbus比較權威的官方標準文檔有兩個:
1.modbus_application_protocol_specification_v1.1b3.pdf
2.基于Modbus協議的工業自動化網絡規范GB-T19582.1-2008.pdf
*大部分的書籍和網絡資料都是翻譯自這兩篇文檔,文末獲取標準文檔下載方法。
丨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設備通信通過串口EIA-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~247
2.功能碼:即主站想要對從站進行何種操作。
3.數據:如果主站的請求是讀數據,那么該“數據”要包含的信息有:從哪里開始讀數據 + 讀多少數據。如果主站的請求是向從站寫數據,那么該“數據”要包含的信息有:從哪里開始寫數據 + 寫多少個字節數據 + 要寫的具體數據。
4.差錯校驗:為了保證數據傳輸的正確性,Modbus協議會在數據幀最后面加上兩個字節的差錯校驗。
丨Modbus功能碼
Modbus功能碼,是寫在主機請求數據幀中的,決定主機進行讀還是寫操作,是讀線圈、離散量還是寄存器,是寫單個寄存器還是多個寄存器等等,決定主機請求什么類型的數據。
主要包括3類功能碼:公共功能碼、用戶定義功能碼和保留功能碼
1.公共功能碼
·是較好地被定義的功能碼
·保證是唯一的
·MODBUS 組織可改變的
·公開證明的
·具有可用的一致性測試
·MB IETF RFC 中證明的
·包含已被定義的公共指配功能碼和未來使用的未指配保留供功能碼
2.用戶定義功能碼
·有兩個用戶定義功能碼的定義范圍, 即65至72和十進制100至110
·用戶沒有 MODBUS 組織的任何批準就可以選擇和實現一個功能碼
·不能保證被選功能碼的使用是唯一的
·如果用戶要重新設置功能作為一個公共功能碼,那么用戶必須啟動 RFC,以便將改變引入公共分類中,并且指配一個新的公共功能碼。
3.保留功能碼
·一些公司對傳統產品通常使用并且對公共使用是無效的功能碼。
實際最常用的是公共功能碼中的4個功能碼:03/04/06/10
0x03:讀多個保持寄存器
0x04:讀輸入寄存器
0x06:寫單個保持寄存器
0x10:寫多個保持寄存器
因為PLC主要控制的是繼電器觸點,所以在PLC上還會經常對線圈(Coils)進行讀寫。這里需要特別注意的一點是:寫保持寄存器,需要區分0x06寫單個寄存器和0x10寫多個寄存器,而讀保持寄存器不區分讀單個和讀多個,當需要讀單個保持寄存器時,也是使用0x03指令,指定讀取數量為1。
以上就是關于Modbus協議的一些基礎知識,如果您想要獲取*Modbus權威的官方標準文檔,可關注微信公眾號【恩智測控NGI】,并在后臺發送“Modbus協議”即可。
審核編輯:湯梓紅
-
控制器
+關注
關注
112文章
16350瀏覽量
177944 -
通信
+關注
關注
18文章
6030瀏覽量
135975 -
ModBus協議
+關注
關注
3文章
177瀏覽量
33422
發布評論請先 登錄
相關推薦
評論