ABB機器人用戶定義的數(shù)據(jù)類型
發(fā)布日期:2012-06-09 蘭生客服中心 瀏覽:7854
三、用戶定義的數(shù)據(jù)類型
1、數(shù)組
支持一維、二維和三維數(shù)組的成員數(shù)據(jù)類型。數(shù)組可在POU的聲明部分和全局變量表中定義。
語法:
lt;數(shù)組名>:ARRAY[
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<牧舉變量>:(
牧舉變量可以取牧舉值中的任何一個值。缺省情況下,第一個牧舉值為零,其后依次遞增。
示例:
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
類型 |
說明 |
|
必須為有效的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)中使用增量值時,也應考慮這些問題。
上一篇:ABB機器人編程方式
下一篇:ABB機器人變量類型轉(zhuǎn)換功能
-
ABB機器人標準數(shù)據(jù)類型
一、標準數(shù)據(jù)類型 1、BOOLBOOL類型變量可取值TRUE和FALSE。保留8位內(nèi)存空間。 2、整型數(shù)據(jù)類型所有的整型數(shù)據(jù)類型為: BYTE 字節(jié) WORD 字 DWORD
2012-06-09 -
ABB機器人變量類型轉(zhuǎn)換功能
二、變量類型轉(zhuǎn)換功能 不能直接從“大類型”向“小類型”變量轉(zhuǎn)換。(例如:從INT到BYTE,或從DINT到WORD)。要完成此功能,可以使用特殊功能塊實現(xiàn)。作為一種規(guī)則,你可以用此功能將一種類型的變量轉(zhuǎn)換成任何需要的類型變量。 句法:
2012-06-09 -
ABB機器人編程方式
四、編程方式 1、指令表IL 指令表(IL)由一系列指令組成。每條指令都由一個新行開始,包含一個操作符以及和操作符類型相關(guān)的一個或多個操作數(shù),并用逗號分開。在指令前可以有標號,后接一個冒號。 注解必須在一行的最后,指令之間可以插入空行
2012-06-09 -
ABB機器人全部運算符及功能
五、CoDeSys中全部運算符及功能名 ST中操作符 IL中操作符 IL中的修飾符 意義 ‘ 字符串分界符(例如:’string1’) [..]
2012-06-25