基于西門子S7系列PLC的集成MPI和Modbus網(wǎng)絡(luò)應(yīng)用
2008/2/18 11:44:00
[摘 要] 本文以西門子公司S7-300和S7-200系列PLC為例,使用其CPU集成的通信端口實(shí)現(xiàn)MPI網(wǎng)絡(luò)和Modbus網(wǎng)絡(luò)的透明通信,為新建現(xiàn)場(chǎng)總線和現(xiàn)有現(xiàn)場(chǎng)總線的升級(jí)提供一種可靠且成本極低的方案,也為Profibus-DP網(wǎng)絡(luò)和Modbus網(wǎng)絡(luò)在同一系統(tǒng)中的集成提供一種思路。 [關(guān)鍵詞] S7-300 S7-200 MPI Modbus 現(xiàn)場(chǎng)總線 1 引言 Modbus現(xiàn)場(chǎng)總線自1979年誕生以來(lái),已經(jīng)經(jīng)歷了二十多年市場(chǎng)的洗禮。由于其兼容的設(shè)備廣泛,通用性和易用性好,構(gòu)成網(wǎng)絡(luò)的成本低廉,在中小型系統(tǒng)中占據(jù)著大壁江山。MPI網(wǎng)絡(luò)是西門子公司主導(dǎo)的一種網(wǎng)絡(luò),在S7-300,S7-400系列PLC中做為一種標(biāo)準(zhǔn)配置集成于CPU本體上,也可以將S7-200系列PLC方便的納入MPI網(wǎng)絡(luò)中。對(duì)于一個(gè)正在使用西門子S7系列控制器的系統(tǒng)來(lái)說(shuō),如何將已有的Modbus總線集成到S7控制系統(tǒng)中來(lái),是一個(gè)頭痛的問(wèn)題,雖然可以使用S7-300/400的CP通信模板來(lái)實(shí)現(xiàn),但繁瑣的編程和用于購(gòu)買軟硬件的額外支出也是一個(gè)問(wèn)題。本文以S7-200 CPU為網(wǎng)關(guān),實(shí)現(xiàn)了S7-300/400和Modbus從站的透明通信,為解決這些問(wèn)題提供一種可靠且成本極低的方案,也為Profibus-DP網(wǎng)絡(luò)和Modbus網(wǎng)絡(luò)在同一系統(tǒng)中的集成提供一種思路。 2 設(shè)計(jì)方法 2.1硬件構(gòu)成 本文旨在建立一個(gè)由S7-300(CPU312)和一個(gè)S7-200(CPU224XP或CPU226),若干個(gè)支持MODBUS RTU協(xié)議的溫度表構(gòu)成的混合MPI和MODBUS RTU兩種現(xiàn)場(chǎng)總線的通信網(wǎng)絡(luò)。由于S7-200/300/400全系列CPU均支持MPI協(xié)議,且使用CPU模塊上集成的通信口即可完成MPI通信,所以硬件方面不需要額外增加任何其它設(shè)備。在這個(gè)混合通信網(wǎng)絡(luò)中,我們使用S7-200作為網(wǎng)橋,實(shí)現(xiàn)MPI和MODBUS RTU兩種協(xié)議間的互相轉(zhuǎn)換。系統(tǒng)的網(wǎng)絡(luò)構(gòu)成如圖1所示: 溫度表 圖1 網(wǎng)絡(luò)構(gòu)成圖 圖1中紅色線條表示MPI網(wǎng)絡(luò),藍(lán)色線條表示MODBUS網(wǎng)絡(luò),PC僅作為編程器(PG)使用。在MPI網(wǎng)絡(luò)中,S7-200作為MPI從站和作為主站的S7-300或PG通信,但在MODBUS網(wǎng)絡(luò)中,S7-200卻是作為主站和溫度表等從站通信,這是通過(guò)在S7-200的通信口0上加載MODBUS通信協(xié)議,在通信口1上加載MPI通信協(xié)議來(lái)實(shí)現(xiàn)的。 2.2 通信鏈路詳解 (1)PG與PLC間的通信:編程器PG僅可以通過(guò)MPI總線與S7-200,S7-300,TP270進(jìn)行通信。除了上載/下載程序外,還可以在PG上運(yùn)行Winccflexible Runtime運(yùn)行系統(tǒng)來(lái)實(shí)現(xiàn)對(duì)系統(tǒng)的監(jiān)控。注意:此處只能使用PC Adapter來(lái)實(shí)現(xiàn)上述鏈接。示意圖如圖2: 圖2 PG與PLC間的通信 (2)MPI通信鏈路:在MPI通信鏈路中,S7-300作為主站,既可以與從站S7-200通信,又可以接受來(lái)自操作員站TP270的控制。TP270既可以和S7-300通信,也可以和S7-200通信,通過(guò)操作員的輸入,控制S7-300和S7-200。作為MPI從站的S7-200,除了接受TP270的控制,更主要的是將I,Q,V區(qū)域的變量與S7-300共享,以便S7-300進(jìn)行讀寫操作,從而實(shí)現(xiàn)對(duì)MODBUS網(wǎng)絡(luò)數(shù)據(jù)的讀寫。示意圖如圖3: 圖3:MPI通信鏈路示意圖 (3)MODBUS通信鏈路:在MODBUS通信鏈路中,S7-200作為MODBUS主站直接對(duì)MODBUS從站進(jìn)行讀寫,S7-300和TP270并不直接參與通信。作為從站的溫度表也僅僅回應(yīng)S7-200的通訊請(qǐng)求。當(dāng)然,受MODBUS RTU的限制,各溫度表從站之間不能互相通信,而只是回應(yīng)來(lái)自主站S7-200的通訊請(qǐng)求。示意圖如圖4: 圖4:MODBUS通信鏈路 2.3 軟件設(shè)計(jì) (1)MODBUS通信程序:為了在S7-200的通信口0加載MODBUS通信協(xié)議,需要使用通信口0的自由口通信模式,通過(guò)在STEP7-Micro/Win中編寫通信程序,實(shí)現(xiàn)該目的。這里我們使用MODBUS協(xié)議庫(kù)來(lái)實(shí)現(xiàn)該功能。以讀取溫度表從站的當(dāng)前值和設(shè)定值,并寫設(shè)定值為例,保持寄存器40001和40002分別為溫度當(dāng)前值和設(shè)定值。我們將程序分為兩部分,一部分是讀寫溫度表的子程序(后文稱為加熱控制子程序),另一部分是主程序。 (A) 首先需要在主程序中使用SM0.0調(diào)用加熱控制子程序SBR(Heating_Control),如圖5所示: 圖5:在主程序中調(diào)用加熱控制子程序 (B) 其次在加熱控制子程序中使用MBUS_CTRL對(duì)S7-200的通信口0進(jìn)行通信初始化,設(shè)置通信參數(shù)等,如圖6所示: 圖6:對(duì)通信口0進(jìn)行初始化的程序 MBUS_CTRL的幾個(gè)主要變量設(shè)置意義如下: Mode: 該變量的數(shù)據(jù)類型為BOOL型,當(dāng)BOOL值為1時(shí),通信口0用于MODBUS通信, 當(dāng)BOOL值為0時(shí),通信口0用于PPI通信。 Baud:該變量的數(shù)據(jù)類型為DWORD型,用來(lái)設(shè)置MODBUS網(wǎng)絡(luò)的通信速率,可設(shè)置范圍為1200bps到115200bps。 Parity:該變量類型為BYTE型,用來(lái)設(shè)置奇偶校驗(yàn)的類型,可設(shè)置為0,1或2。0表示無(wú)奇偶校驗(yàn),1表示奇校驗(yàn),2表示偶校驗(yàn)。 Timeout:該變量為INT型,表示通信超時(shí)的時(shí)間值,單位為毫秒。 Done:該變量為BOOL型,指示初始化完成,正常完成后會(huì)一直置位。 Error:錯(cuò)誤狀態(tài),指示通信初始化時(shí)的狀態(tài)。該變量類型為BYTE型。 由于Mode變量使用了SM0.0,所以當(dāng)S7-200處于運(yùn)行狀態(tài)時(shí),通信口0將一直用于MODBUS通信,不能用于和STEP 7-Micro/Win通信,即不能用于上載/下載程序,但通信口1不受影響,可用于和STEP 7-Micro/Win通信。 (C) 最后在加熱控制子程序中使用MBUS_MSG實(shí)現(xiàn)對(duì)MODBUS從站的讀寫。以讀取4號(hào)溫度表從站的當(dāng)前值和設(shè)定值為例,程序如圖7所示: 圖7:讀取4號(hào)從站的當(dāng)前值和設(shè)定值 MBUS_CTRL的幾個(gè)主要變量設(shè)置意義如下: First:BOOL型變量。表示消息類型。為1時(shí)表示是新消息,為0時(shí)表示是重復(fù)的消息。 Slave:從站地址號(hào)。因?yàn)槲覀円x取4號(hào)溫度表的值,所以這里設(shè)定為4,其設(shè)置范圍為0——247(在MODBUS規(guī)約中,地址0表示廣播地址)。該變量的數(shù)據(jù)類型為BYTE型。 RW:BYTE型變量。為0時(shí)表示該消息是讀取從站寄存器的請(qǐng)求,為1時(shí)表示該消息是寫從站寄存器的請(qǐng)求。因?yàn)槭亲x取4號(hào)從站的寄存器,所以此處設(shè)置為0。 Addr:DWORD型變量。表示要讀/寫的從站寄存器的開(kāi)始地址。因?yàn)楸3旨拇嫫?0001和40002分別為溫度當(dāng)前值和設(shè)定值,所以此處設(shè)置為40001。 Count:INT型變量。表示要讀/寫的寄存器數(shù)量。溫度當(dāng)前值和設(shè)定值占用了兩個(gè)連續(xù)的寄存器,所以此處設(shè)置為2。其設(shè)置范圍為:1到120個(gè)WORD或1到1920個(gè)BIT。 DataPtr:DWORD型變量。對(duì)于讀從站寄存器的操作,該參數(shù)表示將讀取出來(lái)的參數(shù)存放在哪里;對(duì)于寫從站寄存器的操作,該參數(shù)表示將哪里的數(shù)據(jù)寫入到從站寄存器。如果讀取的從站寄存器是兩個(gè)或更多個(gè),則從DataPtr指定的連續(xù)個(gè)內(nèi)存區(qū)域?qū)⒈徽加?。?duì)于本例中DataPtr=&VB304,Count=2的設(shè)置,表示從站的40001中的值將被存放到S7-200的VW304,40002中的值將被存放到S7-200的VW306。 Done:完成標(biāo)志。BOOL型變量。為1時(shí)表示已經(jīng)完成,為0時(shí)表示任務(wù)繁忙中。 Error:錯(cuò)誤狀態(tài)。BYTE型變量。為0時(shí)表示無(wú)錯(cuò)誤。 需要注意:只有在復(fù)位MBUS_MSG的EN位后,剩余的讀寫操作才能順利完成。所以在MBUS-MSG的下一個(gè)網(wǎng)絡(luò)中,我們利用Done標(biāo)志位來(lái)復(fù)位EN位,為后面的通信做好準(zhǔn)備。 (D) 對(duì)4號(hào)從站的寄存器進(jìn)行寫操作,同樣使用MBUS-MSG,如圖8所示: 圖8 寫4號(hào)從站的設(shè)定值 圖8中我們將S7-200的VW466中的值寫入到了4號(hào)站的40002。 到這里為止,已經(jīng)將MODBUS從站的值和S7-200的V區(qū)域數(shù)據(jù)進(jìn)行了交換,接下來(lái)進(jìn)行S7-200和TP270的數(shù)據(jù)交換。 (2)S7-200和TP270的MPI通信程序 通過(guò)在Winccflexible中的組態(tài),可以輕松實(shí)現(xiàn)在TP270上讀寫S7-200中(MODBUS從站寄存器)的數(shù)據(jù)。打開(kāi)Winccflexible,在“通訊----連接”中建立兩個(gè)連接,分別命名為“S7-200”和“S7-300”,為“S7-200”選擇驅(qū)動(dòng)程序SIMATIC S7 200,為“S7-300”選擇驅(qū)動(dòng)程序SIMATIC S7 300/400,并設(shè)置在線模式為“開(kāi)”,為“S7-200”設(shè)置地址為3,為“S7-300”設(shè)置地址為“2”,此處的地址為MPI地址。詳細(xì)設(shè)置如圖9和圖10所示: 圖9 S7-200和TP270的通信設(shè)置 圖10 S7-300和TP270的通信設(shè)置 要在屏幕上顯示溫度表的當(dāng)前值和設(shè)定值,只需要在畫面中放置對(duì)應(yīng)S7-200的V區(qū)域的輸出域即可。新建一畫面,并在其中放置一輸出域,設(shè)置該輸出域的屬性如圖11所示: 圖11 輸出域的設(shè)置 對(duì)于變量VW304的設(shè)置,如圖12,圖13所示: 圖12 變量VW304的常規(guī)設(shè)置 圖13 變量VW304的尋址設(shè)置 要修改溫度表的設(shè)置值,需要在畫面中設(shè)置一輸入域,設(shè)置其地址為VW466,然后由操作員在屏幕
提交
查看更多評(píng)論
其他資訊
SCON-CB系列控制器 使用說(shuō)明書
S7-200 CPU集成模擬量I/O在溫度測(cè)量中的應(yīng)用
基于觸摸屏的遠(yuǎn)程控制的探討與實(shí)現(xiàn)
在三菱GT Designer中制作動(dòng)畫