ABB機(jī)器人用戶定義的數(shù)據(jù)類型
發(fā)布日期:2012-06-09 蘭生客服中心 瀏覽:7713
三、用戶定義的數(shù)據(jù)類型
1、數(shù)組
支持一維、二維和三維數(shù)組的成員數(shù)據(jù)類型。數(shù)組可在POU的聲明部分和全局變量表中定義。
語法:
lt;數(shù)組名>:ARRAY[
ll1,ll2為數(shù)組維數(shù)的下限標(biāo)識(shí),ul1和ul2為數(shù)組維數(shù)的上限標(biāo)識(shí)。數(shù)值范圍必須為整數(shù)。
示例:
Card_game:ARRAY[1..13,1..4]OFINT;
數(shù)組的初始化:
可以對(duì)數(shù)組中的所有元素進(jìn)行初始化,或不進(jìn)行初始化。
數(shù)組初始化示例:
arr1:ARRAY[1..5]OFINT:=1,2,3,4,5;
arr2:ARRAY[1..2,3..4]OFINT:=1,3(7);(*等同1,7,7,7*)
arr3:ARRAY[1..2,2..3,3..4]OFINT:=2(0),4(4),2,3;(*等同0,0,4,4,4,4,2,3*)
結(jié)構(gòu)化中的數(shù)組初始化示例:
TYPESTRUCT1
TRUCT
1:int;
2:int;
3:dword;
END_STRUCT
ARRAY[1..3]OFSTRUCT1:=(p1:=1;p2:=10;p3:=4723),(p1:=2;p2:=0;p3:=299),
1:=14;p2:=5;p3:=112);
數(shù)組部分元素初始化示例:
arr1:ARRAY[1..10]OFINT:=1,2;
數(shù)組中的元素如果沒有初始化值,則用基本類型的缺省值初始化其值。在上例中,元素arr1[3]到元素arr1[10]均被初始化為0。
二維數(shù)組的元素存取,使用下列語法:
lt;數(shù)組名>[Index1,Index2]
示例
Card_game[9,2]
注:
如果你在項(xiàng)目中定義了一個(gè)名為CheckBounds的功能,則可以自動(dòng)檢查數(shù)組的上下限超限錯(cuò)誤!下圖中給出了如何實(shí)現(xiàn)該功能的示例。
下面的示例用CheckBounds功能測試數(shù)組的超限問題。CheckBounds功能允許A[0]到A[7]元素分配值TRUE,而不會(huì)給A[10]分配值,這樣可以避免對(duì)數(shù)組元素的錯(cuò)誤操作。
2、指針
當(dāng)程序運(yùn)行時(shí),變量或功能塊地址保存在指針中。指針聲明為如下句法形式:<指針名>:POINTERTO<數(shù)據(jù)類型/功能塊>;
指針可指向任何數(shù)據(jù)類型、功能塊和用戶定義的數(shù)據(jù)類型。對(duì)地址操作的ADR功能,可將變量或功能塊的地址指向指針。指針后加內(nèi)容操作符”^”可取出指針中的數(shù)據(jù)。
示例:
t:POINTERTOINT;
var_int1:INT:=5;
var_int2:INT;
t:=ADR(var_int1);
var_int2:=pt^;(*var_int2的值為5*)
3、牧舉
牧舉為用戶定義的數(shù)據(jù)類型,并由一組字符串常數(shù)組成。這些常數(shù)被視為牧舉值。牧舉值在項(xiàng)目中為全局使用的變量,即使它們在POU中為本地聲明的變量。創(chuàng)建牧舉變量的最好方法是在數(shù)據(jù)類型對(duì)象組織下創(chuàng)建。用關(guān)鍵字TYPE開始,END_TYPE結(jié)束。
句法:
TYPE<牧舉變量>:(
牧舉變量可以取牧舉值中的任何一個(gè)值。缺省情況下,第一個(gè)牧舉值為零,其后依次遞增。
示例:
TRAFFIC_SIGNAL:(Red,Yellow,Green:=10);(*每個(gè)顏色的初始值為red0,yellow1,green10
*)
TRAFFIC_SIGNAL:=0;(*交通信號(hào)值為red*)
FORi:=RedTOGreenDO
i:=i+1;
END_FOR;
不能對(duì)同一個(gè)牧舉值多次使用。
示例:
TRAFFIC_SIGNAL:(red,yellow,green);
COLOR:(blue,white,red);
錯(cuò)誤:red不能對(duì)TRAFFIC_SIGNAL和COLOR變量同時(shí)使用。
4、結(jié)構(gòu)
結(jié)構(gòu)作為對(duì)象在數(shù)據(jù)類型頁中創(chuàng)建。使用TYPE關(guān)鍵字開始,END_TYPE關(guān)鍵字結(jié)束。結(jié)構(gòu)聲明的句法如下:
TYPE<結(jié)構(gòu)名>:
TRUCT
.<聲明變量n>
END_STRUCT
END_TYPE
<結(jié)構(gòu)名>是一種類型,在項(xiàng)目中為全程識(shí)別,并且可作為標(biāo)準(zhǔn)數(shù)據(jù)類型使用。允許內(nèi)嵌結(jié)構(gòu)。唯一的限制是變量不能帶地址(不允許用AT聲明!)。
下例為多邊形的結(jié)構(gòu)示例:
TYPEPolygonline:
TRUCT
tart:ARRAY[1..2]OFINT;
oint1:ARRAY[1..2]OFINT;
oint2:ARRAY[1..2]OFINT;
oint3:ARRAY[1..2]OFINT;
oint4:ARRAY[1..2]OFINT;
End:ARRAY[1..2]OFINT;
END_STRUCT
END_TYPE
可以使用下面的句法存取結(jié)構(gòu)中的成員。
<結(jié)構(gòu)_名>.<成員名>
例如:結(jié)構(gòu)名為“Week”,其中包含一個(gè)成員“Monday”,可以用Week.Monday獲取該值。
5、參考(別名類型)
可以使用用戶定義的參考數(shù)據(jù)類型,創(chuàng)建已經(jīng)更名的變量、常數(shù)或功能塊。在數(shù)據(jù)類型頁中創(chuàng)建參考對(duì)象。使用TYPE關(guān)鍵字開始,END_TYPE關(guān)鍵字結(jié)束。
句法:
TYPE<標(biāo)識(shí)符>:<分配項(xiàng)>;
END_TYPE
示例:
TYPEmessage:STRING[50];
END_TYPE;
6、替代范圍類型
替代范圍類型,是對(duì)其基本數(shù)據(jù)類型重新設(shè)置范圍的一種數(shù)據(jù)類型。聲明可以在數(shù)據(jù)類型頁中進(jìn)行,但變量也可直接用子范圍類型聲明:
在數(shù)據(jù)類型頁中聲明的句法如下:
TYPE
類型 |
說明 |
|
必須為有效的IEC標(biāo)識(shí)符 |
|
數(shù)據(jù)類型中的一種。如SINT,USINT,INT,DINT,UDINT,BYTE,WORD,DWORD(LINT,UINT,LWORD). |
|
常數(shù),必須為基本類型,設(shè)定的下邊界在其類型范圍之內(nèi)。 |
|
常數(shù),必須為基本類型,設(shè)定的上邊界在其類型范圍之內(nèi)。 |
示例:
TYPE
ubInt:INT(-4095..4095);
END_TYPE
用子范圍類型直接聲明的變量:
VAR
i1:INT(-4095..4095);
i2:INT(5...10):=5;
ui:UINT(0..10000);
END_VAR
如果常數(shù)被分配為一個(gè)子范圍類型(在聲明或?qū)崿F(xiàn)段中),但其值沒有落在該范圍之內(nèi)(例i:=5000),系統(tǒng)將會(huì)發(fā)出錯(cuò)誤信息。
為了在運(yùn)行期間檢查邊界范圍,推薦使用功能CheckRangeSigned或CheckRangeUnsigned。這樣,邊界有效性驗(yàn)證可通過合適的方法和手段捕獲(例:數(shù)值可以截取或設(shè)置錯(cuò)誤標(biāo)志)。
示例:
當(dāng)變量屬于有符號(hào)子范圍類型時(shí)(如上例中的i),則功能CheckRangeSigned被調(diào)用;可以通過編程的方法使其值在允許范圍之內(nèi)。
FUNCTIONCheckRangeSigned:DINT
VAR_INPUT
value,lower,upper:DINT;
END_VAR
IF(value CheckRangeSigned:=lower; ELSIF(value>upper)THEN CheckRangeSigned:=upper; ELSE CheckRangeSigned:=value; END_IF 為了自動(dòng)調(diào)用功能,功能名CheckRangeSigned被指定,并且接口也被指定:返回值和三個(gè)DINT類型的參數(shù)。 當(dāng)調(diào)用時(shí),功能參數(shù)如下:
值 分配給范圍類型的值 下限 下限邊界范圍 上限 上限邊界范圍 返回值 實(shí)際分配給范圍類型的值
對(duì)i:=10*y進(jìn)行邊界有效性驗(yàn)證的示例:
i:=CheckRangeSigned(10*y,-4095,4095);
示例中,y即使是1000,i經(jīng)過上例賦值后其值仍然為4095。
同樣,功能CheckRangeUnsigned過程同上:功能名和接口必須正確。
FUNCTIONCheckRangeUnsigned:UDINT
VAR_INPUT
value,lower,upper:UDINT;
END_VAR
注意:
如果沒有CheckRangeSigned和CheckRangeUnsigned,則運(yùn)行時(shí),沒有子類型的類型檢驗(yàn)發(fā)生,變量i可以在–32768和32767之間取任何值。
注意:
如果功能CheckRangeSigned和CheckRangeUnsigned按照上例實(shí)現(xiàn),則在FOR循環(huán)中可對(duì)子范圍類型連續(xù)使用循環(huán)。
示例:
VAR
ui:UINT(0..10000);
END_VAR
FORui:=0TO10000DO
...
END_FOR
FOR循環(huán)不會(huì)剩余,因?yàn)閡i不會(huì)大于10000。象CheckRange功能內(nèi)容一樣,當(dāng)在FOR循環(huán)中使用增量值時(shí),也應(yīng)考慮這些問題。
-
ABB機(jī)器人標(biāo)準(zhǔn)數(shù)據(jù)類型
一、標(biāo)準(zhǔn)數(shù)據(jù)類型 1、BOOLBOOL類型變量可取值TRUE和FALSE。保留8位內(nèi)存空間。 2、整型數(shù)據(jù)類型所有的整型數(shù)據(jù)類型為: BYTE 字節(jié) WORD 字 DWORD
2012-06-09 -
ABB機(jī)器人變量類型轉(zhuǎn)換功能
二、變量類型轉(zhuǎn)換功能 不能直接從“大類型”向“小類型”變量轉(zhuǎn)換。(例如:從INT到BYTE,或從DINT到WORD)。要完成此功能,可以使用特殊功能塊實(shí)現(xiàn)。作為一種規(guī)則,你可以用此功能將一種類型的變量轉(zhuǎn)換成任何需要的類型變量。 句法:
2012-06-09 -
ABB機(jī)器人編程方式
四、編程方式 1、指令表IL 指令表(IL)由一系列指令組成。每條指令都由一個(gè)新行開始,包含一個(gè)操作符以及和操作符類型相關(guān)的一個(gè)或多個(gè)操作數(shù),并用逗號(hào)分開。在指令前可以有標(biāo)號(hào),后接一個(gè)冒號(hào)。 注解必須在一行的最后,指令之間可以插入空行
2012-06-09 -
ABB機(jī)器人全部運(yùn)算符及功能
五、CoDeSys中全部運(yùn)算符及功能名 ST中操作符 IL中操作符 IL中的修飾符 意義 ‘ 字符串分界符(例如:’string1’) [..]
2012-06-25