從端到雲——工業物聯網專案全棧快速開發實踐
從去年伊始,國內外一些大公司都先後推出了面向物聯網領域的平臺產品,如微軟 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);
}
以上程式碼的意思是,從 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 等物聯網中介軟體軟硬體平臺。
2017 年 7 月 1 日(星期六),線上物聯網全棧開發峰會將在 CSDN 學院召開,劉洪峰將與其他六位專家將一起從整體架構、技術棧、應用開發平臺到實戰經驗與安全方案,希望通過一天的時間,幫助開發者快速掌握物聯網全棧開發之道,目前峰會正在七折優惠中,欲購從速,詳情點選我要報名!