S7-200兩個PLC互相通信,Step7軟件的使用,進行主站和從站直接的通訊。以下主要內容為從Step7 軟件里面的庫模塊是使用就行介紹。
一、使用Modbus協議庫
二、Modbus的地址
Modbus地址通常是包含數據類型和偏移量的5個字符值。第一個字符確定數據類型,后面四個字符選擇數據類型內的正確數值。
(1)主站尋址Modbus主站指令可將地址映射到正確功能,然后發送至從站設備。Modbus主站指令支持下列Modbus地址:00001到09999是離散輸出(線圈);10001到19999是離散輸入(觸點);30001到39999是輸入寄存器(通常是模擬量輸入);40001到49999是保持寄存器。所有Modbus地址都是基于1,即從地址1開始第一個數據值。有效地址范圍取決于從站設備。不同的從站設備將支持不同的數據類型和地址范圍。
(2)從站尋址Modbus主站設備將地址映射到正確功能。Modbus從站指令支持以下地址:00001至00128是實際輸出,對應于Q0.0-Q15.7;10001至10128是實際輸入,對應于I0.0-I15.7;30001至30032是模擬輸入寄存器,對應于AIW0至AIW62;40001至04XXXX是保持寄存器,對應于V區。所有Modbus地址都是從1開始編號的。
示例:
三、相關指令介紹
(一)做主站使用Modbus master庫
(1)初始化主設備指令MBUS_CTRL用于S7-200端口0(或用于端口1的MBUS_CTRL_P1指令)可初始化、監視或禁用Modbus通信。
EN:使能端,有信號則該指令執行
Mode:輸入的值用于選擇通信協議。輸入值為 1 時,將 CPU 端口分配給 Modbus 協議并啟用該協議。輸入值為 0 時,將 CPU 端口分配給 PPI 系統協議并禁用 Modbus 協議。
Baud:波特率
Parity:設置為與 Modbus 從站設備的奇偶校驗相匹配。所有設置使用一個起始位和一個停止位。允許的值如下:0(無奇偶校驗)、1(奇校驗)和 2(偶校驗)。
Port:設置物理通信端口(0 = CPU 中集成的 RS-485,1 = 可選 CM01 信號板上的 RS-485 或 RS-232)。
Timerout:設為等待從站做出響應的毫秒數。“超時”(Timeout) 值可以設置為 1 ms 到 32767 ms 之間的任何值。典型值是 1000 ms (1 s)。“超時”(Timeout) 參數應設置得足夠大,以便從站設備有時間在所選的波特率下做出響應。
Done:初始化完成標志,成功初始化后置1.數據類型為布爾
error:初始化錯誤代碼。數據類型為字節
通過在每次掃描時調用 MBUS_CTRL 來初始化和監視 Modbus 主站。Modbus 主站設為 9.6 Kbps,無奇偶校驗。從站設備允許在 1000 毫秒(1 秒)內進行響應。
(2)MBUS_MSG指令(或用于端口1的MBUS_MSG_P1)用于啟動對Modbus從站的請求,并處理應答。當EN輸入和“首次”輸入打開時,MBUS_MSG指令啟動對Modbus從站的請求。發送請求、等待應答、并處理應答。EN輸入必須打開,以啟用請求的發送,并保持打開,直到“完成”位被置位。
En:使能端
First:在有新請求發送時打開。
Slave:從站地址
RW:0-讀,1-寫。
Addr:modbus起始地址。
Count:讀取或寫入的數據元素的數量
DataPtr:讀取或寫入請求相關數據的間接地址
該指令會對從站 2 的 4 個保持寄存器執行寫入 (RW = 1) 操作。從 CPU 中的 VB100-VB107(4 個字)獲取寫數據,然后寫入到 Modbus 從站中的地址 40001 - 40004。
(二)做從站使用 Modbus Slave庫
(1)MBUS_INIT指令用于啟用、初始化或禁止Modbus通信。在使用MBUS_SLAVE指令之前,必須正確執行MBUS_INIT指令
EN:使能端
Mode:模式 0-禁用Modbus 1-啟用Modbus
Addr:設備地址
Baud:波特率
Parity:校驗位 0-無校驗 1-奇校驗 2-偶校驗
Port:端口號
Delay:延時 通過使標準 Modbus 信息超時時間增加分配的毫秒數來延遲標準 Modbus 信息結束超時條件。在有線網絡上運行時,該參數的典型值應為 0。如果使用具有糾錯功能的調制解調器,則將延時設置為 50至 100 ms 之間的值。如果使用擴頻無線通信,則將延時設置為 10 至 100 ms 之間的值。“延時”(Delay) 值可以是 0 至 32767 ms。
MaxIQ:用于設置 Modbus 地址 0xxxx 和 1xxxx 可用的 I 和 Q 點數,取值范圍是 0 至 256。值為 0 時,將禁用所有對輸入和輸出的讀寫操作。建議將 MaxIQ 值設置為 256。
MAXAI:用于設置 Modbus 地址 3xxxx 可用的字輸入 (AI) 寄存器數,取值范圍是 0 至 56。值為 0 時,將禁止讀取模擬量輸入。
MAXHold:用于設置 Modbus 地址 4xxxx 或 4yyyyy 可訪問的 V 存儲器中的字保持寄存器數。
HoldStart:是 V 存儲器中保持寄存器的起始地址。該值通常設置為 VB0,因此參數 HoldStart 設置為 &VB0(地址 VB0)。
Done:初始化完成標志,成功初始化后置1.數據類型為布爾
Error:初始化錯誤代碼。數據類型為字節
(2)MBUS_SLAVE指令用于為Modbus主設備發出的請求服務,并且必須在每次掃描時執行,以便允許該指令檢查和回答Modbus請求。
提示:還要對 在調用了Modbus指令庫的指令后,還要對庫存儲區進行分配,這是非常重要的,否則即使編寫程序沒有語法錯誤,程序編譯后也會顯示至少幾十個錯誤。分配庫存儲區的方法如下:先選中“程序塊”,再單擊右鍵,彈出快捷菜單,并單擊“庫存儲區”,如圖4-4所示。再在“庫存儲區”中填寫Modbus指令所需要用到的存儲區的起始地址。