讀
近年來(lái),隨著制造業(yè)全面開啟數(shù)字化轉(zhuǎn)型,亟需依托新一代信息技術(shù)打造全新的發(fā)展引擎,數(shù)字孿生技術(shù)作為信息技術(shù)發(fā)展的新焦點(diǎn)和眾多企業(yè)業(yè)務(wù)布局的新方向,能加速與數(shù)字、信息、通訊技術(shù)的融合,逐漸發(fā)展為一種基礎(chǔ)性、普適性的技術(shù)體系,其在裝備制造、汽車、化工、鋼鐵、制藥等行業(yè)的應(yīng)用場(chǎng)景日益清晰。本文介紹了數(shù)字孿生的市場(chǎng)與應(yīng)用情況,并重點(diǎn)盤點(diǎn)了國(guó)內(nèi)外主流的數(shù)字孿生廠商與解決方案。
文章來(lái)源
本文由e-works編輯部吳星星原創(chuàng)發(fā)布。
Part 01
數(shù)字孿生市場(chǎng)與應(yīng)用概覽
根據(jù)Grand View Research發(fā)布的數(shù)據(jù),2021年,全球數(shù)字孿生市場(chǎng)規(guī)模為74.8億美元,預(yù)計(jì)從2022年到2030年,年復(fù)合增長(zhǎng)率將達(dá)到39.1%;另根據(jù)國(guó)外調(diào)研機(jī)構(gòu)MarketsandMarkets的預(yù)測(cè)數(shù)據(jù)顯示,到2023年數(shù)字孿生市場(chǎng)規(guī)模將達(dá)到157億美元,到2025年將突破260億美元。從這兩份研究數(shù)據(jù)可以看出,數(shù)字孿生市場(chǎng)很大,而我國(guó)又是世界上工業(yè)門類最為齊全的國(guó)家,本身就有豐富的制造業(yè)應(yīng)用場(chǎng)景和市場(chǎng),數(shù)字孿生技術(shù)幾乎可以延伸到制造業(yè)的每一個(gè)場(chǎng)景。
自2020年以來(lái),西門子、達(dá)索系統(tǒng)、PTC、Ansys、羅克韋爾自動(dòng)化、AVEVA等國(guó)際知名廠商不斷推進(jìn)數(shù)字孿生的落地,在多行業(yè)多領(lǐng)域開展了具體的應(yīng)用實(shí)踐,驗(yàn)證數(shù)字孿生的應(yīng)用價(jià)值和可行性:
西門子運(yùn)用數(shù)字孿生技術(shù),對(duì)西門子數(shù)控(南京)有限公司新工廠的規(guī)劃方案進(jìn)行仿真建模,在虛擬環(huán)境中快速模擬未來(lái)工廠的運(yùn)行情況,以便在規(guī)劃階段就避免在實(shí)際運(yùn)營(yíng)過(guò)程中可能出現(xiàn)的問(wèn)題,與傳統(tǒng)的工廠規(guī)劃相比,該工廠從規(guī)劃到運(yùn)營(yíng)的總時(shí)間縮短近三分之一;
GE數(shù)字化風(fēng)場(chǎng)利用PTC的數(shù)字孿生解決方案,為風(fēng)場(chǎng)的資產(chǎn)、風(fēng)機(jī)等構(gòu)建數(shù)字孿生模型,對(duì)風(fēng)場(chǎng)資產(chǎn)建立關(guān)聯(lián)知識(shí)圖譜,以及構(gòu)建風(fēng)機(jī)設(shè)備可視化、風(fēng)機(jī)遠(yuǎn)程實(shí)時(shí)監(jiān)控、風(fēng)機(jī)健康診斷、風(fēng)機(jī)運(yùn)營(yíng)管理、風(fēng)機(jī)維修管理等APP,驅(qū)動(dòng)產(chǎn)品的研發(fā)創(chuàng)新;
達(dá)索系統(tǒng)與中國(guó)鐵路設(shè)計(jì)研究院將數(shù)字孿生技術(shù)應(yīng)用在京雄鐵路建設(shè)中,將開山、修路等過(guò)程做仿真模擬,推演出對(duì)環(huán)境影響最小的綠色方案,最終實(shí)現(xiàn)從設(shè)計(jì)、施工到運(yùn)營(yíng)的三維數(shù)字化智能管理,創(chuàng)造出智能高鐵的“數(shù)字孿生”;
Ansys與阿里巴巴合作開展了變壓器數(shù)字孿生項(xiàng)目,利用數(shù)字孿生技術(shù)監(jiān)測(cè)導(dǎo)線電壓、電流、油溫和泵的設(shè)計(jì)流量,實(shí)時(shí)計(jì)算磁芯和線圈溫度,實(shí)現(xiàn)數(shù)字和物理變壓器的融合;
業(yè)內(nèi)某知名鋰電池生產(chǎn)企業(yè)與羅克韋爾自動(dòng)化合作,借助羅克韋爾自動(dòng)化Emulate3D數(shù)字仿真平臺(tái)的數(shù)字孿生體構(gòu)建功能和虛擬調(diào)試功能,實(shí)現(xiàn)1:1真實(shí)場(chǎng)景還原,并達(dá)到企業(yè)擴(kuò)產(chǎn)增效降本的目標(biāo);
AVEVA與挪威Aker Carbon Capture公司合作,基于數(shù)字孿生技術(shù)提供進(jìn)一步提升碳捕集和處理能力的整體解決方案,以實(shí)現(xiàn)其一體化工程設(shè)計(jì),并實(shí)現(xiàn)減少碳排放,推進(jìn)循環(huán)經(jīng)濟(jì)。
由此可見,數(shù)字孿生技術(shù)在制造業(yè)有著非常豐富的應(yīng)用場(chǎng)景,貫穿產(chǎn)品的研發(fā)、制造、服役,乃至報(bào)廢回收再利用的全生命周期。其中,復(fù)雜裝備產(chǎn)品在運(yùn)行維護(hù)階段的數(shù)字孿生應(yīng)用價(jià)值最為明顯;在制造業(yè)工廠中,小到一個(gè)關(guān)鍵設(shè)備的零部件,例如機(jī)器人減速機(jī),到裝備整機(jī),例如工業(yè)機(jī)器人,再到自動(dòng)化產(chǎn)線,乃至整個(gè)車間、整個(gè)工廠,數(shù)字孿生技術(shù)也有諸多應(yīng)用場(chǎng)景,覆蓋不同的時(shí)空尺度。此外,數(shù)字孿生也可用于供應(yīng)鏈管理領(lǐng)域,例如車間物流調(diào)度、運(yùn)輸路徑優(yōu)化等。
Part 02
國(guó)際主流數(shù)字孿生解決方案概覽
當(dāng)前,國(guó)際上主流的數(shù)字孿生解決方案廠商主要包括GE Digital、西門子、PTC、Ansys、達(dá)索系統(tǒng)、AVEVA、羅克韋爾自動(dòng)化、SAP、Altair、ESI Group、微軟、Maplesoft、Bentley、Unity等。在這些解決方案中,一些國(guó)際廠商基于自身的使能技術(shù),打造了綜合性平臺(tái)來(lái)構(gòu)建數(shù)字孿生的應(yīng)用,例如GE的Predix、西門子的COMOS Platform、PTC的ThingWorx、Bentley的iTwin Platform;還有一些國(guó)際廠商則通過(guò)與多家廠商展開合作,提供數(shù)字孿生所需要的完整解決方案,譬如達(dá)索系統(tǒng)與ABB、Ansys和羅克韋爾自動(dòng)化、Altair和ACROME、微軟和Ansys都曾進(jìn)行過(guò)數(shù)字孿生方面的合作。
國(guó)際主流數(shù)字孿生廠商和解決方案
(按照首字母排序)
? Ansys
Ansys Twin Builder是Ansys的數(shù)字孿生解決方案,三大核心功能是模型建模、驗(yàn)證和部署,重點(diǎn)研究和應(yīng)用領(lǐng)域可以概括為數(shù)字孿生生產(chǎn)設(shè)備、設(shè)計(jì)階段的數(shù)字孿生、運(yùn)行維護(hù)階段的數(shù)字孿生、基于經(jīng)驗(yàn)公式的數(shù)字孿生、基于仿真的數(shù)字孿生五個(gè)方向。在2022R1新版本中,Ansys Twin Builder通過(guò)充分結(jié)合物理傳感器和虛擬傳感器,實(shí)現(xiàn)跨學(xué)科多領(lǐng)域的系統(tǒng)仿真與數(shù)字孿生;通過(guò)Twin Deployer加速導(dǎo)出和部署數(shù)字孿生,實(shí)現(xiàn)產(chǎn)品的虛擬實(shí)驗(yàn),預(yù)測(cè)性運(yùn)維,性能優(yōu)化等增值服務(wù)。
Ansys Twin Builder功能組成 (來(lái)源:Ansys)
? AVEVA
AVEVA的數(shù)字孿生解決方案主要由工程、運(yùn)營(yíng)、績(jī)效相關(guān)的產(chǎn)品組合而成,包括AVEVA Unified Engineering、AVEVA Unified Operations Center、AVEVA Asset Performance Management、AVEVA PI System、AVEVA Process Simulation等軟件。AVEVA數(shù)字孿生解決方案貫穿整個(gè)生命周期的各個(gè)階段,包括從設(shè)計(jì)、構(gòu)建到操作和維護(hù)。基于AVEVA數(shù)字孿生解決方案,可構(gòu)建離散數(shù)字孿生,例如單個(gè)資產(chǎn)、產(chǎn)品、人員和單個(gè)流程任務(wù);也可構(gòu)建復(fù)合數(shù)字孿生,即將多個(gè)離散數(shù)字孿生結(jié)合在一起,形成更高水平的流程、功能和資產(chǎn)組;還可以構(gòu)建組織數(shù)字孿生,用于優(yōu)化更高階的企業(yè)級(jí)數(shù)字需求。
AVEVA劍維軟件的數(shù)字孿生產(chǎn)品組合 (來(lái)源:AVEVA)
? Altair
Altair數(shù)字孿生解決方案基于Altair 數(shù)字孿生集成平臺(tái)——Altair Activate,融合物理孿生體和數(shù)據(jù)孿生,以支持整個(gè)產(chǎn)品生命周期內(nèi)的持續(xù)優(yōu)化。Altair Activate是一個(gè)多學(xué)科的系統(tǒng)仿真工具,融合了物理和數(shù)據(jù)驅(qū)動(dòng)技術(shù),可實(shí)現(xiàn)數(shù)字孿生應(yīng)用,幫助用戶在產(chǎn)品開發(fā)早期了解系統(tǒng)的整體性能并識(shí)別各子系統(tǒng)之間的相互關(guān)系。此外,Altair與ACROME合作,基于3D+1D系統(tǒng)仿真,推出了有關(guān)數(shù)字孿生的機(jī)電教育套件;在2022年,Altair與LG Electronics (LG)達(dá)成合作,計(jì)劃促進(jìn)仿真自動(dòng)化平臺(tái)的研發(fā)與構(gòu)建,以及開展用于開發(fā)LG產(chǎn)品的數(shù)字孿生技術(shù)方面的實(shí)踐。
Altair數(shù)字孿生應(yīng)用案例(來(lái)源:Altair)
? Bentley
Bentley數(shù)字孿生解決方案以iTwin Platform為基礎(chǔ),提供數(shù)字孿生技術(shù)實(shí)現(xiàn)基于數(shù)據(jù)的決策和業(yè)務(wù)服務(wù)。iTwin Platform集成多種類型的原生數(shù)據(jù)格式,包括不同軟件廠商的三維模型、二維圖紙、實(shí)景模型、點(diǎn)云等,存儲(chǔ)在同一的結(jié)構(gòu)化數(shù)據(jù)庫(kù)中,同時(shí)提供地理信息的數(shù)據(jù)接口,建立真實(shí)的“工程數(shù)字孿生”。其中,iTwin Viewer提供了高精度、高性能的三維信息模型瀏覽,Data Validation提供數(shù)據(jù)校驗(yàn)服務(wù),Version Compare提供數(shù)據(jù)變更管理和對(duì)比分析功能。此外,通過(guò)Bentley提供的iTwin.js開源庫(kù),用戶可以拓展自己的數(shù)據(jù)服務(wù)、應(yīng)用程序和數(shù)據(jù)接口。
iTwin Platform(來(lái)源:Bentley)
? 達(dá)索系統(tǒng)
達(dá)索系統(tǒng)的數(shù)字孿生解決方案主要依托于3D體驗(yàn)平臺(tái)——3DEXPERIENCE,將CATIA、BIOVIA、SOLIDWORKS、SIMULIA、DELMIA等11款工業(yè)軟件集成到一個(gè)統(tǒng)一的數(shù)字化創(chuàng)新環(huán)境中,可提供一個(gè)貫穿設(shè)計(jì)、生產(chǎn)、制造、交付、運(yùn)營(yíng)等整個(gè)業(yè)務(wù)流程的完整解決方案。目前,達(dá)索系統(tǒng)的3D體驗(yàn)平臺(tái)在中國(guó)商飛、中航工業(yè)、中國(guó)船舶、三一重工、阜外醫(yī)院等行業(yè)龍頭企業(yè)得到成功應(yīng)用,然后不斷地在其他行業(yè)中復(fù)制,幫助企業(yè)提升整體價(jià)值。
3DEXPERIENCE產(chǎn)品組合 (來(lái)源:達(dá)索系統(tǒng))
? ESI Group
ESI Group提出了混合孿生的數(shù)字孿生概念,是由虛擬和數(shù)字組成,主要優(yōu)勢(shì)是建立了一個(gè)額外的、互補(bǔ)的虛擬模型,該模型必須以物理為基礎(chǔ),并描述因果關(guān)系。ESI Group現(xiàn)有的數(shù)字孿生解決方案是Hybrid Twin混合孿生技術(shù),可以結(jié)合物理模型和實(shí)時(shí)接收的數(shù)據(jù)構(gòu)建特定模型,從而可以創(chuàng)建和預(yù)先認(rèn)證研發(fā)產(chǎn)品、驗(yàn)證產(chǎn)品的性能,還可以預(yù)測(cè)其在維護(hù)過(guò)程中的維護(hù)需求,成功減少研發(fā)階段的物理試錯(cuò),以及后期的維護(hù)和安全問(wèn)題。ESI Group在電動(dòng)汽車部署Hybrid Twin混合孿生技術(shù),實(shí)現(xiàn)了電動(dòng)汽車40%的續(xù)航里程增長(zhǎng),同時(shí)提供了最高的座艙舒適度和安全性。
ESI Hybrid Twin介紹 (來(lái)源:ESI Group)
? GE Digital
GE Digital的數(shù)字孿生解決方案是基于Predix平臺(tái)提供服務(wù),整合Proficy、APM、OPM、iFIX、Historian等軟件服務(wù),并將設(shè)備機(jī)理模型和數(shù)據(jù)驅(qū)動(dòng)分析結(jié)合起來(lái)構(gòu)建數(shù)字孿生體。尤其,GE Proficy數(shù)字工廠軟件家族兼顧了工業(yè)應(yīng)用的穩(wěn)定性和安全性,同時(shí)整合了IT行業(yè)最新的先進(jìn)技術(shù),有助于用戶更好地構(gòu)建和應(yīng)用數(shù)字孿生。目前,GE將已有的大量資產(chǎn)設(shè)備數(shù)據(jù)和模型疊加,通過(guò)Predix平臺(tái),提供了一個(gè)通用的數(shù)字孿生體模型目錄,包括多個(gè)工業(yè)數(shù)據(jù)分析模型以及超過(guò)300個(gè)資產(chǎn)和流程模型。用戶可以利用現(xiàn)有的通用模型進(jìn)行模型構(gòu)建、仿真、訓(xùn)練,從而快速構(gòu)建數(shù)字孿生體,并可在現(xiàn)場(chǎng)運(yùn)行或在云端大規(guī)模運(yùn)行,將模型推向使用端,然后再將它們產(chǎn)生的信息傳回云端。
GE Digital的電網(wǎng)數(shù)字孿生案例 (來(lái)源:GE Digital)
? 微軟
微軟的數(shù)字孿生解決方案是一系列與數(shù)字孿生相關(guān)的服務(wù)組合,是作為一個(gè)整體的Azure數(shù)字孿生服務(wù)集,包括Azure IoT、Azure Digital Twins、Azure Functions等工具。換句話而言,微軟所推出的數(shù)字孿生解決方案,不僅僅只具有單一的數(shù)字孿生技術(shù)服務(wù)能力,而是一個(gè)能夠與各種數(shù)字化平臺(tái)技術(shù)集成,構(gòu)建跨行業(yè)、且端到端就緒的數(shù)字孿生解決方案的開放平臺(tái)服務(wù)。該解決方案可從智能制造、智能樓宇等行業(yè)“復(fù)用”到醫(yī)療、農(nóng)業(yè)、教育、能源等行業(yè),由此賦能并加速各行各業(yè)的企業(yè)數(shù)字化轉(zhuǎn)型。
微軟數(shù)字孿生服務(wù)過(guò)程(來(lái)源:微軟)
? Maplesof
Maplesoft數(shù)字孿生解決方案基于MapleSim軟件,提供一種不需要現(xiàn)場(chǎng)和物理機(jī)器就能設(shè)計(jì)、測(cè)試和優(yōu)化機(jī)器控制代碼的虛擬調(diào)試,實(shí)現(xiàn)基于仿真電機(jī)選型、PLC代碼測(cè)試、離線和在線仿真等,消除設(shè)備設(shè)計(jì)中的猜測(cè)。例如,OEM廠商可以虛擬復(fù)現(xiàn)問(wèn)題、診斷原因、并通過(guò)修改機(jī)器的控制代碼解決噪音、振動(dòng)、意外故障等問(wèn)題。此外,Maplesof還提供交鑰匙工程服務(wù)解決方案,幫助用戶創(chuàng)建數(shù)字孿生并實(shí)施虛擬調(diào)試,進(jìn)而診斷、修復(fù)和優(yōu)化機(jī)器性能。
使用MapleSim創(chuàng)建數(shù)字孿生 (來(lái)源:Maplesoft)
? PTC
PTC的數(shù)字孿生解決方案是基于PTC的數(shù)字主線和數(shù)字孿生平臺(tái),由Creo CAD數(shù)字設(shè)計(jì)平臺(tái)、Windchill PLM數(shù)字主線平臺(tái)、Vuforia增強(qiáng)現(xiàn)實(shí)平臺(tái)、Servigistics SLM服務(wù)生命周期管理平臺(tái)、Integrity ALM軟件生命周期管理平臺(tái)、ThingWorx物聯(lián)網(wǎng)與分析平臺(tái)等數(shù)字技術(shù)產(chǎn)品形成了整合的解決方案,打通了需求、采購(gòu)、質(zhì)量與管控、市場(chǎng)營(yíng)銷、制造工廠、售后和召回等產(chǎn)品生命周期涉及的所有業(yè)務(wù)部門,形成了完整的數(shù)字主線,幫助用戶創(chuàng)建其業(yè)務(wù)的數(shù)字和實(shí)體之間的閉環(huán)。
基于數(shù)字孿生的產(chǎn)品研制及運(yùn)營(yíng)模式 (來(lái)源:PTC)
? 羅克韋爾自動(dòng)化
羅克韋爾自動(dòng)化的Emulate3D數(shù)字孿生解決方案,是通過(guò)數(shù)字孿生技術(shù)仿真建模,從而改進(jìn)系統(tǒng)規(guī)劃和決策的一款數(shù)字自動(dòng)化流程設(shè)計(jì)的仿真軟件。該軟件使客戶在交付最終設(shè)計(jì)之前,對(duì)機(jī)器和系統(tǒng)進(jìn)行虛擬測(cè)試,從而評(píng)估物理資產(chǎn)真實(shí)運(yùn)行的狀態(tài)和性能,實(shí)現(xiàn)產(chǎn)線的快速部署,并避免設(shè)計(jì)、試運(yùn)轉(zhuǎn)和啟動(dòng)過(guò)程中的意外。需要指出的是,Emulate3D是羅克韋爾自動(dòng)化在2019年收購(gòu)的一款軟件,收購(gòu)之后也成為FactoryTalk DesignSuite工廠自動(dòng)化系統(tǒng)設(shè)計(jì)軟件的一部分,可以實(shí)現(xiàn)對(duì)整個(gè)工廠自動(dòng)化控制系統(tǒng)進(jìn)行虛擬仿真和虛擬調(diào)試,還可以利用工廠的數(shù)字孿生模型對(duì)員工進(jìn)行培訓(xùn),降低工廠運(yùn)營(yíng)的風(fēng)險(xiǎn)。
基于Emulate3D的原型機(jī)驗(yàn)證和虛擬測(cè)試 (來(lái)源:羅克韋爾自動(dòng)化)
? 西門子
西門子的數(shù)字孿生解決方案眾多,涵蓋從設(shè)計(jì)工具、虛擬仿真、制造運(yùn)營(yíng)管理到工業(yè)自動(dòng)化、物聯(lián)網(wǎng)平臺(tái)等關(guān)鍵技術(shù)領(lǐng)域,其數(shù)字孿生相關(guān)的軟件產(chǎn)品有PlantSight、COMOS Platform、Xcelerator等。PlantSight是西門子與Bentley Systems聯(lián)合開發(fā)的流程行業(yè)解決方案,它能將原始數(shù)據(jù)轉(zhuǎn)換為一個(gè)完整、一致且動(dòng)態(tài)的數(shù)字孿生,幫助企業(yè)做出快速、合理的決策;COMOS Platform具有各種功能模塊,覆蓋工廠全生命周期,從設(shè)計(jì)、采購(gòu)、施工、數(shù)字化移交到運(yùn)維、管理,都在同一個(gè)工程數(shù)據(jù)平臺(tái)上進(jìn)行,并且具有與AVEVA,SPI,PDMS等多種軟件通信的數(shù)據(jù)接口;Xcelerator是西門子于2022年發(fā)布的數(shù)字商業(yè)平臺(tái),具有閉環(huán)的數(shù)字孿生、個(gè)性化配置、靈活開放的生態(tài)等關(guān)鍵特征,可用于工業(yè)、樓宇、電網(wǎng)和交通領(lǐng)域不同規(guī)模的企業(yè)的數(shù)字化轉(zhuǎn)型和價(jià)值創(chuàng)造。
西門子數(shù)字化孿生架構(gòu)圖(來(lái)源:西門子)
? SA
SAP數(shù)字孿生解決方案與SAP推出的統(tǒng)一商業(yè)網(wǎng)絡(luò)戰(zhàn)略相契合,利用實(shí)時(shí)ERP、先進(jìn)的分析和成功的網(wǎng)絡(luò)解決方案,譬如Ariba Network,SAP Asset Intelligence Network,SAP Logistics Business Network和SAP Fieldglass,并通過(guò)開放和互聯(lián)的商業(yè)網(wǎng)絡(luò),交付整合信息,幫助企業(yè)打造韌性供應(yīng)鏈,提高敏捷性。同時(shí),SAP 數(shù)字孿生解決方案也與SAP啟動(dòng)的Industry 4.Now戰(zhàn)略高度契合,借助“Industry 4.Now”,SAP將幫助企業(yè)打造一條真正的數(shù)字主線,貫穿智能產(chǎn)品和資產(chǎn)的整個(gè)生命周期,從設(shè)計(jì)到運(yùn)維,并將獲得的信息及時(shí)反饋到業(yè)務(wù)流程里。
SAP數(shù)字孿生解決方案在橋梁預(yù)測(cè)性維護(hù)的應(yīng)用
? Unity
Unity數(shù)字孿生解決方案主要由Unity Reflect、Unity Manufacturing Toolkits(UMT)等產(chǎn)品組成。其中,Unity Reflect用于構(gòu)建數(shù)字孿生應(yīng)用;UMT是Unity于2022年正式發(fā)布的專為零基礎(chǔ)用戶定制的智能制造數(shù)字孿生工具包,旨在幫助無(wú)建模基礎(chǔ)與代碼撰寫經(jīng)驗(yàn)的從業(yè)者迅速構(gòu)建智能制造數(shù)字孿生系統(tǒng)。UMT從模型自動(dòng)優(yōu)化處理、約束導(dǎo)入和動(dòng)作調(diào)試等基礎(chǔ)操作開始建立對(duì)應(yīng)真實(shí)產(chǎn)線的虛擬模型,繼而用戶在可視化編程界面中輕點(diǎn)鼠標(biāo)實(shí)現(xiàn)信號(hào)與模型的綁定,同時(shí),輔以UMT豐富的材質(zhì)、組件、模型和UI庫(kù),用戶可構(gòu)建高質(zhì)量的虛實(shí)同步數(shù)字化柔性產(chǎn)線。
UMT數(shù)字孿生系統(tǒng)整體搭建流程 (來(lái)源:Unity)
Part 03
國(guó)內(nèi)主流數(shù)字孿生解決方案概覽
在國(guó)內(nèi),主流的數(shù)字孿生解決方案廠商包括美云智數(shù)、華龍迅達(dá)、寄云科技、力控科技、精航偉泰、華力創(chuàng)通、同元軟控、優(yōu)也科技、觸角科技、子虔科技、優(yōu)锘科技、51world、卡奧斯、摩爾元數(shù)、易知微、木棉樹軟件等。由于中國(guó)數(shù)字孿生市場(chǎng)仍處于早期發(fā)展階段,且受限于建模、仿真和基于數(shù)據(jù)融合的數(shù)字線程等技術(shù)瓶頸,國(guó)內(nèi)數(shù)字孿生解決方案廠商目前主要針對(duì)特定的應(yīng)用場(chǎng)景或行業(yè)提供服務(wù)。
國(guó)內(nèi)主流的數(shù)字孿生廠商和解決方案
(按照拼音排序)
觸角科技
觸角科技的數(shù)字孿生解決方案是以感知MR/VR數(shù)字孿生協(xié)同平臺(tái)為基礎(chǔ),通過(guò)結(jié)合MR/VR人機(jī)交互技術(shù)、5G網(wǎng)絡(luò)與AI技術(shù),為工業(yè)4.0、智慧城市背景下的數(shù)字孿生構(gòu)建了高效率、低成本的遠(yuǎn)程三維可視化協(xié)同工作平臺(tái)。觸角科技的數(shù)字孿生解決方案具有多重優(yōu)勢(shì),包括采用5G+MR/VR,虛實(shí)融合流程引導(dǎo),遠(yuǎn)程實(shí)時(shí)協(xié)同工作,操作流程記錄共享,全局實(shí)時(shí)監(jiān)控,第一視角視頻指導(dǎo),可視化場(chǎng)景快速制作,資源與數(shù)據(jù)云端管理,訓(xùn)練數(shù)據(jù)快速生成,真實(shí)場(chǎng)景算法遷移等。
利用感知MR/VR數(shù)字孿生協(xié)同平臺(tái) 實(shí)現(xiàn)場(chǎng)景三維可視化 (來(lái)源:觸角科技)
華龍迅達(dá)
華龍迅達(dá)木星數(shù)字孿生平臺(tái)(Jupiter Digital Twin Platform)是華龍訊達(dá)研發(fā)的基于物理模型、傳感器、運(yùn)行歷史等數(shù)據(jù),集成多學(xué)科、多物理量、多尺度、多概率的仿真過(guò)程的數(shù)據(jù)管理平臺(tái),實(shí)現(xiàn)產(chǎn)品數(shù)據(jù)在虛擬空間中完成映射。基于該平臺(tái)可反映相對(duì)應(yīng)的實(shí)體裝備的全生命周期過(guò)程,數(shù)字工廠物理空間的控制、運(yùn)行、質(zhì)量、物耗、能耗等數(shù)據(jù),在虛擬空間中建立實(shí)時(shí)鏡像進(jìn)行虛擬制造仿真,并將仿真結(jié)果作用于物理空間現(xiàn)場(chǎng),助力企業(yè)提升資源優(yōu)化配置、生產(chǎn)過(guò)程控制、均質(zhì)生產(chǎn)保障、柔性制造和敏捷生產(chǎn)等能力。
設(shè)備數(shù)字孿生自動(dòng)完成故障報(bào)警及診斷 (來(lái)源:華龍迅達(dá))
華力創(chuàng)通
華力創(chuàng)通提供基于數(shù)字孿生體的數(shù)字工程解決方案,通過(guò)數(shù)字技術(shù)應(yīng)用和集成創(chuàng)新,聚焦智慧+行業(yè)場(chǎng)景的創(chuàng)新應(yīng)用,服務(wù)于數(shù)字經(jīng)濟(jì)和用戶數(shù)字化轉(zhuǎn)型。同時(shí),華力創(chuàng)通數(shù)字孿生平臺(tái)具有“一網(wǎng)多端、中臺(tái)接入、多源驅(qū)動(dòng)、決策智能”特點(diǎn),通過(guò)運(yùn)用新一代數(shù)字技術(shù),結(jié)合“端邊云網(wǎng)腦”五位一體的底座平臺(tái),對(duì)全域運(yùn)行數(shù)據(jù)進(jìn)行實(shí)時(shí)匯聚、監(jiān)測(cè)、治理和分析,構(gòu)建典型通用的數(shù)字孿生系統(tǒng),全要素感知輔助宏觀決策指揮。
華力創(chuàng)通數(shù)字工程業(yè)務(wù)全景圖 (來(lái)源:華力創(chuàng)通)
寄云科技
寄云科技為工業(yè)企業(yè)提供了基于數(shù)據(jù)智能的數(shù)字孿生開發(fā)方案。一方面,寄云科技提供了工業(yè)數(shù)據(jù)采集和邊緣計(jì)算能力,幫助企業(yè)實(shí)現(xiàn)大型設(shè)備實(shí)時(shí)狀態(tài)的采集和狀態(tài)監(jiān)測(cè);另一方面,針對(duì)大型關(guān)鍵設(shè)備的故障診斷和預(yù)測(cè),寄云科技提供了豐富的故障庫(kù),以及基于機(jī)器學(xué)習(xí)的故障診斷、健康評(píng)估和壽命預(yù)測(cè)能力;同時(shí),還提供了工業(yè)數(shù)據(jù)建模工具以及工業(yè)可視化開發(fā)工具,實(shí)現(xiàn)對(duì)設(shè)備可靠性、生產(chǎn)性能和效率等關(guān)鍵指標(biāo)的深度分析。此外,寄云科技還與安世亞太合作開發(fā)基于仿真模型+物聯(lián)網(wǎng)監(jiān)測(cè)的數(shù)字孿生解決方案,幫助企業(yè)實(shí)現(xiàn)精準(zhǔn)且全面的狀態(tài)監(jiān)測(cè)和關(guān)鍵指標(biāo)的性能預(yù)測(cè)。
寄云科技與安世亞太合作開發(fā)的 數(shù)字孿生解決方案架構(gòu)(來(lái)源:寄云科技)
精航偉泰
精航偉泰推出基于模型操作系統(tǒng)的數(shù)字孿生虛擬實(shí)驗(yàn)室ModelStudio,為用戶提供基于MBSE數(shù)字孿生的數(shù)字化產(chǎn)品集成開發(fā)及仿真驗(yàn)證環(huán)境。用戶利用ModelStudio中的ModelBuilder組件,將不同維度的仿真模型以及不同尺度的子數(shù)字孿生體模型,編譯鏈接為系統(tǒng)的數(shù)字孿生體模型,完成航天器、無(wú)人機(jī)、機(jī)器人以及無(wú)人車等智能無(wú)人裝備的數(shù)字孿生體設(shè)計(jì)。同時(shí),通過(guò)ModelStudio中的數(shù)字孿生體模型操作系統(tǒng)ModelOS組件,來(lái)運(yùn)行仿真用戶構(gòu)建的無(wú)人裝備數(shù)字孿生體模型,大幅提升智能無(wú)人系統(tǒng)的創(chuàng)新能力與研發(fā)效率,進(jìn)而實(shí)現(xiàn)智能復(fù)雜系統(tǒng)設(shè)計(jì)“所見即所得”。
基于數(shù)字孿生虛擬實(shí)驗(yàn)室ModelStudio產(chǎn)品的 應(yīng)用示范(來(lái)源:太空工廠)
卡奧斯
卡奧斯的數(shù)字孿生解決方案是D3OS,該方案融合了物聯(lián)網(wǎng)、大數(shù)據(jù)、人工智能等技術(shù),可實(shí)現(xiàn)物理世界與虛擬世界1:1的實(shí)時(shí)高保真的可視、可管、可預(yù)測(cè)。基于D3OS,企業(yè)可通過(guò)物聯(lián)網(wǎng)平臺(tái)采集企業(yè)海量設(shè)備狀態(tài)數(shù)據(jù);通過(guò)數(shù)據(jù)主線平臺(tái)匯集企業(yè)系統(tǒng)數(shù)據(jù)、工廠設(shè)備數(shù)據(jù)、傳感器數(shù)據(jù)、人員管理數(shù)據(jù)以及供應(yīng)鏈數(shù)據(jù)等多方數(shù)據(jù);通過(guò)工業(yè)智能平臺(tái)深度學(xué)習(xí)、強(qiáng)化學(xué)習(xí)等人工智能算法,提供企業(yè)資源優(yōu)化配置策略和建議;通過(guò)數(shù)字孿生平臺(tái)實(shí)現(xiàn)高保真動(dòng)態(tài)數(shù)字孿生效果的呈現(xiàn)。
卡奧斯D3OS數(shù)字孿生產(chǎn)品架構(gòu) (來(lái)源:卡奧斯)
力控科技
力控科技數(shù)字孿生工廠解決方案是通過(guò)集成三維可視化技術(shù)、快速建模技術(shù)、工廠設(shè)備實(shí)時(shí)狀態(tài)監(jiān)控技術(shù)、攝像監(jiān)控技術(shù)等,實(shí)現(xiàn)三維數(shù)字孿生工廠的整體管理。三維數(shù)字孿生工廠平臺(tái)將車間三維高精度模型、工藝流程、設(shè)備屬性、設(shè)備實(shí)時(shí)數(shù)據(jù),以及工廠運(yùn)營(yíng)管理數(shù)據(jù)等進(jìn)行融合,直觀地展示生產(chǎn)車間的工藝流程,實(shí)現(xiàn)車間生產(chǎn)的遠(yuǎn)程控制管理,提高車間的運(yùn)營(yíng)管理效率。同時(shí)為客戶提供完整的、高附加值的產(chǎn)品解決方案,實(shí)現(xiàn)企業(yè)的智能化與精細(xì)化管理。
中深層地?zé)崮芄┡瘮?shù)字孿生平臺(tái)系統(tǒng)架構(gòu)圖 (來(lái)源:力控科技)
美云智數(shù)
美云智數(shù)以工業(yè)仿真(MIoT.VC)系統(tǒng)為內(nèi)核,形成了工廠決策駕駛艙、基于權(quán)限的運(yùn)營(yíng)管理、車間級(jí)虛實(shí)聯(lián)動(dòng)、設(shè)備狀態(tài)/視頻監(jiān)控、廠區(qū)鳥瞰總覽、物流路線可視化、產(chǎn)線數(shù)據(jù)可視化、員工操作VR培訓(xùn)等一系列數(shù)字孿生解決方案。在數(shù)字工廠建設(shè)方面,美云智數(shù)MIoT.VC采用“虛實(shí)聯(lián)動(dòng)+數(shù)字孿生”的形式進(jìn)行3D工廠布局和整體規(guī)劃,并不斷滾動(dòng)進(jìn)行仿真規(guī)劃設(shè)計(jì)、評(píng)估驗(yàn)證和更改。經(jīng)過(guò)多年實(shí)踐,數(shù)字孿生工廠應(yīng)用實(shí)現(xiàn)了設(shè)備聯(lián)機(jī)、虛實(shí)結(jié)合、真實(shí)互動(dòng)、設(shè)備故障預(yù)警和維修提醒。
數(shù)字孿生實(shí)踐價(jià)值(來(lái)源:美云智數(shù))
摩爾元數(shù)
摩爾元數(shù)的數(shù)字孿生解決方案基于Wis3D數(shù)字孿生系統(tǒng),運(yùn)用WebGL技術(shù)、3D加速渲染,拖拽UI與3D模型庫(kù),快速搭建虛擬應(yīng)用場(chǎng)景。Wis3D數(shù)字孿生系統(tǒng)具有“多類型終端適配、豐富的行業(yè)模板、高開發(fā)效率、技術(shù)門檻要求低”等特點(diǎn),可面向工業(yè)、能源、水務(wù)以及智慧地球、城市、園區(qū)等領(lǐng)域構(gòu)建三維可視化場(chǎng)景。通過(guò)與工業(yè)現(xiàn)場(chǎng)進(jìn)行數(shù)據(jù)集成與融合,將物理車間進(jìn)行數(shù)字化鏡像,并對(duì)企業(yè)生產(chǎn)過(guò)程進(jìn)行實(shí)時(shí)仿真、預(yù)測(cè)及優(yōu)化決策,Wis3D數(shù)字孿生系統(tǒng)可為企業(yè)柔性生產(chǎn)和快速?zèng)Q策提供技術(shù)支持。
Wis3D數(shù)字孿生系統(tǒng)介紹(來(lái)源:摩爾元數(shù))
木棉樹軟件
木棉樹軟件的數(shù)字孿生解決方案基于數(shù)字孿生引擎MMS3D,為Web可視化提供豐富的展現(xiàn)形式和視覺效果。數(shù)字孿生引擎MMS3D采用Javascript語(yǔ)言,基于mms3d圖形引擎和mmsDT-5.0可視化開發(fā)平臺(tái),webgl標(biāo)準(zhǔn)B/S架構(gòu),前端采用HTML5和JavaScript技術(shù)作為研發(fā)基礎(chǔ),產(chǎn)品開發(fā)的二次代碼及模型、程序、操作手冊(cè)等項(xiàng)目源文件全部提供于客戶,既可部署在云端,也可本地化部署。通過(guò)聚焦工業(yè)數(shù)字孿生的生產(chǎn)管控、智慧城市的監(jiān)控運(yùn)維等可視化應(yīng)用領(lǐng)域,木棉樹軟件產(chǎn)品的模塊組態(tài)化形式可以滿足全要素智慧場(chǎng)景的構(gòu)建。
數(shù)字孿生引擎MMS3D架構(gòu) (來(lái)源:木棉樹軟件)
同元軟控
同元軟控?cái)?shù)字孿生解決方案依托MWORKS平臺(tái),通過(guò)MWORKS.Sysplorer和MWORKS.Syslab軟件進(jìn)行數(shù)字孿生體的建模和仿真,為企業(yè)提供數(shù)字孿生體機(jī)理-數(shù)據(jù)高精度模型開發(fā)、管理、運(yùn)行和應(yīng)用服務(wù)。針對(duì)數(shù)字孿生體監(jiān)測(cè)、評(píng)估、預(yù)測(cè)、優(yōu)化與控制典型應(yīng)用場(chǎng)景,MWORKS平臺(tái)提供可定義、可組構(gòu)、可交互的數(shù)字孿生應(yīng)用服務(wù)。該解決方案具有“多層級(jí)、多物理、多尺度高保真數(shù)字孿生體構(gòu)建,規(guī)范化、流程化數(shù)字孿生體評(píng)估,基于單一數(shù)據(jù)源的數(shù)字孿生體存儲(chǔ)與管理,組件化、服務(wù)化的場(chǎng)景驅(qū)動(dòng)數(shù)字孿生體應(yīng)用”的特點(diǎn)。
同元軟控?cái)?shù)字孿生技術(shù)框架 (來(lái)源:同元軟控)
51world
51world圍繞3D圖形及物理仿真構(gòu)建核心技術(shù),打造了一個(gè)數(shù)字孿生PaaS平臺(tái)WDP,兩款SaaS產(chǎn)品——提升企業(yè)營(yíng)銷效率的元宇宙產(chǎn)品51Meet和幫助自動(dòng)駕駛訓(xùn)練的仿真產(chǎn)品51Sim,以及系列面向智慧城市、園區(qū)、交通等行業(yè)的數(shù)字孿生應(yīng)用51ISE、51TOC和51CIM。其中,數(shù)字孿生Paas平臺(tái)WDP是一款致力于為各行業(yè)提供“低門檻、高質(zhì)量”的數(shù)字孿生創(chuàng)作平臺(tái),可以用無(wú)代碼的方式進(jìn)行編譯,并且在PC端、VR/AR端、手機(jī)端的應(yīng)用。
數(shù)字孿生PaaS平臺(tái)WDP架構(gòu)圖(來(lái)源:51world)
優(yōu)也科技
優(yōu)也科技的數(shù)字孿生解決方案是以大數(shù)據(jù)、人工智能、云原生為技術(shù)引擎,以基礎(chǔ)工業(yè)數(shù)據(jù)操作系統(tǒng) Thingswise iDOS為內(nèi)核,通過(guò)數(shù)字孿生模型框架,高效整合工業(yè)現(xiàn)場(chǎng)數(shù)據(jù),形成面向基礎(chǔ)工業(yè)企業(yè)提升生產(chǎn)運(yùn)營(yíng)水平、能源利用水平、設(shè)備運(yùn)營(yíng)能力等系列工業(yè)智能APP應(yīng)用系統(tǒng)。優(yōu)也科技基于數(shù)字孿生框架的分層解耦架構(gòu),大大降低開發(fā)難度,有效支撐工業(yè)數(shù)據(jù)、知識(shí)與應(yīng)用的重用復(fù)用與協(xié)同共建,實(shí)現(xiàn)由工業(yè)知識(shí)到模型、由模型到應(yīng)用的高效轉(zhuǎn)化。
基于數(shù)字孿生技術(shù)的應(yīng)用案例展示 (來(lái)源:優(yōu)也科技)
優(yōu)锘科技
優(yōu)锘科技提供一站式數(shù)字孿生可視化管理平臺(tái),利用數(shù)字孿生引擎和工具平臺(tái)——ThingJS低代碼開發(fā)平臺(tái)、ThingJS零代碼開發(fā)平臺(tái)、ThingStudio森工廠數(shù)字孿生工具鏈,在數(shù)字世界中“復(fù)刻”現(xiàn)實(shí)的實(shí)體對(duì)象,并進(jìn)行仿真、監(jiān)測(cè)、分析和控制,實(shí)現(xiàn)可視化、智能化、人性化、眾創(chuàng)化的創(chuàng)新管理模式。在制造業(yè)方面,優(yōu)锘科技智慧工廠管理平臺(tái)基于數(shù)字孿生的理念,集成工廠生產(chǎn)、經(jīng)營(yíng)、安全、監(jiān)控、設(shè)備等業(yè)務(wù)系統(tǒng)的數(shù)據(jù),結(jié)合三維仿真技術(shù),創(chuàng)建虛擬數(shù)字孿生工廠,實(shí)現(xiàn)對(duì)現(xiàn)實(shí)世界的全域感知、鏡像再現(xiàn),在數(shù)字孿生世界里構(gòu)建智慧工廠各類智能應(yīng)用。
森工廠ThingStudio數(shù)字孿生工具鏈 (來(lái)源:優(yōu)锘科技)
易知微
易知微的數(shù)字孿生解決方案以EasyV數(shù)字孿生可視化搭建平臺(tái)為核心,結(jié)合WebGL、3D游戲引擎、GIS、BIM、CIM等技術(shù),助力各行各業(yè)快速搭建實(shí)時(shí)數(shù)字看板、數(shù)字駕駛艙、數(shù)字孿生等場(chǎng)景的可視化應(yīng)用,幫助客戶實(shí)現(xiàn)數(shù)字化管理。作為一款業(yè)務(wù)人員開箱即用的低代碼可視化搭建平臺(tái),EasyV主要由可視化編輯器、地理信息引擎、統(tǒng)一數(shù)據(jù)源管理這三部分功能板塊構(gòu)成。平臺(tái)內(nèi)置200+官方自研可視化標(biāo)準(zhǔn)組件素材,同時(shí)也接入了ECharts、Make A Pie等第三方開源組件,素材廣場(chǎng)中還擁有超過(guò)1000+的行業(yè)應(yīng)用模板可供用戶直接使用。
EasyV數(shù)字孿生低代碼搭建平臺(tái) (來(lái)源:易知微)
子虔科技
子虔科技推出的數(shù)字孿生協(xié)同平臺(tái)不僅可鏈接各種PLM、MBSE、CAX、BOM、ERP、MES、CRM系統(tǒng),兼顧公有云及私有化部署,還可提供全面的應(yīng)用開發(fā)接口。同時(shí),基于子虔科技數(shù)字孿生協(xié)同平臺(tái)打造的Zixel開放平臺(tái),由數(shù)字協(xié)同平臺(tái)Z-collaborate、數(shù)字空間平臺(tái)Zetaverse、以形搜形Z-matrix和數(shù)據(jù)輕量化處理服務(wù)Zeta.Realink組成,向合作伙伴及開發(fā)者全面開放,高效集成。此外,子虔科技的數(shù)字孿生云平臺(tái),通過(guò)底層平臺(tái)將三維建模、數(shù)據(jù)中臺(tái)接入能力、異構(gòu)數(shù)據(jù)實(shí)時(shí)處理能力、游戲級(jí)渲染、XR交互等眾多技術(shù)跨界整合,為傳統(tǒng)行業(yè)帶來(lái)價(jià)值。
數(shù)字協(xié)同平臺(tái)Z-collaborate核心功能 (來(lái)源:子虔科技)
Part 04
總結(jié)與展望
就現(xiàn)階段而言,盡管數(shù)字孿生技術(shù)的應(yīng)用前景非常廣闊,需求日益高漲,但目前數(shù)字孿生技術(shù)的應(yīng)用還存在諸多問(wèn)題和挑戰(zhàn),例如使用場(chǎng)景復(fù)雜導(dǎo)致的應(yīng)用深度不足,成熟度不高;由于數(shù)據(jù)采集設(shè)備的不一致性以及有限的時(shí)間同步精度,數(shù)字孿生技術(shù)在實(shí)際應(yīng)用中會(huì)產(chǎn)生失真與噪聲;先進(jìn)算法和各類軟件的整合;數(shù)字孿生解決方案整體實(shí)施成本高昂,進(jìn)入門檻高;數(shù)字孿生的專業(yè)人才與技術(shù)研發(fā)力度有限。但是,隨著傳感器、物聯(lián)網(wǎng)、軟件算法等技術(shù)的進(jìn)步,以及各大解決方案廠商對(duì)數(shù)字孿生技術(shù)的持續(xù)探索與完善,數(shù)字孿生必將為工業(yè)制造和未來(lái)生活帶來(lái)無(wú)限可能。
載:https://www.2cto.com/kf/201609/547889.html
QUrl 類提供了一個(gè)方便的接口使用 URLs。
它可以解析和構(gòu)造編碼和未編碼形式的 URLs。QUrl 也支持國(guó)際化域名(IDNs)。
最常見的使用QUrl 的方式是通過(guò)構(gòu)造函數(shù)來(lái)初始化,傳遞一個(gè) QString 參數(shù)。
QUrl url("https://github.com/");
然而,也可以使用 setUrl()
QUrl url;
url.setUrl("https://github.com/");
也可以逐漸地構(gòu)造 URL,通過(guò)調(diào)用 setScheme()、setUserName()、setPassword()、setHost()、setPort()、setPath()、setQuery() 和 setFragment()。一些方便的函數(shù)也可供使用:setAuthority() 設(shè)置用戶名、密碼、主機(jī)和端口。setUserInfo() 設(shè)置用戶名和密碼。
URLs 可以用兩種形式表示:編碼或未編碼。未編碼形式適用于顯示給用戶,編碼形式通常會(huì)發(fā)送到一個(gè) Web 服務(wù)器。例如,未編碼的URL "http://bühler.example.com/List of applicants.xml" 將被發(fā)送到服務(wù)器為 "http://xn--bhler-kva.example.com/List%20of%20applicants.xml" 。
可以使用 toString() 來(lái)獲取 URL 人類可讀的表示。這種表示方法適合以未編碼形式將 URL 顯示給用戶。然而,編碼的形式由 toEncoded() 返回,僅供內(nèi)部使用,傳遞給 Web 服務(wù)器、郵件客戶等。兩種形式在技術(shù)上正確、明確地表示相同的 URL - 事實(shí)上,傳遞任何一種形式給 QUrl 的構(gòu)造函數(shù)或使用 setUrl() 都將產(chǎn)生相同的 QUrl 對(duì)象。
QUrl 符合 RFC 3986 (統(tǒng)一資源標(biāo)識(shí)符:通用的語(yǔ)法)中的 URL 規(guī)范,包括 RFC 1738 (統(tǒng)一資源定位器)中方案的擴(kuò)展。如果 QUrl 中的折疊規(guī)則符合 RFC 3491 ,它還兼容 file URI specification 來(lái)自 freedesktop.org,提供使用 UTF-8(IDN 要求) 本地編碼編碼的文件名。
RFC 3491 是“Nameprep: A Stringprep Profile for Internationalized Domain Names (IDN)”,描述了如何準(zhǔn)備一個(gè)國(guó)際化域名,包括對(duì)一個(gè)域名字段進(jìn)行映射、正規(guī)化以及禁止性過(guò)濾等等操作。
在 URL 解析或使用單獨(dú)的 setter 函數(shù)(例如:setScheme()、setHost() 或 setPath())設(shè)置 URL 的組成部分時(shí),QUrl 能夠檢測(cè)許多錯(cuò)誤。如果解析或 setter 函數(shù)成功,任何先前記錄的錯(cuò)誤條件將被丟棄。
默認(rèn)情況下, QUrl 的 setter 函數(shù)操作在 QUrl::TolerantMode 解析模式下,這意味著他們接受一些常見錯(cuò)誤和不實(shí)數(shù)據(jù)。解析的另一種方式是 QUrl::StrictMode,這適用于進(jìn)一步檢查。詳見 QUrl::ParsingMode 描述不同的解析模式。
QUrl 只檢查符合規(guī)范的 URL。它并不試圖驗(yàn)證被處理程序預(yù)期的高層協(xié)議的 URLs 格式。例如,下面的 URIs 都被 QUrl 認(rèn)為是有效,即使在使用時(shí)他們不合理:
"http:/filename.html" "mailto://example.com"
當(dāng)解析器遇到錯(cuò)誤時(shí),它通過(guò)信號(hào)事件 isValid() 返回 false,并且 toString() / toEncoded() 返回一個(gè)空字符串。如果需要將 URL 未能解析的原因顯示給用戶,可以通過(guò)調(diào)用 QUrl 的 errorString() 來(lái)獲得錯(cuò)誤條件。注意:這個(gè)信息是高度技術(shù)性的,可能對(duì)于用戶沒(méi)有意義。
QUrl 僅能夠記錄一個(gè)錯(cuò)誤條件。如果找到一個(gè)以上錯(cuò)誤,沒(méi)有定義報(bào)告哪個(gè)錯(cuò)誤。
遵循這些原則,以避免在處理 URL 和字符串時(shí),出現(xiàn)錯(cuò)誤的字符轉(zhuǎn)換:
當(dāng)從一個(gè) QByteArray 或一個(gè)char * 創(chuàng)建包含 URL 的 QString 時(shí),記得要用 QString::fromUtf8()。
scheme
scheme 指定使用的傳輸協(xié)議,它由 URL 起始部分的一個(gè)或多個(gè) ASCII 字符表示。scheme 只能包含 ASCII 字符,對(duì)輸入不做轉(zhuǎn)換或解碼,必須以 ASCII 字母開始。
scheme 嚴(yán)格兼容 RFC 3986:scheme=ALPHA *( ALPHA / DIGIT / “+” / “-” / “.” )
協(xié)議描述file資源是本地計(jì)算機(jī)上的文件。格式:file:///,注意后邊應(yīng)是三個(gè)斜杠。ftp通過(guò) FTP 訪問(wèn)資源。格式:FTP://gopher通過(guò) Gopher 協(xié)議訪問(wèn)該資源。http通過(guò) HTTP 訪問(wèn)該資源。格式:HTTP://https通過(guò)安全的 HTTPS 訪問(wèn)該資源。格式:HTTPS://mailto資源為電子郵件地址,通過(guò) SMTP 訪問(wèn)。格式:mailto:MMS通過(guò)支持MMS(流媒體)協(xié)議的播放該資源(代表軟件:Windows Media Player)。格式:MMS://ed2k通過(guò) 支持ed2k(專用下載鏈接)協(xié)議的P2P軟件訪問(wèn)該資源(代表軟件:電驢)。格式:ed2k://Flashget通過(guò) 支持Flashget:(專用下載鏈接)協(xié)議的P2P軟件訪問(wèn)該資源(代表軟件:快車)。格式: Flashget://thunder通過(guò) 支持thunder(專用下載鏈接)協(xié)議的 P2P 軟件訪問(wèn)該資源(代表軟件:迅雷)。格式: thunder://news通過(guò) NNTP 訪問(wèn)該資源。
下圖顯示了一個(gè) URL,其 scheme 是 ftp:
<喎?"/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPtKqyejWwyBzY2hlbWWjrMq508PS1M/Ct73KvaO6PC9jb2RlPjwvY29kZT48L2NvZGU+PC9jb2RlPjwvY29kZT48L3A+DQo8cHJlIGNsYXNzPQ=="brush:java;"> QUrl url; url.setScheme("ftp");
Authority
URL 的 authority 由用戶信息、主機(jī)名和端口組成。所有這些元素都是可選的,即使 authority 為空,也是有效的。
格式:username:password@hostname:port
用戶信息和主機(jī)由'@' 分割,主機(jī)和端口由 ':'分割 。如果用戶信息為空,'@' 必須被省略。盡管端口為空時(shí),允許使用 ':'。
host:指存放資源的服務(wù)器的域名系統(tǒng)(DNS)主機(jī)名或 IP 地址。
port:整數(shù),可選,省略時(shí)使用方案的默認(rèn)端口,各種傳輸協(xié)議都有默認(rèn)的端口號(hào),如 HTTP 的默認(rèn)端口為80。如果輸入時(shí)省略,則使用默認(rèn)端口號(hào)。有時(shí)候出于安全或其他考慮,可以在服務(wù)器上對(duì)端口進(jìn)行重定義,即采用非標(biāo)準(zhǔn)端口號(hào),此時(shí),URL 中就不能省略端口號(hào)這一項(xiàng)。
user info
user info 指用戶信息,是 URL 中 authority 可選的一部分。
用戶信息包括:用戶名和一個(gè)可選的密碼,由 ':' 分割。 如果密碼為空,':'必須被省略。
path
由零或多個(gè) / 隔開的字符串,一般用來(lái)表示主機(jī)上的一個(gè)目錄或文件地址。在 authority 之后,query 之前。
對(duì)于沒(méi)有層級(jí)的 schemes,路徑將是 scheme 后的所有部分,像下面這樣:
query
query 指查詢字符串,可選,用于給動(dòng)態(tài)網(wǎng)頁(yè)(例如:使用 CGI、ISAPI、PHP/JSP/ASP/ASP、.NET 等技術(shù)制作的網(wǎng)頁(yè))傳遞參數(shù),可有多個(gè)參數(shù),用 & 隔開,每個(gè)參數(shù)的名和值用=隔開。
構(gòu)建一個(gè)查詢尤其方便,請(qǐng)參考:Qt之QUrlQuery
fragment
fragment 指定網(wǎng)絡(luò)資源中的片斷。是 URL 的最后一部分,由'#' 后面跟的字符串表示。通常指的是用于 HTTP 頁(yè)面上的某個(gè)鏈接或點(diǎn)。
例如:一個(gè)網(wǎng)頁(yè)中有多個(gè)名詞解釋,可使用 fragment 直接定位到某一名詞解釋。
fragment 有時(shí)也被稱為 URL“引用”。
傳遞一個(gè) QString()(null 字符串)將取消 fragment 的設(shè)置。傳遞一個(gè)參數(shù) QString(“”)(空而非 null 字符串)將 fragment 設(shè)置為一個(gè)空字符串(和原始 URL 一樣,只有一個(gè) "#")。
相對(duì)路徑
調(diào)用 isRelative() 可以判斷 URL 是否是相對(duì)的。一個(gè)相對(duì)的 URL 可以被轉(zhuǎn)變通過(guò)將它作為參數(shù)傳遞給 resolved(),會(huì)返回一個(gè)絕對(duì) URL。isParentOf() 用來(lái)確定一個(gè) URL 是否是另一個(gè)的 parent。
QUrl resolved(const QUrl &relative) const
如果 relative 不是一個(gè)相對(duì) URL,該函數(shù)會(huì)直接返回 relative。否則,這兩個(gè) URL 的路徑會(huì)進(jìn)行合并,返回的新 URL 會(huì)有 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/"
調(diào)用 resolved() 使用 "..",返回原始目錄的上級(jí)目錄。同樣,使用 "../.." 將返回上上一層目錄。如果 relative 是 "/",路徑會(huì)變成 "/"。
用戶輸入
[static] QUrl fromUserInput(const QString &userInput)
可以被扣除,返回一個(gè) userInput 指定的有效 URL;如果不能,則會(huì)返回一個(gè)空 QURL。
大多數(shù)應(yīng)用程序,可以瀏覽網(wǎng)頁(yè),允許用戶輸入一個(gè) URL 形式的簡(jiǎn)單字符串。此字符串可以手動(dòng)輸入到地址欄,從剪貼板中獲得,或者通過(guò)命令行參數(shù)傳遞。
當(dāng)沒(méi)有一個(gè)有效的 URL 字符串時(shí),執(zhí)行最好的猜測(cè),使各種web相關(guān)的假設(shè)。
當(dāng)字符串對(duì)應(yīng)系統(tǒng)上的一個(gè)有效文件路徑時(shí),會(huì)構(gòu)造一個(gè) file:// URL,使用 QUrl::fromLocalFile()。
如果不是這種情況,試圖把字符串變成一個(gè) http:// 或 ftp:// URL。這時(shí),后者字符串從以 'ftp' 開始。結(jié)果然后通過(guò) QUrl 的 tolerant 解析器傳遞,如果成功,則會(huì)返回一個(gè)有效的 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
返回文件的名稱,包括目錄路徑。
注意:如果這個(gè) QUrl 對(duì)象路徑以斜杠結(jié)束,文件的名稱是空的。
如果路徑不包含任何斜線,完全返回作為文件名。
示例:
QUrl url("http://qt-project.org/support/file.html"); // url.adjusted(RemoveFilename)=="http://qt-project.org/support/" // url.fileName()=="file.html"
參數(shù) options 控制如何格式化文件名稱組成。所有值產(chǎn)生一個(gè)明確的結(jié)果。使用 QUrl::FullyDecoded,所有百分比編碼序列被解碼;否則,返回值可能包含在QString的編碼形式不能表示的一些百分比編碼序列。
主機(jī)、端口
例如,通過(guò) socket 連接到一個(gè)指定 QUrl 包含的主機(jī)、端口:
QTcpSocket sock; sock.connectToHost(url.host(), url.port(80));
本地文件
可以使用 fromLocalFile() 構(gòu)造一個(gè) QUrl,通過(guò)傳遞一個(gè)本地文件路徑。toLocalFile() 將一個(gè) URL 轉(zhuǎn)換為本地文件路徑。
QUrl url=QUrl::fromLocalFile("E:\\Qt.txt"); // QUrl("file:///E:/Qt.txt")
百分比編碼
為方便生成編碼 URL 字符串或查詢字符串,有兩個(gè)靜態(tài)函數(shù):fromPercentEncoding() 和 toPercentEncoding(),處理編碼和解碼的百分比 QString 對(duì)象。
[static] QByteArray toPercentEncoding(const QString &input, const QByteArray &exclude=QByteArray(), const QByteArray &include=QByteArray())
返回一個(gè)編碼的輸入副本 。輸入首先轉(zhuǎn)換為 UTF-8,沒(méi)有在無(wú)限制組中的所有 ASCII 字符是百分比編碼的。 為了防止字符變?yōu)榘俜直染幋a,可以將他們傳遞給 exclude,為了迫使字符變?yōu)榘俜直染幋a,將他們傳遞給 include。
無(wú)限制的定義是:ALPHA / DIGIT / “-” / “.” / “_” / “~”
QByteArray ba=QUrl::toPercentEncoding("{a fishy string?}", "{}", "s"); qDebug(ba.constData()); // 打印 "{a fi%73hy %73tring%3F}"
有效性
構(gòu)建一個(gè) URL 后,可以在任何時(shí)候調(diào)用 isValid(),來(lái)檢查 URL 的有效性。如果返回 false,應(yīng)該在繼續(xù)之前 clear() URL,或通過(guò)為 setUrl() 傳遞一個(gè)新的 URL 重新開始。
bool isValid() const
URL 運(yùn)行通過(guò)一致性測(cè)試。URL 的每一部分都必須符合 URI 標(biāo)準(zhǔn)的標(biāo)準(zhǔn)編碼規(guī)則,URL 才是有效的。
前段時(shí)間群里討論,想實(shí)現(xiàn)某個(gè)文件定時(shí)上傳到服務(wù)器要怎么來(lái)實(shí)現(xiàn)。我記得之前做過(guò) 一個(gè)項(xiàng)目:為高通的iot模組編寫FOTA功能:實(shí)現(xiàn)模組可以遠(yuǎn)程下載升級(jí)鏡像包,實(shí)現(xiàn)版本升級(jí)功能。并當(dāng)時(shí)使用的一個(gè)超級(jí)強(qiáng)大的工具cURL。心血來(lái)潮,決定專門寫一篇文章,送給需要的朋友。
文章分兩部分
cURL 是常用的命令行工具,用來(lái)請(qǐng)求 Web 服務(wù)器。它的名字就是客戶端(client)的 URL 工具的意思。
cURL 的原作者是 Daniel Stenberg (目前是 cURL 的核心開發(fā)者),同時(shí)也是 IETF HTTPbis 工作組的資深成員。Daniel 在 1998 年創(chuàng)建了 curl 項(xiàng)目,他編寫了最初的 curl 版本,并創(chuàng)建了 libcurl 庫(kù)。到目前為止,代碼倉(cāng)庫(kù)包括的 24000 次 commit 有超過(guò)一半是 Daniel 本人提交的,他依然是項(xiàng)目的核心開發(fā)者。Daniel 表示已將 curl 視為自己的孩子。
作為一款強(qiáng)力工具,支持的協(xié)議包括 (DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET and TFTP),還支持POST、cookies、認(rèn)證、從指定偏移處下載部分文件等功能,具有用戶代理字符串、限速、文件大小、進(jìn)度條、cookie支持、用戶認(rèn)證、斷點(diǎn)續(xù)傳等特征。
sudo apt-get install curl
curl [options] [URL...]
URL的格式定義要參考 RFC 1808 。
地址:http://www.w3.org/Addressing/rfc1808.txt《Relative Uniform Resource Locators 》
URL由三部分組成:資源類型、存放資源的主機(jī)域名、資源文件名。 也可認(rèn)為由4部分組成:協(xié)議、主機(jī)、端口、路徑URL的一般語(yǔ)法格式為:
protocol :// hostname[:port] / path / [;parameters][?query]#fragment
(帶方括號(hào)[]的為可選項(xiàng))。
指定使用的傳輸協(xié)議,下表列出 protocol 屬性的有效方案名稱。 最常用的是HTTP協(xié)議,它也是WWW中應(yīng)用最廣的協(xié)議。
是指存放資源的服務(wù)器的域名系統(tǒng)(DNS) 主機(jī)名或 IP 地址。有時(shí),在主機(jī)名前也可以包含連接到服務(wù)器所需的用戶名和密碼(格式:username:password@hostname)。
整數(shù),可選,省略時(shí)使用方案的默認(rèn)端口,各種傳輸協(xié)議都有默認(rèn)的端口號(hào),如http的默認(rèn)端口為80。如果輸入時(shí)省略,則使用默認(rèn)端口號(hào)。有時(shí)候出于安全或其他考慮,可以在服務(wù)器上對(duì)端口進(jìn)行重定義,即采用非標(biāo)準(zhǔn)端口號(hào),此時(shí),URL中就不能省略端口號(hào)這一項(xiàng)。
由零或多個(gè)“/”符號(hào)隔開的字符串,一般用來(lái)表示主機(jī)上的一個(gè)目錄或文件地址。
這是用于指定特殊參數(shù)的可選項(xiàng)。
可選,用于給動(dòng)態(tài)網(wǎng)頁(yè)(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技術(shù)制作的網(wǎng)頁(yè))傳遞參數(shù),可有多個(gè)參數(shù),用“&”符號(hào)隔開,每個(gè)參數(shù)的名和值用“=”符號(hào)隔開。
字符串,用于指定網(wǎng)絡(luò)資源中的片斷。例如一個(gè)網(wǎng)頁(yè)中有多個(gè)名詞解釋,可使用fragment直接定位到某一名詞解釋。
由于linux curl功能十分強(qiáng)大,所以命令參數(shù)十分多,下表只篩選出來(lái)部分常用的參數(shù),更多參數(shù)請(qǐng)運(yùn)行“man curl”命令查看。
參數(shù)功能-a/--append上傳文件時(shí),附加到目標(biāo)文件-A/--user-agent設(shè)置用戶代理發(fā)送給服務(wù)器-anyauth可以使用“任何”身份驗(yàn)證方法-b/--cookie <name=string/file>cookie字符串或文件讀取位置--basic使用HTTP基本驗(yàn)證-B/--use-ascii使用ASCII /文本傳輸-c/--cookie-jar操作結(jié)束后把cookie寫入到這個(gè)文件中-C/--continue-at斷點(diǎn)續(xù)轉(zhuǎn)-d/--dataHTTP POST方式傳送數(shù)據(jù)--data-ascii以ascii的方式post數(shù)據(jù)--data-binary以二進(jìn)制的方式post數(shù)據(jù)--negotiate使用HTTP身份驗(yàn)證--digest使用數(shù)字身份驗(yàn)證--disable-eprt禁止使用EPRT或LPRT--disable-epsv禁止使用EPSV-D/--dump-header把header信息寫入到該文件中--egd-file為隨機(jī)數(shù)據(jù)(SSL)設(shè)置EGD socket路徑--tcp-nodelay使用TCP_NODELAY選項(xiàng)-e/--referer來(lái)源網(wǎng)址-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要求返回是壓縮的形勢(shì) (using deflate or gzip)--connect-timeout設(shè)置最大請(qǐng)求時(shí)間--create-dirs建立本地目錄的目錄層次結(jié)構(gòu)--crlf上傳是把LF轉(zhuǎn)變成CRLF-f/--fail連接失敗時(shí)不顯示http錯(cuò)誤--ftp-create-dirs如果遠(yuǎn)程目錄不存在,創(chuàng)建遠(yuǎn)程目錄--ftp-method [multicwd/nocwd/singlecwd]控制CWD的使用--ftp-pasv使用 PASV/EPSV 代替端口--ftp-skip-pasv-ip使用PASV的時(shí)候,忽略該IP地址--ftp-ssl嘗試用 SSL/TLS 來(lái)進(jìn)行ftp數(shù)據(jù)傳輸--ftp-ssl-reqd要求用 SSL/TLS 來(lái)進(jìn)行ftp數(shù)據(jù)傳輸-F/--form <name=content>模擬http表單提交數(shù)據(jù)--form-string <name=string>模擬http表單提交數(shù)據(jù)-g/--globoff禁用網(wǎng)址序列和范圍使用{}和[]-G/--get以get的方式來(lái)發(fā)送數(shù)據(jù)-H/--header自定義頭信息傳遞給服務(wù)器--ignore-content-length忽略的HTTP頭信息的長(zhǎng)度-i/--include輸出時(shí)包括protocol頭信息-I/--head只顯示請(qǐng)求頭信息-j/--junk-session-cookies讀取文件進(jìn)忽略session cookie--interface使用指定網(wǎng)絡(luò)接口/地址--krb4使用指定安全級(jí)別的krb4-k/--insecure允許不使用證書到SSL站點(diǎn)-K/--config指定的配置文件讀取-l/--list-only列出ftp目錄下的文件名稱--limit-rate設(shè)置傳輸速度--local-port強(qiáng)制使用本地端口號(hào)-m/--max-time設(shè)置最大傳輸時(shí)間--max-redirs設(shè)置最大讀取的目錄數(shù)--max-filesize設(shè)置最大下載的文件總量-M/--manual顯示全手動(dòng)-n/--netrc從netrc文件中讀取用戶名和密碼--netrc-optional使用 .netrc 或者 URL來(lái)覆蓋-n--ntlm使用 HTTP NTLM 身份驗(yàn)證-N/--no-buffer禁用緩沖輸出-o/--output把輸出寫到該文件中-O/--remote-name把輸出寫到該文件中,保留遠(yuǎn)程文件的文件名-p/--proxytunnel使用HTTP代理--proxy-anyauth選擇任一代理身份驗(yàn)證方法--proxy-basic在代理上使用基本身份驗(yàn)證--proxy-digest在代理上使用數(shù)字身份驗(yàn)證--proxy-ntlm在代理上使用ntlm身份驗(yàn)證-P/--ftp-port使用端口地址,而不是使用PASV-q作為第一個(gè)參數(shù),關(guān)閉 .curlrc-Q/--quote文件傳輸前,發(fā)送命令到服務(wù)器-r/--range檢索來(lái)自HTTP/1.1或FTP服務(wù)器字節(jié)范圍--range-file讀取(SSL)的隨機(jī)文件-R/--remote-time在本地生成文件時(shí),保留遠(yuǎn)程文件時(shí)間--retry傳輸出現(xiàn)問(wèn)題時(shí),重試的次數(shù)--retry-delay傳輸出現(xiàn)問(wèn)題時(shí),設(shè)置重試間隔時(shí)間--retry-max-time傳輸出現(xiàn)問(wèn)題時(shí),設(shè)置最大重試時(shí)間-s/--silent靜默模式。不輸出任何東西-S/--show-error顯示錯(cuò)誤--socks4 <host[:port]>用socks4代理給定主機(jī)和端口--socks5 <host[:port]>用socks5代理給定主機(jī)和端口--stderr-t/--telnet-option <OPT=val>Telnet選項(xiàng)設(shè)置--trace對(duì)指定文件進(jìn)行debug--trace-asciiLike --跟蹤但沒(méi)有hex輸出--trace-time跟蹤/詳細(xì)輸出時(shí),添加時(shí)間戳-T/--upload-file上傳文件--urlSpet URL to work with-u/--user <user[:password]>設(shè)置服務(wù)器的用戶和密碼-U/--proxy-user <user[:password]>設(shè)置代理用戶名和密碼-w/--write-out [format]什么輸出完成后-x/--proxy <host[:port]>在給定的端口上使用HTTP代理-X/--request指定什么命令-y/--speed-time放棄限速所要的時(shí)間,默認(rèn)為30-Y/--speed-limit停止傳輸速度的限制,速度時(shí)間
下面是linux curl命令的錯(cuò)誤代碼和她們的相應(yīng)的錯(cuò)誤消息,命令執(zhí)行錯(cuò)誤的時(shí)候可以通過(guò)錯(cuò)誤碼來(lái)查看出錯(cuò)原因,方便開發(fā)調(diào)試。
退 出 碼錯(cuò)誤描述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.
為節(jié)省篇幅,部分操作不再貼上執(zhí)行結(jié)果。
直接在curl命令后加上網(wǎng)址,就可以看到網(wǎng)頁(yè)源碼。我們以網(wǎng)址www.sina.com為例(選擇該網(wǎng)址,主要因?yàn)樗木W(wǎng)頁(yè)代碼較短):
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>
執(zhí)行結(jié)果顯示 307 Temporary Redirect,說(shuō)明該網(wǎng)址需要重定向。
如果要把這個(gè)網(wǎng)頁(yè)保存下來(lái),可以使用-o參數(shù),這就相當(dāng)于使用wget命令了。
curl -o [文件名] www.sohu.com
有的網(wǎng)址是自動(dòng)跳轉(zhuǎn)的。使用-L參數(shù),curl就會(huì)跳轉(zhuǎn)到新的網(wǎng)址。
curl -L www.sohu.com
鍵入上面的命令,結(jié)果就自動(dòng)跳轉(zhuǎn)為www.sohu.com.cn。
-i參數(shù)可以顯示http response的頭信息,連同網(wǎng)頁(yè)代碼一起。
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參數(shù)則是只顯示http response的頭信息。
-v參數(shù)可以顯示一次http通信的整個(gè)過(guò)程,包括端口連接和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
如果你覺得上面的信息還不夠,那么下面的命令可以查看更詳細(xì)的通信過(guò)程。
curl --trace output.txt www.sohu.com
或者
curl --trace-ascii output.txt www.sohu.com
運(yùn)行后,請(qǐng)打開output.txt文件查看。
發(fā)送表單信息有GET和POST兩種方法。GET方法相對(duì)簡(jiǎn)單,只要把數(shù)據(jù)附在網(wǎng)址后面就行。
curl example.com/form.cgi?data=xxx
POST方法必須把數(shù)據(jù)和網(wǎng)址分開,curl就要用到--data參數(shù)。
curl -X POST --data "data=xxx" example.com/form.cgi
如果你的數(shù)據(jù)沒(méi)有經(jīng)過(guò)表單編碼,還可以讓curl為你編碼,參數(shù)是--data-urlencode。
curl -X POST--data-urlencode "date=April 1" example.com/form.cgi
curl默認(rèn)的HTTP動(dòng)詞是GET,使用-X參數(shù)可以支持其他動(dòng)詞。
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]
有時(shí)你需要在http request頭信息中,提供一個(gè)referer字段,表示你是從哪里跳轉(zhuǎn)過(guò)來(lái)的。
curl --referer http://www.example.com http://www.example.com
這個(gè)字段是用來(lái)表示客戶端的設(shè)備信息。服務(wù)器有時(shí)會(huì)根據(jù)這個(gè)字段,針對(duì)不同設(shè)備,返回不同格式的網(wǎng)頁(yè),比如手機(jī)版和桌面版。
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參數(shù),可以讓curl發(fā)送cookie。
curl --cookie "name=xxx" www.example.com
至于具體的cookie的值,可以從http response頭信息的Set-Cookie字段中得到。
-c cookie-file可以保存服務(wù)器返回的cookie到文件,-b cookie-file可以使用這個(gè)文件作為cookie信息,進(jìn)行后續(xù)的請(qǐng)求。
curl -c cookies http://example.comcurl -b cookies http://example.com
有時(shí)需要在http request之中,自行增加一個(gè)頭信息。--header參數(shù)就可以起到這個(gè)作用。
$ curl --header "Content-Type:application/json" http://example.com
使用curl選項(xiàng) -u 可以完成HTTP或者FTP的認(rèn)證,可以指定密碼,也可以不指定密碼在后續(xù)操作中輸入密碼:
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 #簡(jiǎn)潔寫法curl ftp://name:passwd@www.xxx.com #簡(jiǎn)潔寫法2
例如:在IP地址192.168.43.117上搭建FTP服務(wù)器,并設(shè)置用戶名為user,密碼為123456現(xiàn)在我們要顯示服務(wù)器上根目錄下的所有文件信息,命令如下:
curl -u user:123456 ftp://192.168.43.117
執(zhí)行結(jié)果如下:
簡(jiǎn)潔寫法:
curl ftp://user:123456@192.168.43.117
執(zhí)行結(jié)果如下:
curl ftp://www.xxx.com –u name:passwd -s
格式
curl ftp://www.xxx.com/size.zip –u name:passwd -o size.zip
示例如下: 從服務(wù)器的根目錄下下載文件test.c,保存到本地,本地文件名也為test.c。 【注意】如果沒(méi)有-o選項(xiàng),程序會(huì)吧數(shù)據(jù)流定向到stdout,即直接把文件內(nèi)容顯示到終端上。
curl ftp://user:123456@192.168.43.117/test.c -o test.c
執(zhí)行結(jié)果如下:
簡(jiǎn)潔模式
curl -u user:123456 ftp://192.168.43.117/list.h -o list.h
執(zhí)行結(jié)果如下:
curl –u name:passwd -T size.mp3 ftp://www.xxx.com/mp3/
舉例如下:
curl -u user:123456 ftp://192.168.43.117/ -T list.h
可以看到文件并沒(méi)有上傳成功,返回錯(cuò)誤碼是25,參考第五章
25 FTP couldn't STOR file. The server denied the STOR operation, used for FTP uploading.
可知,是因?yàn)榉?wù)器沒(méi)有賦予存儲(chǔ)的權(quán)限,所以設(shè)置服務(wù)器的write權(quán)限即可。
在這里插入圖片描述
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字母大寫
在這里插入圖片描述
首先記錄當(dāng)前l(fā)og文件時(shí)間,并記錄到全局變量last_mtime中。
讀取文件最后修改時(shí)間,并和last_mtime進(jìn)行比較,如果相同就返回0,不同就返回1.
將當(dāng)前的日志文件拷貝成備份文件,備份文件名字加上當(dāng)前時(shí)間。
得到對(duì)應(yīng)文件的屬性信息,存放到struct stat結(jié)構(gòu)體變量中。
執(zhí)行參數(shù)中字符串對(duì)應(yīng)的命令
/* Copyright (C) 公眾號(hào): 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;
/*用戶名密碼暫時(shí)寫死,實(shí)際應(yīng)該保存在配置文件*/
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)
{
//準(zhǔn)備結(jié)構(gòu)體
ST status;
//調(diào)用stat函數(shù)
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)
{
//準(zhǔn)備結(jié)構(gòu)體
ST status;
//調(diào)用stat函數(shù)
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);
}
}
第一步:
因?yàn)閘og文件沒(méi)有被修改過(guò),所以程序不會(huì)上傳。
第二步:手動(dòng)輸入字符串 yikoulinux 到日志文件 t.log中。
第三步: 因?yàn)槲募l(fā)生了改變,所以打印“file updated”,同時(shí)可以看到curl上傳文件的log信息。
以下是FTP服務(wù)器的根目錄,可以看到,上傳的日志文件:t-2020-7-26-1-19-45.log。
想和博主交流,請(qǐng)關(guān)注公眾號(hào)「一口Linux」
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。