使用樹莓派讀取PLC資料上傳到阿里雲
轉載:知乎sx24
本文會分為四個部分:
- 樹莓派中Node-Red節點的配置;
- 阿里雲上MQTT伺服器的建立;
- PLC側的設定;
- 測試;
本文測試所需軟體及硬體:樹莓派3B+;西門子PLC S7-1500;TIA Portal V15;Putty;MQTT.fx;阿里雲伺服器
- 樹莓派中Node-Red節點的配置;
自2015年開始是預設就帶NODE-RED和NODE.JS,防止自帶的Node-Red的版本較老,可以用putty連線樹莓派後用以下指令進行更新;
update-nodejs-and-nodered
下一步是安裝npm,這樣方便對樹莓派中的Node-red新增節點,步驟如下:
安裝npm前,先執行以下指令使得樹莓派的系統更新到最新,然後重啟樹莓派
sudo apt-get update && apt-get upgrade
重啟之後執行如下指令安裝npm
sudo apt-get install npm
此時樹莓派側的前期準備工作基本完成,用putty連線樹莓派後,執行Node-red;
啟用Node-Red
然後在瀏覽器中輸入http://{樹莓派的地址}:1880/即可進入Node-red編輯介面,如下圖所示:
因為S7是西門子PLC專有的協議,因此樹莓派中的Node-Red沒有自帶該節點,需自己安裝(如果之前沒有安裝npm,安裝新的節點便會很麻煩),如下圖所示,開啟Node-Red設定裡的節點管理,搜尋S7,安裝第二個節點;
安裝S7節點
安裝完畢之後,可以看到左邊會多出S7的節點;
安裝的S7節點
到此,Node-Red的設定基本完成,接下來進行簡單程式設計,Node-Red程式設計方式的優缺點此處便不加贅述,如果對Node-Red程式設計方式不太瞭解的,可以參考連結(
小牟子:第一章 Node-RED簡介48 贊同 · 3 評論文章
本次會用到的節點有S7 in;S7 out;MQTT in;MQTT out;
首先是S7 in節點的設定:
S7 in節點配置1
S7 in節點配置2
IP Address處填寫PLC的IP地址,Port預設為102,Mode選為Rack/Slot,PLC預設的機架號為0,插槽號為1;
下面是要訪問的變數的填寫,與TIA Portal中的設定對應;
S7 in節點配置3Portal中變數的設定
接下來是S7 out節點的設定;
Out節點的設定和In節點類似,此處我們選擇要修改的變數為1。
S7 out節點設定1
到此,S7的節點設定完成,下面對MQTT in和MQTT out節點進行設定,如下圖所示;
首先是Out節點的設定
MQTT out設定1MQTT out設定2
MQTT out設定3
上圖中,服務端的IP填寫阿里雲的公網IP,埠號為61613(TCP的埠號),客戶端ID可以不填,使用者名稱和密碼為部署在阿里雲上的MQTT伺服器的密碼(預設使用者名稱為admin,密碼為password);
MQTT in設定1
主題處填寫希望從MQTT伺服器中訂閱的主題;
以上所有的節點均已經配置完畢,講節點連線,並點選右上角的部署按鈕,將Node-Red部署至樹莓派中;
全部程式圖(未連線狀態下)
第一部分結束。
- 阿里雲上MQTT伺服器的建立;
MQTT的伺服器很多,甚至還可以自己編寫MQTT的伺服器,本文采用的是Apollo伺服器,Apollo伺服器在Windows系統下的具體配置可以參照以下連結:
https://blog.csdn.net/eren666/article/details/79459552blog.csdn.net/eren666/article/details/79459552注:本次的阿里雲作業系統為Windows Server 2012,本文下載的是apache-apollo-1.7.1,Java的版本為Java 8(Apollo和Java的版本一定要匹配,否則會出現錯誤)
配置完成後如下圖所示:
雲上的Apollo伺服器
以上阿里雲上的MQTT伺服器便部署完成;
第二部分結束。
- PLC側的設定;
PLC側的設定便較為簡單,因為S7可以做單邊通訊,PLC側不需要指令程式設計,只需
1.對PLC屬性進行設定,勾選“允許來自遠端物件的PUT/GET通訊訪問”即可;
CPU屬性設定
2.在DB塊中建立相應的變數,並將DB塊屬性中“優化的塊訪問”勾選去掉;
資料塊的設定
將CPU的配置下載到S7-1511PLC中,PLC側的配置完成;
第三部分結束。
- 測試
整個測試的流程如下圖所示:
測試流程圖
首先是PLC將資料傳送到樹莓派,修改監視表中的變數,當變數的數值發生變化時,會將訊息傳送至樹莓派,樹莓派將訊息傳送至MQTT伺服器中,訂閱訊息的MQTT.fx客戶端也會收到訊息;
監控表1MQTT.fx訂閱Node-Red的Debug
然後通過MQTT.fx客戶端釋出“raspiget”主題,從而修改PLC內部的資料;
MQTT.fx釋出
釋出的資料為4,此時我們可以看到,PLC裡的變數1已經被修改為4;
監控表2
最後,我們可以在MQTT伺服器中檢視具體的釋出訂閱數量,資料量的大小以及連線數;
Topic列表連結列表
第四部分結束。
最後
本文的內容可能不夠詳細,有些細節的地方還值得推敲。本次的測試其實不是很複雜的功能,但這個只是一個示例,除了S7,還有更多的方式可以選擇,比如TCP,Modbus TCP,以及OPC等等。當把這個樹莓派換成西門子的物聯網閘道器IOT2040時,當把連線的阿里雲換成西門子的Mindsphere時,可能會迸發出更精彩的內容!