s7-1200系列cpu本體上都集成以太網接口,其中cpu1211c、1212c和1214c都具有一個以太網rj45接口,而cpu 1215c、1217c提供了兩個以太網r45接口。s7-1200系類plc可以通過以太網接口直接或者通過交換機與其他設備進行通信。當一臺s7-1200plc需要其它plc或觸摸屏或變頻器通信時,這時只需要直接連接即可。當兩臺及以上的設備需要通信時,此時需要交換機進行網絡連接。以太網通信可以分為多種通信方法,比如s7通信、ouc通信、modbus-tcp通信和frofient io通信等。其中,s7通信是眾多通信方式中最簡單、最常用的一種通信方法。s7-1200plc選擇s7通信時,需要在博圖軟件本地(客服端)cpu調用put和get兩個指令,put指令的作用是寫入數據到伙伴(服務端)cpu中,get指令的作用是從伙伴(服務端)cpu中讀取數據。
put和get指令在指令工具欄中—“通信”—“s7通信”中,兩個指令具體含義如下:get從遠程(伙伴、服務端)cpu讀取數據,put向遠程(伙伴、服務端)cpu寫入數據。
使用get指令從遠程cpu中讀取數據,遠程cpu可處于run或stop模式下。使用put指令將數據寫入遠程cpu,遠程cpu可處于run或stop模式下。put和get指令各個引腳含義如下表所示。使用put指令時需要注意幾個問題:id在進行s7通信連接時會自動生成,為十六進制數,比如w#16#100。指向服務端cpu寫入區域的指針addr_x,如果寫入區域為數據塊,則該數據塊必須為標準訪問的數據塊,不支持優化的塊訪問。sd_x指向客戶端cpu上包含要發送數據的區域。通常情況下addr_x和sd_x均為指針形式。指針變量是用來存放內存地址的變量。在put/get指令中addr_x和sd_x寫法,比如p#m50.0 byte 5,其含義為指向以地址m50.0開始,長度為5個byte的存儲空間,即從mb50到mb54。比p#db1.dbx0.0 byte 10的含義為指向以數據塊db1中dbx0.0開始,長度為10個byte的存儲空間,即db1.dbb0到db1.dbb9。指向服務端cpu寫入區域的指針addr_x,如果寫入區域為數據塊,則該數據塊必須為標準訪問的數據塊,不支持優化的塊訪問。指向客戶端cpu發送區域的指針sd_x,本地數據區域可支持優化訪問或標準訪問。通信伙伴cpu為s7-1200//1500cpu系列,需要在伙伴cpu屬性的“防護與安全”—“連接機制”中激活“允許來自遠程對象的put/get通信訪問”。
使用get指令時需要注意幾個問題:id在進行s7通信連接時會自動生成,為十六進制數,比如w#16#100。指向服務端cpu寫入區域的指針addr_x,如果寫入區域為數據塊,則該數據塊必須為標準訪問的數據塊,不支持優化的塊訪問。指向客戶端cpu發送區域的指針rd_x,本地數據區域可支持優化訪問或標準訪問。服務端cpu為s7-1200/1500cpu系列,需要在伙伴cpu屬性的“防護與安全”→“連接機制”中激活“允許來自遠程對象的put/get通信訪問。
下面以兩個s7-1200 cpu1212c之間s7通信,傳遞數據為例,介紹s7通信的應用。
第一步,設備組態
在博圖軟件中新建項目,添加兩個s7-1200 cpu1212c設備組態。修改其以太網地址,將plc_1以太網地址修改為192.168.0.1,將plc_2以太網地址修改為192.168.0.2。在plc_1啟用時鐘存儲器字節。
第二步,s7組態連接。
打開網絡視圖,在網絡視圖中單擊“連接”按鈕,按鈕右側下拉選項中選擇“s7連接”,將plc_1與plc_2連接起來。
第三步,編寫程序
在plc_1主程序ob1中,調用“put”指令,并對其進行組態設置。在伙伴欄選擇
“plc_2[cpu 1212c dc/dc/dc]”,下方端口、子網、子網名稱、地址、連接id與連接名稱等均會自動生成相關內容。因plc_1為客戶端,應勾選“主動建立連接”。
put指令各個端口連接如下圖所示。圖中指令req選擇m0.5,m0.5是1hz的時鐘存儲器字節,由于req是上升沿有效,則實現功能為每秒完成一次從plc_1到plc_2數據傳輸。id是自動生成的。addr_1和sd_1所連接指針都為p#m100.0 byte 1,p#m100.0 byte 1的含義為指向從m100.0開始,長度為1個byte的空間,即mb100。下面程序段實現的功能為每秒將客戶端地址mb100中數據就傳遞到服務端地址mb100中。
在cpu 1的主程序ob1中,調用“get”指令,并對其進行組態設置。在伙伴欄選擇“plc_2[cpu 1212c dc/dc/dc]”,下方端口、子網、子網名稱、地址、連接id與連接名稱等均會自動生成相關內容。因plc_1為客戶端,應勾選“主動建立連接”。
get指令各個端口連接如下圖所示。圖中指令req選擇m0.5,m0.5是1hz的時鐘存儲器字節,由于req是上升沿有效,則實現功能為每秒完成一次從plc_1到plc_2數據傳輸。id是自動生成的。addr_1和sd_1所連接指針都為p#m10.0 byte 1,p#m10.0 byte 1的含義為指向從m10.0開始,長度為1個byte的空間,即mb10。下面程序段實現的功能為每秒讀取伙伴cpu地址mb10中數據存儲在本地cpu地址mb10中。
下面程序段實現的功能為,將mb20中數據傳遞給mb100。
上面三段程序都是在plc_1主程序中編寫,下面在plc_2主程序中編寫下面程序。實現的功能為,將mb30中數據傳遞給mb10。
第四步,下載組態和程序
兩個cpu的組態配置與編程均已完成,分別將其下載至對應的仿真plc中。將兩個cpu轉到在線模式并打開監控。在plc_1程序中將mb100設置為16#5,經過put指令,將plc_1中mb100存儲數據傳遞到plc_2中mb100,從下圖中可知,plc_2中mb100為16#5。
在plc_2程序中將mb10設置為,經過get指令,讀取plc_2中mb10存儲數據存儲到plc_1中mb10,從下圖中可知,plc_1中mb10為16#5。
通過上述分析可知,兩個plc之間成功完成s7通信連接,是put/get指令數據訪問成功的關鍵。建立s7連接成功后,就可以通過put指令發送數據給伙伴cpu,通過get指令獲取伙伴cpu的數據。