Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
讀
近年來,隨著制造業全面開啟數字化轉型,亟需依托新一代信息技術打造全新的發展引擎,數字孿生技術作為信息技術發展的新焦點和眾多企業業務布局的新方向,能加速與數字、信息、通訊技術的融合,逐漸發展為一種基礎性、普適性的技術體系,其在裝備制造、汽車、化工、鋼鐵、制藥等行業的應用場景日益清晰。本文介紹了數字孿生的市場與應用情況,并重點盤點了國內外主流的數字孿生廠商與解決方案。
文章來源
本文由e-works編輯部吳星星原創發布。
Part 01
數字孿生市場與應用概覽
根據Grand View Research發布的數據,2021年,全球數字孿生市場規模為74.8億美元,預計從2022年到2030年,年復合增長率將達到39.1%;另根據國外調研機構MarketsandMarkets的預測數據顯示,到2023年數字孿生市場規模將達到157億美元,到2025年將突破260億美元。從這兩份研究數據可以看出,數字孿生市場很大,而我國又是世界上工業門類最為齊全的國家,本身就有豐富的制造業應用場景和市場,數字孿生技術幾乎可以延伸到制造業的每一個場景。
自2020年以來,西門子、達索系統、PTC、Ansys、羅克韋爾自動化、AVEVA等國際知名廠商不斷推進數字孿生的落地,在多行業多領域開展了具體的應用實踐,驗證數字孿生的應用價值和可行性:
西門子運用數字孿生技術,對西門子數控(南京)有限公司新工廠的規劃方案進行仿真建模,在虛擬環境中快速模擬未來工廠的運行情況,以便在規劃階段就避免在實際運營過程中可能出現的問題,與傳統的工廠規劃相比,該工廠從規劃到運營的總時間縮短近三分之一;
GE數字化風場利用PTC的數字孿生解決方案,為風場的資產、風機等構建數字孿生模型,對風場資產建立關聯知識圖譜,以及構建風機設備可視化、風機遠程實時監控、風機健康診斷、風機運營管理、風機維修管理等APP,驅動產品的研發創新;
達索系統與中國鐵路設計研究院將數字孿生技術應用在京雄鐵路建設中,將開山、修路等過程做仿真模擬,推演出對環境影響最小的綠色方案,最終實現從設計、施工到運營的三維數字化智能管理,創造出智能高鐵的“數字孿生”;
Ansys與阿里巴巴合作開展了變壓器數字孿生項目,利用數字孿生技術監測導線電壓、電流、油溫和泵的設計流量,實時計算磁芯和線圈溫度,實現數字和物理變壓器的融合;
業內某知名鋰電池生產企業與羅克韋爾自動化合作,借助羅克韋爾自動化Emulate3D數字仿真平臺的數字孿生體構建功能和虛擬調試功能,實現1:1真實場景還原,并達到企業擴產增效降本的目標;
AVEVA與挪威Aker Carbon Capture公司合作,基于數字孿生技術提供進一步提升碳捕集和處理能力的整體解決方案,以實現其一體化工程設計,并實現減少碳排放,推進循環經濟。
由此可見,數字孿生技術在制造業有著非常豐富的應用場景,貫穿產品的研發、制造、服役,乃至報廢回收再利用的全生命周期。其中,復雜裝備產品在運行維護階段的數字孿生應用價值最為明顯;在制造業工廠中,小到一個關鍵設備的零部件,例如機器人減速機,到裝備整機,例如工業機器人,再到自動化產線,乃至整個車間、整個工廠,數字孿生技術也有諸多應用場景,覆蓋不同的時空尺度。此外,數字孿生也可用于供應鏈管理領域,例如車間物流調度、運輸路徑優化等。
Part 02
國際主流數字孿生解決方案概覽
當前,國際上主流的數字孿生解決方案廠商主要包括GE Digital、西門子、PTC、Ansys、達索系統、AVEVA、羅克韋爾自動化、SAP、Altair、ESI Group、微軟、Maplesoft、Bentley、Unity等。在這些解決方案中,一些國際廠商基于自身的使能技術,打造了綜合性平臺來構建數字孿生的應用,例如GE的Predix、西門子的COMOS Platform、PTC的ThingWorx、Bentley的iTwin Platform;還有一些國際廠商則通過與多家廠商展開合作,提供數字孿生所需要的完整解決方案,譬如達索系統與ABB、Ansys和羅克韋爾自動化、Altair和ACROME、微軟和Ansys都曾進行過數字孿生方面的合作。
國際主流數字孿生廠商和解決方案
(按照首字母排序)
? Ansys
Ansys Twin Builder是Ansys的數字孿生解決方案,三大核心功能是模型建模、驗證和部署,重點研究和應用領域可以概括為數字孿生生產設備、設計階段的數字孿生、運行維護階段的數字孿生、基于經驗公式的數字孿生、基于仿真的數字孿生五個方向。在2022R1新版本中,Ansys Twin Builder通過充分結合物理傳感器和虛擬傳感器,實現跨學科多領域的系統仿真與數字孿生;通過Twin Deployer加速導出和部署數字孿生,實現產品的虛擬實驗,預測性運維,性能優化等增值服務。
Ansys Twin Builder功能組成 (來源:Ansys)
? AVEVA
AVEVA的數字孿生解決方案主要由工程、運營、績效相關的產品組合而成,包括AVEVA Unified Engineering、AVEVA Unified Operations Center、AVEVA Asset Performance Management、AVEVA PI System、AVEVA Process Simulation等軟件。AVEVA數字孿生解決方案貫穿整個生命周期的各個階段,包括從設計、構建到操作和維護。基于AVEVA數字孿生解決方案,可構建離散數字孿生,例如單個資產、產品、人員和單個流程任務;也可構建復合數字孿生,即將多個離散數字孿生結合在一起,形成更高水平的流程、功能和資產組;還可以構建組織數字孿生,用于優化更高階的企業級數字需求。
AVEVA劍維軟件的數字孿生產品組合 (來源:AVEVA)
? Altair
Altair數字孿生解決方案基于Altair 數字孿生集成平臺——Altair Activate,融合物理孿生體和數據孿生,以支持整個產品生命周期內的持續優化。Altair Activate是一個多學科的系統仿真工具,融合了物理和數據驅動技術,可實現數字孿生應用,幫助用戶在產品開發早期了解系統的整體性能并識別各子系統之間的相互關系。此外,Altair與ACROME合作,基于3D+1D系統仿真,推出了有關數字孿生的機電教育套件;在2022年,Altair與LG Electronics (LG)達成合作,計劃促進仿真自動化平臺的研發與構建,以及開展用于開發LG產品的數字孿生技術方面的實踐。
Altair數字孿生應用案例(來源:Altair)
? Bentley
Bentley數字孿生解決方案以iTwin Platform為基礎,提供數字孿生技術實現基于數據的決策和業務服務。iTwin Platform集成多種類型的原生數據格式,包括不同軟件廠商的三維模型、二維圖紙、實景模型、點云等,存儲在同一的結構化數據庫中,同時提供地理信息的數據接口,建立真實的“工程數字孿生”。其中,iTwin Viewer提供了高精度、高性能的三維信息模型瀏覽,Data Validation提供數據校驗服務,Version Compare提供數據變更管理和對比分析功能。此外,通過Bentley提供的iTwin.js開源庫,用戶可以拓展自己的數據服務、應用程序和數據接口。
iTwin Platform(來源:Bentley)
? 達索系統
達索系統的數字孿生解決方案主要依托于3D體驗平臺——3DEXPERIENCE,將CATIA、BIOVIA、SOLIDWORKS、SIMULIA、DELMIA等11款工業軟件集成到一個統一的數字化創新環境中,可提供一個貫穿設計、生產、制造、交付、運營等整個業務流程的完整解決方案。目前,達索系統的3D體驗平臺在中國商飛、中航工業、中國船舶、三一重工、阜外醫院等行業龍頭企業得到成功應用,然后不斷地在其他行業中復制,幫助企業提升整體價值。
3DEXPERIENCE產品組合 (來源:達索系統)
? ESI Group
ESI Group提出了混合孿生的數字孿生概念,是由虛擬和數字組成,主要優勢是建立了一個額外的、互補的虛擬模型,該模型必須以物理為基礎,并描述因果關系。ESI Group現有的數字孿生解決方案是Hybrid Twin混合孿生技術,可以結合物理模型和實時接收的數據構建特定模型,從而可以創建和預先認證研發產品、驗證產品的性能,還可以預測其在維護過程中的維護需求,成功減少研發階段的物理試錯,以及后期的維護和安全問題。ESI Group在電動汽車部署Hybrid Twin混合孿生技術,實現了電動汽車40%的續航里程增長,同時提供了最高的座艙舒適度和安全性。
ESI Hybrid Twin介紹 (來源:ESI Group)
? GE Digital
GE Digital的數字孿生解決方案是基于Predix平臺提供服務,整合Proficy、APM、OPM、iFIX、Historian等軟件服務,并將設備機理模型和數據驅動分析結合起來構建數字孿生體。尤其,GE Proficy數字工廠軟件家族兼顧了工業應用的穩定性和安全性,同時整合了IT行業最新的先進技術,有助于用戶更好地構建和應用數字孿生。目前,GE將已有的大量資產設備數據和模型疊加,通過Predix平臺,提供了一個通用的數字孿生體模型目錄,包括多個工業數據分析模型以及超過300個資產和流程模型。用戶可以利用現有的通用模型進行模型構建、仿真、訓練,從而快速構建數字孿生體,并可在現場運行或在云端大規模運行,將模型推向使用端,然后再將它們產生的信息傳回云端。
GE Digital的電網數字孿生案例 (來源:GE Digital)
? 微軟
微軟的數字孿生解決方案是一系列與數字孿生相關的服務組合,是作為一個整體的Azure數字孿生服務集,包括Azure IoT、Azure Digital Twins、Azure Functions等工具。換句話而言,微軟所推出的數字孿生解決方案,不僅僅只具有單一的數字孿生技術服務能力,而是一個能夠與各種數字化平臺技術集成,構建跨行業、且端到端就緒的數字孿生解決方案的開放平臺服務。該解決方案可從智能制造、智能樓宇等行業“復用”到醫療、農業、教育、能源等行業,由此賦能并加速各行各業的企業數字化轉型。
微軟數字孿生服務過程(來源:微軟)
? Maplesof
Maplesoft數字孿生解決方案基于MapleSim軟件,提供一種不需要現場和物理機器就能設計、測試和優化機器控制代碼的虛擬調試,實現基于仿真電機選型、PLC代碼測試、離線和在線仿真等,消除設備設計中的猜測。例如,OEM廠商可以虛擬復現問題、診斷原因、并通過修改機器的控制代碼解決噪音、振動、意外故障等問題。此外,Maplesof還提供交鑰匙工程服務解決方案,幫助用戶創建數字孿生并實施虛擬調試,進而診斷、修復和優化機器性能。
使用MapleSim創建數字孿生 (來源:Maplesoft)
? PTC
PTC的數字孿生解決方案是基于PTC的數字主線和數字孿生平臺,由Creo CAD數字設計平臺、Windchill PLM數字主線平臺、Vuforia增強現實平臺、Servigistics SLM服務生命周期管理平臺、Integrity ALM軟件生命周期管理平臺、ThingWorx物聯網與分析平臺等數字技術產品形成了整合的解決方案,打通了需求、采購、質量與管控、市場營銷、制造工廠、售后和召回等產品生命周期涉及的所有業務部門,形成了完整的數字主線,幫助用戶創建其業務的數字和實體之間的閉環。
基于數字孿生的產品研制及運營模式 (來源:PTC)
? 羅克韋爾自動化
羅克韋爾自動化的Emulate3D數字孿生解決方案,是通過數字孿生技術仿真建模,從而改進系統規劃和決策的一款數字自動化流程設計的仿真軟件。該軟件使客戶在交付最終設計之前,對機器和系統進行虛擬測試,從而評估物理資產真實運行的狀態和性能,實現產線的快速部署,并避免設計、試運轉和啟動過程中的意外。需要指出的是,Emulate3D是羅克韋爾自動化在2019年收購的一款軟件,收購之后也成為FactoryTalk DesignSuite工廠自動化系統設計軟件的一部分,可以實現對整個工廠自動化控制系統進行虛擬仿真和虛擬調試,還可以利用工廠的數字孿生模型對員工進行培訓,降低工廠運營的風險。
基于Emulate3D的原型機驗證和虛擬測試 (來源:羅克韋爾自動化)
? 西門子
西門子的數字孿生解決方案眾多,涵蓋從設計工具、虛擬仿真、制造運營管理到工業自動化、物聯網平臺等關鍵技術領域,其數字孿生相關的軟件產品有PlantSight、COMOS Platform、Xcelerator等。PlantSight是西門子與Bentley Systems聯合開發的流程行業解決方案,它能將原始數據轉換為一個完整、一致且動態的數字孿生,幫助企業做出快速、合理的決策;COMOS Platform具有各種功能模塊,覆蓋工廠全生命周期,從設計、采購、施工、數字化移交到運維、管理,都在同一個工程數據平臺上進行,并且具有與AVEVA,SPI,PDMS等多種軟件通信的數據接口;Xcelerator是西門子于2022年發布的數字商業平臺,具有閉環的數字孿生、個性化配置、靈活開放的生態等關鍵特征,可用于工業、樓宇、電網和交通領域不同規模的企業的數字化轉型和價值創造。
西門子數字化孿生架構圖(來源:西門子)
? SA
SAP數字孿生解決方案與SAP推出的統一商業網絡戰略相契合,利用實時ERP、先進的分析和成功的網絡解決方案,譬如Ariba Network,SAP Asset Intelligence Network,SAP Logistics Business Network和SAP Fieldglass,并通過開放和互聯的商業網絡,交付整合信息,幫助企業打造韌性供應鏈,提高敏捷性。同時,SAP 數字孿生解決方案也與SAP啟動的Industry 4.Now戰略高度契合,借助“Industry 4.Now”,SAP將幫助企業打造一條真正的數字主線,貫穿智能產品和資產的整個生命周期,從設計到運維,并將獲得的信息及時反饋到業務流程里。
SAP數字孿生解決方案在橋梁預測性維護的應用
? Unity
Unity數字孿生解決方案主要由Unity Reflect、Unity Manufacturing Toolkits(UMT)等產品組成。其中,Unity Reflect用于構建數字孿生應用;UMT是Unity于2022年正式發布的專為零基礎用戶定制的智能制造數字孿生工具包,旨在幫助無建模基礎與代碼撰寫經驗的從業者迅速構建智能制造數字孿生系統。UMT從模型自動優化處理、約束導入和動作調試等基礎操作開始建立對應真實產線的虛擬模型,繼而用戶在可視化編程界面中輕點鼠標實現信號與模型的綁定,同時,輔以UMT豐富的材質、組件、模型和UI庫,用戶可構建高質量的虛實同步數字化柔性產線。
UMT數字孿生系統整體搭建流程 (來源:Unity)
Part 03
國內主流數字孿生解決方案概覽
在國內,主流的數字孿生解決方案廠商包括美云智數、華龍迅達、寄云科技、力控科技、精航偉泰、華力創通、同元軟控、優也科技、觸角科技、子虔科技、優锘科技、51world、卡奧斯、摩爾元數、易知微、木棉樹軟件等。由于中國數字孿生市場仍處于早期發展階段,且受限于建模、仿真和基于數據融合的數字線程等技術瓶頸,國內數字孿生解決方案廠商目前主要針對特定的應用場景或行業提供服務。
國內主流的數字孿生廠商和解決方案
(按照拼音排序)
觸角科技
觸角科技的數字孿生解決方案是以感知MR/VR數字孿生協同平臺為基礎,通過結合MR/VR人機交互技術、5G網絡與AI技術,為工業4.0、智慧城市背景下的數字孿生構建了高效率、低成本的遠程三維可視化協同工作平臺。觸角科技的數字孿生解決方案具有多重優勢,包括采用5G+MR/VR,虛實融合流程引導,遠程實時協同工作,操作流程記錄共享,全局實時監控,第一視角視頻指導,可視化場景快速制作,資源與數據云端管理,訓練數據快速生成,真實場景算法遷移等。
利用感知MR/VR數字孿生協同平臺 實現場景三維可視化 (來源:觸角科技)
華龍迅達
華龍迅達木星數字孿生平臺(Jupiter Digital Twin Platform)是華龍訊達研發的基于物理模型、傳感器、運行歷史等數據,集成多學科、多物理量、多尺度、多概率的仿真過程的數據管理平臺,實現產品數據在虛擬空間中完成映射。基于該平臺可反映相對應的實體裝備的全生命周期過程,數字工廠物理空間的控制、運行、質量、物耗、能耗等數據,在虛擬空間中建立實時鏡像進行虛擬制造仿真,并將仿真結果作用于物理空間現場,助力企業提升資源優化配置、生產過程控制、均質生產保障、柔性制造和敏捷生產等能力。
設備數字孿生自動完成故障報警及診斷 (來源:華龍迅達)
華力創通
華力創通提供基于數字孿生體的數字工程解決方案,通過數字技術應用和集成創新,聚焦智慧+行業場景的創新應用,服務于數字經濟和用戶數字化轉型。同時,華力創通數字孿生平臺具有“一網多端、中臺接入、多源驅動、決策智能”特點,通過運用新一代數字技術,結合“端邊云網腦”五位一體的底座平臺,對全域運行數據進行實時匯聚、監測、治理和分析,構建典型通用的數字孿生系統,全要素感知輔助宏觀決策指揮。
華力創通數字工程業務全景圖 (來源:華力創通)
寄云科技
寄云科技為工業企業提供了基于數據智能的數字孿生開發方案。一方面,寄云科技提供了工業數據采集和邊緣計算能力,幫助企業實現大型設備實時狀態的采集和狀態監測;另一方面,針對大型關鍵設備的故障診斷和預測,寄云科技提供了豐富的故障庫,以及基于機器學習的故障診斷、健康評估和壽命預測能力;同時,還提供了工業數據建模工具以及工業可視化開發工具,實現對設備可靠性、生產性能和效率等關鍵指標的深度分析。此外,寄云科技還與安世亞太合作開發基于仿真模型+物聯網監測的數字孿生解決方案,幫助企業實現精準且全面的狀態監測和關鍵指標的性能預測。
寄云科技與安世亞太合作開發的 數字孿生解決方案架構(來源:寄云科技)
精航偉泰
精航偉泰推出基于模型操作系統的數字孿生虛擬實驗室ModelStudio,為用戶提供基于MBSE數字孿生的數字化產品集成開發及仿真驗證環境。用戶利用ModelStudio中的ModelBuilder組件,將不同維度的仿真模型以及不同尺度的子數字孿生體模型,編譯鏈接為系統的數字孿生體模型,完成航天器、無人機、機器人以及無人車等智能無人裝備的數字孿生體設計。同時,通過ModelStudio中的數字孿生體模型操作系統ModelOS組件,來運行仿真用戶構建的無人裝備數字孿生體模型,大幅提升智能無人系統的創新能力與研發效率,進而實現智能復雜系統設計“所見即所得”。
基于數字孿生虛擬實驗室ModelStudio產品的 應用示范(來源:太空工廠)
卡奧斯
卡奧斯的數字孿生解決方案是D3OS,該方案融合了物聯網、大數據、人工智能等技術,可實現物理世界與虛擬世界1:1的實時高保真的可視、可管、可預測。基于D3OS,企業可通過物聯網平臺采集企業海量設備狀態數據;通過數據主線平臺匯集企業系統數據、工廠設備數據、傳感器數據、人員管理數據以及供應鏈數據等多方數據;通過工業智能平臺深度學習、強化學習等人工智能算法,提供企業資源優化配置策略和建議;通過數字孿生平臺實現高保真動態數字孿生效果的呈現。
卡奧斯D3OS數字孿生產品架構 (來源:卡奧斯)
力控科技
力控科技數字孿生工廠解決方案是通過集成三維可視化技術、快速建模技術、工廠設備實時狀態監控技術、攝像監控技術等,實現三維數字孿生工廠的整體管理。三維數字孿生工廠平臺將車間三維高精度模型、工藝流程、設備屬性、設備實時數據,以及工廠運營管理數據等進行融合,直觀地展示生產車間的工藝流程,實現車間生產的遠程控制管理,提高車間的運營管理效率。同時為客戶提供完整的、高附加值的產品解決方案,實現企業的智能化與精細化管理。
中深層地熱能供暖數字孿生平臺系統架構圖 (來源:力控科技)
美云智數
美云智數以工業仿真(MIoT.VC)系統為內核,形成了工廠決策駕駛艙、基于權限的運營管理、車間級虛實聯動、設備狀態/視頻監控、廠區鳥瞰總覽、物流路線可視化、產線數據可視化、員工操作VR培訓等一系列數字孿生解決方案。在數字工廠建設方面,美云智數MIoT.VC采用“虛實聯動+數字孿生”的形式進行3D工廠布局和整體規劃,并不斷滾動進行仿真規劃設計、評估驗證和更改。經過多年實踐,數字孿生工廠應用實現了設備聯機、虛實結合、真實互動、設備故障預警和維修提醒。
數字孿生實踐價值(來源:美云智數)
摩爾元數
摩爾元數的數字孿生解決方案基于Wis3D數字孿生系統,運用WebGL技術、3D加速渲染,拖拽UI與3D模型庫,快速搭建虛擬應用場景。Wis3D數字孿生系統具有“多類型終端適配、豐富的行業模板、高開發效率、技術門檻要求低”等特點,可面向工業、能源、水務以及智慧地球、城市、園區等領域構建三維可視化場景。通過與工業現場進行數據集成與融合,將物理車間進行數字化鏡像,并對企業生產過程進行實時仿真、預測及優化決策,Wis3D數字孿生系統可為企業柔性生產和快速決策提供技術支持。
Wis3D數字孿生系統介紹(來源:摩爾元數)
木棉樹軟件
木棉樹軟件的數字孿生解決方案基于數字孿生引擎MMS3D,為Web可視化提供豐富的展現形式和視覺效果。數字孿生引擎MMS3D采用Javascript語言,基于mms3d圖形引擎和mmsDT-5.0可視化開發平臺,webgl標準B/S架構,前端采用HTML5和JavaScript技術作為研發基礎,產品開發的二次代碼及模型、程序、操作手冊等項目源文件全部提供于客戶,既可部署在云端,也可本地化部署。通過聚焦工業數字孿生的生產管控、智慧城市的監控運維等可視化應用領域,木棉樹軟件產品的模塊組態化形式可以滿足全要素智慧場景的構建。
數字孿生引擎MMS3D架構 (來源:木棉樹軟件)
同元軟控
同元軟控數字孿生解決方案依托MWORKS平臺,通過MWORKS.Sysplorer和MWORKS.Syslab軟件進行數字孿生體的建模和仿真,為企業提供數字孿生體機理-數據高精度模型開發、管理、運行和應用服務。針對數字孿生體監測、評估、預測、優化與控制典型應用場景,MWORKS平臺提供可定義、可組構、可交互的數字孿生應用服務。該解決方案具有“多層級、多物理、多尺度高保真數字孿生體構建,規范化、流程化數字孿生體評估,基于單一數據源的數字孿生體存儲與管理,組件化、服務化的場景驅動數字孿生體應用”的特點。
同元軟控數字孿生技術框架 (來源:同元軟控)
51world
51world圍繞3D圖形及物理仿真構建核心技術,打造了一個數字孿生PaaS平臺WDP,兩款SaaS產品——提升企業營銷效率的元宇宙產品51Meet和幫助自動駕駛訓練的仿真產品51Sim,以及系列面向智慧城市、園區、交通等行業的數字孿生應用51ISE、51TOC和51CIM。其中,數字孿生Paas平臺WDP是一款致力于為各行業提供“低門檻、高質量”的數字孿生創作平臺,可以用無代碼的方式進行編譯,并且在PC端、VR/AR端、手機端的應用。
數字孿生PaaS平臺WDP架構圖(來源:51world)
優也科技
優也科技的數字孿生解決方案是以大數據、人工智能、云原生為技術引擎,以基礎工業數據操作系統 Thingswise iDOS為內核,通過數字孿生模型框架,高效整合工業現場數據,形成面向基礎工業企業提升生產運營水平、能源利用水平、設備運營能力等系列工業智能APP應用系統。優也科技基于數字孿生框架的分層解耦架構,大大降低開發難度,有效支撐工業數據、知識與應用的重用復用與協同共建,實現由工業知識到模型、由模型到應用的高效轉化。
基于數字孿生技術的應用案例展示 (來源:優也科技)
優锘科技
優锘科技提供一站式數字孿生可視化管理平臺,利用數字孿生引擎和工具平臺——ThingJS低代碼開發平臺、ThingJS零代碼開發平臺、ThingStudio森工廠數字孿生工具鏈,在數字世界中“復刻”現實的實體對象,并進行仿真、監測、分析和控制,實現可視化、智能化、人性化、眾創化的創新管理模式。在制造業方面,優锘科技智慧工廠管理平臺基于數字孿生的理念,集成工廠生產、經營、安全、監控、設備等業務系統的數據,結合三維仿真技術,創建虛擬數字孿生工廠,實現對現實世界的全域感知、鏡像再現,在數字孿生世界里構建智慧工廠各類智能應用。
森工廠ThingStudio數字孿生工具鏈 (來源:優锘科技)
易知微
易知微的數字孿生解決方案以EasyV數字孿生可視化搭建平臺為核心,結合WebGL、3D游戲引擎、GIS、BIM、CIM等技術,助力各行各業快速搭建實時數字看板、數字駕駛艙、數字孿生等場景的可視化應用,幫助客戶實現數字化管理。作為一款業務人員開箱即用的低代碼可視化搭建平臺,EasyV主要由可視化編輯器、地理信息引擎、統一數據源管理這三部分功能板塊構成。平臺內置200+官方自研可視化標準組件素材,同時也接入了ECharts、Make A Pie等第三方開源組件,素材廣場中還擁有超過1000+的行業應用模板可供用戶直接使用。
EasyV數字孿生低代碼搭建平臺 (來源:易知微)
子虔科技
子虔科技推出的數字孿生協同平臺不僅可鏈接各種PLM、MBSE、CAX、BOM、ERP、MES、CRM系統,兼顧公有云及私有化部署,還可提供全面的應用開發接口。同時,基于子虔科技數字孿生協同平臺打造的Zixel開放平臺,由數字協同平臺Z-collaborate、數字空間平臺Zetaverse、以形搜形Z-matrix和數據輕量化處理服務Zeta.Realink組成,向合作伙伴及開發者全面開放,高效集成。此外,子虔科技的數字孿生云平臺,通過底層平臺將三維建模、數據中臺接入能力、異構數據實時處理能力、游戲級渲染、XR交互等眾多技術跨界整合,為傳統行業帶來價值。
數字協同平臺Z-collaborate核心功能 (來源:子虔科技)
Part 04
總結與展望
就現階段而言,盡管數字孿生技術的應用前景非常廣闊,需求日益高漲,但目前數字孿生技術的應用還存在諸多問題和挑戰,例如使用場景復雜導致的應用深度不足,成熟度不高;由于數據采集設備的不一致性以及有限的時間同步精度,數字孿生技術在實際應用中會產生失真與噪聲;先進算法和各類軟件的整合;數字孿生解決方案整體實施成本高昂,進入門檻高;數字孿生的專業人才與技術研發力度有限。但是,隨著傳感器、物聯網、軟件算法等技術的進步,以及各大解決方案廠商對數字孿生技術的持續探索與完善,數字孿生必將為工業制造和未來生活帶來無限可能。
載:https://www.2cto.com/kf/201609/547889.html
QUrl 類提供了一個方便的接口使用 URLs。
它可以解析和構造編碼和未編碼形式的 URLs。QUrl 也支持國際化域名(IDNs)。
最常見的使用QUrl 的方式是通過構造函數來初始化,傳遞一個 QString 參數。
QUrl url("https://github.com/");
然而,也可以使用 setUrl()
QUrl url;
url.setUrl("https://github.com/");
也可以逐漸地構造 URL,通過調用 setScheme()、setUserName()、setPassword()、setHost()、setPort()、setPath()、setQuery() 和 setFragment()。一些方便的函數也可供使用:setAuthority() 設置用戶名、密碼、主機和端口。setUserInfo() 設置用戶名和密碼。
URLs 可以用兩種形式表示:編碼或未編碼。未編碼形式適用于顯示給用戶,編碼形式通常會發送到一個 Web 服務器。例如,未編碼的URL "http://bühler.example.com/List of applicants.xml" 將被發送到服務器為 "http://xn--bhler-kva.example.com/List%20of%20applicants.xml" 。
可以使用 toString() 來獲取 URL 人類可讀的表示。這種表示方法適合以未編碼形式將 URL 顯示給用戶。然而,編碼的形式由 toEncoded() 返回,僅供內部使用,傳遞給 Web 服務器、郵件客戶等。兩種形式在技術上正確、明確地表示相同的 URL - 事實上,傳遞任何一種形式給 QUrl 的構造函數或使用 setUrl() 都將產生相同的 QUrl 對象。
QUrl 符合 RFC 3986 (統一資源標識符:通用的語法)中的 URL 規范,包括 RFC 1738 (統一資源定位器)中方案的擴展。如果 QUrl 中的折疊規則符合 RFC 3491 ,它還兼容 file URI specification 來自 freedesktop.org,提供使用 UTF-8(IDN 要求) 本地編碼編碼的文件名。
RFC 3491 是“Nameprep: A Stringprep Profile for Internationalized Domain Names (IDN)”,描述了如何準備一個國際化域名,包括對一個域名字段進行映射、正規化以及禁止性過濾等等操作。
在 URL 解析或使用單獨的 setter 函數(例如:setScheme()、setHost() 或 setPath())設置 URL 的組成部分時,QUrl 能夠檢測許多錯誤。如果解析或 setter 函數成功,任何先前記錄的錯誤條件將被丟棄。
默認情況下, QUrl 的 setter 函數操作在 QUrl::TolerantMode 解析模式下,這意味著他們接受一些常見錯誤和不實數據。解析的另一種方式是 QUrl::StrictMode,這適用于進一步檢查。詳見 QUrl::ParsingMode 描述不同的解析模式。
QUrl 只檢查符合規范的 URL。它并不試圖驗證被處理程序預期的高層協議的 URLs 格式。例如,下面的 URIs 都被 QUrl 認為是有效,即使在使用時他們不合理:
"http:/filename.html" "mailto://example.com"
當解析器遇到錯誤時,它通過信號事件 isValid() 返回 false,并且 toString() / toEncoded() 返回一個空字符串。如果需要將 URL 未能解析的原因顯示給用戶,可以通過調用 QUrl 的 errorString() 來獲得錯誤條件。注意:這個信息是高度技術性的,可能對于用戶沒有意義。
QUrl 僅能夠記錄一個錯誤條件。如果找到一個以上錯誤,沒有定義報告哪個錯誤。
遵循這些原則,以避免在處理 URL 和字符串時,出現錯誤的字符轉換:
當從一個 QByteArray 或一個char * 創建包含 URL 的 QString 時,記得要用 QString::fromUtf8()。
scheme
scheme 指定使用的傳輸協議,它由 URL 起始部分的一個或多個 ASCII 字符表示。scheme 只能包含 ASCII 字符,對輸入不做轉換或解碼,必須以 ASCII 字母開始。
scheme 嚴格兼容 RFC 3986:scheme=ALPHA *( ALPHA / DIGIT / “+” / “-” / “.” )
協議描述file資源是本地計算機上的文件。格式:file:///,注意后邊應是三個斜杠。ftp通過 FTP 訪問資源。格式:FTP://gopher通過 Gopher 協議訪問該資源。http通過 HTTP 訪問該資源。格式:HTTP://https通過安全的 HTTPS 訪問該資源。格式:HTTPS://mailto資源為電子郵件地址,通過 SMTP 訪問。格式:mailto:MMS通過支持MMS(流媒體)協議的播放該資源(代表軟件:Windows Media Player)。格式:MMS://ed2k通過 支持ed2k(專用下載鏈接)協議的P2P軟件訪問該資源(代表軟件:電驢)。格式:ed2k://Flashget通過 支持Flashget:(專用下載鏈接)協議的P2P軟件訪問該資源(代表軟件:快車)。格式: Flashget://thunder通過 支持thunder(專用下載鏈接)協議的 P2P 軟件訪問該資源(代表軟件:迅雷)。格式: thunder://news通過 NNTP 訪問該資源。
下圖顯示了一個 URL,其 scheme 是 ftp:
<喎?"/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPtKqyejWwyBzY2hlbWWjrMq508PS1M/Ct73KvaO6PC9jb2RlPjwvY29kZT48L2NvZGU+PC9jb2RlPjwvY29kZT48L3A+DQo8cHJlIGNsYXNzPQ=="brush:java;"> QUrl url; url.setScheme("ftp");
Authority
URL 的 authority 由用戶信息、主機名和端口組成。所有這些元素都是可選的,即使 authority 為空,也是有效的。
格式:username:password@hostname:port
用戶信息和主機由'@' 分割,主機和端口由 ':'分割 。如果用戶信息為空,'@' 必須被省略。盡管端口為空時,允許使用 ':'。
host:指存放資源的服務器的域名系統(DNS)主機名或 IP 地址。
port:整數,可選,省略時使用方案的默認端口,各種傳輸協議都有默認的端口號,如 HTTP 的默認端口為80。如果輸入時省略,則使用默認端口號。有時候出于安全或其他考慮,可以在服務器上對端口進行重定義,即采用非標準端口號,此時,URL 中就不能省略端口號這一項。
user info
user info 指用戶信息,是 URL 中 authority 可選的一部分。
用戶信息包括:用戶名和一個可選的密碼,由 ':' 分割。 如果密碼為空,':'必須被省略。
path
由零或多個 / 隔開的字符串,一般用來表示主機上的一個目錄或文件地址。在 authority 之后,query 之前。
對于沒有層級的 schemes,路徑將是 scheme 后的所有部分,像下面這樣:
query
query 指查詢字符串,可選,用于給動態網頁(例如:使用 CGI、ISAPI、PHP/JSP/ASP/ASP、.NET 等技術制作的網頁)傳遞參數,可有多個參數,用 & 隔開,每個參數的名和值用=隔開。
構建一個查詢尤其方便,請參考:Qt之QUrlQuery
fragment
fragment 指定網絡資源中的片斷。是 URL 的最后一部分,由'#' 后面跟的字符串表示。通常指的是用于 HTTP 頁面上的某個鏈接或點。
例如:一個網頁中有多個名詞解釋,可使用 fragment 直接定位到某一名詞解釋。
fragment 有時也被稱為 URL“引用”。
傳遞一個 QString()(null 字符串)將取消 fragment 的設置。傳遞一個參數 QString(“”)(空而非 null 字符串)將 fragment 設置為一個空字符串(和原始 URL 一樣,只有一個 "#")。
相對路徑
調用 isRelative() 可以判斷 URL 是否是相對的。一個相對的 URL 可以被轉變通過將它作為參數傳遞給 resolved(),會返回一個絕對 URL。isParentOf() 用來確定一個 URL 是否是另一個的 parent。
QUrl resolved(const QUrl &relative) const
如果 relative 不是一個相對 URL,該函數會直接返回 relative。否則,這兩個 URL 的路徑會進行合并,返回的新 URL 會有 base URL 的 scheme 和 authority。
合并后的路徑,就像下面這樣:
QUrl baseUrl("http://qt.digia.com/Support/"); QUrl relativeUrl("../Product/Library/"); qDebug(baseUrl.resolved(relativeUrl).toString()); // 打印 "http://qt.digia.com/Product/Library/"
調用 resolved() 使用 "..",返回原始目錄的上級目錄。同樣,使用 "../.." 將返回上上一層目錄。如果 relative 是 "/",路徑會變成 "/"。
用戶輸入
[static] QUrl fromUserInput(const QString &userInput)
可以被扣除,返回一個 userInput 指定的有效 URL;如果不能,則會返回一個空 QURL。
大多數應用程序,可以瀏覽網頁,允許用戶輸入一個 URL 形式的簡單字符串。此字符串可以手動輸入到地址欄,從剪貼板中獲得,或者通過命令行參數傳遞。
當沒有一個有效的 URL 字符串時,執行最好的猜測,使各種web相關的假設。
當字符串對應系統上的一個有效文件路徑時,會構造一個 file:// URL,使用 QUrl::fromLocalFile()。
如果不是這種情況,試圖把字符串變成一個 http:// 或 ftp:// URL。這時,后者字符串從以 'ftp' 開始。結果然后通過 QUrl 的 tolerant 解析器傳遞,如果成功,則會返回一個有效的 QUrl;否則,返回 QUrl()。
例如:
qt-project.org -> http://qt-project.org ftp.qt-project.org -> ftp://ftp.qt-project.org hostname -> http://hostname /home/user/test.html -> file:///home/user/test.html
文件名
QString fileName(ComponentFormattingOptions options=FullyDecoded) const
返回文件的名稱,包括目錄路徑。
注意:如果這個 QUrl 對象路徑以斜杠結束,文件的名稱是空的。
如果路徑不包含任何斜線,完全返回作為文件名。
示例:
QUrl url("http://qt-project.org/support/file.html"); // url.adjusted(RemoveFilename)=="http://qt-project.org/support/" // url.fileName()=="file.html"
參數 options 控制如何格式化文件名稱組成。所有值產生一個明確的結果。使用 QUrl::FullyDecoded,所有百分比編碼序列被解碼;否則,返回值可能包含在QString的編碼形式不能表示的一些百分比編碼序列。
主機、端口
例如,通過 socket 連接到一個指定 QUrl 包含的主機、端口:
QTcpSocket sock; sock.connectToHost(url.host(), url.port(80));
本地文件
可以使用 fromLocalFile() 構造一個 QUrl,通過傳遞一個本地文件路徑。toLocalFile() 將一個 URL 轉換為本地文件路徑。
QUrl url=QUrl::fromLocalFile("E:\\Qt.txt"); // QUrl("file:///E:/Qt.txt")
百分比編碼
為方便生成編碼 URL 字符串或查詢字符串,有兩個靜態函數:fromPercentEncoding() 和 toPercentEncoding(),處理編碼和解碼的百分比 QString 對象。
[static] QByteArray toPercentEncoding(const QString &input, const QByteArray &exclude=QByteArray(), const QByteArray &include=QByteArray())
返回一個編碼的輸入副本 。輸入首先轉換為 UTF-8,沒有在無限制組中的所有 ASCII 字符是百分比編碼的。 為了防止字符變為百分比編碼,可以將他們傳遞給 exclude,為了迫使字符變為百分比編碼,將他們傳遞給 include。
無限制的定義是:ALPHA / DIGIT / “-” / “.” / “_” / “~”
QByteArray ba=QUrl::toPercentEncoding("{a fishy string?}", "{}", "s"); qDebug(ba.constData()); // 打印 "{a fi%73hy %73tring%3F}"
有效性
構建一個 URL 后,可以在任何時候調用 isValid(),來檢查 URL 的有效性。如果返回 false,應該在繼續之前 clear() URL,或通過為 setUrl() 傳遞一個新的 URL 重新開始。
bool isValid() const
URL 運行通過一致性測試。URL 的每一部分都必須符合 URI 標準的標準編碼規則,URL 才是有效的。
前段時間群里討論,想實現某個文件定時上傳到服務器要怎么來實現。我記得之前做過 一個項目:為高通的iot模組編寫FOTA功能:實現模組可以遠程下載升級鏡像包,實現版本升級功能。并當時使用的一個超級強大的工具cURL。心血來潮,決定專門寫一篇文章,送給需要的朋友。
文章分兩部分
cURL 是常用的命令行工具,用來請求 Web 服務器。它的名字就是客戶端(client)的 URL 工具的意思。
cURL 的原作者是 Daniel Stenberg (目前是 cURL 的核心開發者),同時也是 IETF HTTPbis 工作組的資深成員。Daniel 在 1998 年創建了 curl 項目,他編寫了最初的 curl 版本,并創建了 libcurl 庫。到目前為止,代碼倉庫包括的 24000 次 commit 有超過一半是 Daniel 本人提交的,他依然是項目的核心開發者。Daniel 表示已將 curl 視為自己的孩子。
作為一款強力工具,支持的協議包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP),還支持POST、cookies、認證、從指定偏移處下載部分文件等功能,具有用戶代理字符串、限速、文件大小、進度條、cookie支持、用戶認證、斷點續傳等特征。
sudo apt-get install curl
curl [options] [URL...]
URL的格式定義要參考 RFC 1808 。
地址:http://www.w3.org/Addressing/rfc1808.txt《Relative Uniform Resource Locators 》
URL由三部分組成:資源類型、存放資源的主機域名、資源文件名。 也可認為由4部分組成:協議、主機、端口、路徑URL的一般語法格式為:
protocol :// hostname[:port] / path / [;parameters][?query]#fragment
(帶方括號[]的為可選項)。
指定使用的傳輸協議,下表列出 protocol 屬性的有效方案名稱。 最常用的是HTTP協議,它也是WWW中應用最廣的協議。
是指存放資源的服務器的域名系統(DNS) 主機名或 IP 地址。有時,在主機名前也可以包含連接到服務器所需的用戶名和密碼(格式:username:password@hostname)。
整數,可選,省略時使用方案的默認端口,各種傳輸協議都有默認的端口號,如http的默認端口為80。如果輸入時省略,則使用默認端口號。有時候出于安全或其他考慮,可以在服務器上對端口進行重定義,即采用非標準端口號,此時,URL中就不能省略端口號這一項。
由零或多個“/”符號隔開的字符串,一般用來表示主機上的一個目錄或文件地址。
這是用于指定特殊參數的可選項。
可選,用于給動態網頁(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技術制作的網頁)傳遞參數,可有多個參數,用“&”符號隔開,每個參數的名和值用“=”符號隔開。
字符串,用于指定網絡資源中的片斷。例如一個網頁中有多個名詞解釋,可使用fragment直接定位到某一名詞解釋。
由于linux curl功能十分強大,所以命令參數十分多,下表只篩選出來部分常用的參數,更多參數請運行“man curl”命令查看。
參數功能-a/--append上傳文件時,附加到目標文件-A/--user-agent設置用戶代理發送給服務器-anyauth可以使用“任何”身份驗證方法-b/--cookie <name=string/file>cookie字符串或文件讀取位置--basic使用HTTP基本驗證-B/--use-ascii使用ASCII /文本傳輸-c/--cookie-jar操作結束后把cookie寫入到這個文件中-C/--continue-at斷點續轉-d/--dataHTTP POST方式傳送數據--data-ascii以ascii的方式post數據--data-binary以二進制的方式post數據--negotiate使用HTTP身份驗證--digest使用數字身份驗證--disable-eprt禁止使用EPRT或LPRT--disable-epsv禁止使用EPSV-D/--dump-header把header信息寫入到該文件中--egd-file為隨機數據(SSL)設置EGD socket路徑--tcp-nodelay使用TCP_NODELAY選項-e/--referer來源網址-E/--cert <cert[:passwd]>客戶端證書文件和密碼 (SSL)--cert-type證書文件類型 (DER/PEM/ENG) (SSL)--key私鑰文件名 (SSL)--key-type私鑰文件類型 (DER/PEM/ENG) (SSL)--pass私鑰密碼 (SSL)--engine加密引擎使用 (SSL). "--engine list" for list--cacertCA證書 (SSL)--capathCA目錄 (made using c_rehash) to verify peer against (SSL)--ciphersSSL密碼--compressed要求返回是壓縮的形勢 (using deflate or gzip)--connect-timeout設置最大請求時間--create-dirs建立本地目錄的目錄層次結構--crlf上傳是把LF轉變成CRLF-f/--fail連接失敗時不顯示http錯誤--ftp-create-dirs如果遠程目錄不存在,創建遠程目錄--ftp-method [multicwd/nocwd/singlecwd]控制CWD的使用--ftp-pasv使用 PASV/EPSV 代替端口--ftp-skip-pasv-ip使用PASV的時候,忽略該IP地址--ftp-ssl嘗試用 SSL/TLS 來進行ftp數據傳輸--ftp-ssl-reqd要求用 SSL/TLS 來進行ftp數據傳輸-F/--form <name=content>模擬http表單提交數據--form-string <name=string>模擬http表單提交數據-g/--globoff禁用網址序列和范圍使用{}和[]-G/--get以get的方式來發送數據-H/--header自定義頭信息傳遞給服務器--ignore-content-length忽略的HTTP頭信息的長度-i/--include輸出時包括protocol頭信息-I/--head只顯示請求頭信息-j/--junk-session-cookies讀取文件進忽略session cookie--interface使用指定網絡接口/地址--krb4使用指定安全級別的krb4-k/--insecure允許不使用證書到SSL站點-K/--config指定的配置文件讀取-l/--list-only列出ftp目錄下的文件名稱--limit-rate設置傳輸速度--local-port強制使用本地端口號-m/--max-time設置最大傳輸時間--max-redirs設置最大讀取的目錄數--max-filesize設置最大下載的文件總量-M/--manual顯示全手動-n/--netrc從netrc文件中讀取用戶名和密碼--netrc-optional使用 .netrc 或者 URL來覆蓋-n--ntlm使用 HTTP NTLM 身份驗證-N/--no-buffer禁用緩沖輸出-o/--output把輸出寫到該文件中-O/--remote-name把輸出寫到該文件中,保留遠程文件的文件名-p/--proxytunnel使用HTTP代理--proxy-anyauth選擇任一代理身份驗證方法--proxy-basic在代理上使用基本身份驗證--proxy-digest在代理上使用數字身份驗證--proxy-ntlm在代理上使用ntlm身份驗證-P/--ftp-port使用端口地址,而不是使用PASV-q作為第一個參數,關閉 .curlrc-Q/--quote文件傳輸前,發送命令到服務器-r/--range檢索來自HTTP/1.1或FTP服務器字節范圍--range-file讀取(SSL)的隨機文件-R/--remote-time在本地生成文件時,保留遠程文件時間--retry傳輸出現問題時,重試的次數--retry-delay傳輸出現問題時,設置重試間隔時間--retry-max-time傳輸出現問題時,設置最大重試時間-s/--silent靜默模式。不輸出任何東西-S/--show-error顯示錯誤--socks4 <host[:port]>用socks4代理給定主機和端口--socks5 <host[:port]>用socks5代理給定主機和端口--stderr-t/--telnet-option <OPT=val>Telnet選項設置--trace對指定文件進行debug--trace-asciiLike --跟蹤但沒有hex輸出--trace-time跟蹤/詳細輸出時,添加時間戳-T/--upload-file上傳文件--urlSpet URL to work with-u/--user <user[:password]>設置服務器的用戶和密碼-U/--proxy-user <user[:password]>設置代理用戶名和密碼-w/--write-out [format]什么輸出完成后-x/--proxy <host[:port]>在給定的端口上使用HTTP代理-X/--request指定什么命令-y/--speed-time放棄限速所要的時間,默認為30-Y/--speed-limit停止傳輸速度的限制,速度時間
下面是linux curl命令的錯誤代碼和她們的相應的錯誤消息,命令執行錯誤的時候可以通過錯誤碼來查看出錯原因,方便開發調試。
退 出 碼錯誤描述1Unsupported protocol. This build of curl has no support for this protocol.2Failed to initialize.3URL malformed. The syntax was not correct.5Couldn't resolve proxy. The given proxy host could not be resolved.6Couldn't resolve host. The given remote host was not resolved.7Failed to connect to host.8FTP weird server reply. The server sent data curl couldn't parse.9FTP access denied. The server denied login or denied access to the particular resource or directory you wanted to reach. Most often you tried to change to a directory that doesn't exist on the server.11FTP weird PASS reply. Curl couldn't parse the reply sent to the PASS request.13FTP weird PASV reply, Curl couldn't parse the reply sent to the PASV request.14FTP weird 227 format. Curl couldn't parse the 227-line the server sent.15FTP can't get host. Couldn't resolve the host IP we got in the 227-line.17FTP couldn't set binary. Couldn't change transfer method to binary.18Partial file. Only a part of the file was transferred.19FTP couldn't download/access the given file, the RETR (or similar) command failed.21FTP quote error. A quote command returned error from the server.22HTTP page not retrieved. The requested url was not found or returned another error with the HTTP error code being 400 or above. This return code only appears if -f/--fail is used.23Write error. Curl couldn't write data to a local filesystem or similar.25FTP couldn't STOR file. The server denied the STOR operation, used for FTP uploading.26Read error. Various reading problems.27Out of memory. A memory allocation request failed.28Operation timeout. The specified time-out period was reached according to the conditions.30FTP PORT failed. The PORT command failed. Not all FTP servers support the PORT command, try doing a transfer using PASV instead!31FTP couldn't use REST. The REST command failed. This command is used for resumed FTP transfers.33HTTP range error. The range "command" didn't work.34HTTP post error. Internal post-request generation error.35SSL connect error. The SSL handshaking failed.36FTP bad download resume. Couldn't continue an earlier aborted download.37FILE couldn't read file. Failed to open the file. Permissions?38LDAP cannot bind. LDAP bind operation failed.39LDAP search failed.41Function not found. A required LDAP function was not found.42Aborted by callback. An application told curl to abort the operation.43Internal error. A function was called with a bad parameter.45Interface error. A specified outgoing interface could not be used.47Too many redirects. When following redirects, curl hit the maximum amount.48Unknown TELNET option specified.49Malformed telnet option.51The peer's SSL certificate or SSH MD5 fingerprint was not ok.52The server didn't reply anything, which here is considered an error.53SSL crypto engine not found.54Cannot set SSL crypto engine as default.55Failed sending network data.56Failure in receiving network data.58Problem with the local certificate.59Couldn't use specified SSL cipher.60Peer certificate cannot be authenticated with known CA certificates.61Unrecognized transfer encoding.62Invalid LDAP URL.63Maximum file size exceeded.64Requested FTP SSL level failed.65Sending the data requires a rewind that failed.66Failed to initialize SSL Engine.67The user name, password, or similar was not accepted and curl failed to log in.68File not found on TFTP server.69Permission problem on TFTP server.70Out of disk space on TFTP server.71Illegal TFTP operation.72Unknown TFTP transfer ID.73File already exists (TFTP).74No such user (TFTP).75Character conversion failed.76Character conversion functions required.77Problem with reading the SSL CA cert (path? access rights?).78The resource referenced in the URL does not exist.79An unspecified error occurred during the SSH session.80Failed to shut down the SSL connection.82Could not load CRL file, missing or wrong format (added in 7.19.0).83Issuer check failed (added in 7.19.0).XXMore error codes will appear here in future releases. The existing ones are meant to never change.
為節省篇幅,部分操作不再貼上執行結果。
直接在curl命令后加上網址,就可以看到網頁源碼。我們以網址www.sina.com為例(選擇該網址,主要因為它的網頁代碼較短):
root@ubuntu:/home/peng# curl www.sohu.com<html><head><title>307 Temporary Redirect</title></head><body bgcolor="white"><center><h1>307 Temporary Redirect</h1></center><hr><center>nginx</center></body></html>
執行結果顯示 307 Temporary Redirect,說明該網址需要重定向。
如果要把這個網頁保存下來,可以使用-o參數,這就相當于使用wget命令了。
curl -o [文件名] www.sohu.com
有的網址是自動跳轉的。使用-L參數,curl就會跳轉到新的網址。
curl -L www.sohu.com
鍵入上面的命令,結果就自動跳轉為www.sohu.com.cn。
-i參數可以顯示http response的頭信息,連同網頁代碼一起。
root@ubuntu:/home/peng/driver/test# curl -i www.sohu.comHTTP/1.1 307 Temporary RedirectContent-Type: text/htmlContent-Length: 180Connection: keep-aliveServer: nginxDate: Tue, 25 Aug 2020 10:10:54 GMTLocation: https://www.sohu.com/FSS-Cache: from 9790436.18244590.10468709FSS-Proxy: Powered by 2384755.3433341.3062915<html><head><title>307 Temporary Redirect</title></head><body bgcolor="white"><center><h1>307 Temporary Redirect</h1></center><hr><center>nginx</center></body></html>
-I參數則是只顯示http response的頭信息。
-v參數可以顯示一次http通信的整個過程,包括端口連接和http request頭信息。
root@ubuntu:/home/peng/driver/test# curl -v www.sohu.com* About to connect() to www.sohu.com port 80 (#0)* Trying 240e:83:201:3700::5... connected> GET / HTTP/1.1> User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3> Host: www.sohu.com> Accept: */*> < HTTP/1.1 307 Temporary Redirect< Content-Type: text/html< Content-Length: 180< Connection: keep-alive< Server: nginx< Date: Tue, 25 Aug 2020 10:11:49 GMT< Location: https://www.sohu.com/< FSS-Cache: from 9855973.18375663.10534247< FSS-Proxy: Powered by 2450292.3564414.3128453< <html><head><title>307 Temporary Redirect</title></head><body bgcolor="white"><center><h1>307 Temporary Redirect</h1></center><hr><center>nginx</center></body></html>* Connection #0 to host www.sohu.com left intact* Closing connection #0
如果你覺得上面的信息還不夠,那么下面的命令可以查看更詳細的通信過程。
curl --trace output.txt www.sohu.com
或者
curl --trace-ascii output.txt www.sohu.com
運行后,請打開output.txt文件查看。
發送表單信息有GET和POST兩種方法。GET方法相對簡單,只要把數據附在網址后面就行。
curl example.com/form.cgi?data=xxx
POST方法必須把數據和網址分開,curl就要用到--data參數。
curl -X POST --data "data=xxx" example.com/form.cgi
如果你的數據沒有經過表單編碼,還可以讓curl為你編碼,參數是--data-urlencode。
curl -X POST--data-urlencode "date=April 1" example.com/form.cgi
curl默認的HTTP動詞是GET,使用-X參數可以支持其他動詞。
curl -X POST www.example.comcurl -X DELETE www.example.com
假定文件上傳的表單是下面這樣:
<form method="POST" enctype='multipart/form-data' action="upload.cgi"> <input type=file name=upload> <input type=submit name=press value="OK"></form>
你可以用curl這樣上傳文件:
curl --form upload=@localfilename --form press=OK [URL]
有時你需要在http request頭信息中,提供一個referer字段,表示你是從哪里跳轉過來的。
curl --referer http://www.example.com http://www.example.com
這個字段是用來表示客戶端的設備信息。服務器有時會根據這個字段,針對不同設備,返回不同格式的網頁,比如手機版和桌面版。
iPhone4的User Agent是
Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7
curl可以這樣模擬:
curl --user-agent "[User Agent]" [URL]
使用--cookie參數,可以讓curl發送cookie。
curl --cookie "name=xxx" www.example.com
至于具體的cookie的值,可以從http response頭信息的Set-Cookie字段中得到。
-c cookie-file可以保存服務器返回的cookie到文件,-b cookie-file可以使用這個文件作為cookie信息,進行后續的請求。
curl -c cookies http://example.comcurl -b cookies http://example.com
有時需要在http request之中,自行增加一個頭信息。--header參數就可以起到這個作用。
$ curl --header "Content-Type:application/json" http://example.com
使用curl選項 -u 可以完成HTTP或者FTP的認證,可以指定密碼,也可以不指定密碼在后續操作中輸入密碼:
curl -u user:pwd http://man.linuxde.netcurl -u user http://man.linuxde.net
curl ftp://www.xxx.com/ --user name:passwdcurl ftp://www.xxx.com/ –u name:passwd #簡潔寫法curl ftp://name:passwd@www.xxx.com #簡潔寫法2
例如:在IP地址192.168.43.117上搭建FTP服務器,并設置用戶名為user,密碼為123456現在我們要顯示服務器上根目錄下的所有文件信息,命令如下:
curl -u user:123456 ftp://192.168.43.117
執行結果如下:
簡潔寫法:
curl ftp://user:123456@192.168.43.117
執行結果如下:
curl ftp://www.xxx.com –u name:passwd -s
格式
curl ftp://www.xxx.com/size.zip –u name:passwd -o size.zip
示例如下: 從服務器的根目錄下下載文件test.c,保存到本地,本地文件名也為test.c。 【注意】如果沒有-o選項,程序會吧數據流定向到stdout,即直接把文件內容顯示到終端上。
curl ftp://user:123456@192.168.43.117/test.c -o test.c
執行結果如下:
簡潔模式
curl -u user:123456 ftp://192.168.43.117/list.h -o list.h
執行結果如下:
curl –u name:passwd -T size.mp3 ftp://www.xxx.com/mp3/
舉例如下:
curl -u user:123456 ftp://192.168.43.117/ -T list.h
可以看到文件并沒有上傳成功,返回錯誤碼是25,參考第五章
25 FTP couldn't STOR file. The server denied the STOR operation, used for FTP uploading.
可知,是因為服務器沒有賦予存儲的權限,所以設置服務器的write權限即可。
在這里插入圖片描述
curl –u name:passwd ftp://www.xxx.com/ -X 'DELE mp3/size.mp3'
curl –u name:passwd ftp://www.xxx.com/img/[1-10].gif –O #O字母大寫
curl –u name:passwd ftp://www.xxx.com/img/[one,two,three].jpg –O #O字母大寫
在這里插入圖片描述
首先記錄當前log文件時間,并記錄到全局變量last_mtime中。
讀取文件最后修改時間,并和last_mtime進行比較,如果相同就返回0,不同就返回1.
將當前的日志文件拷貝成備份文件,備份文件名字加上當前時間。
得到對應文件的屬性信息,存放到struct stat結構體變量中。
執行參數中字符串對應的命令
/* Copyright (C) 公眾號: yikoulinux */
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
typedef struct stat ST;
unsigned long last_mtime;
/*用戶名密碼暫時寫死,實際應該保存在配置文件*/
char name[32]="user";
char pass[32]="123456";
char ip[32]="192.168.43.117";
char filename[32]="t.log";
char dstfile[256]={0};
int init(void)
{
//準備結構體
ST status;
//調用stat函數
int res=stat(filename,&status);
if(-1==res)
{
perror("error:open file fail\n");
return 0;
}
last_mtime=status.st_mtime;
printf("init time:%s \n",ctime(&last_mtime));
return 1;
}
int check_file_change(void)
{
//準備結構體
ST status;
//調用stat函數
int res=stat(filename,&status);
if(-1==res)
{
perror("error:open file fail\n");
return 0;
}
// printf("old:%s new:%s",ctime(&last_mtime),ctime(&status.st_mtime));
if(last_mtime==status.st_mtime)
{
printf("file not change\n");
return 0;
}else{
printf("file updated\n");
last_mtime=status.st_mtime;
return 1;
}
}
void file_name_add_time(void)
{
ST status;
time_t t;
struct tm *tblock;
char cmd[1024]={0};
t=time(NULL);
tblock=localtime(&t);
sprintf(dstfile,"t-%d-%d-%d-%d-%d-%d.log",
tblock->tm_year+1900,
tblock->tm_mon,
tblock->tm_mday,
tblock->tm_hour,
tblock->tm_min,
tblock->tm_sec);
sprintf(cmd,"cp %s %s",filename,dstfile);
// printf("cdm=%s\n",cmd);
system(cmd);
}
int main(void)
{
char cmd[1024]={0};
init();
while(1)
{
if(check_file_change()==1)
{
file_name_add_time();
sprintf(cmd,"curl -u %s:%s ftp://%s/ -T %s",name,pass,ip,dstfile);
// printf("cdm=%s\n",cmd);
system(cmd);
unlink(dstfile);
}
sleep(10);
}
}
第一步:
因為log文件沒有被修改過,所以程序不會上傳。
第二步:手動輸入字符串 yikoulinux 到日志文件 t.log中。
第三步: 因為文件發生了改變,所以打印“file updated”,同時可以看到curl上傳文件的log信息。
以下是FTP服務器的根目錄,可以看到,上傳的日志文件:t-2020-7-26-1-19-45.log。
想和博主交流,請關注公眾號「一口Linux」
*請認真填寫需求信息,我們會在24小時內與您取得聯系。