如果你對西門子PLC通信或者上位機開發(fā)稍微有一點研究的話,應該對Snap7有所耳聞。
Snap7是一個基于以太網與西門子S7系列PLC通信的開源庫,在世界領域應用很廣。但也許是因為資料比較少,而且很多都是純英文,在國內反而沒有大規(guī)模的應用。
作為一個技術開發(fā)人員,所有未知領域的事物都是值得探索的。于是花了一些時間,對Snap7做了一些研究,借此機會,給大家做一些分享,希望可以給對工作或學習中有這塊需要的人,提供一些借鑒。
1. Snap7基礎介紹
(3)大家如果源碼下載太慢或者下載不了,可以關注本公眾號,發(fā)送關鍵詞:Snap7源碼
(4)Snap7主要用于將PC站點與PLC網路完全連接到一起,所以它具有三個對象組件,分別是客戶端、服務器和協作者,這三個對象可以同時應用,下面這幅圖描述了這三個對象之間的聯系:
圖表 1 Snap7整體框架
對于一般開發(fā)人員來說,Server和Partner模式是用不到的,我們主要用的是Client模式,即PLC作為Server,上位機PC作為Client。
2. Snap7源碼分析
如果順利的話,大家打開源碼之后是可以運行的,找一個自己身邊的西門子PLC進行通信功能測試,如果手頭沒有PLC,可以關注本公眾號的一篇文章《手把手教你搭建西門子PLC仿真環(huán)境》。
如果大家看到源碼,可以發(fā)現提供的snap7.net其實是對snap7.dll的二次封裝,snap7.dll是一個C/C++寫的類庫,我們可以找到一些我們需要的方法。
圖表 2 建立PLC連接
圖表 3 斷開PLC連接
圖表 4 存儲區(qū)讀取
圖表 5存儲區(qū)寫入
圖表 6讀取多變量
圖表 7寫入多變量
但是這個snap7.net類封裝的風格有些老外的風格,會導致我們使用起來很麻煩,于是我便對這個snap7.net做了進一步的封裝:
圖表 8建立及斷開連接
圖表 9讀取及寫入多個字節(jié)
圖表 10讀取及寫入多個通信組
圖表 11讀取及寫入多個通信變量
圖表 12讀取及寫入單個變量
通過這些封裝,會將snap7.net里晦澀難懂的方法變成我們自己熟悉的方式,這樣,我們自己做開發(fā)的時候,會更加方便和高效,這里值得注意的是西門子S7協議通信會有PDU及通信組數量的限制,一般來說PDU限制是220個字節(jié),通信組數量限制是20個,也就意味著一次性只能讀取220個字節(jié),并且最多只能同時讀取20個通信組。
3. 通信測試
通信庫編寫完成之后,通過TIA V15 + PLCSIM + NETTOPLCISM搭建了一個S7-1500PLC的仿真環(huán)境,用于通信測試。
圖表 13 西門子仿真環(huán)境
基于封裝的通信庫開發(fā)了一個簡單的測試平臺,分別于S7-200 Smart PLC及S7-1500進行了通信測試,測試結果如下:
圖表 14 S7-200 Smart PLC通信測試
圖表 15 S7-1500 PLC通信測試
歡迎關注公眾號↓