ABB機器人用戶定義的數(shù)據(jù)類型

發(fā)布日期:2012-06-09    蘭生客服中心    瀏覽:7854

三、用戶定義的數(shù)據(jù)類型

1、數(shù)組
  
支持一維、二維和三維數(shù)組的成員數(shù)據(jù)類型。數(shù)組可在POU的聲明部分和全局變量表中定義。

語法:

lt;數(shù)組名>:ARRAY[..,..]OF

ll1,ll2為數(shù)組維數(shù)的下限標識,ul1和ul2為數(shù)組維數(shù)的上限標識。數(shù)值范圍必須為整數(shù)。

示例:

Card_game:ARRAY[1..13,1..4]OFINT;

數(shù)組的初始化:

可以對數(shù)組中的所有元素進行初始化,或不進行初始化。

數(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]

注:
  如果你在項目中定義了一個名為CheckBounds的功能,則可以自動檢查數(shù)組的上下限超限錯誤!下圖中給出了如何實現(xiàn)該功能的示例。

  下面的示例用CheckBounds功能測試數(shù)組的超限問題。CheckBounds功能允許A[0]到A[7]元素分配值TRUE,而不會給A[10]分配值,這樣可以避免對數(shù)組元素的錯誤操作。

2、指針
  當程序運行時,變量或功能塊地址保存在指針中。指針聲明為如下句法形式:<指針名>:POINTERTO<數(shù)據(jù)類型/功能塊>;

  指針可指向任何數(shù)據(jù)類型、功能塊和用戶定義的數(shù)據(jù)類型。對地址操作的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ù)被視為牧舉值。牧舉值在項目中為全局使用的變量,即使它們在POU中為本地聲明的變量。創(chuàng)建牧舉變量的最好方法是在數(shù)據(jù)類型對象組織下創(chuàng)建。用關(guān)鍵字TYPE開始,END_TYPE結(jié)束。

句法:

TYPE<牧舉變量>:(,,...,);END_TYPE

牧舉變量可以取牧舉值中的任何一個值。缺省情況下,第一個牧舉值為零,其后依次遞增。

示例:

TRAFFIC_SIGNAL:(Red,Yellow,Green:=10);(*每個顏色的初始值為red0,yellow1,green10

*)

TRAFFIC_SIGNAL:=0;(*交通信號值為red*)

FORi:=RedTOGreenDO

i:=i+1;

END_FOR;

不能對同一個牧舉值多次使用。

示例:

TRAFFIC_SIGNAL:(red,yellow,green);

COLOR:(blue,white,red);

錯誤:red不能對TRAFFIC_SIGNAL和COLOR變量同時使用。

4、結(jié)構(gòu)
  
結(jié)構(gòu)作為對象在數(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)名>是一種類型,在項目中為全程識別,并且可作為標準數(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”,其中包含一個成員“Monday”,可以用Week.Monday獲取該值。

5、參考(別名類型)
  
可以使用用戶定義的參考數(shù)據(jù)類型,創(chuàng)建已經(jīng)更名的變量、常數(shù)或功能塊。在數(shù)據(jù)類型頁中創(chuàng)建參考對象。使用TYPE關(guān)鍵字開始,END_TYPE關(guān)鍵字結(jié)束。

句法:

TYPE<標識符>:<分配項>;

END_TYPE

示例:

TYPEmessage:STRING[50];

END_TYPE;

6、替代范圍類型
  
替代范圍類型,是對其基本數(shù)據(jù)類型重新設置范圍的一種數(shù)據(jù)類型。聲明可以在數(shù)據(jù)類型頁中進行,但變量也可直接用子范圍類型聲明:

在數(shù)據(jù)類型頁中聲明的句法如下:

TYPE:(..)END_TYPE;

類型

說明

必須為有效的IEC標識符

數(shù)據(jù)類型中的一種。如SINT,USINT,INT,DINT,UDINT,BYTE,WORD,DWORD(LINT,UINT,LWORD).

常數(shù),必須為基本類型,設定的下邊界在其類型范圍之內(nèi)。

常數(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ù)被分配為一個子范圍類型(在聲明或?qū)崿F(xiàn)段中),但其值沒有落在該范圍之內(nèi)(例i:=5000),系統(tǒng)將會發(fā)出錯誤信息。

  為了在運行期間檢查邊界范圍,推薦使用功能CheckRangeSigned或CheckRangeUnsigned。這樣,邊界有效性驗證可通過合適的方法和手段捕獲(例:數(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

  為了自動調(diào)用功能,功能名CheckRangeSigned被指定,并且接口也被指定:返回值和三個DINT類型的參數(shù)。

當調(diào)用時,功能參數(shù)如下:

分配給范圍類型的值

下限

下限邊界范圍

上限

上限邊界范圍

返回值

實際分配給范圍類型的值

對i:=10*y進行邊界有效性驗證的示例:

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,則運行時,沒有子類型的類型檢驗發(fā)生,變量i可以在–32768和32767之間取任何值。

注意:
  如果功能CheckRangeSigned和CheckRangeUnsigned按照上例實現(xiàn),則在FOR循環(huán)中可對子范圍類型連續(xù)使用循環(huán)。

示例:

VAR

ui:UINT(0..10000);

END_VAR

FORui:=0TO10000DO

...

END_FOR

FOR循環(huán)不會剩余,因為ui不會大于10000。象CheckRange功能內(nèi)容一樣,當在FOR循環(huán)中使用增量值時,也應考慮這些問題。