兩臺(tái)S7-200通過(guò)Modbus實(shí)現(xiàn)通訊
從站設(shè)置:
需要使用MBUS_INIT、MBUS_SLAVE即可;
MBUS_INIT指令被用于啟用和初始化或禁止Modbus通訊。(這一步在程序的前面,配置類的程序基本都放在程序前面)。在S7-200中,通訊的程序塊調(diào)用都需要設(shè)定完成為,確保通訊的完整性,只有把完整的數(shù)據(jù)格式發(fā)送或接收,才可以實(shí)現(xiàn)通訊,因此完成位是必須要有的。在每次掃描且EN輸入打開時(shí)執(zhí)行該指令。應(yīng)當(dāng)在每次通訊狀態(tài)改變時(shí)執(zhí)行 MBUS_INIT指令。一般程序設(shè)計(jì)僅在首次掃描時(shí)執(zhí)行。功能塊圖如下:
MODE:模式選擇位,1表示將port0指定給Modbus協(xié)議并啟用協(xié)議;0表示將port0指定給PPI;
!!!注意:指定給Modbus后,該端口不可以下載上傳程序,因此在程序設(shè)計(jì)中,可以加入控制位,串聯(lián)給I點(diǎn)即可,例程中未加入,可以自己嘗試;
Addr:從站地址1~247;
Baud:波特率設(shè)置1200、2400、4800、9600、19200、38400、57600或 115200;
Parity:校驗(yàn)位0- 無(wú)校驗(yàn),1- 奇數(shù)校驗(yàn),2- 偶數(shù)校驗(yàn);
Delay:時(shí)延,通過(guò)將指定的毫秒數(shù)增加至標(biāo)準(zhǔn) Modbus信息超時(shí)的方法延長(zhǎng)標(biāo)準(zhǔn)Modbus信息結(jié)束超時(shí)條件。該參數(shù)的典型數(shù)值在有線網(wǎng)絡(luò)上應(yīng)為 0。如果您在使用帶有糾錯(cuò)功能的調(diào)制解調(diào)器,將時(shí)延設(shè)為50至100毫秒的數(shù)值。如果您在使用擴(kuò)展頻譜無(wú)線電,將時(shí)延設(shè)為10至100毫秒的數(shù)值。數(shù)值可以是0至32767毫秒。
MaxIQ:參數(shù)將供 Modbus地址 00xxxx 和 01xxxx 使用的I和Q點(diǎn)數(shù)設(shè)為0至128之間的數(shù)值。數(shù)值0禁止所有向輸入和輸出的讀取。建議使用的MaxIQ數(shù)值是128,該數(shù)值可在S7-200中存取所有的I和Q點(diǎn)。
MaxAI:參數(shù)將供 Modbus地址 03xxx 使用的字輸入(AI)寄存器數(shù)目設(shè)為0至32之間的數(shù)值。數(shù)值0禁止模擬輸入的讀數(shù)。建議使用的 MaxAI數(shù)值如下,這些數(shù)值可允許存取所有的S7-200模擬輸入。0 用于 CPU 221,16 用于 CPU 222,32 用于 CPU 224、 226 和 226XM;
MaxHold:參數(shù)設(shè)定供 Modbus地址04xxx使用的V內(nèi)存中的字保持寄存器數(shù)目。例如,為了允許主設(shè)備存取200字節(jié)的V內(nèi)存,將MaxHold設(shè)為100個(gè)字的數(shù)值(保持寄存器);
HoldStart: 參數(shù)是V內(nèi)存中保持寄存器的起始地址。該數(shù)值一般被設(shè)為VB0,因此 HoldStart 參數(shù)被設(shè)為&VB0(VB0地址)。其他V內(nèi)存地址可指定為保持寄存器的起始地址,以便在項(xiàng)目的其他地方使用VB0。Modbus主設(shè)備可存取V內(nèi)存MaxHold個(gè)字?jǐn)?shù),從 HoldStart開始。
Done:完成標(biāo)志位;
Error:錯(cuò)誤代碼,字節(jié);
MBUS_SLAVE 指令被用于為Modbus主設(shè)備發(fā)出的請(qǐng)求服務(wù),并且必須在每次掃描時(shí)執(zhí)行,以便允許該指令檢查和回答Modbus請(qǐng)求。在每次掃描且EN輸入開啟時(shí)執(zhí)行該指令。MBUS_SLAVE指令無(wú)輸入?yún)?shù)。當(dāng)MBUS_SLAVE指令對(duì)Modbus請(qǐng)求作出應(yīng)答時(shí), " 完成"輸出打開。如果沒(méi)有需要服務(wù)的請(qǐng)求時(shí), "完成"輸出關(guān)閉。"錯(cuò)誤"輸出包含執(zhí)行該指令的結(jié)果。該輸出只有在"完成"打開時(shí)才有效。如果"完成"關(guān)閉,錯(cuò)誤參數(shù)不會(huì)改變。
通俗講法:將程序?qū)懺谶@個(gè)地方就可以了。
測(cè)試Network程序:
主站設(shè)置:
主站的設(shè)置通過(guò)MBUS_CTRL和MBUS_MSG子程序?qū)崿F(xiàn)通訊;
MBUS_CTRL如下
Mode模式:為 1 時(shí),使能 Modbus 協(xié)議功能;為 0 時(shí)恢復(fù)為系統(tǒng) PPI 協(xié)議
Baud波特率:支持的通訊波特率為1200,2400,4800,9600,19200,38400,57600,115200。
Parity校驗(yàn):校驗(yàn)方式選擇
0=無(wú)校驗(yàn)
1=奇較驗(yàn)
2=偶較驗(yàn)
Timeout超時(shí):主站等待從站響應(yīng)的時(shí)間,以毫秒為單位,典型的設(shè)置值為 1000 毫秒(1 秒),允許設(shè)置的范圍為 1 - 32767。
注意: 這個(gè)值必須設(shè)置足夠大以保證從站有時(shí)間響應(yīng)。
Done完成位:初始化完成,此位會(huì)自動(dòng)置1。可以用該位啟動(dòng) MBUS_MSG 讀寫操作(見例程)
Error初始化錯(cuò)誤代碼(只有在 Done 位為1時(shí)有效):
0= 無(wú)錯(cuò)誤
1= 校驗(yàn)選擇非法
2= 波特率選擇非法
3= 模式選擇非法
MBUS_MSG:
EN使能:同一時(shí)刻只能有一個(gè)讀寫功能(即 MBUS_MSG)使能
注意:建議每一個(gè)讀寫功能(即 MBUS_MSG)都用上一個(gè) MBUS_MSG 指令的 Done 完成位來(lái)激活,以保證所有讀寫指令循環(huán)進(jìn)行(見例程)。
First讀寫請(qǐng)求位:每一個(gè)新的讀寫請(qǐng)求必須使用脈沖觸發(fā)
Slave從站地址:可選擇的范圍 1 - 247
RW從站地址:0 = 讀, 1 = 寫
注意:
1. 開關(guān)量輸出和保持寄存器支持讀和寫功能
2. 開關(guān)量輸入和模擬量輸入只支持讀功能
Addr讀寫從站的數(shù)據(jù)地址:
選擇讀寫的數(shù)據(jù)類型
00001 至 0xxxx - 開關(guān)量輸出
10001 至 1xxxx - 開關(guān)量輸入
30001 至 3xxxx - 模擬量輸入
40001 至 4xxxx - 保持寄存器
Count數(shù)據(jù)個(gè)數(shù)
通訊的數(shù)據(jù)個(gè)數(shù)(位或字的個(gè)數(shù))
注意: Modbus主站可讀/寫的最大數(shù)據(jù)量為120個(gè)字(是指每一個(gè) MBUS_MSG 指令)
DataPtr數(shù)據(jù)指針:1. 如果是讀指令,讀回的數(shù)據(jù)放到這個(gè)數(shù)據(jù)區(qū)中
2. 如果是寫指令,要寫出的數(shù)據(jù)放到這個(gè)數(shù)據(jù)區(qū)中
Done完成位讀寫功能完成位
Error錯(cuò)誤代碼:
只有在 Done 位為1時(shí),錯(cuò)誤代碼才有效
0 = 無(wú)錯(cuò)誤
1 = 響應(yīng)校驗(yàn)錯(cuò)誤
2 = 未用
3 = 接收超時(shí)(從站無(wú)響應(yīng))
4 = 請(qǐng)求參數(shù)錯(cuò)誤(slave address, Modbus address, count, RW)
5 = Modbus/自由口未使能
6 = Modbus正在忙于其它請(qǐng)求
7 = 響應(yīng)錯(cuò)誤(響應(yīng)不是請(qǐng)求的操作)
8 = 響應(yīng)CRC校驗(yàn)和錯(cuò)誤
-
101 = 從站不支持請(qǐng)求的功能
102 = 從站不支持?jǐn)?shù)據(jù)地址
103 = 從站不支持此種數(shù)據(jù)類型
104 = 從站設(shè)備故障
105 = 從站接受了信息,但是響應(yīng)被延遲
106 = 從站忙,拒絕了該信息
107 = 從站拒絕了信息
108 = 從站存儲(chǔ)器奇偶錯(cuò)誤
常見的錯(cuò)誤:
- 如果多個(gè) MBUS_MSG 指令同時(shí)使能會(huì)造成 6 號(hào)錯(cuò)誤
- 庫(kù)存儲(chǔ)區(qū)被程序其它地方復(fù)用,有時(shí)也會(huì)造成6 號(hào)錯(cuò)誤
- 從站 delay 參數(shù)設(shè)的時(shí)間過(guò)長(zhǎng)會(huì)造成主站 3 號(hào)錯(cuò)誤
- 從站掉電或不運(yùn)行,網(wǎng)絡(luò)故障都會(huì)造成主站 3 號(hào)錯(cuò)誤
例程: