1、Modbus通信概述
Modbus協議作為一個標準的工業協議,其最簡單的串行通信部分僅規定了在串行線路的基本數據傳輸格式,在OSI七層協議模型中只到1層和2層。Modbus具有兩種串行傳輸模式,ASCII和RTU。它們定義了數據如何打包、解碼的不同方式。支持Modbus協議的設備一般都支持RTU格式。
Modbus是一種單主站的主/從通信模式。Modbus網絡上只能有一個主站存在,主站在Modbus網絡上沒有地址,從站的地址范圍為0-247,其中0為廣播地址。
Modbus通信標準協議可以通過各種傳輸方式傳播,如RS232C、RS485、光纖、無線電等。詳細的協議和規范,請訪問Modbus組織的網站:http://www.modbus.org
1.1 Modbus主站尋址
Modbus數據區地址為五到六位數,包含了數據類型和地址值。
不同的Modbus數據區地址通過不同的功能碼來讀取或者寫入,Modbus數據區地址定義如下:
◆00001至09999是離散量輸出(線圈)
◆10001至19999是離散量輸入(觸點)
◆30001至39999是輸入寄存器(通常是模擬量輸入)
◆40001至49999和400001至465535是保持寄存器
所有Modbus數據區地址均從xxxx1(或者xxxxx1)開始,不同的設備支持不同的數據類型和地址范圍。
1.2 Modbus主站讀取和寫入功能
Modbus主站指令使用Modbus數據區地址讀取或寫入Modbus數據,相應的從站設備必須要支持對應的功能碼,如表1所示。
表1 Modbus數據區地址對應Modbus從站需要支持的功能碼
S7-200 SMART CPU通過串行端口進行Modbus RTU通信,借助STEP 7?Micro/WIN SMART軟件中的庫指令,簡化了與Modbus設備的通信。
2、Modbus RTU庫
圖1 西門子標準指令庫(STEP 7-Micro/WIN SMART)
STEP 7-Micro/WIN SMART支持主站和從站設備通過RS485(集成端口0和可選信號板端口1)和RS232(僅限可選信號板端口1)進行Modbus通信, S7-200 SMART最多可以配置2個Modbus RTU主站。軟件本身集成了指令庫,如圖1所示。
3、Modbus RTU主站功能編程
調用Modbus RTU主站初始化和控制子程序。
圖2 調用主站初始化MBUS_CTRL指令
①使用SM0.0調用MBUS_CTRL完成主站的初始化,并啟動其功能控制:
表2 MBUS_CTRL指令參數意義
②調用Modbus RTU主站讀寫子程序MBUS_MSG,發送一個Modbus請求:
圖3 調用主站讀寫子程序MBUS_MSG指令
表3 MBUS_MSG指令參數意義
③庫存儲器分配
Modbus Master指令庫需要一個286個字節的全局V存儲區。
調用STEP 7-Micro/WIN SMART指令庫需要分配庫指令數據區。該數據區是相應庫的子程序和中斷程序所要用到的變量存儲空間。
如果在編程時不分配庫指令數據區,編譯時會產生許多相同的錯誤。
操作步驟:
a、在指令樹的Project(項目)中,以鼠標右鍵單擊Program Block(程序塊),在彈出的快捷菜單中選擇Library Memory(庫存儲器…)。如圖4所示:
圖4 “庫存儲器”按鈕
b、在彈出的選項卡中設置庫指令數據區,如圖5所示
圖5 庫存儲器地址分配
4、注意事項
①S7 200 SMART CPU一共支持兩個Modbus RTU主站。如果您在項目中使用兩個主站,則要確保MBUS_CTRL/MBUS_MSG和MB_CTRL2/ MBUS_MSG2成對使用,并采用不同的端口號做區分,如果只有一個主站則使用任意一對指令均可以。
②S7-200 SMART CPU支持的Modbus消息為每條最多240個字節(1920位或120個寄存器)的數據。
③通常Modbus協議的保持寄存器范圍在40001到49999之間,這個范圍對于多數應用來說已經足夠了,但有些Modbus從站保持寄存器區的地址會超出該范圍,此時主站協議庫也支持400001到465536的地址范圍,如果Modbus從站地址在該范圍內,只需在調用MBUS_MSG / MBUS_MSG2時給Addr參數賦相應的值即可,如416768。
④庫存儲器分配,可以自定義起始地址,或者使用 “建議地址” 設置數據區,但要注意應當確保該地址不與其他任何已使用的數據區重疊、沖突,這些數據區既包括一般尋址,還應該考慮間接尋址訪問的地址。
⑤Modbus數據區地址和S7-200 SMART存儲區地址的映射舉例。