mpi(多點(diǎn)接口)是西門子內(nèi)部使用的通信協(xié)議,物理層為rs-485。通過mpi網(wǎng)絡(luò)的s7基本通信,s7-300可以用系統(tǒng)功能x_get和x_put來讀、寫s7-200的存儲(chǔ)區(qū),最多可讀、寫76字節(jié)的數(shù)據(jù),s7-200不需要編寫通信程序。其優(yōu)點(diǎn)是使用plc自帶的rs-485通信接口,不需要增加通信用的硬件,編程簡(jiǎn)單,容易實(shí)現(xiàn)。
1.通信參數(shù)的設(shè)置
用系統(tǒng)塊設(shè)置cpu 224在mpi網(wǎng)絡(luò)中的站地址為3。為了方便下載和監(jiān)控,將s7-200、s7-300和計(jì)算機(jī)的通信速率均設(shè)置為19.2 kbit/s。需要將系統(tǒng)塊下載到cpu,設(shè)置的參數(shù)才會(huì)起作用。
組態(tài)時(shí)將cpu 315-2dp連接到mpi網(wǎng)絡(luò)上,設(shè)置mpi站地址為2。將設(shè)置的參數(shù)下載到cpu 315-2dp。
2.cpu 315-2dp讀寫cpu 224的v區(qū)的編程#p#分頁(yè)標(biāo)題#e#
在cpu 315-2dp的ob35中調(diào)用sfc 68“x_put”,將本站的db 1的76字節(jié)數(shù)據(jù)發(fā)送到通信伙伴的db 1的dbb100~dbb175,即cpu 224的vb100~vb175。調(diào)用sfc 67“x_get”,讀取cpu 224的vb200~vb275(即db 1的dbb200~dbb275)中的數(shù)據(jù),將它們存放到db 2。執(zhí)行ob35的時(shí)間間隔為默認(rèn)的100ms。
下面是cpu 315-2dp的循環(huán)中斷組織塊ob35的程序:
程序段 1:將本站的db1中的數(shù)據(jù)寫入cpu 224的#p#分頁(yè)標(biāo)題#e#v區(qū)
call x_put
req :=true
cont :=true
dest_id :=w#16#3 //s7-200的mpi地址
var_addr:=p#db1.dbx100.0 byte 76 //s7-200要寫入數(shù)據(jù)的vb100~vb175
sd :=p#db1.dbx0.0 byte 76 //存放本站要發(fā)送的數(shù)據(jù)的地址區(qū)
ret_val:=mw2
busy :=m0.1
程序段 2:讀取cpu 224的v區(qū)的數(shù)據(jù),保存到本站的db 2
call x_get
req :=true
cont :=true
dest_id :=w#16#3
#p#分頁(yè)標(biāo)題#e# var_addr:= p#db1.dbx200.0 byte 76 //要讀取s7-200的vb200~vb275
ret_val :=mw4
busy :=m0.3
rd := p#db2.dbx0.0 byte 76 //保存讀取的數(shù)據(jù)的地址區(qū)
為了驗(yàn)證通信是否實(shí)現(xiàn),在初始化程序ob100將數(shù)據(jù)塊db 1的76字節(jié)數(shù)據(jù)發(fā)送區(qū)的字預(yù)置為w#16#3333,將db 2的76字節(jié)數(shù)據(jù)接收區(qū)復(fù)位為0。
3.cpu 224的程序
為了驗(yàn)證通信是否實(shí)現(xiàn),在cpu 224的ob1中,在第一個(gè)掃描周期將發(fā)送數(shù)據(jù)區(qū)vw204~vw274預(yù)置為16#2222,將接收數(shù)據(jù)區(qū)vw100~vw174清零。
ld sm0.1
fill #p#分頁(yè)標(biāo)題#e#16#2222, vw204, 38
fill 16#0, vw100, 38
可以用cpu 315-2dp的變量表和cpu 224的狀態(tài)表來監(jiān)視參與通信的存儲(chǔ)區(qū)。
我第1次做實(shí)驗(yàn)的時(shí)候,很順利地一下就成功了。總的感覺是只要組態(tài)和編程沒有問題,通信很容易實(shí)現(xiàn)。