天天看點

從端到雲——工業物聯網項目全棧快速開發實踐

從去年伊始,國内外一些大公司都先後推出了面向物聯網領域的平台産品,如微軟 Azure 平台的 IoT Hub、阿裡雲平台的物聯網開發套件、百度雲平台的物接入 IoT Hub、物解析 IoT Parser 和物管理 IoT Device 等等,但上述公司的産品從平台特色和技術角度來看,相對比較适合一些企業級項目開發及智能硬體的雲連接配接、雲存儲的使用,其實并不太适合一些對控制實時性較高、接入點多、業務邏輯相對複雜的工業領域。

工業自動化領域相對比較封閉,發展也比較慢,多年來涉及到通信相關的,大部分還是采用現場工業總線等技術來實作。筆者曾發過一篇《淺談工業級物聯網項目架構設計及實施》,裡面除了介紹了工業物聯網的概念和特色外,還介紹了物聯網通用中間件平台的架構設計。時至今日,随着國内外大公司的介入,物聯網越來越熱。下面筆者将結合工控領域的特色及目前物聯網領域的一些新技術新趨勢,分享工業物聯網和民用物聯網的特色及異同,并從自身實際應用開發的角度,解讀從端到雲,工業物聯網項目的全棧快速開發之路。

一、前言

1.1 民用物聯網 VS 工業物聯網

最近誕生的共享單車,短短一年多的時間就遍布國内一二線城市,迅速成為一個現象級應用,可以說是民用物聯網領域最大的應用。小米的智能家居套件,以低廉的價格,相對實用的功能,也赢得了不少智能家居愛好者的追捧,也是比較典型的民用物聯網應用。 

工業物聯網對大部分人來說,相對陌生,往往是面向行業的應用,比如我們目前所做的養殖物聯網監控,污水處理物聯網監控和垃圾處理物聯網監控。

那民用物聯網和工業物聯網的差別是什麼呢?

從技術角度來說,民用物聯網和工業物聯網并沒有本質的差別,都是有雲、有端、都具備傳感器資料采集、裝置控制及通信傳輸等功能。隻是工業物聯網脫胎于工控自動化網絡,後者對可靠性和實時性有較高的要求,有各種工業級别的現場總線,如 Profibus,Modbus RTU/TCP,CANopen 等等,後續又在民用以太網的基礎上,推出了工業以太網。那時候還沒有雲的概念,考慮到安全,網絡都是私有的,很少和網際網路進行互聯。從某種意義上來說,沒有雲技術的高速發展,就不會有現在的民用物聯網上各種現象級應用。當然工業物聯網也得益于雲技術的成熟,才能使高門檻的工業自動化技術得到了一定程度上的普及,否則也很難有今天所謂的工業物聯網。不過民用物聯網和工業物聯網差別還是有的,下面将一一簡要介紹。

首先是數量的差別,民用物聯網往往面臨的是百萬、千萬級别的使用者群。工業物聯網從量上來說,要比這個規模小得多。

其次是功能上的差別,民用物聯網功能往往比較單一,易用,免維護。工業物聯網功能就相對複雜的多,往往對應一個行業内的一系列具體的功能,

然後就是價格上的差別,民用領域的使用者對價格相對敏感,是以民用領域的物聯網産品往往價格比較低廉。工業物聯網領域的産品由于面向行業,面向具體的應用,量少,是以單價相對較貴。

最後就是品質上的差別了,最簡單的工業和民用的差別,就是設計産品的時候,器件選型民用産品往往選擇民用級别的,工業級産品往往選擇工業級的。除了價格上工業級的晶片比較貴外,應用環境的溫度範圍比民用領域也要寬廣,可以在相對苛刻的條件下也能可靠地工作。

1.2 工業物聯網全棧開發

全棧開發的概念來源于 Web 開發領域,指同時具備前端和背景開發的能力。引申到工業物聯網領域,全棧開發意味着要懂硬體開發,要懂各種傳感器、雲開發、Web 開發技術、手機 APP 開發、各種通信技術和資料存取,大資料時代還要求懂資料挖掘和分析。

這對全棧工程師來說,要求就非常高了。考慮到實際,從技術路線來看,全棧開發還是分派系的,如“Java 派”,各種層面的開發都是以 Java 類的開發技術為主。如“.NET 派”,各種層面的開發都是用.NET 技術進行開發。由于曆史原因,我從 2001 年開始進入工控開發,工控軟體類開發大都以微軟技術為主,是以全棧開發主要采用了.NET 技術。

二、工業物聯網裝置端開發

民用物聯網端的開發和工業物聯網端的開發還是有很大差別的,民用物聯網端産品是廠家直接基于晶片進行産品開發。是典型的硬體開發了。而工業物聯網端的開發,往往是在第三方廠家的産品基礎上進行二次開發,也就是更多的是做內建類的開發工作。

我們所做的工業物聯網的端裝置就是供其他工業物聯網內建商進行二次開發的。當然我們也會基于我們的軟硬體産品進行工業物聯網項目的內建開發。

這裡着重介紹的就是在現有的工業物聯網産品基礎上進行的項目開發。

2.1 常見 IO 接口

目前工業領域常見的 IO 接口如下:

RS485:兩線制,差分信号傳輸,半雙工通信,最大通信距離千米以上。

RS232:三線制,全雙工通信,一般通信距離小于 10 米。 

CAN:兩線制,多主通信,高性能,高可靠性,每次最多傳輸 8 個位元組的資料。通信距離千米以上。

以太網:4 線或 8 線,多主通信,高性能。普通網線通信距離 100 米以内。

Zigbee:基于 IEEE802.15.4 标準的低功耗無線通信協定,低功率一般傳輸距離 100 米以内,高功率的 1000 米左右。

LoRa:基于擴頻技術的超遠距離無線傳輸方案。低功耗,多節點。

GPRS:通用分組無線服務技術,廣域網通信。

NB-IoT:IoT 領域一個新興的技術,支援低功耗裝置在廣域網的蜂窩資料連接配接,亦稱低功耗廣域網(LPWA)。

模拟量輸入:0~20mA/0~5V/0~20V

開關量輸入:0~24V

繼電器輸出:0~220V/2A

2.2 常見通信協定

Modbus RTU: 施耐德公司制定的基于 RS485/RS232 的串行通信總線協定。 

Modbus TCP: 施耐德公司制定的基于以太網的通信總線協定。 

PPI:西門子公司專為 S7-200 系列 PLC 開發的通訊協定。 

Profibus:是一種國際化、開放式、不依賴于裝置生産商的現場總線标準。 

CANopen:是一種架構在 CAN 上的高層通信協協定,包括通信子協定及裝置子協定。

2.3 常見智能子產品

常見的智能子產品其實種類比較多的,比如智能電表,智能水表,各種 PLC 及其配套的擴充子產品等等。我們這裡主要介紹的就是淩霄物聯網智能網關、智能終端、智能 IO 子產品和綜合采集子產品。

從端到雲——工業物聯網項目全棧快速開發實踐

圖 1 物聯網智能網關 智能終端 綜合采集器

網關除具備網口、USB、SD 卡及擴充兩路智能模組(無線通信、RTC、存儲等闆卡)外,還可以配置各種不同通信接口闆(當然也可以直接對接智能終端或智能 IO 上的輸入輸出子闆)。

綜合通信:1 路 RS485,2 路 RS232,1 路 CAN

RS485-CAN:3 路 RS485,1 路 CAN

RS485:4 路 RS485

智能終端和智能 IO 子產品的主要差別有,一是通信接口,智能終端有三種接口可選,以太網、RS485 和 CAN;而智能 IO 子產品僅具備 CAN 接口。二就是智能終端支援二次開發,能獨立運作,也可以作為智能網關的擴充子產品,而智能 IO 僅作為智能網關的擴充子產品存在。

智能終端和智能 IO 子產品,根據對外接口不同,主要有如下種類的子產品:

綜合輸入輸出子產品:2 路模拟量入,2 路開關量入,2 路繼電器輸出

綜合模拟量子產品:4 路模拟量輸入,2 路模拟量輸出

綜合開關量子產品:4 路開關量輸入,4 路開關量輸出

模拟量采集子產品:4 路模拟量輸入

開關量輸入子產品:8 路開關量輸入

繼電器輸出子產品:8 路開關量輸出

熱電偶采集子產品:4 路熱電偶采集

綜合采集器,是一個九合一的傳感器內建子產品,可以說是國内外內建度最高的一款産品。一次可以采集的傳感器資料有 3 路溫度,1 路濕度、1 路氧氣、1 路氨氣、1 路二氧化碳、1 路光照、1 路 PM2.5。該子產品可以通過 RS485 直接和網關相連,标準 Modbus RTU 通信協定。

2.4 YFIOs 資料組态開發

從端到雲——工業物聯網項目全棧快速開發實踐

圖 2 YFIOs 系統架構

圖 2 是 YFIOs 資料組态系統的架構圖,其包含三部分:驅動層,核心層(驅動引擎及實時資料庫)和政策層。

所謂的二次開發大部分就是開發和具體業務聯系密切相關的政策程式,此外就是少部分的驅動程式開發(除了對接特殊裝置,大部分情況下無需使用者開發驅動程式)。

下面我們用一個簡單示例來介紹一下 YFIOs 組态開發。

2.4.1 硬體準備及連接配接

我們需要準備如下裝置:1 台物聯網智能網關,1 台物聯網智能終端(或智能 IO),1 台綜合采集器,1 條 USB 線及附屬電源及連接配接線等。裝置及輔材準備好後,按如下方式進行接線:

從端到雲——工業物聯網項目全棧快速開發實踐

圖 3 裝置連接配接

2.4.2 建立使用者驅動

從端到雲——工業物聯網項目全棧快速開發實踐

圖 4 建立 YFIOs 裝置

如圖 4 所示,根據裝置的類型,對應的網關接口,建立綜合采集器和輸入輸出智能終端對應的使用者裝置。

裝置建立後,對應的裝置變量也會自動建立。

2.4.3 裝置及變量監控

無需任何程式設計,隻要把相關的驅動和配置資訊部署到網關,就可以直接監控裝置的通信狀态、IO 輸入狀态和連接配接的傳感器資料。如果有 IO 繼電器輸出,也可以在 IO 監控界面,直接修改對應的值以改變繼電器的開閉狀态。

從端到雲——工業物聯網項目全棧快速開發實踐

圖 5 IO 資料監控

2.4.4 建立使用者政策

如果僅僅實作資料從端到雲的傳輸,那麼無需寫使用者政策。當然對大部分的工業物聯網現場應用來說,還是需要一定的業務邏輯進行處理的。比如檢測到裝置電機過熱,則要求網關立即停止電機運作或者對外發出報警信号。這裡我們寫一個最簡單的使用者政策,就是當一路開關量輸入為高電平的時候,讓一路繼電器閉合,低電平的時候則繼電器釋放。

開發使用者政策,可以采用微軟 Visual Studio IDE 開發工具進行開發,我們也提供了對應的模闆程式,可以直接填入必要的業務代碼即可。如圖 6 所示,标準的使用者政策其實隻需要實作 3 個接口函數即可:OnLoad、OnRun和OnUnload。

從端到雲——工業物聯網項目全棧快速開發實踐

圖 6 政策開發

OnLoad 在使用者政策開始加載的時候執行,隻執行一次。OnRun 按設定的間隔,循環被 YFIOs 的驅動引擎調用。OnUnload 是政策被解除安裝前執行一次。

圖 6 中在 OnRun 添加的代碼如下:

if (op.IOReadInt("QI44:I1") != op.IOReadInt("QI44:Q1"))
      {
         op.Extern_IOWrite("QI44:Q1", op.IOReadInt("QI44:I1").ToString());
         op.Print(MessageType.Debug, "I1=" + op.IOReadInt("QI44:I1").ToString(), Name);
      }
1
2
3
4
5           

以上代碼的意思是,從 YFIOs 實時資料庫中讀取 QI44:I1 通道值,如果和繼電器的輸出狀态不同,則繼電器的狀态和輸入通道保持一緻。

使用者政策編寫完畢後,則可以用 YFIOsManager 工具進行加載和調試了(如圖 7 和圖 8 所示)。

從端到雲——工業物聯網項目全棧快速開發實踐

圖 7 建立政策

從端到雲——工業物聯網項目全棧快速開發實踐

圖 8 政策調試

從圖 8 中我們可以看出,當 I1 輸入狀态被改變的時候,繼電器的輸出狀态也被改變了,調試視窗中也輸出了對應的調試資訊。

2.4.5 添加 QCPB 雲端通信政策

如果不和雲端通信,也就不需要添加 QCPB 雲端通信政策了,但是如果沒有這部分也稱之不上為物聯網項目了,隻是一個典型的小自動化項目而已。

和添加使用者政策一樣,我們添加上 QCPB 雲端通信政策,除了設定運作間隔外,我們還需要設定相關的參數,如圖 9 所示。

從端到雲——工業物聯網項目全棧快速開發實踐

圖 9 添加雲端通信政策

IP 位址是指雲端伺服器端位址,端口号預設為 12000,項目 ID 是指雲端建立對應項目時的 ID 号(這個後文會有介紹)。由于 QCPB 協定支援變化上傳資料,是以針對浮點數,需要設定資料變化的門檻值。

“IO 配置”面闆中有一個導出按鈕,可以單擊導出,儲存後的 XML 檔案在建立雲端項目及雲端組态畫面的時候會用到。

三、雲端通信協定

3.1 MQTT 通信協定

MQTT 是 Message Queuing Telemetry Transport 的縮寫,中文意思是消息隊列遙測傳輸,它是 IBM 開發的一個即時通訊協定,目前已經成為物聯網主流的通信協定,微軟雲、百度雲、阿裡雲等都支援該通信協定。這意味着裝置隻要支援了該通信協定,就可以和目前主流的雲進行雲端通信。淩霄物聯網網關也支援該協定,在一個消防相關的項目中,就是通過該協定把采集到的資料上傳到的微軟 Azure IoT Hub 中。

3.2 WebSocket 通信協定

WebSocket 協定是 HTML5 标準裡,基于 TCP 的一種新的網絡協定,2011 年被 IETF 定為标準 RFC 6455。它實作了浏覽器與伺服器全雙工(full-duplex)通信,伺服器可随時向用戶端發送資訊,不僅通信資料量變小,同時也大大改善了網頁動畫的實時性能。我們的 YFHMI 組态動畫,就是基于 WebSocket 通信協定和伺服器中間件 YFCloud 進行通信的。

3.3 QCPB 通信協定

這是我們自行開發的一個基于二進制格式的雲端通信協定,其優點是通信資料量小,支援資料變化上傳。除了支援資料通信外,還支援裝置的遠端診斷、遠端參數下載下傳和遠端更新等功能。支援 TCP/IP 以太網和 GPRS 雙鍊路自動切換通信模式。本篇文章中所介紹的雲端通信就是基于該協定來實作的。

四、雲服務 YFCloud 開發

雲端 YFCloud 有三部分組成:Web 背景、Web 前台和 YFIOs 雲端中間件。Web 背景和前台采用 ASP.NET 進行開發,YFIOs 雲端中間件也是采用.NET 技術進行開發,是一個标準的 Windows 服務程式。

4.1 雲端項目建構

首先登入 YFCloud 物聯網中間件通用監控平台就可以開始建立雲端項目了。YFCloud 的建構思想是,先有項目模闆,然後再基于項目模闆建立應用。這樣的好處就是,基于一個項目模闆可以建立若幹應用。

4.1.1 建立項目模闆

從端到雲——工業物聯網項目全棧快速開發實踐

圖 10 建立項目模闆

先添加一個項目模闆,然後比較重要的一步就是導入【2.4.5】章節所導出的 IO 配置檔案,進而建構雲端 IO 實時資料庫(如圖 11 所示)。

從端到雲——工業物聯網項目全棧快速開發實踐

圖 11 雲端 IO 清單

4.1.2 建立項目應用

基于我們剛剛建立的“工業物聯網示範”模闆建立一個項目應用。建立一個項目應用後,系統會自動生成一個項目 ID 号,把這個 ID 号填入【2.4.5】章節中所示的雲端通信政策中的 IO 配置面闆中,填入後部署到物聯網智能網關即可。

4.2 YFIOs 雲端中間件

YFIOs 雲端中間件脫胎于嵌入式 YFIOs,從圖 12 的架構圖上就可以看出,嵌入式 YFIOs 是一個“單機版”的資料組态平台,而雲端中間件 YFIOs 是一個“網絡版”資料組态平台。

從端到雲——工業物聯網項目全棧快速開發實踐

圖 12 YFIOs 中間件架構

YFIOs 雲端中間件內建了 WebSocket 伺服器,Web 動态網頁可以通過 WebSocket 協定和伺服器進行通信。

YFIOs 雲端中間件以項目為最小機關來進行管理的,一個或多個項目對應一個項目模闆,實際應用通過項目 ID 進行區分。

4.2.1 遠端 IO 監控

從端到雲——工業物聯網項目全棧快速開發實踐

圖 13 YFIOs 雲端中間件

在雲端伺服器上打開 YFIOs 雲端中間件-用戶端程式,可以看到在“工業物聯網示範”項目模闆下,我們看到“工業物聯網 Demo”應用的運作标志已經變為綠色,表示物聯網智能網關裝置已經和雲端連接配接成功。右側的顯示面闆上可以看到從物聯網智能網關上傳到雲端的各種 IO 資料。在該界面上,也可以對繼電器變量進行操作,寫入 0 或 1,可以看到物聯網智能終端上對應的繼電器閉合或開啟。

4.2.2 遠端參數&遠端更新

從端到雲——工業物聯網項目全棧快速開發實踐

圖 14 遠端參數&遠端更新

針對一個具體的項目,遠端參數即可能雲端政策需要,也可能同時遠端裝置上的政策需要,如果是這種情況,處理要複雜一些,相關參數需要儲存到雲端伺服器,并且參數一旦修改,需要同時通知雲端政策和遠端裝置上的政策。如果僅遠端裝置需要,那麼簡單期間,可以直接通過 YFIOs 雲端中間件直接傳遞一個二進制參數檔案即可。

遠端更新的實作要相對複雜,因為更新檔案相對較大,并且傳輸通道有可能是 GPRS 窄帶傳輸,是以需要分段進行傳輸。要確定整個的更新檔案,完整可靠的傳輸到遠端的物聯網智能網關上,并且重新開機重連成功後,才算真正的更新完畢。

由于基于同一個項目模闆下的多個相關應用的物聯網智能網關上的應用往往是一樣的,是以隻要設定一個更新檔案就可以更新整個項目模闆下的所有的項目應用。但是這有一個前提,要更新的固件版本,要比裝置上目前運作的版本高。

考慮到一些特殊情況的存在,YFIOs 雲端中間件也支援遠端強制更新,不管目前什麼版本,不管以前運作的什麼應用,都可以強制實作遠端更新的功能。

4.2.3 雲端政策開發

YFIOs 雲端中間件的政策和 YFIOs 嵌入式的政策開發基本相同,也含有 OnLoad、OnRun 和 OnUnload,差别就是雲端中間的政策能力更強,可以充分利用 Windows 平台本身的.NET Framework 能力。

有些業務邏輯即可以放在裝置端的政策裡,也可以放到雲端的政策裡,比如一些當日量和累積量的處理和換算。有些最好放到裝置端,比如某些名額超過門檻值,需要立即關閉或開啟裝置的。有些則放在雲端更合理,比如需要把資料進行永久存儲的。

雲端政策分三種類型:核心政策、公共政策和使用者政策。核心政策,YFIOs 雲端中間件每個項目都會執行,公共政策是多個項目可選擇性的執行,使用者政策則是使用者項目模闆下的項目才會執行。其上三種政策從代碼結構上沒有什麼差別,以所在的目錄決定其政策類型。

從端到雲——工業物聯網項目全棧快速開發實踐

圖 15 政策管理

五、雲畫面 YFHMI 組态開發

YFHMI 畫面組态最早支援 WinCE 平台,後來在 WinCE 平台軟體的基礎上開發出了基于.NET Micro Framework 平台的版本。.NET Micro Framework 一般運作在相對資源較小的物聯網晶片(Cortex-M 系列)上,是以 YFHMI 在性能和體積上做了進一步的優化。考慮到 Html5+WebSocket 是未來 WEB 前端的主流,在 YFHMI 支援 Windows 版本後,又直接推出了 Html5 的組态版本。

5.1 Web 組态畫面建構

5.1.1 建立組态畫面

在建立基本組态畫面的同時,我們還是需要導入在【2.4.5】章節所導出的 IO 配置檔案,以便于動畫綁定對應的 IO 變量(如圖 16 所示)。

從端到雲——工業物聯網項目全棧快速開發實踐

圖 16 YFHMI 圖元建立 & IO 導入

我們建構的組态畫面比較簡單,兩個訓示燈分别對應智能終端的 I1、I2,一個切換開關對應 Q2,四個文本框分别對應 T1、T2、T3 和 H。IO 變量導入後,相關的圖元分别綁定上對應的變量。 

5.1.2 導出 Html5 檔案

從端到雲——工業物聯網項目全棧快速開發實踐

圖 17 Html5 網頁導出

導出的 bg.png、Monitor.html、PublishIO.xml 和 YFWebSocket.js 四個檔案需要上傳到雲端對應的項目模闆目錄下。導出的 PublishIO.xml 檔案需要導入雲端 IO 清單,以設定對應的釋出 IO。

5.2 Web 畫面呈現及操控

從端到雲——工業物聯網項目全棧快速開發實踐

圖 18 動畫監控

在 Web 網頁上我們打開動畫監控頁,可以看到這個内容是和我們在 YFHMI 中建立的組态畫面是一緻的,并且其顯示的資料也和真實裝置的值一樣(和 YFIOs 雲端中間件的 IO 實時資料保持一緻)。這個時候如果我們用滑鼠操作開關按鈕,可以看到物聯網智能終端的繼電器吸合或釋放。

六、應用案例

綜上,我們可以看出無需太多專業技能,無需太多時間,就可以從端到雲建構一套相對實用,且有一定複雜度的工業物聯網方案。下面我們将介紹的案例,就是我們這兩三年來在實際現場實施的項目,是真正得到實際運作考驗的項目。

6.1 遠端污水監測/監控系統

從端到雲——工業物聯網項目全棧快速開發實踐

圖 19 恭城遠端污水監測界面

從端到雲——工業物聯網項目全棧快速開發實踐

圖 20 龍灘遠端污水監控界面

從端到雲——工業物聯網項目全棧快速開發實踐

圖 21 硬體控制櫃

廣西龍灘和恭城的污水監控和監測系統,分别在 2014 和 2015 年開始着手實施,最初龍灘項目沒有遠端監控畫面,僅包含現場自動化系統,在恭城遠端監控畫面實作後,才又增添了遠端監控功能。目前該項目已經在現場運作了兩年以上。

6.2 遠端垃圾處理系統

廣西龍灘垃圾處理系統在 2015 年開始研發實施,和污水監控系統不同的是,除了包含現場自動化控制、遠端雲端監控外,現場還有顯示器進行現場監控。是以 YFHMI 建構的組态,不僅支援 HTML 5 網頁組态畫面,還支援嵌入式組态畫面。

從端到雲——工業物聯網項目全棧快速開發實踐

圖 22 龍灘遠端垃圾監控系統

6.3 物聯網養殖監控系統

物聯網養殖監控系統是我們在 2015 年底和新希望六合還有微軟共同合作研發的一套養殖監控系統。目前已經在山東濟南、濰坊、河南新鄉、武陟,河北香河等地進行了安裝實施。

本系統和上面介紹的污水處理和垃圾處理系統有些不同,上述兩個系統的架構,核心就是物聯網智能網關連接配接若幹不同功能的智能終端和智能電表,通信也是僅采用 3G/4G 方式和遠端伺服器進行通信。物聯網養殖系統除了包含上述的功能外,還專門為其研制了九合一的綜合采集器,此外還能連接配接智能電表、智能水表,環控器等等智能裝置。為了保證通信的可靠性,還支援 GPRS/網際網路雙網自動切換功能。在遠端監控端,除了具備網頁監控,微信監控外,還提供手機 APP 進行遠端操控。

從端到雲——工業物聯網項目全棧快速開發實踐

圖 23 養殖監控-實時資料

作者:劉洪峰,網名葉帆,葉帆科技創始人兼 CEO,前微軟(中國).NET Micro Framework 開發團隊成員,微軟全球最有價值專家(MVP),CSDN 十大 MVB。以微軟.NET MF 系統為核心,研發了物聯網智能網關、YFIOs 和 YFHMI 等物聯網中間件軟硬體平台。

繼續閱讀