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