工業(yè)機器人編程語言:KRL(KUKA):KRL函數(shù)與模塊化編程_第1頁
工業(yè)機器人編程語言:KRL(KUKA):KRL函數(shù)與模塊化編程_第2頁
工業(yè)機器人編程語言:KRL(KUKA):KRL函數(shù)與模塊化編程_第3頁
工業(yè)機器人編程語言:KRL(KUKA):KRL函數(shù)與模塊化編程_第4頁
工業(yè)機器人編程語言:KRL(KUKA):KRL函數(shù)與模塊化編程_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

工業(yè)機器人編程語言:KRL(KUKA):KRL函數(shù)與模塊化編程1KRL編程基礎1.1KRL語言簡介KRL(KUKARobotLanguage)是KUKA機器人公司開發(fā)的一種專用于其工業(yè)機器人編程的高級語言。它提供了一種直觀且功能強大的方式來控制和編程KUKA機器人,支持各種工業(yè)應用,如焊接、裝配、搬運等。KRL語言的設計考慮了工業(yè)環(huán)境的特殊需求,如實時性、精確性和安全性,使得機器人能夠高效、準確地執(zhí)行復雜的任務。1.1.1特點直觀的語法:KRL的語法類似于C語言,易于學習和使用。模塊化編程:支持函數(shù)和模塊的創(chuàng)建,便于代碼的重用和維護。實時控制:KRL能夠實時控制機器人的運動和操作,滿足工業(yè)自動化的需求。安全性:內(nèi)置的安全機制確保機器人在執(zhí)行任務時不會對操作人員或設備造成傷害。1.2KRL編程環(huán)境設置在開始使用KRL編程之前,需要設置合適的編程環(huán)境。這通常涉及到KUKA機器人的控制柜(KCP)和KUKA.Sim軟件的使用。1.2.1控制柜(KCP)KUKA控制柜是機器人操作和編程的主要界面。它提供了KRL編程的環(huán)境,包括編輯器、編譯器和調(diào)試工具。1.2.2KUKA.Sim軟件KUKA.Sim是KUKA提供的仿真軟件,允許在虛擬環(huán)境中測試和優(yōu)化KRL程序,無需實際機器人參與,降低了調(diào)試成本和風險。1.2.3設置步驟連接KCP:確保KCP與機器人正確連接。啟動KRL編輯器:在KCP上啟動KRL編輯器。創(chuàng)建新程序:使用編輯器創(chuàng)建新的KRL程序。編譯和運行:編譯程序并上傳到機器人控制器,然后在機器人上運行程序進行測試。1.3基本語法和數(shù)據(jù)類型KRL語言的基本語法和數(shù)據(jù)類型是編程的基礎。理解這些概念對于編寫有效的機器人程序至關重要。1.3.1數(shù)據(jù)類型KRL支持多種數(shù)據(jù)類型,包括:整型(INT):用于存儲整數(shù)。實型(REAL):用于存儲實數(shù)。字符串(STRING):用于存儲文本。布爾型(BOOL):用于存儲邏輯值,真或假。數(shù)組(ARRAY):用于存儲一系列相同類型的數(shù)據(jù)。結構體(STRUCT):用于存儲不同類型的數(shù)據(jù)組合。1.3.2變量聲明變量在KRL中用于存儲數(shù)據(jù)。聲明變量時,需要指定其類型和名稱。VARINTiCounter:=0;

VARREALfTemperature:=20.5;

VARSTRINGsMessage:="Hello,KUKA!";1.3.3控制結構KRL提供了常見的控制結構,如循環(huán)和條件語句,用于控制程序的流程。1.3.3.1循環(huán)FORiCounterFROM1TO10DO

WRITE("Count:"+iCounter);

ENDFOR;1.3.3.2條件語句IFfTemperature>30THEN

WRITE("Temperatureishigh.");

ELSEIFfTemperature<10THEN

WRITE("Temperatureislow.");

ELSE

WRITE("Temperatureisnormal.");

ENDIF;1.3.4函數(shù)定義函數(shù)在KRL中用于封裝可重用的代碼塊。定義函數(shù)時,需要指定其返回類型、名稱和參數(shù)。FUNCTIONINTAddNumbers(INTiNum1,INTiNum2)

VARINTiResult;

iResult:=iNum1+iNum2;

RETURNiResult;

ENDFUNCTION;1.3.5調(diào)用函數(shù)在程序中調(diào)用函數(shù),可以使用其名稱和傳遞必要的參數(shù)。VARINTiSum;

iSum:=AddNumbers(5,10);

WRITE("Sum:"+iSum);1.3.6模塊化編程模塊化編程是將程序分解為獨立的、可重用的模塊或函數(shù)的過程。這不僅提高了代碼的可讀性和可維護性,還使得程序的測試和調(diào)試更加容易。1.3.6.1示例:創(chuàng)建模塊假設我們需要創(chuàng)建一個模塊來計算兩點之間的距離。MODULEDistanceCalculator

FUNCTIONREALCalculateDistance(VECTORvPoint1,VECTORvPoint2)

VARREALdDistance;

dDistance:=SQRT((vPoint1.X-vPoint2.X)*(vPoint1.X-vPoint2.X)+(vPoint1.Y-vPoint2.Y)*(vPoint1.Y-vPoint2.Y)+(vPoint1.Z-vPoint2.Z)*(vPoint1.Z-vPoint2.Z));

RETURNdDistance;

ENDFUNCTION;

ENDMODULE;1.3.6.2使用模塊在主程序中,我們可以導入并使用這個模塊。IMPORTDistanceCalculator;

VARVECTORvPoint1:=[0,0,0];

VARVECTORvPoint2:=[3,4,0];

VARREALdDistance;

dDistance:=DistanceCalculator.CalculateDistance(vPoint1,vPoint2);

WRITE("Distance:"+dDistance);通過以上介紹,我們了解了KRL語言的基本概念,包括數(shù)據(jù)類型、變量聲明、控制結構、函數(shù)定義和模塊化編程。這些知識是編寫KUKA機器人程序的基礎,掌握它們將有助于開發(fā)更復雜、更高效的機器人應用。2函數(shù)與過程2.1定義KRL函數(shù)在KUKA機器人編程語言KRL中,函數(shù)是一種封裝代碼塊的方式,用于執(zhí)行特定任務并返回結果。定義函數(shù)的基本語法如下:FUNCTIONfunctionName(parameterList)

//函數(shù)體,包含執(zhí)行的代碼

RETURNexpression

END_FUNCTION2.1.1示例:定義一個簡單的函數(shù)假設我們需要定義一個函數(shù),用于計算兩個數(shù)的和。下面是一個KRL函數(shù)的示例:FUNCTIONaddNumbers(num1,num2)

RETURNnum1+num2

END_FUNCTION在這個例子中,addNumbers函數(shù)接受兩個參數(shù)num1和num2,并返回它們的和。2.2函數(shù)參數(shù)與返回值KRL函數(shù)可以接受參數(shù),并且可以返回一個值。參數(shù)用于向函數(shù)傳遞數(shù)據(jù),而返回值則是函數(shù)執(zhí)行結果的輸出。2.2.1示例:使用參數(shù)和返回值讓我們擴展上面的addNumbers函數(shù),使其能夠處理任意數(shù)量的參數(shù),并返回它們的平均值。FUNCTIONaverage(numbers)

localrealsum=0

localintcount=0

foreachrealnumberinnumbers

sum=sum+number

count=count+1

end

RETURNsum/count

END_FUNCTION在這個例子中,average函數(shù)接受一個名為numbers的數(shù)組作為參數(shù)。它使用一個foreach循環(huán)來遍歷數(shù)組中的每個元素,計算總和和元素數(shù)量,最后返回平均值。2.3過程與函數(shù)的區(qū)別在KRL中,過程和函數(shù)都是用于封裝代碼的,但它們之間有一個關鍵的區(qū)別:函數(shù)可以返回一個值,而過程則不能。過程主要用于執(zhí)行一系列操作,而不關心返回結果。2.3.1示例:定義一個過程假設我們有一個過程,用于在控制臺上打印一系列數(shù)字。PROCEDUREprintNumbers(numbers)

foreachrealnumberinnumbers

Console.Print("Number:"+number)

end

END_PROCEDURE在這個例子中,printNumbers過程接受一個名為numbers的數(shù)組作為參數(shù),然后使用foreach循環(huán)遍歷數(shù)組中的每個元素,并使用Console.Print函數(shù)在控制臺上打印每個數(shù)字。由于這是一個過程,它沒有RETURN語句,因此不會返回任何值。通過這些示例,我們可以看到KRL中的函數(shù)和過程如何幫助我們組織代碼,使其更加模塊化和可重用。函數(shù)用于計算和返回結果,而過程則用于執(zhí)行操作。在實際編程中,根據(jù)需要選擇使用函數(shù)或過程是非常重要的。3模塊化編程概念3.1模塊化編程的重要性模塊化編程是一種軟件設計技術,它將程序分解為獨立的、可重用的代碼塊,稱為模塊。這種編程方式在工業(yè)機器人編程中尤為重要,因為它可以:提高代碼的可讀性和可維護性:通過將代碼組織成模塊,每個模塊負責一個特定的功能,使得代碼結構清晰,易于理解和修改。促進代碼重用:模塊可以被多個程序或項目重用,減少了重復編碼的工作量,提高了開發(fā)效率。簡化調(diào)試和測試:模塊化使得調(diào)試和測試更加集中,可以單獨測試每個模塊,確保其功能正確,再將它們組合起來。增強程序的擴展性:當需要添加新功能時,可以通過增加或修改特定模塊來實現(xiàn),而不會影響到程序的其他部分。3.2KRL中的模塊與包KRL(KUKARobotLanguage)是KUKA工業(yè)機器人使用的編程語言。在KRL中,模塊化編程通過定義模塊和包來實現(xiàn)。模塊是包含一組相關函數(shù)的代碼文件,而包則是一組模塊的集合,通常用于組織和管理大型項目中的模塊。3.2.1模塊定義在KRL中,模塊定義使用MODULE關鍵字開始,模塊結束使用ENDMODULE關鍵字。模塊可以包含函數(shù)、變量和常量。例如:MODULEMyModule

VARmyVar:int;

CONSTmyConst:int:=10;

PROCEDUREMyProcedure

myVar:=myVar+1;

ENDPROCEDURE

FUNCTIONMyFunction(param:int):int

RETURNparam+myConst;

ENDFUNCTION

ENDMODULE3.2.2包定義包在KRL中使用PACKAGE關鍵字定義,可以包含多個模塊。例如:PACKAGEMyPackage

INCLUDEMyModule.krl

INCLUDEAnotherModule.krl

ENDPACKAGE3.3創(chuàng)建和使用自定義模塊3.3.1創(chuàng)建模塊創(chuàng)建KRL模塊時,首先需要定義模塊的結構,包括變量、常量、函數(shù)和過程。模塊文件通常以.krl擴展名保存。下面是一個簡單的模塊創(chuàng)建示例:MODULEMathOperations

FUNCTIONAdd(a:int,b:int):int

RETURNa+b;

ENDFUNCTION

FUNCTIONSubtract(a:int,b:int):int

RETURNa-b;

ENDFUNCTION

ENDMODULE3.3.2使用模塊使用自定義模塊時,需要在主程序中包含模塊文件。這可以通過INCLUDE語句實現(xiàn)。例如,如果要使用上面定義的MathOperations模塊,可以這樣做:PROGRAMMainProgram

INCLUDEMathOperations.krl

PROCEDUREMain

VARresult:int;

result:=MathOperations.Add(5,3);

WRITE("5+3=",result);

ENDPROCEDURE

ENDPROGRAM在這個例子中,MainProgram包含了MathOperations模塊,并調(diào)用了其中的Add函數(shù)來執(zhí)行加法操作。3.3.3模塊的重用模塊的重用是模塊化編程的一個關鍵優(yōu)勢。一旦創(chuàng)建了一個模塊,如MathOperations,它就可以在多個程序中使用,而無需重新編寫相同的代碼。例如,另一個程序也可以包含并使用MathOperations模塊:PROGRAMAnotherProgram

INCLUDEMathOperations.krl

PROCEDUREMain

VARresult:int;

result:=MathOperations.Subtract(10,7);

WRITE("10-7=",result);

ENDPROCEDURE

ENDPROGRAM在這個例子中,AnotherProgram使用了MathOperations模塊中的Subtract函數(shù)來執(zhí)行減法操作。通過模塊化編程,KRL程序可以更加結構化、可讀和可維護,同時提高了代碼的重用性和項目的擴展性。4KRL模塊化實踐4.1編寫可重用的KRL代碼在工業(yè)機器人編程中,KRL(KUKARobotLanguage)提供了強大的功能來創(chuàng)建模塊化的代碼。模塊化編程允許我們將代碼分解成可管理的、可重用的塊,這不僅提高了代碼的可讀性和可維護性,還使得代碼的復用變得簡單。下面,我們將通過一個示例來展示如何在KRL中編寫可重用的代碼。4.1.1示例:創(chuàng)建一個模塊用于計算圓的面積假設我們需要在多個程序中使用計算圓面積的代碼。我們可以將其封裝成一個模塊,以便在不同的地方重復使用。MODULECircleArea

VAR

radius:real;

area:real;

PROCEDURECalculateArea

radius:=10.0;//半徑示例值

area:=3.14159*radius*radius;

WRITE("Theareaofthecircleis:",area);

ENDPROCEDURE

ENDMODULE在其他程序中,我們可以簡單地調(diào)用這個模塊,而不必重新編寫計算圓面積的代碼。PROGRAMUseCircleArea

INCLUDECircleArea

PROCEDUREmain

CircleArea.CalculateArea();

ENDPROCEDURE

ENDPROGRAM4.2模塊間的依賴管理KRL中的模塊可以相互依賴,這意味著一個模塊可以包含對其他模塊的引用。這種依賴關系的管理對于構建復雜系統(tǒng)至關重要,它確保了模塊之間的正確交互和數(shù)據(jù)共享。4.2.1示例:創(chuàng)建兩個相互依賴的模塊假設我們有兩個模塊,CircleArea和CircleCircumference,它們分別用于計算圓的面積和周長。CircleCircumference需要使用CircleArea中的radius變量。MODULECircleArea

VAR

radius:real;

PROCEDURECalculateArea

radius:=10.0;

area:=3.14159*radius*radius;

WRITE("Theareaofthecircleis:",area);

ENDPROCEDURE

ENDMODULEMODULECircleCircumference

INCLUDECircleArea

VAR

circumference:real;

PROCEDURECalculateCircumference

circumference:=2*3.14159*CircleArea.radius;

WRITE("Thecircumferenceofthecircleis:",circumference);

ENDPROCEDURE

ENDMODULE在主程序中,我們可以調(diào)用這兩個模塊來獲取圓的面積和周長。PROGRAMUseCircleModules

INCLUDECircleArea

INCLUDECircleCircumference

PROCEDUREmain

CircleArea.CalculateArea();

CircleCircumference.CalculateCircumference();

ENDPROCEDURE

ENDPROGRAM4.3模塊化編程的最佳實踐模塊化編程在KRL中可以遵循一些最佳實踐,以確保代碼的高效和可維護性。4.3.1保持模塊單一職責每個模塊應該只負責一個功能。例如,CircleArea模塊只計算圓的面積,而CircleCircumference模塊只計算圓的周長。4.3.2使用清晰的命名模塊和變量的命名應該直觀,反映其功能。例如,CircleArea和CircleCircumference的命名就非常清晰。4.3.3避免全局變量盡量減少全局變量的使用,因為它們可能導致模塊之間的耦合度增加。在上述示例中,CircleCircumference通過INCLUDE語句訪問CircleArea的radius,但更佳的做法是通過參數(shù)傳遞。4.3.4示例:改進后的模塊化代碼MODULECircleArea

PROCEDURECalculateArea(radius:real)

area:=3.14159*radius*radius;

WRITE("Theareaofthecircleis:",area);

ENDPROCEDURE

ENDMODULEMODULECircleCircumference

PROCEDURECalculateCircumference(radius:real)

circumference:=2*3.14159*radius;

WRITE("Thecircumferenceofthecircleis:",circumference);

ENDPROCEDURE

ENDMODULE在主程序中,我們可以分別傳遞參數(shù)給這兩個模塊。PROGRAMUseCircleModules

INCLUDECircleArea

INCLUDECircleCircumference

PROCEDUREmain

CircleArea.CalculateArea(10.0);

CircleCircumference.CalculateCircumference(10.0);

ENDPROCEDURE

ENDPROGRAM4.3.5文檔化你的模塊為每個模塊和過程添加注釋,說明其功能、輸入和輸出。這有助于其他開發(fā)者理解代碼的用途。4.3.6測試模塊在模塊開發(fā)完成后,編寫測試代碼來驗證模塊的正確性。這可以確保模塊在不同場景下都能正常工作。通過遵循這些最佳實踐,我們可以創(chuàng)建出更加健壯、易于維護和擴展的KRL代碼。模塊化編程不僅提高了代碼的復用率,還使得代碼結構更加清晰,便于團隊協(xié)作和項目管理。5高級KRL函數(shù)特性5.1函數(shù)式編程在KRL中的應用函數(shù)式編程是一種編程范式,它將計算過程視為一系列函數(shù)的組合。在KRL中,函數(shù)式編程可以提高代碼的可讀性和可維護性,同時通過避免副作用和使用純函數(shù),可以更容易地進行代碼測試和調(diào)試。5.1.1純函數(shù)示例在KRL中,一個純函數(shù)的例子可以是計算兩個數(shù)字的和:FUNCTIONaddNumbers(a,b)

RETURNa+b;

ENDFUNCTION這個函數(shù)接受兩個參數(shù)a和b,返回它們的和。它沒有副作用,即它不修改任何外部狀態(tài),只依賴于其輸入?yún)?shù)。5.1.2高階函數(shù)高階函數(shù)是函數(shù)式編程中的一個重要概念,它接受一個或多個函數(shù)作為參數(shù),或返回一個函數(shù)作為結果。在KRL中,雖然直接支持高階函數(shù)的特性有限,但可以通過定義函數(shù)并將其作為參數(shù)傳遞給其他函數(shù)來實現(xiàn)類似的功能。例如,定義一個函數(shù)applyFunction,它接受一個函數(shù)和兩個參數(shù),然后應用該函數(shù):FUNCTIONapplyFunction(func,a,b)

RETURNfunc(a,b);

ENDFUNCTION然后,可以使用addNumbers函數(shù)作為參數(shù)調(diào)用applyFunction:VARresult=applyFunction(addNumbers,5,3);5.1.3函數(shù)式編程與模塊化函數(shù)式編程與模塊化編程相結合,可以創(chuàng)建更加結構化和可重用的代碼。通過將功能分解為獨立的、可組合的函數(shù),可以更容易地管理和擴展代碼庫。5.2遞歸函數(shù)與循環(huán)結構遞歸函數(shù)是一種在其定義中調(diào)用自身的函數(shù),適用于解決可以分解為更小同類問題的任務。在KRL中,遞歸函數(shù)可以用于實現(xiàn)循環(huán)邏輯,尤其是在處理重復任務或遍歷數(shù)據(jù)結構時。5.2.1遞歸函數(shù)示例計算階乘的遞歸函數(shù):FUNCTIONfactorial(n)

IFn<=1THEN

RETURN1;

ELSE

RETURNn*factorial(n-1);

ENDIF

ENDFUNCTION調(diào)用factorial函數(shù)計算5的階乘:VARresult=factorial(5);5.2.2循環(huán)結構盡管遞歸可以實現(xiàn)循環(huán),但在KRL中,循環(huán)結構如FOR和WHILE更常見,也更高效。循環(huán)結構允許代碼重復執(zhí)行,直到滿足特定條件。例如,使用FOR循環(huán)打印從1到5的數(shù)字:FORiFROM1TO5DO

PRINTi;

ENDFOR5.3錯誤處理與異常捕獲在KRL中,錯誤處理和異常捕獲是確保程序健壯性和可靠性的關鍵。通過適當?shù)腻e誤處理,可以避免程序因未預見的錯誤而崩潰,并提供錯誤恢復的機制。5.3.1錯誤處理示例在嘗試執(zhí)行可能失敗的操作時,使用TRY和CATCH語句來捕獲和處理異常:TRY

VARresult=divide(10,0);//假設divide函數(shù)在除數(shù)為0時拋出異常

CATCH

PRINT"Error:Divisionbyzeroisnotallowed.";

ENDTRY在這個例子中,如果divide函數(shù)嘗試除以零,程序將不會崩潰,而是捕獲異常并打印錯誤消息。5.3.2異常類型KRL支持多種異常類型,包括但不限于:KRL_ERROR:一般錯誤KRL_WARNING:警告信息KRL_ABORT:強制終止程序通過檢查異常類型,可以更精確地處理不同類型的錯誤:TRY

VARresult=divide(10,0);

CATCHKRL_ERROR

PRINT"Ageneralerroroccurred.";

CATCHKRL_WARNING

PRINT"Awarningoccurred.";

CATCHKRL_ABORT

PRINT"Theprogramwasaborted.";

ENDTRY5.3.3自定義異常雖然KRL不直接支持自定義異常類型,但可以通過拋出和捕獲特定的錯誤代碼來模擬自定義異常。例如,定義一個函數(shù)checkValue,如果值小于零,則拋出錯誤:FUNCTIONcheckValue(value)

IFvalue<0THEN

THROWKRL_ERROR,"Valuecannotbenegative.";

ENDIF

ENDFUNCTION調(diào)用checkValue并處理可能的錯誤:TRY

checkValue(-5);

CATCHKRL_ERROR

PRINT"Error:"+GETERRORSTRING();

ENDTRY通過這種方式,可以確保程序在遇到特定錯誤時能夠優(yōu)雅地處理,而不是簡單地崩潰。6工業(yè)自動化中的模塊化編程案例在工業(yè)自動化領域,模塊化編程是一種提高代碼可讀性、可維護性和重用性的有效方法。通過將復雜的任務分解成獨立的、可復用的模塊,可以顯著簡化編程過程,同時增強程序的靈活性和擴展性。KUKA機器人語言(KRL)支持模塊化編程,允許用戶創(chuàng)建和調(diào)用自定義函數(shù),從而實現(xiàn)更高效、更靈活的機器人控制。6.1案例:自動化裝配線上的零件檢測與分類假設在一條自動化裝配線上,需要對不同類型的零件進行檢測和分類。這可以通過創(chuàng)建一個模塊來實現(xiàn),該模塊負責讀取零件的特征,如尺寸和形狀,然后根據(jù)這些特征將零件分類到不同的容器中。6.1.1KRL函數(shù)定義FUNCTIONclassifyPart(partData)

//partData:包含零件尺寸和形狀信息的數(shù)組

//函數(shù)用于根據(jù)零件數(shù)據(jù)分類零件

IFpartData[1]>100ANDpartData[2]<50THEN

//如果零件的長度大于100mm且寬度小于50mm,分類為TypeA

MOVE_TOContainerTypeA

ELSEIFpartData[1]<100ANDpartData[2]>50THEN

//如果零件的長度小于100mm且寬度大于50mm,分類為TypeB

MOVE_TOContainerTypeB

ELSE

//其他情況,分類為TypeC

MOVE_TOContainerTypeC

ENDIF

ENDFUNCTION6.1.2函數(shù)調(diào)用在主程序中,可以多次調(diào)用classifyPart函數(shù),每次傳入不同的零件數(shù)據(jù)。//主程序

partData1:=[120,45,30]//零件1的尺寸數(shù)據(jù)

partData2:=[80,60,20]//零件2的尺寸數(shù)據(jù)

partData3:=[90,40,25]//零件3的尺寸數(shù)據(jù)

classifyPart(partData1)

classifyPart(partData2)

classifyPart(partData3)通過這種方式,可以輕松地擴展或修改分類邏輯,而無需更改主程序的結構,體現(xiàn)了模塊化編程的優(yōu)勢。7KRL函數(shù)在復雜任務中的應用KRL函數(shù)在處理復雜任務時尤其有用,它們可以封裝特定功能,簡化主程序的邏輯,使其更易于理解和維護。7.1案例:多機器人協(xié)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論