軟件實戰(zhàn):從設(shè)備數(shù)據(jù)采集到可視化大屏)
在工業(yè)現(xiàn)場摸爬滾打了這些年組態(tài)軟件接觸了不少。從早期用國外商業(yè)大廠的產(chǎn)品到后來接觸國內(nèi)各種廠家的方案再到投入大量精力折騰開源項目這條路走下來最大的感受就是設(shè)備聯(lián)網(wǎng)和數(shù)據(jù)可視化這兩件事正卡在每一個想做信息化改造的車間和工廠的咽喉上。商業(yè)組態(tài)軟件功能確實強大但License費用、授權(quán)綁定、二次開發(fā)的封閉性以及那套老舊的渲染交互機制在當(dāng)下這個什么都講Web化、移動化的時代越來越顯得笨重。直到有一天我在整理一個污水廠監(jiān)控項目資料時偶然間看到了FUXA這個開源項目一下就被它的理念吸引住了。它全稱是Web-based Visualization and SCADA說白了就是一套完全跑在瀏覽器里的可視化組態(tài)和監(jiān)控系統(tǒng)。我當(dāng)時心里就咯噔一下這玩意兒要是真能扛住工業(yè)現(xiàn)場的糟蹋那可真是給咱們這些搞集成的人省了一大筆銀子和大把頭發(fā)。這篇文章不打算做那種羅列功能特性的說明文而是想從一個實際使用者的角度把這套系統(tǒng)的真正價值、技術(shù)底座、部署時的坑、以及如何把它打磨成一個能交付給甲方的東西掰開揉碎了講講清楚。1. FUXA是什么Web組態(tài)軟件的一股清流1.1 核心需求解析為什么傳統(tǒng)組態(tài)軟件越來越讓人頭疼傳統(tǒng)組態(tài)軟件的痛點干這行的兄弟們都再清楚不過了。首先是那套C/S架構(gòu)要在每臺看監(jiān)控的電腦上裝客戶端還要配置各種數(shù)據(jù)源驅(qū)動和運行環(huán)境。我記得早年間做一個項目光是在項目現(xiàn)場幾臺電腦上裝環(huán)境和調(diào)試驅(qū)動就耗掉了我大半天時間。其次是價格問題一個幾百點位的商業(yè)組態(tài)授權(quán)報價輕松破萬增加點位又是一筆費用。還有最讓我難受的一點是它那套圖形組態(tài)風(fēng)格按鈕、管道、儀表盤做出來跟2005年的網(wǎng)頁似的在給甲方領(lǐng)導(dǎo)匯報演示的時候視覺沖擊力太差方案再好也顯得沒檔次。而FUXA選擇了一條完全不同的路——Web可視化。整個系統(tǒng)由服務(wù)端和前端組成服務(wù)端負責(zé)采集數(shù)據(jù)、處理歷史、跑報警邏輯前端就是一套現(xiàn)代化的瀏覽器頁面用當(dāng)下最流行的Angular框架構(gòu)建。你在電腦上看到的畫面、交互、圖表跟你在手機上看到的是同一套東西完全響應(yīng)式不需要裝任何插件。這帶來的直接好處就是項目交付時甲方不用再糾結(jié)裝什么客戶端一個網(wǎng)址一個賬號密碼打開瀏覽器就能看現(xiàn)場。1.2 FUXA技術(shù)底座全解析從Node.js到圖形化編輯器的逆襲第一次在服務(wù)器上部署FUXA的時候我確實愣住了因為它跑在Node.js環(huán)境上這跟傳統(tǒng)PLC工程師和自動化集成商的認(rèn)知完全是兩個世界。但我們得清醒地認(rèn)識到以后工業(yè)互聯(lián)網(wǎng)的底座就是IT技術(shù)這是大勢所趨。FUXA的技術(shù)棧非常清晰如果你懂JavaScript和Node.js那么你就可以為它寫驅(qū)動、寫服務(wù)接口、做二次開發(fā)比看那些封裝得死死的商業(yè)組態(tài)SDK要痛快得多。核心構(gòu)建模塊大概是這個組成服務(wù)端Node.js負責(zé)處理設(shè)備通信內(nèi)置了ModbusTCP/RTU、OPC UA、BACnet等驅(qū)動也支持MQTT、HTTP API等物聯(lián)網(wǎng)協(xié)議接入同時還兼顧了用戶認(rèn)證、歷史數(shù)據(jù)存儲、報警判斷。前端Angular SVG這是最讓我驚喜的部分它把組態(tài)界面做成了所見即所得的方式。你在畫布上畫管道、閥門、電機實際上是在操作SVG圖形每一根線條、每一個變量都可以通過屬性面板綁定數(shù)據(jù)點。應(yīng)用內(nèi)存數(shù)據(jù)庫這個設(shè)計是我覺得FUXA在工程實踐中最聰明的地方。它的實時數(shù)據(jù)緩存管理、變量點表管理都跑在應(yīng)用內(nèi)存庫里讀寫速度快得飛起不像傳統(tǒng)的組態(tài)軟件要頻繁跟關(guān)系型數(shù)據(jù)庫打交道。它的可擴展性非常強如果你有一定的編程基礎(chǔ)完全可以在它的基礎(chǔ)上封裝自己的業(yè)務(wù)組件。我在集成一個數(shù)字化車間項目的時候就利用它的API接口把企業(yè)已有的ERP獲取到的工單信息直接推送給了產(chǎn)線看板這個功能要是放在傳統(tǒng)組態(tài)軟件上甲方不加個三五萬塊錢你根本做不下來。2. 快速上手五分鐘搭建一個可視化監(jiān)控Demo2.1 環(huán)境準(zhǔn)備與安裝Windows下的傻瓜式部署關(guān)于FUXA的安裝網(wǎng)上的資料普遍寫得比較簡略要么是讓你跑Docker命令要么是讓你用Linux部署。但工業(yè)現(xiàn)場很多情況是服務(wù)器就是一臺Windows機器甚至就是工控機現(xiàn)場工程師對Linux命令并不熟悉。在Windows下部署FUXA其實非常簡單。首先確保你機器上有Node.js環(huán)境建議安裝長期支持版本比如14.x或16.x這些年我測試下來這兩個版本最穩(wěn)。然后打開命令提示符執(zhí)行npm install -g fuxa/fuxa然后在你想要存放工程文件的目錄下運行fuxa終端會提示服務(wù)啟動成功默認(rèn)端口是1881。在瀏覽器地址欄輸入http://localhost:1881你就會看到初始的登錄界面。首次登錄的初始賬戶是admin密碼是admin進去之后第一件事就是改密碼這個之后細說。如果你覺得在全局環(huán)境安裝不舒服也可以在項目目錄里單獨建立FUXA運行環(huán)境mkdir my-fuxa-project cd my-fuxa-project npm init -y npm install fuxa/fuxa npx fuxa這兩種方式我都實際驗證過都能正常運行。只不過第一種方式比較適合隨手拿來測試用的環(huán)境第二種方式更適合正式項目因為你可以把工程文件跟源碼放在一起方便做備份和版本管理。2.2 Docker部署方式容器化讓交付變得無比省心如果說Windows部署是給調(diào)試甲方服務(wù)器用的那么Docker部署就是給你自己省心用的。我目前做項目交付的標(biāo)準(zhǔn)姿勢是在干凈的Linux服務(wù)器或者是NAS上用Docker Compose來組織整個監(jiān)控系統(tǒng)。FUXA在Docker環(huán)境下的運行只需要確保兩件事端口映射和數(shù)據(jù)持久化。下面是一份典型的docker-compose.yml配置可以直接抄作業(yè)version: 3 services: fuxa: image: frangoteam/fuxa:latest container_name: fuxa-server restart: unless-stopped ports: - 1881:1881 volumes: - ./fuxa_data:/usr/src/app/data - ./fuxa_backup:/usr/src/app/backup environment: - TZAsia/Shanghai在這里./fuxa_data目錄用來存放SQLite數(shù)據(jù)庫文件、工程配置、歷史數(shù)據(jù)。./fuxa_backup目錄存放快照備份。TZ環(huán)境變量一定要設(shè)置成Asia/Shanghai否則你在組態(tài)界面里看到的報警時間、趨勢曲線時間會比北京時間差8個小時這個坑我踩過排查了整整一個下午。配置好之后執(zhí)行docker-compose up -d服務(wù)就起來了。注意在Docker方式下如果后面你更新了FUXA鏡像版本一定要注意先備份fuxa_data目錄再替換鏡像。我有一次沒備份直接升級結(jié)果工程文件倒是還在但是歷史報警記錄全被覆蓋了那個項目里甲方要求保存三年數(shù)據(jù)真是欲哭無淚。2.3 系統(tǒng)初始化與License坑位避讓開源不等于免費FUXA這個項目采用了部分開源商業(yè)模式就是在核心功能免費的基礎(chǔ)上提供增強功能模塊收費的模式?;A(chǔ)版本也就是社區(qū)版你可以免費用于商業(yè)項目它包含了基礎(chǔ)的組態(tài)編輯、數(shù)據(jù)采集、報警顯示、趨勢曲線、歷史存儲等核心功能。這部分功能對于中小型應(yīng)用場景、幾十上百個點位完全夠用。但是要注意它就一個限制免費的社區(qū)版本雖然夠用但如果你想在生產(chǎn)項目里商用還是得仔細看清楚它的License說明和功能限制表格。某些高級功能例如報表功能、審計追蹤、冗余備份等是在PRO專業(yè)版功能模塊里鎖著的。FUXA項目目前的做法是代碼倉庫是全開放但PRO版本的安裝包需要你在它的官網(wǎng)商城購買序列號才能解鎖。這里要鄭重提醒一句網(wǎng)上有人把破解版?zhèn)鞯蒙窈跗渖裎覄衲悴灰?。工業(yè)監(jiān)控軟件涉及生產(chǎn)安全用盜版代碼出了事故后果很嚴(yán)重而且FUXA官網(wǎng)對PRO功能查得比較嚴(yán)一旦發(fā)現(xiàn)未經(jīng)授權(quán)的激活會直接影響項目驗收。所以我的建議是先評估項目需求如果只是常規(guī)的產(chǎn)線監(jiān)控、設(shè)備狀態(tài)采集和報警展示用社區(qū)版沒有任何問題如果甲方明確要求出詳盡的報表或者是做等保三級改造那可以直接考慮購買PRO授權(quán)畢竟相對于傳統(tǒng)商業(yè)組態(tài)軟件動不動大幾萬的報價FUXA這波操作簡直是白菜價。3. 核心功能深度實操從設(shè)備數(shù)據(jù)到三維可視化大屏的一次打通3.1 驅(qū)動配置詳解Modbus TCP、OPC UA和MQTT的實戰(zhàn)對比設(shè)備接入是組態(tài)軟件的靈魂FUXA在這方面的配置體驗我覺得可以給個好評因為它把驅(qū)動、設(shè)備、點位這三個概念分得清清楚楚。Modbus TCP是工業(yè)現(xiàn)場最廣泛使用的協(xié)議在FUXA里配置Modbus TCP并不復(fù)雜。首先在驅(qū)動區(qū)新建一個Modbus TCP Master配置好PLC或網(wǎng)關(guān)的IP地址和端口默認(rèn)502端口別改大多數(shù)設(shè)備都認(rèn)這個端口。然后開始新建設(shè)備比如你有一臺水泵控制柜通訊參數(shù)設(shè)置如下參數(shù)項配置值備注說明Slave ID1從站地址需跟PLC里設(shè)置保持一致IP地址192.168.10.30PLC控制器的實際IP端口502Modbus TCP默認(rèn)端口輪詢間隔1000ms默認(rèn)1秒讀一次實時性要求高可降到500ms超時時間3000ms網(wǎng)絡(luò)異常時判定超時斷開的時間閾值重試次數(shù)3超時后的自動重連嘗試次數(shù)建好設(shè)備后在設(shè)備下面添加變量你需要指定寄存器類型和地址。這里要注意FUXA的寄存器地址是0基址的也就是說你要讀PLC程序里定義的%MW100這個保持寄存器在FUXA里填的地址是99。還有數(shù)據(jù)類型要選對是16位有符號還是32位浮點選錯了顯示出來的數(shù)值完全是亂的。OPC UA的配置就更現(xiàn)代化了它天然支持復(fù)雜的節(jié)點命名空間和安全證書認(rèn)證。在配置OPC UA連接時你需要填Server的Endpoint地址還要處理證書信任問題。FUXA首次連接OPC UA服務(wù)器時需要雙方交換證書這時候你只需要在FUXA的配置界面里把目標(biāo)服務(wù)器的證書指紋導(dǎo)入信任列表就行了比起很多商業(yè)軟件它對這個流程的封裝已經(jīng)算是非常友好的。MQTT協(xié)議接入是智能傳感器和IOT網(wǎng)關(guān)的利器。你用MQTT接入一個溫濕度傳感器核心是配置好Broker地址、主題格式和QoS級別。FUXA會訂閱你設(shè)置的主題然后把載荷數(shù)據(jù)映射成點位值。我習(xí)慣在配置MQTT變量時直接選用數(shù)據(jù)解析里的JSON解析模板用$.temperature這種表達式就能拿到多層嵌套的JSON對象里的具體數(shù)值。3.2 可視化組態(tài)實操像搭積木一樣構(gòu)建你的車間大屏說到可視化組態(tài)很多人覺得FUXA不如有些專門的Web組態(tài)平臺那么“高大上”但我恰恰覺得它好就好在把工業(yè)現(xiàn)場最需要的那些控件和交互邏輯都給你打包好了。在FUXA的編輯器里左側(cè)是圖元庫包括基礎(chǔ)形狀矩形、圓形、線條、工業(yè)設(shè)備圖形電機、閥門、泵、液位計、儀表盤、報警燈、按鈕、文本框、圖片以及SVG動畫組件。圖形庫里元素不算特別豐富比不過那些砸了幾千萬研發(fā)的商業(yè)圖庫但應(yīng)付常規(guī)的工藝流程圖綽綽有余。如果你想做出更酷炫的效果可以直接自己用SVG畫FUXA對SVG的原生支持非常到位我可以把我在AI軟件里畫好的工藝設(shè)備圖直接復(fù)制粘貼到它的畫布上保留所有圖層和路徑信息然后給這個圖形的填充顏色和旋轉(zhuǎn)屬性綁定點位值。這就很靈活了。需要重點說明的是動態(tài)變量綁定的思路。組態(tài)軟件的功底不在于你會不會畫矩形和圓形而在于你懂不懂讓圖形“動”起來。在我做的那個污水廠監(jiān)控項目里有一個曝氣池的液位顯示。傳統(tǒng)做法是放一個數(shù)字文本框顯示當(dāng)前液位值太土了。我用兩個矩形一個做背景水一個做動態(tài)水面然后給“水面”矩形的Y坐標(biāo)和高度屬性綁定上位機采集到的液位變量通過縮放計算讓水面高度隨著液位真實值動態(tài)變化。同時我給這個“水面”矩形的填充色綁定了另一個表達式液位高于安全水位時顯示紅色低于安全水位時顯示綠色。整套操作下來甲方生產(chǎn)部長看到的效果就是一個實時變化的、帶顏色預(yù)警的工藝流程圖視覺上非常直觀。再舉一個動畫流量的例子。管道里的流體流動效果在很多組態(tài)軟件里需要做復(fù)雜的動畫幀定義。在FUXA里你可以給管道線條設(shè)置stroke-dasharray和stroke-dashoffset然后把stroke-dashoffset屬性綁定到一個循環(huán)遞增的計數(shù)器變量上這樣看起來就像管道里的水在流動。這不是什么高深算法但做出來的畫面動態(tài)感一下就出來了。保存工程時有個細節(jié)要記住一定要定期點擊“發(fā)布”按鈕生成運行時版本。因為FUXA的編輯器打開的是工程源文件而系統(tǒng)運行時讀取的是發(fā)布后的版本。如果你在編輯器里改了半天圖形和邏輯忘記點發(fā)布就關(guān)掉了那么頁面上看到的依舊是老版本。3.3 歷史數(shù)據(jù)與趨勢曲線用SQLite還是時序數(shù)據(jù)庫的思考監(jiān)控系統(tǒng)永不落伍的功能就是歷史曲線。FUXA內(nèi)置的歷史數(shù)據(jù)存儲邏輯默認(rèn)是寫入SQLite數(shù)據(jù)庫畫趨勢曲線時就查這個庫。在早期版本SQLite在處理高頻、大數(shù)據(jù)量的歷史數(shù)據(jù)時會有性能瓶頸尤其是一個幾十點位的設(shè)備密集記錄存儲長時間運行后查詢速度會明顯下降。不過我實測下來發(fā)現(xiàn)最近這幾個版本FUXA對SQLite的讀寫優(yōu)化做得越來越好了。它內(nèi)部實現(xiàn)了數(shù)據(jù)按時間分塊存儲和聚合查詢機制也就是說當(dāng)你查看一個較長時間跨度比如過去一周的趨勢曲線時它會把數(shù)據(jù)自動聚合成分辨率較低的點加快渲染速度。如果想要更專業(yè)的時序數(shù)據(jù)存儲可以在FUXA的配置里接入InfluxDB、TimescaleDB等外部時序數(shù)據(jù)庫來做對接。在趨勢面板的操作上FUXA也做得挺貼心。你可以同時拖拽多個變量進入同一個曲線面板每條曲線有自己的顏色和坐標(biāo)軸。配合時間范圍選擇按鈕最近1小時、24小時、7天、自定義時間基本能滿足絕大多數(shù)用戶查曲線、做工藝分析的需求。3.4 報警管理把信息推給該知道的人報警是做監(jiān)控系統(tǒng)繞不開的剛需FUXA的報警系統(tǒng)設(shè)計思路清晰且實用。報警配置主要有幾個要點變量、觸發(fā)條件、報警級別、消息內(nèi)容、恢復(fù)條件。在變量配置的報警相關(guān)屬性里你可以設(shè)置高高報、高報、低報、低低報等幾種類型的閾值還可以設(shè)置報警死區(qū)。死區(qū)這個參數(shù)非常重要假如你設(shè)置某設(shè)備溫度上限是80度觸發(fā)報警但現(xiàn)場溫度在79.9度和80.1度之間抖動沒有死區(qū)的話報警記錄會瘋狂彈窗有了死區(qū)比如正負0.5度溫度要降到79.5度以下才會解除報警。報警產(chǎn)生后你可以通過FUXA搭配發(fā)布訂閱消息中間件或者HTTP推送將報警事件轉(zhuǎn)發(fā)到企業(yè)微信、釘釘、短信平臺。我在項目里是把FUXA的報警事件通過HTTP協(xié)議推送到微信機器人只要報警狀態(tài)一觸發(fā)手機微信第一時間就彈消息并負責(zé)人比傳統(tǒng)聲光報警器要實時得多。4. 項目實戰(zhàn)復(fù)盤與排查技巧分享從0到1交付一個可視化監(jiān)控系統(tǒng)4.1 項目背景與方案選型甲方要什么和我們給什么幾個月前我接了一個老客戶的數(shù)字化車間改造項目。甲方是做精密零部件制造的車間里有幾十臺數(shù)控加工設(shè)備和十幾臺輔助設(shè)備空壓機、冷卻循環(huán)泵等生產(chǎn)管理部一直苦于設(shè)備狀態(tài)不透明開機和停機全靠人工現(xiàn)場巡查數(shù)據(jù)報表靠紙質(zhì)臺賬。他們提出的核心需求有三條第一實時掌握每臺設(shè)備的運行狀態(tài)、主軸負載、進給倍率、報警信息第二需要歷史曲線可以分析設(shè)備加工負荷趨勢第三最好能有一個車間總覽大屏領(lǐng)導(dǎo)進門就能看到整體開工率。接到這種需求我腦子里立刻浮現(xiàn)出FUXA。設(shè)備互聯(lián)層數(shù)控設(shè)備基本都支持OPC UA或者Modbus TCP協(xié)議不支持的用工業(yè)網(wǎng)關(guān)轉(zhuǎn)一下數(shù)據(jù)可視化層FUXA完全能承載大屏展示和趨勢分析成本層FUXA開源版零授權(quán)費用項目總成本大幅縮水這在我們做系統(tǒng)集成時是很大的競爭優(yōu)勢。4.2 從點位表梳理到組態(tài)交付的完整流程復(fù)盤項目實施的第一步是梳理點位表。我把所有參與聯(lián)網(wǎng)的設(shè)備統(tǒng)一編號整理出一份詳細的變量地址映射表這是最土但最有效的辦法。每個變量包含設(shè)備名、點位ID、寄存器地址、數(shù)據(jù)類型、讀寫屬性、報警上下限、單位名稱。這份表做扎實了后續(xù)在FUXA里建變量就是純粹的體力活了。第二步是調(diào)試驅(qū)動通信。先把一臺有代表性的設(shè)備接入FUXA確認(rèn)數(shù)據(jù)采集正常后再批量接入其他設(shè)備。這里強烈建議你不要一次性把50臺設(shè)備全配上否則出了問題根本沒法定位是網(wǎng)絡(luò)問題還是點表問題。我采用的策略是分片區(qū)逐步接入每接入一片設(shè)備就觀察一段時間數(shù)據(jù)穩(wěn)定性。第三步是設(shè)計組態(tài)畫面。車間總覽大屏我設(shè)計了三個主要區(qū)域頂部是車間綜合指標(biāo)卡總設(shè)備數(shù)、運行數(shù)、故障數(shù)、OEE中部是車間平面布局圖每個設(shè)備的圖標(biāo)按位置分布用顏色區(qū)分運行、停機、故障、離線狀態(tài)底部是動態(tài)運行的實時報警滾動條。這套大屏做下來效果完全超出了甲方的預(yù)期。他們說以前開會要把各個機臺的表格數(shù)據(jù)匯總起來說半天現(xiàn)在大屏上一目了然。4.3 高頻問題排查實錄與優(yōu)化建議在實際部署和運維過程中我總結(jié)了一些高頻出現(xiàn)的問題和解決路徑這幾個案例非常有代表性分享出來希望對各位有幫助。問題一數(shù)據(jù)采集掉線過一會兒自動恢復(fù)但始終不平穩(wěn)。排查經(jīng)歷這種現(xiàn)象排查起來特別折磨人。一開始我以為是現(xiàn)場網(wǎng)絡(luò)交換機有廣播風(fēng)暴拿筆記本接在現(xiàn)場抓包看結(jié)果網(wǎng)絡(luò)正常。后來懷疑是FUXA的輪詢線程出了問題就把日志級別調(diào)到DEBUG發(fā)現(xiàn)每次掉線前都有超時重試的記錄。仔細對比后發(fā)現(xiàn)原來是部分設(shè)備自帶的TCP連接數(shù)有限而FUXA默認(rèn)的并發(fā)輪詢策略會對某些老設(shè)備造成壓力。解決方案是把部分老舊設(shè)備的輪詢間隔從1秒調(diào)整到了3秒并且限制了單設(shè)備的最大并發(fā)請求數(shù)。調(diào)完之后通信再也沒掉過線。問題二趨勢曲線數(shù)據(jù)斷斷續(xù)續(xù)甚至在短時間內(nèi)出現(xiàn)跳變。當(dāng)時在查空壓機排氣壓力的歷史曲線時發(fā)現(xiàn)曲線在大多數(shù)時間平直但偶爾會有尖銳的波峰波谷。首先懷疑傳感器問題后來在FUXA的變量歷史里配置了數(shù)據(jù)變化率限制把超出物理極限的突跳值過濾掉。再配合報警死區(qū)的合理設(shè)置曲線就恢復(fù)正常了這提醒我一個事別急著懷疑硬件先看看是不是軟件采樣和統(tǒng)計邏輯的問題。問題三大屏在展廳的4K電視上展示時字體模糊布局錯位。FUXA默認(rèn)的畫布分辨率可能是針對普通顯示器設(shè)計的放到4K大屏上如果直接拉伸鋪滿會因為沒有等比縮放導(dǎo)致字體發(fā)虛。建議在組態(tài)前就確定好目標(biāo)分辨率和寬高比在畫布設(shè)置里鎖定為16:9例如1280x720或者1920x1080。在大屏上展示時用瀏覽器的窗口全屏模式配合FUXA的顯示自適應(yīng)選項這樣縮放才精確。問題四系統(tǒng)重啟后歷史記錄數(shù)據(jù)丟失一部分。這個坑主要出在SQLite寫盤的時序上。FUXA緩存了一部分實時數(shù)據(jù)在內(nèi)存里計劃定期寫入數(shù)據(jù)庫如果系統(tǒng)突然斷電緩存區(qū)里還沒落盤的數(shù)據(jù)就會丟失。解決方案一是配置不間斷電源二是調(diào)整歷史數(shù)據(jù)落盤策略把緩沖時間設(shè)置為較短的值例如5秒這樣最多丟5秒數(shù)據(jù)但會增加數(shù)據(jù)庫寫入頻率。我個人更推薦前者工業(yè)現(xiàn)場UPS幾乎是標(biāo)配。4.4 性能優(yōu)化與運維最佳實踐項目上線穩(wěn)定運行后不要以為事情就結(jié)束了運維才是長期活。有一個重要的性能調(diào)整參數(shù)FUXA服務(wù)端輪詢線程池的大小。默認(rèn)配置在處理少量設(shè)備和點位時沒問題但當(dāng)你接入超過上百臺設(shè)備、上千個點位時默認(rèn)線程數(shù)會顯得不夠用。你可以在服務(wù)端配置里適當(dāng)增加線程池大小同時留意服務(wù)器本身的CPU核數(shù)不要太拉胯。我實測下來一臺四核八線程的服務(wù)器跑兩千個點位加圖形界面渲染CPU占用能控制在百分之二十左右FUXA的優(yōu)化已經(jīng)相當(dāng)不錯了。再者建議定期備份工程文件和歷史數(shù)據(jù)庫。FUXA提供了快照備份功能在管理界面可以直接把整個工程打包成ZIP下載。我現(xiàn)在的習(xí)慣是每周五下班前進行一次手動快照并且配合NAS的定時任務(wù)把fuxa_data目錄增量同步到異地。畢竟工程文件是無價的設(shè)備壞了能修程序丟了就真的欲哭無淚了。另外訪問安全性方面雖然FUXA有用戶認(rèn)證機制但強烈建議你在生產(chǎn)環(huán)境前面再套一層Nginx反向代理配上HTTPS證書這樣既加密了通信又能通過Nginx的ACL策略控制訪問IP來源。默認(rèn)用HTTP明文傳輸在工業(yè)內(nèi)網(wǎng)還能接受但如果甲方要求公網(wǎng)訪問或跨地域監(jiān)控組網(wǎng)不加密就太危險了。5. 關(guān)于FUXA的一些思考與使用心得分享5.1 關(guān)鍵技術(shù)選型背后的設(shè)計邏輯FUXA采用Node.js做服務(wù)端在傳統(tǒng)工業(yè)軟件陣營里顯得格格不入但仔細想想這其實是一個極為精準(zhǔn)的定位選擇。Node.js的異步非阻塞I/O模型天然適合處理大量設(shè)備的并發(fā)采集和推送任務(wù)一個設(shè)備一個通信循環(huán)互不阻塞非常適合工業(yè)SCADA這種高并發(fā)低延遲的采集場景。而前端用Angular框架雖然學(xué)習(xí)曲線比Vue或者React更陡峭一些但Angular在大型復(fù)雜單頁應(yīng)用的架構(gòu)體系上確實更嚴(yán)謹(jǐn)TypeScript的靜態(tài)類型檢查在工業(yè)這種對穩(wěn)定性要求極高的環(huán)境里也能提前規(guī)避很多運行時錯誤。SVG矢量圖形組態(tài)方案的亮點在于矢量圖形意味著不管在什么分辨率的屏幕上縮放都不會失真而且SVG本身跟DOM結(jié)合非常緊密用它來做組態(tài)畫面的事件綁定和數(shù)據(jù)聯(lián)動比用Canvas更自然。Canvas圖像雖然渲染性能更強但做萬噸水處理的工藝流程圖需要大量交互點和圖形事件SVG還是更順手。5.2 學(xué)習(xí)成本評估從過來人角度聊聊該不該入坑如果你想上手FUXA我給出的建議是在自動化行業(yè)里它值得投入時間。對于純做PLC和電氣工程師背景的朋友第一次接觸Node.js和NPM生態(tài)可能會有點懵。但好消息是FUXA并不要求你從零開始寫代碼你只需要掌握以下技能節(jié)點看懂JSON配置結(jié)構(gòu)會用一點JavaScript表達式這個和Excel公式一樣拿來就能用熟悉SVG的基本圖形屬性填充顏色、坐標(biāo)、旋轉(zhuǎn)角度懂Modbus協(xié)議和點位映射邏輯。這些技能對任何一個搞過工控的人來說一個星期基本都能上手。當(dāng)你完成了第一個變量的點位采集和圖形綁定你會由衷感嘆原來監(jiān)控界面可以做得這么簡單。5.3 FUXA的擴展空間與邊界FUXA雖然很好用但也有能力邊界。它畢竟不是萬能的物聯(lián)網(wǎng)平臺如果你要做多租戶、大規(guī)模云邊協(xié)同、復(fù)雜的數(shù)據(jù)分析建模它并不擅長。但如果你就是要一臺服務(wù)器跑一個工廠的監(jiān)控大屏它就是那個最順手的工具。我目前正在做的一件事是把FUXA跟開源的時序數(shù)據(jù)存儲方案以及開源告警平臺整合嘗試構(gòu)建一套輕量級的開源MES框架。FUXA負責(zé)最底層的數(shù)據(jù)采集和可視化呈現(xiàn)時序數(shù)據(jù)庫負責(zé)長時間維度的大數(shù)據(jù)量存儲告警平臺負責(zé)全天候輪詢和事件通知分發(fā)。這套組合不僅極大地縮短了項目開發(fā)周期更把整個系統(tǒng)的可控權(quán)真正掌握在了自己手里這在過去用商業(yè)組態(tài)軟件的時代是幾乎不敢想象的。寫在最后也是幾句實在話回頭看看這幾年用FUXA的經(jīng)歷從最開始抱著試試看的心態(tài)測試到現(xiàn)在把多個交付級項目都跑在它上面我的態(tài)度已經(jīng)從一開始的懷疑轉(zhuǎn)變成了信賴。有一次項目上線初期半夜設(shè)備出故障車間主任打電話問情況。我打開手機上的FUXA頁面直接看到設(shè)備報紅的報警狀態(tài)和最近半小時的溫度飆升趨勢遠程指導(dǎo)現(xiàn)場人員快速排查避免了產(chǎn)線停產(chǎn)。那一刻我實實在在感受到一個成熟可靠的可視化組態(tài)系統(tǒng)對于生產(chǎn)管理帶來的價值是無法用具體金額來衡量的。最后再分享一個小技巧如果你需要在多個顯示器上展示不同的監(jiān)控畫面不需要部署多臺服務(wù)器直接在瀏覽器里打開多個標(biāo)簽頁每個標(biāo)簽頁通過短鏈接指向同一個FUXA服務(wù)端里的不同工程視圖互不干擾而且性能表現(xiàn)很穩(wěn)定。這一點在展廳展示方案中非常實用。如果你正準(zhǔn)備在某個項目里做設(shè)備監(jiān)控或者數(shù)字化車間改造不妨把FUXA納入你的技術(shù)備選池花一個周末時間跑一遍Demo你的心里就會有答案了。