1. 程式人生 > 其它 >使用樹莓派讀取PLC資料上傳到阿里雲

使用樹莓派讀取PLC資料上傳到阿里雲

轉載:知乎sx24

本文會分為四個部分:

  1. 樹莓派中Node-Red節點的配置;
  2. 阿里雲上MQTT伺服器的建立;
  3. PLC側的設定;
  4. 測試;

本文測試所需軟體及硬體:樹莓派3B+;西門子PLC S7-1500;TIA Portal V15;Putty;MQTT.fx;阿里雲伺服器

 

 

 

 

  1. 樹莓派中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部署至樹莓派中;

全部程式圖(未連線狀態下)

 

 

第一部分結束。

 

 

 

  1. 阿里雲上MQTT伺服器的建立;

MQTT的伺服器很多,甚至還可以自己編寫MQTT的伺服器,本文采用的是Apollo伺服器,Apollo伺服器在Windows系統下的具體配置可以參照以下連結:

https://blog.csdn.net/eren666/article/details/79459552​blog.csdn.net/eren666/article/details/79459552

注:本次的阿里雲作業系統為Windows Server 2012,本文下載的是apache-apollo-1.7.1,Java的版本為Java 8(Apollo和Java的版本一定要匹配,否則會出現錯誤)

 

配置完成後如下圖所示:

 

 

雲上的Apollo伺服器

 

 

以上阿里雲上的MQTT伺服器便部署完成;

第二部分結束。

 

 

 

  1. PLC側的設定;

PLC側的設定便較為簡單,因為S7可以做單邊通訊,PLC側不需要指令程式設計,只需

 

1.對PLC屬性進行設定,勾選“允許來自遠端物件的PUT/GET通訊訪問”即可;

 

CPU屬性設定

 

 

2.在DB塊中建立相應的變數,並將DB塊屬性中“優化的塊訪問”勾選去掉;

 

資料塊的設定

 

將CPU的配置下載到S7-1511PLC中,PLC側的配置完成;

第三部分結束。

 

 

 

  1. 測試

整個測試的流程如下圖所示:

 

 

測試流程圖

 

首先是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時,可能會迸發出更精彩的內容!