gd語言中文說明_第1頁
gd語言中文說明_第2頁
gd語言中文說明_第3頁
gd語言中文說明_第4頁
gd語言中文說明_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、GD語言中文說明目 錄一. 引言二. 概述三. 語言結(jié)構(gòu)31 語法元素3.1.1被接受字符的設(shè)定3.1.2 標識符3.1.3 保留字d 隔離符e 數(shù)字常數(shù)f 字符串g 注釋(2) 數(shù)據(jù)結(jié)構(gòu)a.GDL 目標A)目標類型B)說明參數(shù)目錄C)狀態(tài)變量關(guān)鍵字D)運算符(操作碼)E)激勵關(guān)鍵字b 目標間的層次關(guān)系A(chǔ))數(shù)據(jù)類型和訪問類型(3)過程a.激勵條件b.可執(zhí)行指令(4)GDL 應(yīng)用程序結(jié)構(gòu)四. 語言句法(1) GDL 文件(2) GDL 模塊(3) 目標說明a 說明一個局部目標A)數(shù)組型目標B)定義文一子關(guān)系b 說明一個外部目標(4)過程a 激勵器目錄b 表達式A)代數(shù)表達式B)關(guān)系C)布爾表達式

2、C 可執(zhí)行指令:賦值與操作符調(diào)用A)賦值B)目標操作符調(diào)用d 可執(zhí)行指令:控制處理流程A)“IF”指令B)“WHILE”指令C)“RETURN”指令五、一個簡單的程序例一、 引言由于包裝機不斷加快,包裝機日趨復(fù)雜化以及對于內(nèi)設(shè)本機生產(chǎn)數(shù)據(jù)處理的機床需求量日益增加,基于使用大功率控制器微處理設(shè)備的設(shè)計就必不可少了。然而,CPU 的特點是,控制器軟件是用特殊且適應(yīng)微處理器的語言書寫的,就其本性而言,該語言是復(fù)雜的,要求專業(yè)人員來使用。用戶在車間實際安裝的是功率強大的尖端系統(tǒng),具有高性能,但是,在執(zhí)行維修操作或者修改機床配置時,該系統(tǒng)又是很復(fù)雜的。況且機床用戶還日益面臨著更加復(fù)雜的市場需求,這種需求

3、產(chǎn)生了生產(chǎn)適應(yīng)性問題,面臨著生產(chǎn)批量的不斷減少及機床型號繁多的數(shù)量和種類,這種形式就更加迫切需要有一種控制系統(tǒng),可以讓本廠人員能進行簡便的再配置,而不必依靠制造商的專業(yè)操作人員來操作。為滿足這一需求,對自動包裝機械已開發(fā)出一種新的控制系統(tǒng),即使在使用極大功率CPU 時,也可以通過一種專門的程序語言與用戶接口,這就是GD(GD Language)語言。實際上,GD 語言(GDL),結(jié)構(gòu)化語句(structured text)描述程序設(shè)計語言,是一種高級結(jié)構(gòu)程序語言,它是模塊化的、能以一種簡單而又快捷的方式對所有組成被控制系統(tǒng)的實際邏輯設(shè)備進行描述,然后,執(zhí)行控制算法、過程可以在這些設(shè)備上運行。二

4、、 概述GDL 允許對數(shù)據(jù)結(jié)構(gòu)(稱為GDL 目標)定義,它們代表在機床上須受控制的實際部分或邏輯部分,GDL 還可以對控制算法(稱為GDL 過程)的定義,它們?yōu)槭瓜到y(tǒng)在控制狀態(tài)下作出所需要的行為而建立的目標應(yīng)執(zhí)行的動作。這樣,以說明目標和過程的說明指令以及目標本身的操作指令都定義為構(gòu)成過程本身的可執(zhí)行指令。一個GDL 應(yīng)用程序表示一套用來控制機床的所有目標和過程,在廣義上來說是由一定的模塊組成。每一個模塊內(nèi)含有一定的目標所需要的說明,而對于過程,則可有可無。在一個模塊中定義的目標通常可以與在其他模塊中的目標有邏輯聯(lián)系。例如:其中一個目標的特性可以根據(jù)另一個目標的特性進行獨特的定義,或者一個過程

5、的可執(zhí)行指令可以參考在別處說明的目標。對于軟件本身的發(fā)展速度和維修方面說來,發(fā)展使用復(fù)合、分離模塊的應(yīng)用程序的可能性是主要優(yōu)點之一,但是有一個有限。在應(yīng)用程序參考表示機床實際部分的條件下,識別存在目標的名稱必須在整個應(yīng)用程序中是唯一的,相應(yīng)地,用戶應(yīng)當為過程的名稱和模塊的名稱使用唯一的標識符(名稱)。三、 語言結(jié)構(gòu)在這一章里,總體上對描寫GDL 的元素作分析,即是基本概念,但不作詳細說明。首先,分析GDL 語法元素,然后是數(shù)據(jù)結(jié)構(gòu)及意義,接著是GDL 過程的概念與執(zhí)行方法,最后是瀏覽應(yīng)用程序軟件包的總體結(jié)構(gòu)。在第四章里,詳細說明寫一個程序所使用的語句。3.1 語法元素在這一節(jié)里,要說明GDL

6、編譯程序所接受的字符設(shè)定及語言元素的語法類型(單詞),這些元素包括:標識符、保留字、隔離符、數(shù)字常量、字符串。屬于這其中一類的序列單詞組成GDL 指令。表示指令結(jié)束并屬于隔離符類的單詞是“;”。3.1.1 被接受字符的設(shè)定可以使用的字符是下列ASCII 碼AZa.z09特殊的字符是 & = + - / ( ) , ; < > $ _字符設(shè)定包括空格(SP),回車(CR),換行(CF),橫向制表符(HT)。如果在一個字符串中(即包括在二個單括號內(nèi)的一組字符)插入一個橫向制表符,這個制表符將轉(zhuǎn)換成一個空格。要得到所需要的空格,應(yīng)當插入所需要的空格數(shù),而不是制表鍵。如果在源程序中

7、所包含的字符有一個不屬于被接受的字符,那么一個語法出錯信息便會顯示。在字符串及注解中,可以有不屬于被接受的字符存在。3.1.2 標識符標識符是定義模塊名、過程名及GDL 目標名的單詞。標識符的長度可達40 個字符長度,第一個字符必須是字母或一個劃線字符首字符后面的字符可以是字母、數(shù)字和劃線符。所有的標識符必須與保留字不同,參見所附的保留字目錄。3.1.3 保留字保留字是編譯程序為識別指令的語法而為其本身保留的單詞,每一個保留字都不能與任何一個標識符相同,而且不能使用縮寫形式。參見附錄中的保留字。3.1.4 隔離符幾乎所有的特殊字符均為隔離符,它們分為二類:單隔離符 = + - * / ( )

8、, ; < > | 雙隔離符 <> <= >=在寫雙隔離符時,他們之間或他們與其他控制符之間不留空格,如:一個回車(CR),否則這個雙隔離符將被解釋成兩個單隔離符。3.1.5 數(shù)字常量數(shù)字常量是一列數(shù)字字符,最長可達九個字符(最大允許值為999999999),在執(zhí)行過程中,他們的值不變。當“減號”屬于隔離符類時,放在常量前面的一個最終“一目減號”(一)不是該常量的組成部分。GDL 不接受實數(shù)型常量,只接受整數(shù),即十進位小數(shù)點不能使用。3.1.6 字符串字符串是括在一個單引號()內(nèi)的可打印ASCII 碼序列,因此()字符不是字符串一部分,注意不要把單引號()字

9、符與重音符號()混淆,字符串的長度允許達40 個字符。若在一個字符內(nèi)含有一個注解,這個注解就成為該字符串的一部分。字符串還可以含有一個橫向制表字符(HT)。但是,該字符將轉(zhuǎn)換為串內(nèi)的一個空格。因此,即使在模塊目錄中呈現(xiàn)一個帶有四個空格的字符串,但是程序運行中,控制系統(tǒng)會讀已被轉(zhuǎn)換的字符串,由此生成的正文顯示出只帶一個空格。為避免這種情況的發(fā)生,只要不在字符串使用制表字符就可以了,以和實際需要相符的空格數(shù)來代替制表字符。要把一個字符串拆為二行,擊<ENTER>鍵,移至下一行,然后繼續(xù)該串的后一部分,在這新的一行里,要重復(fù)單個的起始引號(),并用單引號()結(jié)束該字符串。若要把字符串拆成

10、二行,單個結(jié)束引號()只能在該串結(jié)尾處使用。字符串的顯示是不留空格的。但可以在續(xù)行引號()左面插入空格,(如,產(chǎn)生一個縮進的第二行部分)其他非空格字符則不能插入。幾個正確的例子:string splitonto two linesstring splitonto threelines3.1.7 注解注解的開始和結(jié)束都用特殊字符,注解可以含有無數(shù)個ASCII 碼,包括CR,LF及HT 控制字符。在一個注解中不能插入另一個注解。但可以插入一個字符串(該字符串就成為注解的一部分)。編譯程序?qū)λ薪M成注解的字符不予理睬。注解可以在原程序的任何點出現(xiàn),甚至在構(gòu)成一個指令的兩個單詞之間也可以插入。注解還能

11、用來分隔二個其他符號,就好象是一串空格。3.2 數(shù)據(jù)結(jié)構(gòu)如前所述,GDL 提供特有的數(shù)據(jù)結(jié)構(gòu)。其中一些結(jié)構(gòu)使得對受控機器的配置(GDL目標)變得簡單有效,而其他結(jié)構(gòu)則是用來控制和檢測的實際裝置(GDL 過程)。這一節(jié)對GDL 目標基礎(chǔ)的基本概念作一說明,各特征的詳細列表在具體細則中介紹。3.3 節(jié)描述GDL 過程。3.2.1 GDL 目標程序員能夠處理的GDL 目標是對機床的實際部分或者不是實際硬件裝置但表示軟件結(jié)構(gòu)部分的描述。按照需要,使用說明指令,在特定情況的基礎(chǔ)上定義特性。借助于組成GDL 過程體的執(zhí)行指令可對狀態(tài)進行修正。GDL 目標描述一個機器實際器件的例子是STEPPER$MOTE

12、R(步進電機),GDL 目標描述一個軟件裝置的例子是SYNOPTIC(概要)。目標既可以是向量,也可以是數(shù)組。一個數(shù)組目錄代表一組稱為數(shù)組元素的向量目標。每一個數(shù)組元素有它自己的下標。下標括在大括弧內(nèi),它須設(shè)定為正整數(shù)值,即數(shù)組中第一個元素的下標是1 而不是0??梢哉f明一個數(shù)組目標,但不能說明它的單個的元素。所以在寫說明時,決不要指明下標。反之,在可執(zhí)行指令中,根據(jù)對下標的需要與否,可以參考全局數(shù)組及單一個別的目標。目標類型有兩大類:第一類是我們已經(jīng)描述過的,即一組硬件或軟件目標類型,它們描述受控系統(tǒng)或允許寫控制過程(標準目標)。第二大類(用戶目標)含有專用軟件目標類型,它們不直接控制機器,而

13、是定義在GDL程序中有意義的變量及用于寫程序的變量。這類用戶目標類型有:DIGITAL$VARIABLEINTEGER$CONSTANTINTEGER$VARIABLE一個INTEGER$VARIABLE 類型目標是一個程序變量,用以存入一個完整的整型值。與之相仿,一個DIGITAL$VARIABLE 類型目標可以含有一個數(shù)字值,而一個INTEGER$CONSTANT 類型目標含有一個在說明階段被賦于的整型值,該值在程序執(zhí)行過程中不能改變。標準目標與用戶目標之間的區(qū)別僅僅是語義上的不同。假定編譯程序?qū)@二大類不作正式的區(qū)分,而且程序員只見到一組數(shù)據(jù)結(jié)構(gòu),那么我們從現(xiàn)在起只講GDL 目標,不再區(qū)

14、分這二大類。GDL 目標不是一組目標,而是一組目標類型,程序員可以定義任意量的目標,即屬于其中一種允許類型的單個目標,要用不同的名稱去標識各單個目標。每個名必須是唯一的,就是說,再回到前面的例子,STEPPER$MOTOR 和SYNOPTIC 是二類目標,它們可以用來定義,如main_motor和carriage_advance_motor為屬于第一類的二個目標?,F(xiàn)在讓我們來分析描述一個通用類型目標的元素。在為此類目標作說明時,就獲得到達它所有元素的通道路,這樣便可以與該目標本身相互配合。3.2.1.1 目標類型目標類型是這一范疇的具體特征,它用GDL 語言的一個保留字來表示。幾個例子如:ST

15、EPPER$MOTOR, DIGITAL$INPUT,MACHINE.3.2.1.2 說明參數(shù)目錄屬于某一類的所有元素由一列標識特征的參數(shù)作完整的描述。這些值可以是數(shù)字常量,字符串,關(guān)鍵字或標識符,按需而定,一般來說,目標有所需要的特征。要考慮到每類目標賦值的一個極限。在某些情況下,同一目標的參數(shù)間存在著邏輯關(guān)系。如:對于STP$MOTOR$AXIS 來說,LOWER TRAVEL LIMIT (運行下限)參數(shù)必須小于或等于UPPER TRAVEL LIMIT (運行上限),否則會觸發(fā)一個錯誤信息。字符串類型參數(shù)是雙份的,以允許字符串以二種不同語言顯示。通過專用指令由控制臺執(zhí)行對語言的選擇。3

16、.2.1.3 狀態(tài)變量關(guān)鍵字這些是關(guān)鍵字(狀態(tài)變量關(guān)鍵字),當它們與標識屬于此類范疇的一個目標名有關(guān)時,便為目標生成一個狀態(tài)變量。如: CONSTANT$STATUS 是一個狀態(tài)變量關(guān)鍵字 CONSTANT$STATUS OFmain_motor 組合是目標main_motor的狀態(tài)變量。整組狀態(tài)變量描述了某一時刻一個目標的特定狀態(tài),并由操作系統(tǒng)運行時間支持(RTS)控制器作不斷的修正,以響應(yīng)機器上發(fā)生的事件。這就是說,目標的狀態(tài)是在不斷更新的,它所表示的是系統(tǒng)真實的狀態(tài)。而GDL 程序員雙能介入每一個單一的變量,根據(jù)目標本身的控制要求對變量作出修改,即,當一個特定事件發(fā)生時,GDL 程序員可

17、以改變狀態(tài)并執(zhí)行所需的控制功能。如:對CONSTANT$STATUS OF main_motor賦值,結(jié)果是電動機操作條件的修正,這表示,電動機可以被啟動來接收能量,也可以被切斷電源。GDL 接受5 種不同的數(shù)據(jù)(V、3、2、2、1)每個狀態(tài)變量只能取它的類型所許可的值,對于許可類型值的某一子集可能有進一步極限。在整數(shù)值是,這一極限可以是靜態(tài)的,也是可以是動態(tài)的。在前一種情況中,極限對該目標類型是典型的。因此,這些極限在手冊是標明相同類型的所有目標都有相同的極限(例如:對PWM$OUTPUT ,變量VALUE 表達一個值每一千)。所以賦值不能大于1000 或小于0),而在后一種情況中,賦于說明

18、參數(shù)的值為目標自身獲得了極限。所以它們對于同一類型的目標可能是不同的(如:一個數(shù)組的長度限制了它的下標的最大可賦值)。若超出了這些極限,就會顯示出錯信息。對每個狀態(tài)變量來說還有一個規(guī)定的訪問類型READ (r) 如果只允許讀變量WRITE (w) 如果只允許寫變量READWRITE (rw) 如果允許讀、寫變量GDL 調(diào)試工具可以強制某些目標的狀態(tài)變量為所要求達到的值。訪問代碼加上字母f(如:rwf)表示這種可能性。3.2.1.4 操作符對某些目標類型還有一些特殊命令,用一個指令代替一系列語句來執(zhí)行復(fù)雜的狀態(tài)修正操作,這些命令是宏指令。這些操作符表示為RTS(運行時間支持)服務(wù)程序的調(diào)用,最終

19、傳送定義要執(zhí)行動作所需的參數(shù)。這后者的使用是一般可能性之外的,借助于對狀態(tài)變量的賦值來改變目標狀態(tài)。每個操作符由一專用關(guān)鍵字,由它使用的目標各級最終參數(shù)目錄來定義。3.2.1.5 激勵關(guān)鍵字與狀態(tài)變量關(guān)鍵字相似,每一個目標類型有其他有關(guān)的關(guān)鍵字。當這些有關(guān)關(guān)鍵字的后面跟著一個標識符時,便產(chǎn)生另一類變量,叫做目標“激勵器”。只有當一個目標的一個激勵器狀態(tài)被修正,才能采取相應(yīng)的動作以符合控制算法的要求,以此激勵一個或者更多的GDL 過程。所以目標激勵器是釋放過程執(zhí)行的裝置。但是必須注意到僅僅一個激勵器的變化對于釋放一個過程的執(zhí)行是不夠的,事實上,要釋放的那個過程應(yīng)與一個專門激勵器有關(guān)。從相反的觀點

20、來看,每個GDL 過程在某方面必須與所有那些我們希望作為觸發(fā)器使用的激勵器相連。這種連接是由專用激勵器的一個目錄產(chǎn)生的,然后在寫過程中,該目錄與這個過程有關(guān)。受控系統(tǒng)中發(fā)生一個事件后,RTS(運行期支援)系統(tǒng)收到一個與那個目標有邏輯聯(lián)系的中斷,一個激勵器狀態(tài)被RTS 系統(tǒng)修正,在這種情況下,含有該激勵器的全部過程都被執(zhí)行,因而提供了中斷所需的服務(wù)。例如, STATUS 是一個激勵器關(guān)鍵字,STATUS OF digital_input_1 是digital_input_1的一個激勵器。當這個輸入狀態(tài)改變時,所有在目錄中含有這個激勵器的過程都被執(zhí)行。還有一種特殊類型激勵器,它與任何一個具體目標都

21、無關(guān):全局激勵器。當一個過程的目錄中包括全局激勵器時,它們觸發(fā)目錄本身的擴展,以獲得在該模塊中說明的所有目標的激勵器的某一子集。外部目標(用use 語句說明)不包含在生成的目錄內(nèi)。在這種情況下,應(yīng)當避免用延伸形式寫長目錄。如,全局激勵器ANY$DIAGN$STATUS 生成一個目錄,該目錄中含有與所有局部說明目標的診斷狀態(tài)有關(guān)的全部激勵器。3.2.2 目標間的層次關(guān)系如果二個目標間存在父子型關(guān)系,那么這兩個目標有著上下層關(guān)系。這種關(guān)系是一種紐帶,可以是邏輯的,也可以是邏輯與物理的。這種關(guān)系很顯然是由一個事實構(gòu)成的,那就是子目標在它的定義參數(shù)中有其父目標名。一般來說,一個目標可以擁有一個以上不同

22、類型的父目標,就象是一個目標可以擁有各種不同的子目標一樣。層次聯(lián)系代表了目標間的物理的或邏輯的連接。這就是說,在二個目標之間有一個信息流。例如:若一塊主板與一塊從板相連,這二塊板被說明為父與子。因此,子目標有必要定義它打算占用父板上哪個連接通道。這個定義是通過為一個描述了所選通道的子目標作參數(shù)說明,用一適當關(guān)鍵字來執(zhí)行的。編譯程序執(zhí)行各種層次檢查以免重迭或其他錯誤的發(fā)生。還有一種情況:兩個目標有層次關(guān)系,但無物理連接。例如:SYNOPTIC 。這樣一個目標,擁有由圖形目標構(gòu)成的子目標(如:圓、線等等),但無信號流,因為在它們之間有一種專門的邏輯關(guān)系。在這里,無任何參數(shù)傳到父目標。還有一種特殊情

23、況,說明參數(shù)含有一個目標名(無任何連接參數(shù)),但該名不是直接逐層連接的,就是說它不是一個“父”。這就是SPT$MOTOR$AXI$HOME$INUT 的情況,對這種情形,參數(shù)STPMOTOR NAME 是一個目標,在這個目標中,說明必須指出在STEPPERMOTOR BOARD NAME 參數(shù)中出現(xiàn)的帶有同名的父目標。這個規(guī)則是常常為特殊情況而定的,無視這個規(guī)則,就會觸發(fā)錯誤信息。對某些目標還存在定義參數(shù),定義目標本身的物理配置。對于利用連接通道到達子目標的那些目標為如此。所有這些參數(shù)描述支援連接的物理設(shè)備的存在與否。因此可以任意配置父目標。如果說明一個設(shè)備不存在,其子目標便不能與它相連,也就

24、是不能使用那些通道。若一個設(shè)備為一特定類型的子目標而保留,同樣,它也不能與其他類的目標連接。3.2.2.1 數(shù)據(jù)類型及訪問類型如前所述如前所述,GDL 接受的數(shù)據(jù)基本類型有五種:整數(shù)數(shù)字設(shè)定值名稱字符串擁有它們自己類型的語言元素有: 一個目標的說明參數(shù) 狀態(tài)變量 有關(guān)一個操作符的參數(shù)因此,在對一個元素賦值時,須遵循所涉及的規(guī)定類型的法則。一個整型元素只能設(shè)定整數(shù)值,正負都可以,其絕對值范圍0999999999。在特殊情況下,對于可接受的值有更嚴格的限度。這些限度源于該元素的性質(zhì)。在任何情況下,這種進一步的限度是一個事件一事件的基礎(chǔ)上為每一目標指明的。一個數(shù)字型目標由專門的關(guān)鍵字來假設(shè)二個值ON

25、 與OFF。這些元素作為<digitalconstant kwd>(數(shù)字常數(shù)關(guān)鍵字)一個設(shè)定值型元素由專門關(guān)鍵字設(shè)定一組值,這些關(guān)鍵字在賦值時描述元素的狀態(tài)。如:狀態(tài)變量CONSTANT$STATUS OF main_motor可以假設(shè)值ENABLED 和DISABLED,這些值稱為<set constant kwd>(數(shù)字常數(shù)關(guān)鍵字)總的說來,另一個設(shè)定型元素假設(shè)值要用其他關(guān)鍵字來表示,這就是說,一個設(shè)定要配有一組不合法的設(shè)定常數(shù)關(guān)鍵字,不可以用不屬于它的組的<設(shè)定>常數(shù)來對一個<設(shè)定>變量賦值。如果對一個<設(shè)定>變量賦值,而不是對

26、<設(shè)定>常數(shù)賦值,要考慮二個權(quán)限。第一,左右二邊賦值變量須相同(不能把由PIAGN$STATUS 假設(shè)的值賦于CONTROL$STATUS)。第二,由右邊變量所賦的所有值須對左邊所賦變量有效。否則,顯示出錯信息。一個名 型元素,假設(shè)一個GDL 目標的標識符作為它的值,這個目標必須屬于元素允許的目標類型的子集,它是在特定情況基礎(chǔ)上規(guī)定的。一個“字符串”型元素,假設(shè)一個字符串作為它的值(一個字符串定義為括在單引號內(nèi)的ASCII 碼序列)。對于狀態(tài)變量,規(guī)定了訪問的允許類型。READ (r) 該變量是只讀,即,它只能在一個表達式內(nèi)出現(xiàn)。WRITE(w)該變量是只寫,即,它在賦值指令中只能

27、是在左邊部分。READWRITE(rw) 該變量可讀可寫加在訪問類型代碼后的字母f(如rwf)表示該狀態(tài)變量可以由GDL 調(diào)試程序強制。3.3 過程一個GDL 模塊是由任意量的過程組成的,通過過程可以對目標狀態(tài)作修正。一個名標識一個過程。這個名必須對整個應(yīng)用程序是唯一的(即沒有任何一個其他的過程、目標或模塊具有這個相同的名)過程由二個邏輯塊構(gòu)成:激勵器目錄及含有可執(zhí)行指令的體。3.3.1 激勵器條件在收到受控機器的一個服務(wù)要求時,由控制系統(tǒng)作出響應(yīng)執(zhí)行一個過程。換句話說,當機器上發(fā)生某個事件時,RTS 運行期支持系統(tǒng)探測到這個事件(收到該中斷)并觸發(fā)過程的執(zhí)行,過程的執(zhí)行完成一些動作使機器處于

28、正常狀況。事件中涉及的目標與應(yīng)執(zhí)行的過程之間的聯(lián)系是由激勵器目錄來完成的。一個事件發(fā)生時,它引起一個或幾個目標的一個或幾個激勵器的變化。因此在激勵目錄中含有那些激勵器的過程便被執(zhí)行。一個目錄可以包含無數(shù)個激勵器,但是,要觸發(fā)一個過程,只要有一個就可以足以作這個改變。而且,如果中斷總是單個地生成,那么激勵器也是一次改變一個。因此可以說,在任何一個特定的瞬間,只有一個目錄是活動的。如果在過程執(zhí)行中,屬于這同一目錄的另一個激勵器必須有一個變化,則由RTS 系統(tǒng)對這新的執(zhí)行要求排隊,一旦第一個執(zhí)行完成后,便再次激勵同一過程。如果一個以上的過程含有相同的激勵器,這些激勵器的激勵優(yōu)先級已經(jīng)規(guī)定,在作模塊連

29、接時由系統(tǒng)設(shè)定。換句話說,可以作為過程執(zhí)行的順序并不是過程寫入模塊的順序。如果想以預(yù)設(shè)置的順序同步執(zhí)行二個過程,則必須定義適當類型的另一個目標(如DIGITAL$FLAG)。在這種方式中,一個狀態(tài)變量與一個激勵器有同名。然后在修正目標狀態(tài)的第一個過程加上一個指令,并且在第二個過程的激勵器目錄中為新目標加上激勵器。在這種方式中,外部事件能發(fā)第一個過程,它修正輔助目標的狀態(tài)。由于該狀態(tài)變量也是一個激勵器,這意為模擬,由于在第二個過程的目錄不存在著另一事件的等效事件,通過程序,該事件便被執(zhí)行。必須強調(diào)的是,一個過程的激勵器目錄不同于一個目標的激勵器目錄。事實上,一個目標激勵器目錄是目標元素的一個集合

30、,當它們變化時,可以用來能發(fā)一個過程的執(zhí)行。而過程目錄則包含由應(yīng)用程序定義的可有目標所有激勵器子集,在此基礎(chǔ)上,過程本身必須觸發(fā)執(zhí)行。下面看外例子:假設(shè)已定義一個目標main_motor類型為DC$MOTOR$AXIS,它的激勵器目錄是:DIAGN$STATNS OF main_motorOPERATING$CONDITION OF main_motor目標encoderassoluto,類型為ABSOLUTE$ENCODER,它的目錄是:DIAGN$STATUS OF absoluteencoder,OPERATING$CONDITION OF absoluteencoder,CFG$STA

31、TUS OF absoluteencoder,CFG$UPPATE$RQUEST OF absoluteencoder.然后,假設(shè)有二個過程:過程1,有下列目錄:OPERATING$CONDITION OF main_motor ,OPERATING$CONDITION OF absoluteencoder過程2 的目錄是:OPERATING$CONDITION OF absoluteencoder如果有一事件修正main_motor 的診斷條件,將沒有任何過程被執(zhí)行。如果該目標的操作條件被修正,這個事件只會觸發(fā)過程1。如果目標absoluteencoder的操作條件修正,將會觸發(fā)過程1 和2

32、,帶有一個不確定的執(zhí)行順序。過程激勵的一個目標可以包含全局激勵器,就是那樣一些激勵器,它們與一特定類型的目標無關(guān),因而不包括在這些目標的激勵器目錄中。全局激勵器通過DECLARE(說明)指令,用來為激勵器目錄的過程生成目錄。這些激勵器目錄包括在當前模塊中說明的全部目標,但不包括外部目標。生成這些目錄的標準取決于使用哪個全局激勵器來定義。有二個全局激勵器:ANY $ DIAGN $ STAUS生成一個目錄,該目錄含有描述局部目標診斷狀態(tài)的所有這類激勵器。ANY $ OBJECT $ INPUT生成一個目錄,該目錄含有除了那些已用關(guān)鍵字EDGE 和PHASE$MATCH 定義的激勵器以外的全部其他

33、局部目標。3.3.2 可執(zhí)行指令可執(zhí)行指令構(gòu)成過程體,可分屬于兩類:修正目標狀態(tài)指令及控制執(zhí)行流程指令。第一類包括: 賦值指令 為有關(guān)目標調(diào)用操作符第二類包括: 條件轉(zhuǎn)移 迭代(重復(fù)) 跳轉(zhuǎn)至過程結(jié)束一個過程至少須含有一個可執(zhí)行指令3.3.3 一個GDL 應(yīng)用程序結(jié)構(gòu)一個GDL 文件只含有一個GDL 模塊。一個應(yīng)用程序通常由一個以上的模塊組成。這些模塊分別編譯,然后由GDL 核實器實行連接。一個GDL 文件分為二個部分:一個塊含有編譯程序最終指令,另一個塊構(gòu)成GDL 實際模塊?,F(xiàn)在看一下模塊結(jié)構(gòu)。每一模塊由一個名標識。這個名對應(yīng)用程序必須是唯一的。(即其他模塊、過程及目標都不純在同一名)。每個

34、模塊又分為二個部分:第一部分含有所有目標說明指令,第二部分帶有所有過程。模塊可以只含有目標說明二無過程,但不可以沒有目標說明二只有過程。整個GDL 應(yīng)用程序一般由多個模塊組成。在其中一個模塊存在的過程可以修正在該模塊中在其他模塊中說明的目標狀態(tài)。換言之,可以使用應(yīng)用于外部的操作符,正如外部目標的一個狀態(tài)變量可以作為一個賦值的左邊部分一樣。事實上,這二種情況的結(jié)果都是目標狀態(tài)的修正。一個目標資源可由模塊訪問。就是說目標的可見性延伸到整個應(yīng)用程序。但是,如果一個過程須涉及外部目標,有必要通知編譯程序。該目標已在別處說明。否則,它就被認為是不知的。通知由一個適當?shù)闹噶顏韴?zhí)行。該指令與一個說明相似,稱

35、為use指令。編譯程序不能在外部目標上作句法檢查。這些檢查是GDL 由檢驗程序進行的。實際上,該檢驗程序有專門任務(wù),檢查組成應(yīng)用程序的所有模塊的相關(guān)性,分解(辨)外部引用。若檢測到錯誤,該程序便生成一個目錄。否則,結(jié)果就是應(yīng)用程序的映象,即所有說明的目標目錄即有參數(shù)至關(guān)參數(shù)值。概括起來,產(chǎn)生一個GDL 應(yīng)用程序的三個步驟是; 每一個模塊必須由GDL 編譯程序進行編譯; 模塊組須由GDL 檢測程序模擬以分解(辨)外部引用; 應(yīng)用程序須裝入機器控制系統(tǒng),然后啟動。若需要,可用GDL 調(diào)試工具測試應(yīng)用程序。四GDL 語法句法在分析了GDL 結(jié)構(gòu)基礎(chǔ)的概念之后,讓我們仔細看一下語言使用的句法規(guī)則。在這

36、一章里,我們將再次談到前面分析過的概念,并介紹如何正確無誤地寫一個程序。開始是含有一個GDL 模塊的文件結(jié)構(gòu),然后分析GDL 模塊,它的目標說明及可執(zhí)行過程。在后面的表示中,所有保留字都以大寫形式書寫。4.1 GDL 文件一個GDL 應(yīng)用中的每個文件由二部分組成:編譯程序指令目錄及GDL 實際模塊。它的一般形式如下:指令1指令1指令KMODULE 樣本模塊END$MODULE對編譯程序的指令可能會不足,但總是分成二組:只在實際模塊啟動前通知的指令及能與GDL 指令混合的指令。編譯程序現(xiàn)有的版本不直接執(zhí)行所提到的第一種,而對于第二種,只有一個指令(eject)。每個對編譯程序的指令由一個關(guān)鍵字表

37、示,始字符為,后跟一個整數(shù)參數(shù),括在一個小括弧內(nèi)。由于不存在真的GDL 指令,所以編譯程序指令不用;字符結(jié)束。唯一的執(zhí)行指令是 eject,他使目錄文件在打印時跳頁。該指令可能位于一個指令的半端(由符號;,THEN,ELSE,LOOP 標識)及下一個指令的開端之間。而且在該指令后面應(yīng)緊跟一個CR(回車)控制符。若在它后面跟的是其他字符或空格,會導(dǎo)致一個出錯信息。4.2 GDL 模塊在GDL 文件中只能有一個模塊。該模塊須以所賦名開始。見下例;MODULE somple_module;該模塊須以語句END$MODULE;結(jié)束.模塊細分為二部分。第一部分稱為目標部分它含有所有的過程。目標部分開始語

38、句為:OBJECT$SECTION;結(jié)束句為;END$OBJECT$SECTION;與其相似,過程部分開始語句為:PROCEDUE$SECTION;結(jié)束語句為:END$PROCEDUE$SECTION;模塊一般結(jié)構(gòu)如下:MODULE samplemodule;OBJECT$SECTION;.END$OBJECT$SECTION;PROCEDURE$SECTION;.END$PROCEDURE$SECTION;END$MODULE;模塊中只能有目標部分和過程部分。該兩部分不能交換。目標部分必須要存在,而過程部分則可空缺(即模塊只含有目標說明)。兩個部分不能都空,因此,第一部分至少須有一個目標說明

39、或使用指令,第二部分如果存在的話,則至少包含一個過程。4.3 目標說明說明一個目標意思是讓編譯程序認識它。一個模塊中說明的目標狀態(tài)既可以由組成該模塊的過程修正,也可以有駐在其他模塊中的過程修正。要引用在另一模塊中說明的目標,則應(yīng)通知編譯程序,所涉及的是一個外部目標。通知動作是由一語句完成的,該語句是與一個說明相識的,稱為使用語句。4.3.1 說明一個局部目標下面是一個例子;DECLARE main_motor DC$MOTOR$GEAR main_motor,board,CH01,CH02,50,100,25,30;DECLARE 關(guān)鍵字后面跟一個目標名,然后是定義目標類型的關(guān)鍵字,最后是說明

40、參數(shù)的賦值目錄。這些值是正確類型的一列數(shù)據(jù),由逗號隔開。整個語句括在大括弧內(nèi)。每個參數(shù)的類型(整數(shù)、數(shù)字、設(shè)定值、名、字符串)在手冊的目標類型描述中定義。如果必要,還提供可賦值的范圍。在某些情況下,對整型參數(shù)所賦的值構(gòu)成了范圍極限值,在操作符調(diào)用中這些值極限可以賦于目標狀態(tài)變量或參數(shù)。若不考慮這些極限,會導(dǎo)致出錯,如果說明參數(shù)只指明一個極限(如,一個最大值),另一個則由系統(tǒng)設(shè)為0。如果目錄含有父目標名,在模塊中該目標可以在當前目標前說明,也可在它后面說明,甚至可以在另一個模塊中說明。在后一種情況下,不必要為父目標在后面帶一個外部目標說明,因為不訪問它的狀態(tài)。賦于一個目標的名,必須與應(yīng)用程序中其

41、他目標、過程及模塊的名不同。標識目標類型的關(guān)鍵字必須是屬于GDL 目標類型組(集合)的一個。參數(shù)應(yīng)當由目標類型以準確的順序調(diào)用??梢杂袩o參數(shù)的目標。一個模塊中可以包括任意數(shù)量的說明。如果這些說明中有一個出錯,必要程序忽略,這個出錯。所以每當在源程序的模塊中遇到一個特殊的標識符,就觸發(fā)一個沒有說明的信息。在上例中,一個名為main_motor的目標被說明,它屬于DC$MOTOR$GEAR 類型,它與一個名為main_motor_board的父目標相連,它有6 個整型參數(shù),這些參數(shù)定義它的速度,加速度等特性。觀察手冊中該目標類型的結(jié)構(gòu),可以發(fā)現(xiàn)關(guān)鍵字CH01 是傳到父目標的參數(shù),即,它指明板上這個

42、電動機使用哪個連接通道。在這種特定情況下,占據(jù)的通道是01。4.3.1.1 數(shù)組型目標有一些稱為“數(shù)組”目標的特殊目標,這是元素組(集合)。每個數(shù)組有一個下標,它的每個元素又是一個GDL 目標。你可以說明數(shù)組目標,但不能說明一個數(shù)組的單個元素。換言之,不允許說明不帶一個下標的目標。說明一個數(shù)組目標時,DECLARE 的形式不變:DECLARE chain INTEGER$CHAIN100;用名chain,類型INTEGER$CHAIN 來定義一個數(shù)組。指明的參數(shù)是目標數(shù)組的維數(shù)(100 個元素)。只有在引用一個數(shù)組元素時(如,在一個賦值中)才能規(guī)定下標。下標必須是括在一方括號內(nèi)的一個表達式:V

43、ALUE OF chain4+VALUE OF intvar=10;這里10 是在chain數(shù)組中賦于一元素狀態(tài)變量的值,由一個下標標識,該下標的值是表達式。4+VALUE OF intvar 這里intvar是另一個已經(jīng)說明過的目標。通常,一個目標數(shù)組可以作為一個參數(shù)在一個DECLARE 語句中出現(xiàn)。而它的任何一個元素不能作為一個參數(shù)。就是說,帶有下標的參數(shù)是不存在的。相反,一個操作符調(diào)用可以含有一個數(shù)組參數(shù),而且如果必要的話,還可以含有帶一個下標的它的元素。一個過程激勵器目錄中,可以有數(shù)組元素。但是下標必須是整數(shù)常數(shù),而不能是表達式。4.3.1.2 定義父子關(guān)系假設(shè)我們在寫下列說明:DEC

44、LARE stepper_board_1 STP$MOTOR$BOARDmain_rack,SLOTOI,PRESENT,PRESENT,PRESENT,NOT$PRESENT,PRESENT;目標stepper_board_1以main_rack作為它的父目標,由SLOTOI 定義,占有連接通道,即,第一槽?,F(xiàn)在,我們用不著擔心main_rack是怎樣被說明的。相反我們從目標細則的描述中道,stepper_board_1有5 個SUBASSY(配件),即通往它的子目標的通信通道集合,這一通道集合有5 個分支。這些通道在板上的物理存在由DECLARE 中的參數(shù)假設(shè)的值PRESENT 或NCT$

45、PRESENT 描述。從目標細則的敘述中,我們還了解到,第一分支(存在)有二個連接通道(CH01 與CH02),第二分支(存在)有通道CH03 與CH04,第三分支有CH05 與CH06,含有CH07和CH08 的第四分支在板上不存在。第五分支有CH01 至CH08,但是這些通道是未用于子型的,該類型與那些由前四個分支支持的通道專用類型不合。換言之,有二個分支,第一組包括14 個分支,專用于某類子目標,含有CH01 至CH08。第二組是一個分支構(gòu)成,它專用于子目標的其他類型。這些類型有用于連接的不同通道,通道的編號也是CH01CH08。從這個配置中我們看到如何能與stepper_board_1

46、子目標相連。假定以stepper_axis_1為名說明一個子目標:DECLARE stepper_axis_1 STP$MOTOR$AXISstepper_board_1,CH01,10,15,8,10,2,32,10,6,54,26;從目標的描述中,我們看到第二個參數(shù)定義哪個通往父目標的連接通道被占據(jù)著(在這種情況下,它是CH01,第一通道)從目標STP$MOTOR$BOARD 的說明,我們還看到只有分支1-4 能支持這種類型的一個子目標連接,因為第五分支設(shè)置用于其他子目標類型。我們已建立了父目標第一分支PRESENT,這表示在第SWBASSY(配件)所有連接通道可得到。因此,stepper

47、_axis_1可以占用CH01。與其相似,它可以被指定占據(jù)從CH02_CH06中任何一通道,因為前三個分支都是PRESENT。說明:DECLARE stepper_axis_1 STP$MOTOR$AXIS stepper_board_1,CH07,10,15,8,10,2,32,10,6,54,26;它觸發(fā)一出錯信息,因為我們試圖將子目標與父目標的一個實際來啟用的通道連接。與之相似,若CH01 被stepper_axis_1占有,然后,我們將另一個子目標說明為stepper_axis_2,而它占有同一通道,這樣會出錯,因為有一個重疊。分支5 來用于子目標其他類型,我們可以作下列說明:DECL

48、ARE stepper_axis_1 STP$MOTOR$AXIS stepper_board_1,CH09,10,15,8,10,2,32,10,6,54,26;由此得到一個出錯,因為我們試圖占有的這一通道在這類子目標中不存在。又由于為不同類型保留分支這一事實,(即,獨立的和不同的區(qū)域),可以在某一區(qū)域說明一個目標(如,像STP$MOTOR$AXIS 這樣一個目標類型),兩個目標與同一通道連接(如CH01)。事實上,由于區(qū)域不同,通道也就不同,即使它們有同名,也不會發(fā)生重疊。所有這些條件很明顯的也適用于stepper_board_1與它的父目標main_rack之間的關(guān)系,因為每個目標可以同

49、時是父和子。這個規(guī)則不適用于:父目標沒有分支時。這時,僅有一條約束規(guī)則是避免重疊。當子目標不說明通往父目標是連接通道時,即使這個重疊規(guī)則也不再存在。4.3.2 說明一個外部目標見下列:USE absolute_encoder ABSOLUTE$ENCODERUSE 關(guān)鍵字后面跟外部目標名和類型。模塊中這一語句的包含內(nèi)容允許所有模塊過程訪absolute_encoder狀態(tài)變量并允許在任何激勵目錄中插入absolute_encoder激勵器。很顯然,在同一模塊中用PECLARE 與USE 說明同一目標是不允許的。而且顯然對在一個USE 中存在的,每個目標,必在另一模塊中有一對應(yīng)的DECLARE。

50、否則,GDL 核算器會送出一個非分辨外部目標信息。外部說明數(shù)量沒有限制,很明顯,這里沒有雙份的。如前所述,當你想要訪問一個目標,該目標已在另一模塊中定義,或者要修正它的狀態(tài),或者要在一個局部過程激勵目錄中增加一個激勵器,這些說明就是有必要的。反之,如果在一個局部說明中(DECLARE),有一個參數(shù)是外部目標名,就沒有必要為該目標增加USE,因為不要求對該目標進行訪問。4.4 過程在過程部分內(nèi),可以有無數(shù)個過程。每一過程以它的說明開始,即,關(guān)鍵字PROCEDURE,后面跟著賦于它的名和一個分號;。過程名必須與應(yīng)用程序中的其他過程名,模塊名和目標名都不同。END 關(guān)鍵字結(jié)束過程,后跟分號;。激勵器

51、目錄及隨后的可執(zhí)行指令集構(gòu)成了過程。激勵目錄是獨特的,以ACTIVATORS關(guān)鍵字開始,后跟一個大括弧,括弧內(nèi)有激勵器實際目錄,用一逗號分隔,語句以分號結(jié)束。過程里至少有一個可執(zhí)行指令,不允許存在空的過程,下面是一個過程例:PROCEDURE example-1;ACTIVATORS OPERATING$CONDITION OF absolate_encoder,VALUE OF flag1;STATUS OF message-1=ON;SHIFT$FWD$ICH chain-1;END;如果在一個激勵器中有變化,過程example-1被調(diào)用和激勵。OPERATING$CONDITION OF

52、 absolute_encoder VALUE OF flag1. 其中absolute_encoder與flag1是在DECLARE 或USE 語句中定義的目標。對狀態(tài)變量STATUS OF message-1賦于數(shù)字值ON,為目標chain-1調(diào)用操作符SHIFT$FWD$ICH,然后結(jié)束。4.4.1 激勵器目錄該目錄的功能已經(jīng)作了解釋,現(xiàn)在分析句法。對激勵器存在的數(shù)量無限制,但不允許有重復(fù)。如果一個激勵器的標識符是一個數(shù)組元素,只有一個整數(shù)常量作為它的下標,而不能有一個表達式或狀態(tài)變量。帶有下列激勵關(guān)鍵字的激勵器EDGEPHASE$MATCH不能包含在含其他激勵器的目錄中。若它們包含在一

53、個目錄中,它們就必須是唯一存在的元素(即,它們是獨立型元素)。有二個全局激勵器:ANY$DIAGN$STATUSANY$OBJECT$INPUT第一個全局激勵器生成一個目錄,內(nèi)含與模塊中用DECLARE 語句定義的全部目標診斷狀態(tài)相連的全部激勵器。與診斷狀態(tài)連接的激勵器是那些帶DIAGN$STAUS 激勵關(guān)鍵字的激勵器。第二個全局激勵器生成的目錄中含有所有其他的激勵器,它們與目標的診斷狀態(tài)吳連接。但是,帶有EDGE 及PHASE$MATCH 關(guān)鍵字的激勵器不包括在這個目錄中。一個全局激勵器不能和包括在生成目錄中的同類型其他顯式激勵器有關(guān),那種激勵器是有關(guān)用有關(guān)DECLARE 指令說明的目標,因

54、為在這種情形下,結(jié)果是有雙元素。如果該顯式激勵器引用的目標已用USE 指令說明(即,它是有關(guān)外部目標),這個激勵器能與全局激勵器儀器顯示。因為全局激勵器生成的目錄中不包括外部目標,所以不存在雙元素。下面是一個實例語句:ACTIVATORS DIAGN $ STATUS OF main_motor,ANY $ DIAGN $ STATUS;如果在一個DECLARE 中說明main_motor會出錯,但用USE 說明該目標,則是對的。對下面語句也是如此:ACTIVATORS OPERATING$CONDITION OF main_motor,ANY $ OBJECT $ INPUT;因為顯式激勵器

55、不包括在由全局激勵器生成的目錄內(nèi)。二個全局激勵器可以一起標明。在這時,結(jié)果生成二個單個目錄的總目錄。4.4.2 表達式一個表達式是由運算符相連的一序列有比例的操作數(shù),運算符定義在操作數(shù)上執(zhí)行的運算,表達式可分為三類:_ 代數(shù)表達式_ 關(guān)系表達式_ 布爾表達式操作數(shù)可以是:_ 狀態(tài)變量_ 常數(shù)_ 子表達式每個操作數(shù)可以擁有它自己的類型,它們是:_ 整數(shù)_ 數(shù)字_ 設(shè)_定值(對子表達式無效)整型常數(shù)是數(shù)字值常數(shù)(GDL 不允許使用實型常數(shù),即不可用十進位制小數(shù)點)數(shù)字型常數(shù)只用二個關(guān)鍵字表示:ON 和OFF設(shè)定型常數(shù)是能指明狀態(tài)變量和設(shè)定型參數(shù)可接受值的所有關(guān)鍵字。如:ENABLED,DIS AB

56、LED,RUNNING$FWD,YELLOW,PRESENT,SLOTO3在連接運算符和操作數(shù)時,遵循關(guān)于類型的相關(guān)原則。狀態(tài)變量還須有一種訪問類型,能允許讀。即,它們須為讀或讀寫型的,而且如果它們僅僅是寫型的,就不能成為表達式的一部分。括在圓括弧內(nèi)的表達式稱為子表達式,它在一個表達式中可以是一個操作數(shù)。根據(jù)子表達式所含的操作數(shù)和運算符,它可以擁有自己的類型。使用圓括弧可以修改運算符優(yōu)先級的自然次序。最好在需要時才使用括弧,因為用括弧會減低編譯程序的速度。表達式長度有極限。它的長度取決于構(gòu)成表達式的元素量(由編碼生成能力而產(chǎn)生極限),取決于表達式的復(fù)雜程度(即,子表達式的嵌套數(shù)量)。根據(jù)涉及的

57、情況,可通過減少不必要的圓括弧來達到極限之內(nèi)的要求。但是常??梢岳幂o助變量,把表達式拆為二部分。如果把表達式超出最大極限,編譯程序會送出一個錯誤信息。就象帶子表達式那樣,表達式也有一個類型,該類型是由存在的操作數(shù)和運算符決定的,它們必須遵循所在語句的句法規(guī)則。下面是一些實例:5+7 是一個整型表達式POSITION OF main-motor+7這是含有一個狀態(tài)變量的整數(shù)表達式( POSITION OF main-motor+7)這是一個整型子表達式5+( POSITION OF main-motor+7)*4這是一個整數(shù)表達式,式內(nèi)含有一個子表達式作為主的操作數(shù).STATUS OF cha

溫馨提示

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

評論

0/150

提交評論