[易學(xué)明 繆翀鶯 謝曉軍]
近年來低代碼開發(fā)在工業(yè)界和學(xué)術(shù)界都日益受到關(guān)注,它既是企業(yè)應(yīng)用市場(chǎng)基于企業(yè)需求產(chǎn)生的一種趨勢(shì),也是IT技術(shù)發(fā)展的一個(gè)趨勢(shì),尤其是移動(dòng)互聯(lián)網(wǎng)、云計(jì)算和人工智能在企業(yè)數(shù)字化轉(zhuǎn)型中的快速應(yīng)用更是加速了這種趨勢(shì)。企業(yè)必須對(duì)不斷變化的市場(chǎng)需求做出快速和有彈性的反應(yīng),希望降低企業(yè)應(yīng)用開發(fā)迭代門檻,使得企業(yè)內(nèi)部IT人員、業(yè)務(wù)人員能參與開發(fā),并將需求快速轉(zhuǎn)化為系統(tǒng)功能模塊,加快應(yīng)用交付[1]。而疫情和后疫情時(shí)代,企業(yè)互聯(lián)網(wǎng)化需求明顯,很多企業(yè)被迫云化辦公,存在大量快速開發(fā)應(yīng)用系統(tǒng)的需求,而招聘專業(yè)的軟件工程師又越來越困難,在此背景下低代碼開發(fā)的市場(chǎng)需求顯著增大[2]。
隨著5G和工業(yè)互聯(lián)網(wǎng)等新型基礎(chǔ)設(shè)施建設(shè)成為國家推動(dòng)經(jīng)濟(jì)高質(zhì)量發(fā)展的重要支撐,作為新基建尤其工業(yè)互聯(lián)網(wǎng)發(fā)展的重要力量,通信運(yùn)營(yíng)商正在不同類型工業(yè)和企業(yè)領(lǐng)域進(jìn)行數(shù)字化服務(wù)的不斷探索和實(shí)踐。研發(fā)面向工業(yè)互聯(lián)網(wǎng)的低代碼開發(fā)平臺(tái),進(jìn)而更好地服務(wù)政企行業(yè)數(shù)字化轉(zhuǎn)型,成為通信運(yùn)營(yíng)商提供數(shù)字化服務(wù)的重要抓手:通過平臺(tái)一方面實(shí)現(xiàn)能力聚合和共享形成能力組件,即插即用,另一方面則實(shí)現(xiàn)應(yīng)用聚合,豐富可復(fù)用行業(yè)組件,進(jìn)而使數(shù)據(jù)縱橫相通,消除“數(shù)據(jù)孤島”。
回溯歷史,可以看到整個(gè)軟件開發(fā)的歷史其實(shí)是一個(gè)追求低代碼化的歷史。早在2014年低代碼開發(fā)概念提出前,諸多IT廠商就已經(jīng)在該領(lǐng)域持續(xù)耕耘多年,并不斷地推出低代碼開發(fā)工具和平臺(tái)[2]。以O(shè)RACLE為例,20多年來一直持續(xù)在開發(fā)工具和應(yīng)用領(lǐng)域的低代碼化上發(fā)力,從C/S時(shí)代的ORACLE FORMS到后面支持WEB和移動(dòng)信息化的新一代開發(fā)平臺(tái)OACLE APEX,低代碼發(fā)展的思路非常明顯,即通過簡(jiǎn)化開發(fā)支持前端快速開發(fā)出UI,后端利用自身數(shù)據(jù)庫獨(dú)有優(yōu)勢(shì),形成自身以數(shù)據(jù)庫系統(tǒng)為核心的開發(fā)生態(tài)。
再以微軟為例,低代碼平臺(tái)產(chǎn)品系列Power Platform[3]包含豐富的產(chǎn)品,微軟發(fā)展低代碼平臺(tái)的目的,也是要打造自己的軟件生態(tài)。它在低代碼領(lǐng)域研究的歷史至少可以追溯到90年代,如ACCESS,剛發(fā)布的低代碼開發(fā)語言PowerEx則是基于很早的EXCEL宏VBA發(fā)展起來的。值得關(guān)注的是,微軟將低代碼平臺(tái)Power Platform和編程輔助AI插件Copilot結(jié)合起來,希望通過AI驅(qū)動(dòng)的無代碼智能方式重塑軟件開發(fā),可能會(huì)深刻改變軟件開發(fā)的模式。
國內(nèi)華為、百度、阿里、騰訊等大廠一方面象微軟一樣基于自身產(chǎn)業(yè)鏈生態(tài)的打造和完善紛紛介入低代碼,同時(shí)也希望借此來解決內(nèi)部IT系統(tǒng)龐大而分散的問題。無論是阿里還是華為,低代碼平臺(tái)的研發(fā)都優(yōu)先在企業(yè)內(nèi)部使用,以此提高開發(fā)效率,將部分重復(fù)開發(fā)工作解脫出來。
隨著新基建技術(shù)的發(fā)展,為更好服務(wù)政企行業(yè)數(shù)字化轉(zhuǎn)型需要,完善工業(yè)互聯(lián)網(wǎng)服務(wù)生態(tài),通信運(yùn)營(yíng)商、傳統(tǒng)IaaS(Infrastructure as a Service)服務(wù)商或通過收購與合作方式,或基于自身技術(shù)積累自研等方式陸續(xù)推出低代碼平臺(tái),如移動(dòng)云推出了面向業(yè)務(wù)開發(fā)者的多行業(yè)多場(chǎng)景下的低代碼業(yè)務(wù)應(yīng)用搭建平臺(tái),中國電信在面向工業(yè)互聯(lián)網(wǎng)垂直行業(yè)也進(jìn)行了低代碼開發(fā)平臺(tái)的實(shí)踐探索。
本文以滿足企業(yè)生產(chǎn)管理、設(shè)備資產(chǎn)管理、業(yè)務(wù)運(yùn)營(yíng)優(yōu)化與創(chuàng)新等工業(yè)互聯(lián)網(wǎng)應(yīng)用開發(fā)需求為場(chǎng)景,進(jìn)行了面向工業(yè)互聯(lián)網(wǎng)的低代碼開發(fā)平臺(tái)的研發(fā)探索。在前期MES(Manufacturing Execution System)領(lǐng)域?qū)嵺`基礎(chǔ)之上,基于跨框架組件復(fù)用技術(shù)、元數(shù)據(jù)技術(shù)、可視化低代碼架構(gòu)技術(shù)、工業(yè)協(xié)議云采技術(shù)及軟硬件解耦的5G邊云協(xié)同工業(yè)控制技術(shù),提出了ICT(information communication technology)和OT(operation technology)融合的云化低代碼開發(fā)平臺(tái)技術(shù)架構(gòu)。
面向工業(yè)互聯(lián)網(wǎng)的低代碼開發(fā)平臺(tái)以可視化的數(shù)據(jù)和信息管理、工作流管理和組件復(fù)用為核心,以云采工業(yè)物聯(lián)技術(shù)、云控工業(yè)控制技術(shù)等物聯(lián)采控基礎(chǔ)設(shè)施為基礎(chǔ),基于模型驅(qū)動(dòng)[4,5]和軟硬解耦思想,充分利用已有框架及組件的成熟能力,通過可視化IDE生成代碼構(gòu)建運(yùn)行或者模型解釋執(zhí)行,以滿足便捷快速構(gòu)建工業(yè)互聯(lián)及物聯(lián)網(wǎng)應(yīng)用解決方案的需求。
面向工業(yè)互聯(lián)網(wǎng)的低代碼開發(fā)平臺(tái)整體功能架構(gòu)如圖1 所示。
圖1 平臺(tái)整體功能架構(gòu)
平臺(tái)由設(shè)計(jì)器、組件、引擎、后端服務(wù)與部署、存儲(chǔ)及分析、物聯(lián)采控以及基于平臺(tái)開發(fā)或支持的各類應(yīng)用等7個(gè)部分組成。
(1)設(shè)計(jì)器
設(shè)計(jì)器部分包括頁面設(shè)計(jì)器、表單設(shè)計(jì)器、流程設(shè)計(jì)器、大屏和報(bào)表設(shè)計(jì)器,以及針對(duì)應(yīng)用、頁面、區(qū)塊的管理等。通過表單設(shè)計(jì)、報(bào)表設(shè)計(jì)等,自動(dòng)生成業(yè)務(wù)數(shù)據(jù)模型,通過系統(tǒng)提供的各種部件,利用頁面設(shè)計(jì)器構(gòu)建頁面[6]。使用可視化編排和腳本語言定義前后端業(yè)務(wù)邏輯。通過流程設(shè)計(jì)器,以可視化的方式進(jìn)行流程設(shè)計(jì)與配置[7]。通過大屏和報(bào)表設(shè)計(jì)器,以可視化的方式進(jìn)行大屏設(shè)計(jì)和報(bào)表設(shè)計(jì)。
(2)組件
組件部分包括表單組件、布局組件、流程組件、大屏和報(bào)表組件、通用業(yè)務(wù)組件和各個(gè)垂直行業(yè)的業(yè)務(wù)組件,以及用于AI工業(yè)大數(shù)據(jù)分析的組件等?;陬I(lǐng)域工程,通過產(chǎn)品迭代升級(jí)優(yōu)化和項(xiàng)目積累,不斷擴(kuò)充和完善組件部分,將復(fù)雜的外部能力封裝為標(biāo)準(zhǔn)組件(如表單組件或者流程節(jié)點(diǎn))后,在應(yīng)用工程中進(jìn)行可視化編排。
(3)引擎
引擎部分包括表單引擎、大屏和報(bào)表引擎、規(guī)則引擎、流程引擎、跨框架引擎、移動(dòng)化引擎和AI工業(yè)大數(shù)據(jù)分析引擎等,通過解釋和執(zhí)行對(duì)設(shè)計(jì)器和各類組件提供支撐。其中跨框架引擎通過基于DSL 轉(zhuǎn)換協(xié)議和跨框架組件機(jī)制實(shí)現(xiàn)將頁面或區(qū)塊 Schema 轉(zhuǎn)換成各技術(shù)棧的源代碼,以滿足適配多技術(shù)棧的需求。移動(dòng)化引擎提供應(yīng)用移動(dòng)化和移動(dòng)端原生調(diào)用能力支持,包括獲取設(shè)備信息、打開文檔、播放視頻、分享、支付、掃碼等
(4)后端及部署
通過Spring Boot和Node.js/Node-RED[8]提供后端服務(wù),包括提供數(shù)據(jù)處理、認(rèn)證及權(quán)限管理、物聯(lián)采控管理等系列 API 接口,以及系統(tǒng)所需業(yè)務(wù)邏輯的實(shí)現(xiàn)等。
基于容器編排技術(shù)、微服務(wù)架構(gòu)技術(shù)[9]和云服務(wù)技術(shù),使得低代碼開發(fā)平臺(tái)開發(fā)的應(yīng)用系統(tǒng)可以基于容器環(huán)境實(shí)現(xiàn)快速獨(dú)立的部署運(yùn)行,并根據(jù)客戶不同部署要求提供包括公有云/私有云的不同云服務(wù)部署方式。
(5)存儲(chǔ)及分析
通過Mysql和MongoDB實(shí)現(xiàn)對(duì)低代碼開發(fā)平臺(tái)不同特點(diǎn)數(shù)據(jù)的存儲(chǔ)支持;通過對(duì)TDengine等時(shí)序數(shù)據(jù)庫的支持實(shí)現(xiàn)對(duì)海量工業(yè)數(shù)據(jù)的存儲(chǔ)支撐和處理。結(jié)合ETL(extract transform load)分析[10]和AI工業(yè)大數(shù)據(jù)分析引擎,實(shí)現(xiàn)基于工業(yè)機(jī)理和數(shù)據(jù)科學(xué)實(shí)現(xiàn)海量數(shù)據(jù)的深度分析,并實(shí)現(xiàn)工業(yè)知識(shí)的沉淀和復(fù)用[11]。
(6)物聯(lián)采控
物聯(lián)采控部分由云采工業(yè)物聯(lián)和云控工業(yè)控制組成,是低代碼開發(fā)平臺(tái)面向工業(yè)互聯(lián)網(wǎng)實(shí)現(xiàn)采集、控制和管理的基礎(chǔ)設(shè)施,而云采云控本身的部分功能也是基于低代碼技術(shù)開發(fā)的。
(7)應(yīng)用
基于平臺(tái)開發(fā)或支持的各類應(yīng)用,支持多租戶服務(wù),支持企業(yè)應(yīng)用私有化部署,包括ERP類的IT應(yīng)用,面向IT和OT融合的SCADA(Supervisory Control And Data Acquisition)類、MES類應(yīng)用等。
低代碼開發(fā)平臺(tái)的系統(tǒng)架構(gòu)就技術(shù)原理而言分為兩層:設(shè)計(jì)器(設(shè)計(jì)態(tài))和服務(wù)器(運(yùn)行態(tài))。首先設(shè)計(jì)者通過可視化設(shè)計(jì)器實(shí)現(xiàn)可視化構(gòu)建頁面、業(yè)務(wù)邏輯和數(shù)據(jù)模型,并將可視化設(shè)計(jì)與配置的結(jié)果以DSL (domainspecific language)的形式保存為元數(shù)據(jù)中間文件[12],一般是JSON、YAML等格式。再通過設(shè)計(jì)器將元數(shù)據(jù)中間文件進(jìn)行預(yù)處理并打包發(fā)布到服務(wù)器上,服務(wù)器解釋或編譯中間文件里的元數(shù)據(jù),形成應(yīng)用,提供給最終用戶使用[13,14]。平臺(tái)主要的系統(tǒng)架構(gòu)及流程如圖2所示,可以分成可視化設(shè)計(jì)、中間層元數(shù)據(jù)描述、底層數(shù)據(jù)庫以及后端引擎4個(gè)環(huán)節(jié)。
圖2 平臺(tái)主要系統(tǒng)架構(gòu)及流程
(1)可視化設(shè)計(jì)
前端的可視化設(shè)計(jì)器支持組件的拖拉式設(shè)計(jì)和配置,包括頁面布局和界面交互設(shè)計(jì)、規(guī)則驗(yàn)證和業(yè)務(wù)邏輯等設(shè)計(jì),以及各種數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)與綁定等信息。其本質(zhì)則是將一些常用業(yè)務(wù)邏輯提取出來加到通用UI組件之上并固化,然后通過提供可視化編輯環(huán)境和相應(yīng)的配置項(xiàng),讓用戶通過可視化配置的方式來復(fù)用這些固化的業(yè)務(wù)邏輯。
(2)元數(shù)據(jù)處理
由前端設(shè)計(jì)器生成的特定格式代碼稱為元數(shù)據(jù)文件,由JSON、YAML等格式的描述性語言文件組成,后臺(tái)運(yùn)行器根據(jù)這些元數(shù)據(jù)文件解釋或編譯生成可執(zhí)行代碼,從而實(shí)現(xiàn)用戶所需的應(yīng)用程序。
(3)底層數(shù)據(jù)庫
在傳統(tǒng)應(yīng)用系統(tǒng)里,底層數(shù)據(jù)庫都是固定的實(shí)體表,即是與實(shí)體關(guān)系對(duì)應(yīng)的一個(gè)個(gè)具體表。當(dāng)業(yè)務(wù)需求變化需新增或改變數(shù)據(jù)結(jié)構(gòu)時(shí),采用這種方式需要手工在數(shù)據(jù)庫進(jìn)行數(shù)據(jù)結(jié)構(gòu)的新增或修改。低代碼開發(fā)平臺(tái)為了降低應(yīng)用開發(fā)中配置數(shù)據(jù)模型的技術(shù)門檻,基于通用表結(jié)構(gòu)設(shè)計(jì)原理,結(jié)合窄表和基于JSON 字段類型的鍵值對(duì)技術(shù),實(shí)現(xiàn)了業(yè)務(wù)系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的靈活構(gòu)建,在前端利用可視化表單進(jìn)行設(shè)計(jì)后,后端自動(dòng)生成相應(yīng)的數(shù)據(jù)表結(jié)構(gòu)及數(shù)據(jù)信息,無需手動(dòng)在后端數(shù)據(jù)庫進(jìn)行新增或修改。
(4)后端引擎
后端利用轉(zhuǎn)換器將包含服務(wù)端動(dòng)作和業(yè)務(wù)邏輯元數(shù)據(jù)文件轉(zhuǎn)換生成對(duì)應(yīng)可在低代碼開發(fā)平臺(tái)運(yùn)行態(tài)下執(zhí)行的目標(biāo)代碼。服務(wù)端設(shè)計(jì)根據(jù)業(yè)務(wù)需求和用戶體驗(yàn)等方面進(jìn)行綜合考慮,以實(shí)現(xiàn)平臺(tái)的高效、易用和安全等特點(diǎn)。
(1)跨框架組件復(fù)用技術(shù)
在基于B/S架構(gòu)的低代碼開發(fā)平臺(tái)研發(fā)中,進(jìn)行前端可視化設(shè)計(jì)遇到的一個(gè)關(guān)鍵問題是如何實(shí)現(xiàn)跨技術(shù)棧下的組件復(fù)用。當(dāng)前B/S架構(gòu)的三大主流前端框架Angular、React、Vue并沒有統(tǒng)一的組件庫,例如基于 Vue 的Element UI,基于 React 的 Ant Design 等,都是特定于框架的,無法跨框架使用。而在企業(yè)應(yīng)用系統(tǒng)開發(fā)中,通常存在對(duì)內(nèi)部存量系統(tǒng)改造對(duì)接的需求,也存在與外部系統(tǒng)對(duì)接、與新系統(tǒng)整合的要求,還會(huì)面臨前端系統(tǒng)整合的問題,這些系統(tǒng)可能是由不同的技術(shù)棧實(shí)現(xiàn)的,例如有的采用React框架,有的采用Vue框架,對(duì)于存量系統(tǒng)則可能是更老的框架。因而跨技術(shù)棧下的組件復(fù)用是低代碼開發(fā)平臺(tái)研發(fā)過程以及應(yīng)用于實(shí)際企業(yè)應(yīng)用開發(fā)時(shí)難以繞開的問題。
為使得前端組件有更好的重用性,對(duì)Web component及基于Web component對(duì)不同框架組件轉(zhuǎn)換技術(shù)進(jìn)行了研發(fā)探索。Web Component支持通過創(chuàng)建自定義元素實(shí)現(xiàn)在任何框架場(chǎng)景或原生環(huán)境都可以使用自定義元素的標(biāo)簽進(jìn)行調(diào)用。作為一項(xiàng)W3C積極推動(dòng)的技術(shù),Vue/React/Angular等主流前端框架都在一定程度上遵循了這套規(guī)范,自定義組件使用的是 Shadow DOM,這項(xiàng)技術(shù)是 Web Component規(guī)范的一部分。瀏覽器支持方面,F(xiàn)ireFox、Chrome、Opera 已支持,Safari大部分支持,之前IE及Edge的支持差,目前IE已退出,Edge內(nèi)核也在更換,可見瀏覽器對(duì)Web Component的支持在越來越好。由于Web Component規(guī)范只是應(yīng)用于瀏覽器底層,作為組件化的思想指導(dǎo),所以具體的組件化實(shí)現(xiàn)需由各框架自行設(shè)計(jì)。目前除了使用原生的Web Component 創(chuàng)建方法,三大主流前端框架(Vue/React/Angular)已提供針對(duì)Web Component的轉(zhuǎn)換接口,將各框架技術(shù)棧的 UI 組件利用轉(zhuǎn)換接口按需包裹成 Web Component,使得原來基于特定框架的組件可以作為HTML原生組件顯示到前端畫布上,實(shí)現(xiàn)跨框架的組件復(fù)用,從而可為低代碼開發(fā)的可視化前端所調(diào)用。在實(shí)際開發(fā)中,遇到一些框架API接口不完善及兼容性的具體問題需要克服,如Web Component插槽使用,只支持原生的插槽語法,即使是通過 Vue 組件等框架組件進(jìn)行轉(zhuǎn)換;再有,Web Component的插槽能力不支持類似Vue框架的作用域插槽等能力問題。因而在實(shí)際開發(fā)中,一些特殊功能需要進(jìn)行額外的兼容性處理。但總體上利用這一方法可以較好地解決前端技術(shù)架構(gòu)存在的跨技術(shù)棧和組件復(fù)用問題,由此帶來的另一個(gè)好處是在開發(fā)各個(gè)業(yè)務(wù)組件時(shí)可以利用更多更豐富的各類特定框架的組件,從而降低開發(fā)基礎(chǔ)組件和業(yè)務(wù)組件的成本。也由于Google對(duì)Web Component的支持,使得基于Web Component的組件復(fù)用方案在多端開發(fā)領(lǐng)域也將有更好的影響,相信會(huì)逐漸成為組件化開發(fā)的一個(gè)趨勢(shì)。
此外,基于Web Component的一些比較成熟的開源組件庫,比如Stencil、OMI等,根據(jù)需求進(jìn)行部分組件的開發(fā),也是平臺(tái)基于Web Component機(jī)制實(shí)現(xiàn)跨框架組件復(fù)用的一個(gè)重要組件來源。
通過以上方式實(shí)現(xiàn)設(shè)計(jì)態(tài)下不同框架下組件的復(fù)用后,基于可視化設(shè)計(jì)器通過拖拉拽配置設(shè)計(jì)生成滿足業(yè)務(wù)需求的描述性語言文件,再通過跨框架引擎的DSL 轉(zhuǎn)換協(xié)議機(jī)制轉(zhuǎn)換成目標(biāo)技術(shù)棧的源代碼,從而可以滿足不同運(yùn)行態(tài)下的運(yùn)行環(huán)境需求。比如將Angular組件通過跨框架組件復(fù)用技術(shù)在可視化設(shè)計(jì)器加載后,用戶通過可視化設(shè)計(jì)器對(duì)該組件進(jìn)行調(diào)用和配置,生成元數(shù)據(jù)描述文件,再通過跨框架引擎的DSL 轉(zhuǎn)換協(xié)議機(jī)制轉(zhuǎn)換成目標(biāo)技術(shù)棧React框架下的源代碼。可見,采用基于Web Component的跨框架組件復(fù)用方案因其原生支持的特點(diǎn),也避免了低代碼開發(fā)平臺(tái)普遍存在的供應(yīng)商鎖定問題,并且在性能上也更有優(yōu)勢(shì)。
(2)元數(shù)據(jù)和可視化業(yè)務(wù)邏輯技術(shù)
元數(shù)據(jù)作為描述數(shù)據(jù)的數(shù)據(jù),用來描述低代碼開發(fā)中的對(duì)象、字段、關(guān)系、邏輯和規(guī)則等方面的信息,包含了用戶在可視化設(shè)計(jì)界面上所操作元素的配置和設(shè)置,比如它們的位置、樣式、交互行為等。傳統(tǒng)低代碼技術(shù)中,將前端可視化操作直接翻譯成對(duì)應(yīng)的可執(zhí)行語言(如C#、Java等)以及將數(shù)據(jù)模型的可視化設(shè)計(jì)直接生成為數(shù)據(jù)庫語句的方式。面向工業(yè)互聯(lián)網(wǎng)的低代碼平臺(tái)采用中間層元數(shù)據(jù)技術(shù),前端可視化界面的操作和配置首先生成為元數(shù)據(jù),再通過元數(shù)據(jù)解釋成數(shù)據(jù)庫語句在數(shù)據(jù)庫上執(zhí)行,對(duì)前端用戶屏蔽了對(duì)數(shù)據(jù)庫的直接操作,也更容易為前端用戶接受。對(duì)于前端可視化設(shè)計(jì)與配置階段建立的數(shù)據(jù)關(guān)聯(lián)關(guān)系,平臺(tái)也以元數(shù)據(jù)的形式描述這一關(guān)聯(lián),并在設(shè)計(jì)態(tài)和運(yùn)行態(tài)中維護(hù)這一關(guān)聯(lián),比如在運(yùn)行態(tài)實(shí)現(xiàn)級(jí)聯(lián)刪除等,但在后端數(shù)據(jù)庫則不再定義外鍵關(guān)聯(lián)。通過避免在數(shù)據(jù)庫內(nèi)部建立硬關(guān)聯(lián)的方式,也更方便低代碼平臺(tái)進(jìn)行跨數(shù)據(jù)庫、跨數(shù)據(jù)源的操作。在面臨企業(yè)級(jí)應(yīng)用需要將多廠商多版本的異構(gòu)數(shù)據(jù)庫系統(tǒng)進(jìn)行集成和統(tǒng)一時(shí),通過中間的元數(shù)據(jù)層進(jìn)行數(shù)據(jù)處理和邏輯處理,可以有效“抹平”異構(gòu)數(shù)據(jù)庫系統(tǒng)在數(shù)據(jù)類型和存取方面的差異,比較好地解決了跨數(shù)據(jù)庫、跨數(shù)據(jù)源系統(tǒng)的數(shù)據(jù)集成和統(tǒng)一問題。
平臺(tái)以數(shù)據(jù)流轉(zhuǎn)的方式設(shè)計(jì)業(yè)務(wù)邏輯,用流程圖或數(shù)據(jù)流圖的形式來描畫業(yè)務(wù)邏輯,將用來承載業(yè)務(wù)邏輯的組件抽象保存為元數(shù)據(jù)定義,這種方式有利于垂直領(lǐng)域非專業(yè)技術(shù)人員進(jìn)行理解,也方便開發(fā)時(shí)與需求方就設(shè)計(jì)結(jié)果進(jìn)行溝通確認(rèn)。平臺(tái)描述業(yè)務(wù)邏輯的元數(shù)據(jù)通常由若干有順序的操作構(gòu)成,每個(gè)操作包含操作類型、配置數(shù)據(jù)、輸入輸出參數(shù)等。當(dāng)在設(shè)計(jì)器上對(duì)這些組件編排和配置時(shí),設(shè)計(jì)器將這些組件的順序、配置信息等保存為JSON或YAML格式元數(shù)據(jù),在運(yùn)行時(shí)再通過加載和讀取這些元數(shù)據(jù),還原出業(yè)務(wù)邏輯處理的規(guī)則和實(shí)現(xiàn)方式,形成可執(zhí)行程序,監(jiān)聽對(duì)應(yīng)端口和準(zhǔn)備響應(yīng)請(qǐng)求。此外,平臺(tái)針對(duì)垂直業(yè)務(wù)領(lǐng)域業(yè)務(wù)邏輯復(fù)用度高的業(yè)務(wù)場(chǎng)景和需求,抽象提煉出層次高、粒度大的邏輯節(jié)點(diǎn),進(jìn)行業(yè)務(wù)邏輯編排,甚至業(yè)務(wù)流程編排,提升業(yè)務(wù)邏輯組件的復(fù)用效果,為MES開發(fā)提效。
通過采用元數(shù)據(jù)和可視化業(yè)務(wù)邏輯技術(shù),平臺(tái)可以更加方便地支持新的業(yè)務(wù)場(chǎng)景,具有更好的擴(kuò)展性。
(3)基于通用表的數(shù)據(jù)庫設(shè)計(jì)技術(shù)
平臺(tái)的數(shù)據(jù)庫設(shè)計(jì)里,需要將任何對(duì)象及其屬性的描述和記錄以及增刪改查等操作高度抽象化,使得任意租戶的任意對(duì)象的任意數(shù)據(jù)的增刪改查操作,底層都用一套代碼。
平臺(tái)采用Object、Field、Data通用表設(shè)計(jì)的基本原理來構(gòu)建底層數(shù)據(jù)結(jié)構(gòu)模型。其中,Object表用于存儲(chǔ)業(yè)務(wù)對(duì)象模型,包括對(duì)象屬性、對(duì)象關(guān)系等,每個(gè)業(yè)務(wù)對(duì)象將在Object表中進(jìn)行定義,并分配一個(gè)唯一的Object ID;Field表用于存儲(chǔ)業(yè)務(wù)對(duì)象的屬性信息,包括屬性的名稱、類型、長(zhǎng)度等,每個(gè)屬性將在Field表中進(jìn)行定義,并分配一個(gè)唯一的Field ID,每個(gè)屬性都屬于某個(gè)業(yè)務(wù)對(duì)象,因此Field表中會(huì)存在Object ID字段,用來與Object表進(jìn)行關(guān)聯(lián);Data表用于存儲(chǔ)業(yè)務(wù)對(duì)象的數(shù)據(jù),每個(gè)對(duì)象的具體實(shí)例將在Data表中進(jìn)行存儲(chǔ),使用Object ID和Field ID分別與Object表和Field表進(jìn)行關(guān)聯(lián)。Data表的設(shè)計(jì)可以采用寬表的方式,預(yù)留足夠的字段用于自定義,一個(gè)字段對(duì)應(yīng)一個(gè)屬性值;可以采用窄表的方式,每個(gè)對(duì)象的每一個(gè)屬性對(duì)應(yīng)一條記錄;也可以采用JSON 字段類型,結(jié)合鍵值對(duì)的方式靈活地存儲(chǔ)一個(gè)或多個(gè)屬性值。本文采用了窄表方式和基于JSON 字段類型的鍵值對(duì)相結(jié)合的方式。
通過這一設(shè)計(jì),低代碼開發(fā)平臺(tái)支持多種業(yè)務(wù)對(duì)象模型的定義,并且可以自動(dòng)生成對(duì)應(yīng)的表單、視圖、報(bào)表等。而對(duì)多租戶的支持則根據(jù)需要可以通過每個(gè)租戶一個(gè)單獨(dú)數(shù)據(jù)庫來實(shí)現(xiàn),或在表中增加租戶ID字段進(jìn)行區(qū)分。
(4)基于應(yīng)用特性的后端設(shè)計(jì)
為了滿足工業(yè)互聯(lián)網(wǎng)應(yīng)用IT和OT融合的需要,后端基本功能部分采用比較主流的技術(shù)架構(gòu)Spring Boot,部分IOT相關(guān)模塊采用Node.js和Node-RED實(shí)現(xiàn)?;贜ode-RED實(shí)現(xiàn)可視化的低代碼流程編程,將物聯(lián)網(wǎng)硬件設(shè)備、API和在線服務(wù)方便快速地連接在一起,簡(jiǎn)化工業(yè)物聯(lián)網(wǎng)設(shè)備及業(yè)務(wù)管理功能的開發(fā)。
數(shù)據(jù)存儲(chǔ)上,根據(jù)不同數(shù)據(jù)特性和處理要求,使用MySQL存儲(chǔ)關(guān)系型數(shù)據(jù),使用 MongoDB 存儲(chǔ)非關(guān)系型數(shù)據(jù),如前端頁面正在編輯的自定義數(shù)據(jù)適合使用MongoDB 存儲(chǔ)[15]。針對(duì)海量的工業(yè)互聯(lián)網(wǎng)數(shù)據(jù)存儲(chǔ)的場(chǎng)景,根據(jù)需要使用TDengine時(shí)序數(shù)據(jù)庫系統(tǒng)來存儲(chǔ),以提升工業(yè)數(shù)據(jù)存儲(chǔ)和處理能力。
考慮到工業(yè)互聯(lián)網(wǎng)應(yīng)用的復(fù)雜性,平臺(tái)基于容器編排技術(shù)和微服務(wù)架構(gòu)設(shè)計(jì),使得應(yīng)用系統(tǒng)基于容器環(huán)境可以實(shí)現(xiàn)快速獨(dú)立的部署運(yùn)行,同時(shí)大大降低了部署和維護(hù)的復(fù)雜性,實(shí)現(xiàn)敏捷部署運(yùn)維。
(5)物聯(lián)采控一體技術(shù)
利用運(yùn)營(yíng)商在IaaS層具有的基于5G邊云協(xié)同、云網(wǎng)結(jié)合的網(wǎng)絡(luò)資源能力,通過工業(yè)協(xié)議云采技術(shù)和軟硬件解耦的云控工業(yè)控制技術(shù),實(shí)現(xiàn)了ICT技術(shù)和OT技術(shù)在工業(yè)互聯(lián)網(wǎng)的逐步融合,使得基于平臺(tái)開發(fā)的工業(yè)企業(yè)應(yīng)用向上提供工業(yè)數(shù)據(jù)采集與匯聚的能力,向下具備對(duì)工業(yè)設(shè)備遠(yuǎn)程控制的能力,解決信息孤島難題。
云采工業(yè)物聯(lián)基于工業(yè)協(xié)議云采技術(shù),兼容百余種工業(yè)協(xié)議規(guī)約器,實(shí)現(xiàn)各種不同協(xié)議類型設(shè)備的數(shù)據(jù)采集及數(shù)據(jù)上報(bào)[16],實(shí)現(xiàn)能耗采集、工業(yè)數(shù)采等應(yīng)用場(chǎng)景的云采并不斷迭代完善。
云控工業(yè)控制采用5G邊云協(xié)同的分布式部署架構(gòu),通過控制器軟硬件解耦,實(shí)現(xiàn)網(wǎng)絡(luò)的標(biāo)準(zhǔn)化,接口協(xié)議的標(biāo)準(zhǔn)化,屏蔽異構(gòu)工業(yè)設(shè)備的差異性,實(shí)現(xiàn)協(xié)同設(shè)備控制,支持各種工業(yè)控制類應(yīng)用的低代碼開發(fā),現(xiàn)階段主要聚焦柔性生產(chǎn)和機(jī)器換人場(chǎng)景,在物流、五金、包裝、電子等行業(yè)打造若干標(biāo)準(zhǔn)智能工位,實(shí)現(xiàn)包括遠(yuǎn)程操控、智能理貨、機(jī)器打磨、機(jī)器涂膠、視覺質(zhì)檢等功能。
基于平臺(tái)開發(fā)的一個(gè)云化PLC(Programmable Logic Controller)某車間試點(diǎn)MES系統(tǒng)的視覺工位狀態(tài)監(jiān)控界面如圖3所示。
圖3 某車間MES系統(tǒng)的視覺工位狀態(tài)監(jiān)控界面
云化PLC目的是將5G技術(shù)融入自動(dòng)化產(chǎn)線,針對(duì)中小企業(yè)已有的自動(dòng)化,半自動(dòng)化的產(chǎn)線,利用5G技術(shù),提升工廠生產(chǎn)的效率和質(zhì)量。該車間試點(diǎn)布置了工業(yè)互聯(lián)網(wǎng)云化PLC生產(chǎn)線,滿足云化PLC柔性生產(chǎn)、協(xié)作配合、智能分揀等交叉應(yīng)用場(chǎng)景的需求,包括智能倉儲(chǔ)、CNC切割、激光雕刻、機(jī)器視覺、包裝、傳送及生產(chǎn)物流等柔性智能工位。其中生產(chǎn)物流工位主要由5G遠(yuǎn)程控制AGV(Automated Guided Vehicle)無人駕駛小車完成,由AGV小車主體和5G通信模塊組成。每個(gè)柔性智能工位上都配置對(duì)應(yīng)的邊緣控制設(shè)備及對(duì)應(yīng)的PLC 應(yīng)用。而試點(diǎn)建設(shè)的柔性自動(dòng)化產(chǎn)線則涵蓋智能制造的常見主流技術(shù),包括PLC編程技術(shù)、工業(yè)機(jī)器人技術(shù)、機(jī)器視覺技術(shù)、柔性鐳射技術(shù)、AGV無人導(dǎo)航技術(shù)等。通過這些載體的智能通信接口連接5G定制網(wǎng),利用平臺(tái)提供的云采工業(yè)物聯(lián)和云控工業(yè)控制基礎(chǔ)設(shè)施,實(shí)現(xiàn)對(duì)產(chǎn)線的采集和控制,并基于平臺(tái)的低代碼開發(fā)環(huán)境針對(duì)車間產(chǎn)線的具體業(yè)務(wù)需求快速開發(fā)出更上層的工業(yè)互聯(lián)網(wǎng)應(yīng)用管理服務(wù)。圖4是基于平臺(tái)開發(fā)的某車間試點(diǎn)MES系統(tǒng)總體架構(gòu)圖。
圖4 某車間MES系統(tǒng)總體架構(gòu)圖
圖4的看板顯示部分中,產(chǎn)線工位狀態(tài)監(jiān)控包括了智能倉儲(chǔ)工位、傳輸工位、CNC切削工位、激光鐳射工位、機(jī)械視覺檢測(cè)與包裝工位、生產(chǎn)物流工位等工位狀態(tài)的實(shí)時(shí)顯示;生產(chǎn)計(jì)劃實(shí)施監(jiān)控主要實(shí)現(xiàn)對(duì)各批次計(jì)劃下已完成產(chǎn)品情況及各工位上加工產(chǎn)品情況的監(jiān)控;物料狀態(tài)的監(jiān)控則實(shí)現(xiàn)對(duì)物料庫存率和消耗率等的監(jiān)控。通過在平臺(tái)進(jìn)行可視化的設(shè)計(jì)與配置,并加載和調(diào)用大屏組件,實(shí)現(xiàn)各產(chǎn)線工位狀態(tài)、物料狀態(tài)、設(shè)備狀態(tài)、生產(chǎn)計(jì)劃實(shí)施狀態(tài)等信息的大屏實(shí)時(shí)顯示,而相應(yīng)的產(chǎn)線工位狀態(tài)、生產(chǎn)計(jì)劃實(shí)施等信息則利用5G定制網(wǎng)絡(luò)超低延遲的特點(diǎn)由云采工業(yè)物聯(lián)通過5G定制網(wǎng)通道從各產(chǎn)線工位對(duì)應(yīng)配置的邊緣控制設(shè)備實(shí)時(shí)獲取。車間產(chǎn)線的生產(chǎn)物流運(yùn)送由聯(lián)接5G網(wǎng)絡(luò)的AGV小車完成。運(yùn)用云控工業(yè)控制,平臺(tái)通過5G定制網(wǎng)絡(luò)對(duì)AGV小車進(jìn)行實(shí)時(shí)遠(yuǎn)程控制,以安全、同時(shí)地完成設(shè)定工作計(jì)劃,確保AGV小車及其運(yùn)輸物料的安全性和準(zhǔn)確性,尤其適合高溫、高壓不宜人工進(jìn)入的特殊環(huán)境。
在低代碼開發(fā)平臺(tái)的研發(fā)和實(shí)踐過程中,也認(rèn)識(shí)到面向工業(yè)互聯(lián)網(wǎng)的低代碼開發(fā)目前存在的一些局限和問題,下面做概要分析。
低代碼開發(fā)的核心一個(gè)是組件復(fù)用,一個(gè)是可視化。這里就組件復(fù)用和可視化談?wù)勂渚窒扌浴?/p>
(1)場(chǎng)景預(yù)設(shè)和可復(fù)用組件模式的局限性
基于低代碼平臺(tái)的應(yīng)用開發(fā),是一種高度的場(chǎng)景預(yù)設(shè)的模式,所需的場(chǎng)景和需求,是在低代碼平臺(tái)開發(fā)時(shí)就預(yù)設(shè)好的,需要低代碼平臺(tái)開發(fā)者針對(duì)預(yù)設(shè)的目標(biāo)應(yīng)用系統(tǒng)預(yù)先開發(fā)好大量可復(fù)用的組件、模板、模型和接口[17,18]。
一般來說,組件層次越高、粒度越大越難以被直接復(fù)用。雖然一般的業(yè)務(wù)組件可以通過參數(shù)化來實(shí)現(xiàn)個(gè)性化配置,但參數(shù)數(shù)量畢竟有限,而不同企業(yè)的業(yè)務(wù)即使同樣是MES系統(tǒng),其需求也差異多樣,給復(fù)用帶來一定困難,而且豐富的參數(shù)選項(xiàng)也會(huì)使得學(xué)習(xí)成本比較高。即使是比較成熟的低代碼開發(fā)平臺(tái),有著豐富的業(yè)務(wù)層面的組件,通過組件復(fù)用的比例,也遵循二八原則,也就是說一般會(huì)有10%~20%的業(yè)務(wù)需求無法復(fù)用。這時(shí),就需要低代碼平臺(tái)提供特定規(guī)則的 DSL 語言甚至外部開發(fā)工具進(jìn)行自定義編程或?qū)I(yè)編程[19,20]。
(2) 可視化編輯表達(dá)業(yè)務(wù)邏輯的局限性
對(duì)于一些復(fù)雜的業(yè)務(wù)邏輯,采用低代碼可視化編排的方法有時(shí)難以很好表達(dá),低代碼平臺(tái)對(duì)于復(fù)雜業(yè)務(wù)邏輯表達(dá)的一個(gè)解決方案是采用JavaScript之類的腳本語言來實(shí)現(xiàn)[21],但這也為低代碼的開發(fā)帶來了門檻。更有一些復(fù)雜場(chǎng)景和復(fù)雜業(yè)務(wù)邏輯,仍需要和專業(yè)開發(fā)配合才能實(shí)現(xiàn)[22],比如制造業(yè)中常見的需根據(jù)各種排程規(guī)則設(shè)定復(fù)雜排產(chǎn)算法等場(chǎng)景。
(1)元數(shù)據(jù)的持續(xù)優(yōu)化和擴(kuò)充問題
元數(shù)據(jù)規(guī)定數(shù)據(jù)類型、格式和范圍等信息,通過元數(shù)據(jù)定義把各種能力單元和業(yè)務(wù)單元封裝起來,使得開發(fā)者可以在低代碼開發(fā)平臺(tái)的可視化設(shè)計(jì)器中方便直觀地調(diào)用,而元數(shù)據(jù)的定義是相對(duì)固定的,這在一定程度限制了低代碼開發(fā)平臺(tái)的靈活性和能力邊界,使其難以滿足一些新的復(fù)雜業(yè)務(wù)的需求[23],需要持續(xù)優(yōu)化和擴(kuò)充元數(shù)據(jù)能力,以適應(yīng)新的業(yè)務(wù)需求和應(yīng)用場(chǎng)景,提升開發(fā)效率。而低代碼平臺(tái)的競(jìng)爭(zhēng)力也體現(xiàn)在對(duì)組件和元數(shù)據(jù)進(jìn)行持續(xù)優(yōu)化、積累和擴(kuò)充的能力上。
(2)OT與ICT融合的復(fù)雜性問題
要實(shí)現(xiàn)OT與ICT的高效融合,在實(shí)際實(shí)施中還面臨著很多挑戰(zhàn),例如各種總線各自有著不同的物理接口、對(duì)象字典及傳輸機(jī)制,使得即使能夠采用網(wǎng)絡(luò)標(biāo)準(zhǔn)化、接口協(xié)議標(biāo)準(zhǔn)化等技術(shù)進(jìn)行融合,在互操作層仍然會(huì)出現(xiàn)一些問題。這種復(fù)雜性使得在數(shù)據(jù)分析、訂單排產(chǎn)等IT 應(yīng)用層面會(huì)遇到一些障礙,增加應(yīng)用開發(fā)的工作量和難度。
工業(yè)互聯(lián)網(wǎng)的目標(biāo)是通過ICT技術(shù)和OT技術(shù)的深度融合,實(shí)現(xiàn)工業(yè)企業(yè)的數(shù)字化成功轉(zhuǎn)型。通過元數(shù)據(jù)及通用底層數(shù)據(jù)庫設(shè)計(jì)技術(shù)、可視化低代碼架構(gòu)技術(shù)、跨框架組件復(fù)用等低代碼開發(fā)技術(shù),結(jié)合工業(yè)協(xié)議云采技術(shù)、軟硬件解耦的5G邊云協(xié)同云控工業(yè)控制技術(shù)和AI工業(yè)大數(shù)據(jù)分析技術(shù)等,可以有效實(shí)現(xiàn)ICT技術(shù)和OT技術(shù)在面向工業(yè)互聯(lián)網(wǎng)的低代碼開發(fā)平臺(tái)的逐步融合,從而滿足工業(yè)互聯(lián)網(wǎng)數(shù)字化應(yīng)用快速開發(fā)的需要??紤]到工業(yè)企業(yè)數(shù)字化需求的復(fù)雜性,在將來,可進(jìn)一步優(yōu)化平臺(tái)的技術(shù)架構(gòu),進(jìn)一步優(yōu)化和擴(kuò)充面向工業(yè)互聯(lián)網(wǎng)的可復(fù)用組件和元數(shù)據(jù)能力,進(jìn)一步推進(jìn)ICT技術(shù)和OT技術(shù)在平臺(tái)的融合,使得面向工業(yè)互聯(lián)網(wǎng)的低代碼開發(fā)平臺(tái)成為實(shí)現(xiàn)工業(yè)企業(yè)數(shù)字化轉(zhuǎn)型的更有效手段。