s7-1200系列cpu本體上都集成以太網(wǎng)接口,其中cpu1211c、1212c和1214c都具有一個(gè)以太網(wǎng)rj45接口,而cpu 1215c、1217c提供了兩個(gè)以太網(wǎng)r45接口。s7-1200系類plc可以通過以太網(wǎng)接口直接或者通過交換機(jī)與其他設(shè)備進(jìn)行通信。當(dāng)一臺(tái)s7-1200plc需要其它plc或觸摸屏或變頻器通信時(shí),這時(shí)只需要直接連接即可。當(dāng)兩臺(tái)及以上的設(shè)備需要通信時(shí),此時(shí)需要交換機(jī)進(jìn)行網(wǎng)絡(luò)連接。以太網(wǎng)通信可以分為多種通信方法,比如s7通信、ouc通信、modbus-tcp通信和frofient io通信等。其中,s7通信是眾多通信方式中最簡單、最常用的一種通信方法。s7-1200plc選擇s7通信時(shí),需要在博圖軟件本地(客服端)cpu調(diào)用put和get兩個(gè)指令,put指令的作用是寫入數(shù)據(jù)到伙伴(服務(wù)端)cpu中,get指令的作用是從伙伴(服務(wù)端)cpu中讀取數(shù)據(jù)。
put和get指令在指令工具欄中—“通信”—“s7通信”中,兩個(gè)指令具體含義如下:get從遠(yuǎn)程(伙伴、服務(wù)端)cpu讀取數(shù)據(jù),put向遠(yuǎn)程(伙伴、服務(wù)端)cpu寫入數(shù)據(jù)。

使用get指令從遠(yuǎn)程cpu中讀取數(shù)據(jù),遠(yuǎn)程cpu可處于run或stop模式下。使用put指令將數(shù)據(jù)寫入遠(yuǎn)程cpu,遠(yuǎn)程cpu可處于run或stop模式下。put和get指令各個(gè)引腳含義如下表所示。使用put指令時(shí)需要注意幾個(gè)問題:id在進(jìn)行s7通信連接時(shí)會(huì)自動(dòng)生成,為十六進(jìn)制數(shù),比如w#16#100。指向服務(wù)端cpu寫入?yún)^(qū)域的指針addr_x,如果寫入?yún)^(qū)域?yàn)閿?shù)據(jù)塊,則該數(shù)據(jù)塊必須為標(biāo)準(zhǔn)訪問的數(shù)據(jù)塊,不支持優(yōu)化的塊訪問。sd_x指向客戶端cpu上包含要發(fā)送數(shù)據(jù)的區(qū)域。通常情況下addr_x和sd_x均為指針形式。指針變量是用來存放內(nèi)存地址的變量。在put/get指令中addr_x和sd_x寫法,比如p#m50.0 byte 5,其含義為指向以地址m50.0開始,長度為5個(gè)byte的存儲(chǔ)空間,即從mb50到mb54。比p#db1.dbx0.0 byte 10的含義為指向以數(shù)據(jù)塊db1中dbx0.0開始,長度為10個(gè)byte的存儲(chǔ)空間,即db1.dbb0到db1.dbb9。指向服務(wù)端cpu寫入?yún)^(qū)域的指針addr_x,如果寫入?yún)^(qū)域?yàn)閿?shù)據(jù)塊,則該數(shù)據(jù)塊必須為標(biāo)準(zhǔn)訪問的數(shù)據(jù)塊,不支持優(yōu)化的塊訪問。指向客戶端cpu發(fā)送區(qū)域的指針sd_x,本地?cái)?shù)據(jù)區(qū)域可支持優(yōu)化訪問或標(biāo)準(zhǔn)訪問。通信伙伴cpu為s7-1200//1500cpu系列,需要在伙伴cpu屬性的“防護(hù)與安全”—“連接機(jī)制”中激活“允許來自遠(yuǎn)程對(duì)象的put/get通信訪問”。
使用get指令時(shí)需要注意幾個(gè)問題:id在進(jìn)行s7通信連接時(shí)會(huì)自動(dòng)生成,為十六進(jìn)制數(shù),比如w#16#100。指向服務(wù)端cpu寫入?yún)^(qū)域的指針addr_x,如果寫入?yún)^(qū)域?yàn)閿?shù)據(jù)塊,則該數(shù)據(jù)塊必須為標(biāo)準(zhǔn)訪問的數(shù)據(jù)塊,不支持優(yōu)化的塊訪問。指向客戶端cpu發(fā)送區(qū)域的指針rd_x,本地?cái)?shù)據(jù)區(qū)域可支持優(yōu)化訪問或標(biāo)準(zhǔn)訪問。服務(wù)端cpu為s7-1200/1500cpu系列,需要在伙伴cpu屬性的“防護(hù)與安全”→“連接機(jī)制”中激活“允許來自遠(yuǎn)程對(duì)象的put/get通信訪問。

下面以兩個(gè)s7-1200 cpu1212c之間s7通信,傳遞數(shù)據(jù)為例,介紹s7通信的應(yīng)用。
第一步,設(shè)備組態(tài)
在博圖軟件中新建項(xiàng)目,添加兩個(gè)s7-1200 cpu1212c設(shè)備組態(tài)。修改其以太網(wǎng)地址,將plc_1以太網(wǎng)地址修改為192.168.0.1,將plc_2以太網(wǎng)地址修改為192.168.0.2。在plc_1啟用時(shí)鐘存儲(chǔ)器字節(jié)。
第二步,s7組態(tài)連接。

打開網(wǎng)絡(luò)視圖,在網(wǎng)絡(luò)視圖中單擊“連接”按鈕,按鈕右側(cè)下拉選項(xiàng)中選擇“s7連接”,將plc_1與plc_2連接起來。
第三步,編寫程序
在plc_1主程序ob1中,調(diào)用“put”指令,并對(duì)其進(jìn)行組態(tài)設(shè)置。在伙伴欄選擇
“plc_2[cpu 1212c dc/dc/dc]”,下方端口、子網(wǎng)、子網(wǎng)名稱、地址、連接id與連接名稱等均會(huì)自動(dòng)生成相關(guān)內(nèi)容。因plc_1為客戶端,應(yīng)勾選“主動(dòng)建立連接”。

put指令各個(gè)端口連接如下圖所示。圖中指令req選擇m0.5,m0.5是1hz的時(shí)鐘存儲(chǔ)器字節(jié),由于req是上升沿有效,則實(shí)現(xiàn)功能為每秒完成一次從plc_1到plc_2數(shù)據(jù)傳輸。id是自動(dòng)生成的。addr_1和sd_1所連接指針都為p#m100.0 byte 1,p#m100.0 byte 1的含義為指向從m100.0開始,長度為1個(gè)byte的空間,即mb100。下面程序段實(shí)現(xiàn)的功能為每秒將客戶端地址mb100中數(shù)據(jù)就傳遞到服務(wù)端地址mb100中。

在cpu 1的主程序ob1中,調(diào)用“get”指令,并對(duì)其進(jìn)行組態(tài)設(shè)置。在伙伴欄選擇“plc_2[cpu 1212c dc/dc/dc]”,下方端口、子網(wǎng)、子網(wǎng)名稱、地址、連接id與連接名稱等均會(huì)自動(dòng)生成相關(guān)內(nèi)容。因plc_1為客戶端,應(yīng)勾選“主動(dòng)建立連接”。

get指令各個(gè)端口連接如下圖所示。圖中指令req選擇m0.5,m0.5是1hz的時(shí)鐘存儲(chǔ)器字節(jié),由于req是上升沿有效,則實(shí)現(xiàn)功能為每秒完成一次從plc_1到plc_2數(shù)據(jù)傳輸。id是自動(dòng)生成的。addr_1和sd_1所連接指針都為p#m10.0 byte 1,p#m10.0 byte 1的含義為指向從m10.0開始,長度為1個(gè)byte的空間,即mb10。下面程序段實(shí)現(xiàn)的功能為每秒讀取伙伴cpu地址mb10中數(shù)據(jù)存儲(chǔ)在本地cpu地址mb10中。

下面程序段實(shí)現(xiàn)的功能為,將mb20中數(shù)據(jù)傳遞給mb100。

上面三段程序都是在plc_1主程序中編寫,下面在plc_2主程序中編寫下面程序。實(shí)現(xiàn)的功能為,將mb30中數(shù)據(jù)傳遞給mb10。

第四步,下載組態(tài)和程序
兩個(gè)cpu的組態(tài)配置與編程均已完成,分別將其下載至對(duì)應(yīng)的仿真plc中。將兩個(gè)cpu轉(zhuǎn)到在線模式并打開監(jiān)控。在plc_1程序中將mb100設(shè)置為16#5,經(jīng)過put指令,將plc_1中mb100存儲(chǔ)數(shù)據(jù)傳遞到plc_2中mb100,從下圖中可知,plc_2中mb100為16#5。

在plc_2程序中將mb10設(shè)置為,經(jīng)過get指令,讀取plc_2中mb10存儲(chǔ)數(shù)據(jù)存儲(chǔ)到plc_1中mb10,從下圖中可知,plc_1中mb10為16#5。

通過上述分析可知,兩個(gè)plc之間成功完成s7通信連接,是put/get指令數(shù)據(jù)訪問成功的關(guān)鍵。建立s7連接成功后,就可以通過put指令發(fā)送數(shù)據(jù)給伙伴cpu,通過get指令獲取伙伴cpu的數(shù)據(jù)。










