前面的文章我們介紹了Modbus RTU通信中主站S7-1200的配置和編程,今天這篇文章,我們來介紹從站S7-200 Smart的配置及編程。
本例程從站使用S7-200 Smart的CPU ST40,通信端口使用CPU模塊本體的RS485接口,modbus地址為2。
打開編程軟件STEP 7-Micro/WIN SMART,在指令庫中找到文件夾“Modbus_RTU_Slave”,里面有兩個指令:MBUS_INIT和MBUS_SLAVE,如下圖:
指令INIT用來初始化從站的地址、通信的波特率、存儲器地址等相關信息。選中該指令將其拖放到主程序MAIN中,如下圖:
該指令的相關參數含義見下面的表格:
注意:
1)MaxIQ用于設置modbus參數地址0xxxx與1xxxx對應的PLC的輸出Q與輸入I的地址,在S7-200 Smart中,最大可設置為256(不同類型的PLC該值不同)。當設置為0時,將禁用輸入及輸出的讀寫操作;
2)MaxAI用于設置modbus參數地址3xxxx對應的PLC的字輸入寄存器的地址,也就是模擬量輸入(AI)的地址。對于S7-200 Smart緊湊型CPU(CR20s、CR30s、CR40s、CR60s)而言,建議設置為0;其它標準型CPU,建議設置為56;
3)MaxHold用于設置modbus地址4xxxx或4yyyyy對應的PLC的保持存儲區的大小,以字為單位。例如,如果要允許modbus主站訪問2000個字節的從站V存儲區,則MaxHold應設置為1000;
4)MBUS_INIT僅在CPU啟動后的第一個掃描周期執行一次即可;如果更改通信參數,則重新再執行一次;
MBUS_INIT指令的完整代碼如下圖:
接下來我們將MBUS_SLAVE指令添加到主程序塊中,并設置其參數如下圖:
調用STEP 7 - Mciro/WIN SMART Instruction Library(指令庫)需要分配庫指令數據區(Library Memory)。庫指令數據區是相應庫的子程序和中斷程序所要用到的變量存儲空間。
MBUS_SLAVE指令庫需要一個781個字節的全局 V 存儲區。 分配方法如下:
右鍵單擊“程序塊”,在彈出的菜單中單擊“庫存儲器”,如下圖:
在彈出的庫存儲器分配對話框中,選擇“Modbus RTU Slave”,如下圖:
點擊“建議地址”,系統會自動分配可用的V存儲區作為庫存儲區。