盧小錦
(廣東開放大學廣東理工職業(yè)學院,廣東廣州 510091)
隨著工業(yè)4.0的到來,物聯(lián)網(wǎng)和大數(shù)據(jù)的應用成為制造業(yè)升級改造的重要技術(shù),如何高效解決異構(gòu)工業(yè)通信網(wǎng)絡的互聯(lián)互通成為了重要的研究課題。Node-Red 正是解決這一難題的利器。Node-Red 基于Node.js 開發(fā),將應用程序封裝成節(jié)點模塊,每個節(jié)點都有特殊的功能,通過連線實現(xiàn)節(jié)點間數(shù)據(jù)流的交互,簡單易用,更重要的是Node-Red 有一個開放的生態(tài)環(huán)境,提供了豐富的API,支持MQTT,OPC UA,TCP 等眾多通信協(xié)議,支持在PC、嵌入式平臺以及PLC 等終端運行,支持阿里云、亞馬遜等云平臺,具有良好的擴充性和開放性。Node-Red 的這些特點使得它被用作物聯(lián)網(wǎng)、邊緣設(shè)備以及工業(yè)云數(shù)據(jù)流控制的開發(fā)工具,并已經(jīng)在工業(yè)物聯(lián)網(wǎng)、工業(yè)控制等場合得到廣泛的應用。包括西門子,研華等知名企業(yè)的產(chǎn)品均支持Node-Red。
本文以工業(yè)物聯(lián)網(wǎng)應用為場景,通過設(shè)計開發(fā)Node-Red 的OPC UA、MQTT 以及MYSQL 應用實例,實現(xiàn)PLC 的數(shù)據(jù)采集和交互,以及PLC 數(shù)據(jù)向云端、數(shù)據(jù)庫的傳輸。
在工業(yè)物聯(lián)網(wǎng)中,常常需要對控制器、傳感器等現(xiàn)場設(shè)備進行數(shù)據(jù)采集,并通過網(wǎng)絡進行數(shù)據(jù)傳輸,最終將數(shù)據(jù)傳輸?shù)皆破脚_或者數(shù)據(jù)庫以便進行數(shù)據(jù)的分析處理,實現(xiàn)對現(xiàn)場設(shè)備運行狀態(tài)的跟蹤、記錄和分析?;谶@個需求,本文對系統(tǒng)的組成、主要功能和實現(xiàn)方案進行了如下設(shè)計。
(1)系統(tǒng)的組成。系統(tǒng)硬件主要包括SIMATIC S7-1500 PLC,SIMATIC IOT2040工業(yè)物聯(lián)網(wǎng)智能網(wǎng)關(guān)以及數(shù)據(jù)庫服務器,云端選用阿里云ECS 服務器。
(2)系統(tǒng)的主要功能。SIMATIC IOT2040 作為系統(tǒng)數(shù)據(jù)交互的中心,可以從SIMATIC S7-1500 PLC采集數(shù)據(jù)以及向其發(fā)送數(shù)據(jù);可以將采集的數(shù)據(jù)發(fā)送到云端;可以將采集的數(shù)據(jù)存入數(shù)據(jù)庫。
(3)系統(tǒng)的實現(xiàn)方案。使用Node-Red 工具開發(fā)相關(guān)應用。使用Node-Red 的OPC UA 模塊設(shè)計SIMATIC IOT2040 與SIMATIC S7-1500 PLC的通信程序;使用Node-Red 的MQTT 模塊設(shè)計SIMATIC IOT2040 與阿里云的通信程序;使用Node-Red 的MYSQL 模塊設(shè)計SIMATIC IOT2040與數(shù)據(jù)庫的通信程序。系統(tǒng)框架如圖1所示。
圖1 系統(tǒng)框架圖
2.1.1 設(shè)備介紹
SIMATIC IOT2040 是一款支持多種高級編程語言的工業(yè)物聯(lián)網(wǎng)智能網(wǎng)關(guān),廣泛應用于現(xiàn)場設(shè)備數(shù)據(jù)的采集和傳輸。SIMATIC IOT2040有豐富的接口,提供了2個USB 接口(USB2.0,USB-Client 各一個),2 個串行接口(RS232,RS485 各1 個),2 個工業(yè)以太網(wǎng)接口,常被用作云端,IT 層和生產(chǎn)層之間的網(wǎng)關(guān),可實現(xiàn)數(shù)據(jù)雙向通信,在云平臺和現(xiàn)場設(shè)備間實現(xiàn)數(shù)據(jù)的傳輸。SIMATIC IOT2040 支持Node-Red,具有良好的開放性,可方便地實現(xiàn)各種工業(yè)應用定制方案。
2.1.2 通信方案設(shè)計
SIMATIC S7-1500 固件自V2.0 版本開始支持OPC UA 服務器功能,可以通過SIMATIC S7-1500 CPU 上集成的PROFINET 接口訪問OPC UA 服務器。而SIMATIC IOT2040可以通過Node-Red 的OPC UA模塊實現(xiàn)與OPU CA 通信。因此,本文采用OPC UA協(xié)議作為SIMATIC IOT2040 和SIMATIC S7-1500 的通信協(xié)議。
OPU UA 是一項開源的工業(yè)通信標準,獨立于平臺,具有良好的可擴展性和可靠性,被廣泛應用在工業(yè)現(xiàn)場設(shè)備之間的通信,作為工業(yè)物聯(lián)網(wǎng)的解決方案。OPC UA 協(xié)議將通信對象分為客戶端和服務器端。本文中,SIMATIC S7-1500 PLC 作為服務器端,SIMATIC IOT2040作為客戶端。
SIMATIC S7-1500自帶OPC UA 服務器功能,在使用的時候需要進行相應的配置激活功能,主要配置步驟如下:①在TIA Portal 軟件創(chuàng)建SIMATIC S7-1500工程項目實例(固件版本需在V2.0及以上版本);②打開設(shè)備視圖,選擇相應的PLC 設(shè)備;③打開OPC UA“服務器”選項卡中的“常規(guī)”選項;④勾選“訪問服務器”中“激活 OPC UA 服務器”的復選框;⑤記錄“服務器地址”中的“地址”(該IP 地址在SIMATIC IOT2040 OPC UA 客戶端配置中需要用到);⑥勾選“標準服務器接口”中“啟動SIMATIC 服務器標準接口”的復選框,在“選項”中根據(jù)實際應用需要配置連接數(shù)和端口;⑦打開“控制參數(shù)”選項卡,勾選“常規(guī)”屬性中的“可從OPC UA 訪問DB”復選框。配置好后便可通過OPC UA 訪問PLC 變量。
SIMATIC IOT2040 OPC UA 客戶端功能配置主要包括:在IOT2040 安裝Yocto Linux 操作系統(tǒng);IOT2040 IP 地址設(shè)定;Node-Red 安裝與配置;OPC UA 節(jié)點安裝。
2.3.1 Yocto Linux操作系統(tǒng)安裝
在SIMATIC IOT2040安裝Yocto Linux 操作系統(tǒng)需要用到以下設(shè)備:裝有企業(yè)版WIN7系統(tǒng)的PC 以及Miro-SD 存儲卡。用到軟件工具有:Win32磁盤映像工具。安裝過程如下:①在西門子官網(wǎng)下載Yocto Linux 的鏡像文件“Example_Image_V3.1.1”;②將Micro SD-Card 插入PC,使用Win32磁盤映像工具打開鏡像文件,并寫入目標Micro SD-Card。完成燒寫工作后,將Micro SD-Card 裝入SIMATIC IOT2040插槽并通電啟動。
2.3.2 連接和登錄SIMATIC IOT2040
用以太網(wǎng)線纜將PC 的以太網(wǎng)端口與SIMATIC IOT2040的X1P1以太網(wǎng)端口連接,運行PuTTY 工具,在“Session”選項卡中選擇SSH 作為連接類型,IP地址設(shè)為192.168.200.1,端口設(shè)為22,點擊“OPEN”即可連接SIMATIC IOT2040并彈出登錄對話框,默認用戶為root,無密碼(如需設(shè)置可以在命令行鍵入“passwd”指令進行設(shè)置)。
2.3.3 IP地址的設(shè)定
SIMATIC IOT2040默認IP 地址為192.168.200.1,可根據(jù)實際需要進行設(shè)置。IP 地址設(shè)置的方法如下:①在PuTTY 工具命令行輸入“iot2000setup”啟動IOT2040 配置程序;②在“setup”菜單選擇“Networking”;③在“Networking”菜單選擇“Configure Interface”;④在“Configure Network Interface”菜單中的“eth0”(eth0對應X1P1端口)欄目鍵入新地址(如:192.168.200.20);⑤在PuTTY工具命令行輸入“reboot”命令重啟IOT2040完成設(shè)定。
2.3.4 Node-Red 啟動配置及OPC UA模塊的安裝
(1)Node-Red 的自動啟動配置。應用中,一般需要在SIMATIC IOT 2040啟動時自動啟動Node-Red。Node-Red 的自動啟動設(shè)置方法如下:①啟動IOT2040配置程序;②在“setup”菜單選擇“Software”;③選 擇“Software” 菜單中的“Manage Autostart Options”;④在“Advanced options”菜單中勾選“Auto Start Node-Red”的復選框;⑤在PuTTY 工具命令行輸入“reboot”命令重啟IOT2040完成配置。配置好后,Node-Red 將在IOT2040啟動的時候自動啟動。
(2)OPC UA 模塊安裝.SIMATIC IOT 2040固件在V2.1.2 版本之后已經(jīng)預先安裝Node-Red,不過OPC UA 模塊需要另外安裝。具體步驟如下:①在PuTTY 工具命令行輸入“cd/usr/lib/node_modules”指令進入安裝目錄;②在命令行輸入“npm install Node-Red-contrib-opcua”指令安裝Node-Red OPUC UA 模塊。
在PuTTY 工具命令行輸入“node/usr/lib/node_modules/Node-Red/red &”指令啟動Node-Red,隨后在瀏覽器地址欄輸入SIMATIC IOT2040 的ip 地址和端口(如:http://192.168.200.20:1880)登錄Node-Red 頁面,如果安裝成功,頁面左側(cè)欄目將出現(xiàn)OPCUA 節(jié)點。
SIMATIC IOT2040 的OPC UA 通信通過Node-Red 節(jié)點實現(xiàn),通信程序的主要功能包括:①SIMATIC IOT2040可通過訂閱方式讀取SIMATIC S7-1500 PLC 的數(shù)據(jù);②通過寫方式向SIMATIC S7-1500 PLC 寫入數(shù)據(jù);③通過Node-Red 的inject節(jié)點注入流;④通過Node-Red dashborad 模塊的dropdown 節(jié)點設(shè)置傳輸給SIMATIC S7-1500 PLC 的測試數(shù)據(jù);⑤通過Node-Red dashborad 模塊的text 節(jié)點顯示采集回來的數(shù)據(jù)以及傳輸給SIMATIC S7-1500 PLC 的測試數(shù)據(jù)。
2.4.1 SIMATIC S7-1500 PLC數(shù)據(jù)讀取
SIMATIC S7-1500 PLC 數(shù)據(jù)讀取程序用到inject,OpcUa-Client,text 等3個節(jié)點,如圖2所示。
圖2 PLC數(shù)據(jù)讀取程序
inject 節(jié)點可實現(xiàn)手動或者周期性向流中注入消息,支持布爾、數(shù)值、字符串等數(shù)據(jù)類型。本文中,inject 節(jié)點屬性中的“payload”設(shè)置為字符串類型,每隔1s 周期性注入消息。
OpcUa-Client 節(jié)點可通過inject 節(jié)點的TOPIC以及inject 節(jié)點控制的OpcUa-Item 節(jié)點注入消息。OpcUa-Client 節(jié)點的具體配置如下:①將OPC UA 服務器的地址及端口填入Endpoint,如:opc.tcp://192.168.200.21:4080;②將Action 設(shè)置為SUBSCRIBE;將Interval 設(shè)置為1s。設(shè)置好后,該節(jié)點將通過訂閱的模式讀取PLC 的數(shù)據(jù)。
text 是dashboard 的輸出文本框節(jié)點,用于顯示接收到的數(shù)據(jù)。
2.4.2 SIMATIC S7-1500 PLC數(shù)據(jù)寫入
SIMATIC S7-1500 PLC 數(shù)據(jù)寫入程序用到dropdown,OpcUa-Item,OpcUa-Client,text 等幾個節(jié)點,如圖3所示。
圖3 PLC數(shù)據(jù)寫入程序
dropdown 節(jié)點是dashboard 的下拉菜單節(jié)點,其配置值將以msg.payload 的形式返回,用于設(shè)定向OPC UA 服務器發(fā)送的測試數(shù)據(jù)。
OpcUa-Item 節(jié)點的Item 項需包含有效的OPC UA 地址,Type 設(shè)置為Int16,Value 留空,程序執(zhí)行時自動把dropdown 設(shè)置的值作為數(shù)據(jù)輸出。
OpcUa-Client1節(jié)點通過寫模式將數(shù)據(jù)寫入OPC UA 服務器,OpcUa-Client2 節(jié)點通過訂閱模式讀取寫入OPC UA 服務器的值,并通過text 節(jié)點顯示。OpcUa-Client1和OpcUa-Client2節(jié)點的Endpoint 均設(shè)置為opc.tcp://192.168.200.21:4080;OpcUa-Client1的Action 設(shè)置為WRITE;OpcUa-Client1的Action 設(shè)置為SUBSCRIBE。
Node-Red 支持多種數(shù)據(jù)庫,本文使用的是MYSQL 數(shù)據(jù)庫,用到mysql 節(jié)點。在Node-Red 安裝mysql 節(jié)點的具體方法如下:①在Node-Red 頁面打開用戶設(shè)置菜單中的控制板;②點擊“安裝”選項卡,搜索“Node-Red-node-mysql”模塊并點擊安裝。
實現(xiàn)向數(shù)據(jù)庫傳輸數(shù)據(jù)的程序用到function 節(jié)點(名字為insert)和mysql 節(jié)點,如圖4所示。
圖4 數(shù)據(jù)庫數(shù)據(jù)傳輸程序
function 節(jié)點可以編寫JavaScript 代碼,實現(xiàn)對接收到的信息的處理。function 節(jié)點輸入消息的正文保留在msg.payload 屬性中,可以通過以下代碼構(gòu)造向數(shù)據(jù)庫寫入數(shù)據(jù)的SQL 語句:
msg.topic="INSERT INTO iot2040Table(value)VALUES("+msg.payload+");";
return msg;
mysql 節(jié)點可以實現(xiàn)對數(shù)據(jù)庫的基本訪問。需要在節(jié)點的屬性選項卡配置數(shù)據(jù)庫的地址,端口,用戶名,密碼,數(shù)據(jù)庫名稱等信息。
MQTT 是一款應用廣泛的物聯(lián)網(wǎng)通信協(xié)議,在阿里云使用MQTT 服務有兩種方案。①通過租用方式,我國主流的公用云平臺均提供MQTT 租賃服務。②使用開源的MQTT 組建進行搭建。本方案使用第二種方法,利用輕量級的mosquitto 開源項目搭建MQTT 服務器,目前最新版為mosquitto-2.0.9。
在阿里云部署mqtt-broker 的具體過程如下:
①使用PuTTy 工具登錄阿里云ECS 服務器,在PuTTy 工具命令行輸入“wget http://mosquitto.org/files/source/mosquitto-2.0.9.tar.gz”指令下載軟件包;②執(zhí)行“tar xzvf mosquitto-2.0.9.tar.gz”指令進行解壓;③依次執(zhí)行“cd mosquitto-2.0.9”、“make”、“make intall”指令完成編譯安裝;(4)執(zhí)行“mosquitto -v”指令啟動mosquitto。mosquitto 啟動成功后即可查看到服務的監(jiān)聽端口以及IP 地址。
向云端傳輸數(shù)據(jù)的程序使用mqtt out 節(jié)點實現(xiàn)。打開mqtt out 節(jié)點屬性菜單中的Connection 標簽,將阿里云ECS 服務器的地址、端口號寫入配置項。將MQTT 服務質(zhì)量QoS 值設(shè)為0。設(shè)置好后該節(jié)點就可以連接到MQTT代理并發(fā)布消息。云端數(shù)據(jù)傳輸程序,如圖5所示。
圖5 云端數(shù)據(jù)傳輸程序
本文以工業(yè)應用為場景,對Node-Red 的物聯(lián)網(wǎng)應用開發(fā)進行了研究,利用Node-Red 的OPC UA 節(jié)點、MQTT 節(jié)點以及MYSQL 節(jié)點編寫應用程序,成功實現(xiàn)了SIMATIC IOT2040 智能網(wǎng)關(guān)與SIMATIC S7-1500 PLC 的數(shù)據(jù)交互;成功把PLC 數(shù)據(jù)上傳至云端;成功將PLC 數(shù)據(jù)存入數(shù)據(jù)庫?;贜ode-Red 的物聯(lián)網(wǎng)應用開發(fā)簡單高效且功能強大,加之其生態(tài)開放,具有很強的應用前景。理論上,Node-Red 可以運行在任何移植了Linux 的平臺,因此,如何在自己開發(fā)的嵌入式平臺實現(xiàn)Node-Red 的物聯(lián)網(wǎng)應用開發(fā),將是更值得研究的課題。