ABB机器人用户定义的数据类型
发布日期:2012-06-09 兰生客服中心 浏览:7734
三、用户定义的数据类型
1、数组
支持一维、二维和三维数组的成员数据类型。数组可在POU的声明部分和全局变量表中定义。
语法:
lt;数组名>:ARRAY[
ll1,ll2为数组维数的下限标识,ul1和ul2为数组维数的上限标识。数值范围必须为整数。
示例:
Card_game:ARRAY[1..13,1..4]OFINT;
数组的初始化:
可以对数组中的所有元素进行初始化,或不进行初始化。
数组初始化示例:
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*)
结构化中的数组初始化示例:
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);
数组部分元素初始化示例:
arr1:ARRAY[1..10]OFINT:=1,2;
数组中的元素如果没有初始化值,则用基本类型的缺省值初始化其值。在上例中,元素arr1[3]到元素arr1[10]均被初始化为0。
二维数组的元素存取,使用下列语法:
lt;数组名>[Index1,Index2]
示例
Card_game[9,2]
注:
如果你在项目中定义了一个名为CheckBounds的功能,则可以自动检查数组的上下限超限错误!下图中给出了如何实现该功能的示例。
下面的示例用CheckBounds功能测试数组的超限问题。CheckBounds功能允许A[0]到A[7]元素分配值TRUE,而不会给A[10]分配值,这样可以避免对数组元素的错误操作。
2、指针
当程序运行时,变量或功能块地址保存在指针中。指针声明为如下句法形式:<指针名>:POINTERTO<数据类型/功能块>;
指针可指向任何数据类型、功能块和用户定义的数据类型。对地址操作的ADR功能,可将变量或功能块的地址指向指针。指针后加内容操作符”^”可取出指针中的数据。
示例:
t:POINTERTOINT;
var_int1:INT:=5;
var_int2:INT;
t:=ADR(var_int1);
var_int2:=pt^;(*var_int2的值为5*)
3、牧举
牧举为用户定义的数据类型,并由一组字符串常数组成。这些常数被视为牧举值。牧举值在项目中为全局使用的变量,即使它们在POU中为本地声明的变量。创建牧举变量的最好方法是在数据类型对象组织下创建。用关键字TYPE开始,END_TYPE结束。
句法:
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、结构
结构作为对象在数据类型页中创建。使用TYPE关键字开始,END_TYPE关键字结束。结构声明的句法如下:
TYPE<结构名>:
TRUCT
.<声明变量n>
END_STRUCT
END_TYPE
<结构名>是一种类型,在项目中为全程识别,并且可作为标准数据类型使用。允许内嵌结构。唯一的限制是变量不能带地址(不允许用AT声明!)。
下例为多边形的结构示例:
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
可以使用下面的句法存取结构中的成员。
<结构_名>.<成员名>
例如:结构名为“Week”,其中包含一个成员“Monday”,可以用Week.Monday获取该值。
5、参考(别名类型)
可以使用用户定义的参考数据类型,创建已经更名的变量、常数或功能块。在数据类型页中创建参考对象。使用TYPE关键字开始,END_TYPE关键字结束。
句法:
TYPE<标识符>:<分配项>;
END_TYPE
示例:
TYPEmessage:STRING[50];
END_TYPE;
6、替代范围类型
替代范围类型,是对其基本数据类型重新设置范围的一种数据类型。声明可以在数据类型页中进行,但变量也可直接用子范围类型声明:
在数据类型页中声明的句法如下:
TYPE
类型 |
说明 |
|
必须为有效的IEC标识符 |
|
数据类型中的一种。如SINT,USINT,INT,DINT,UDINT,BYTE,WORD,DWORD(LINT,UINT,LWORD). |
|
常数,必须为基本类型,设定的下边界在其类型范围之内。 |
|
常数,必须为基本类型,设定的上边界在其类型范围之内。 |
示例:
TYPE
ubInt:INT(-4095..4095);
END_TYPE
用子范围类型直接声明的变量:
VAR
i1:INT(-4095..4095);
i2:INT(5...10):=5;
ui:UINT(0..10000);
END_VAR
如果常数被分配为一个子范围类型(在声明或实现段中),但其值没有落在该范围之内(例i:=5000),系统将会发出错误信息。
为了在运行期间检查边界范围,推荐使用功能CheckRangeSigned或CheckRangeUnsigned。这样,边界有效性验证可通过合适的方法和手段捕获(例:数值可以截取或设置错误标志)。
示例:
当变量属于有符号子范围类型时(如上例中的i),则功能CheckRangeSigned被调用;可以通过编程的方法使其值在允许范围之内。
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 为了自动调用功能,功能名CheckRangeSigned被指定,并且接口也被指定:返回值和三个DINT类型的参数。 当调用时,功能参数如下:
值 分配给范围类型的值 下限 下限边界范围 上限 上限边界范围 返回值 实际分配给范围类型的值
对i:=10*y进行边界有效性验证的示例:
i:=CheckRangeSigned(10*y,-4095,4095);
示例中,y即使是1000,i经过上例赋值后其值仍然为4095。
同样,功能CheckRangeUnsigned过程同上:功能名和接口必须正确。
FUNCTIONCheckRangeUnsigned:UDINT
VAR_INPUT
value,lower,upper:UDINT;
END_VAR
注意:
如果没有CheckRangeSigned和CheckRangeUnsigned,则运行时,没有子类型的类型检验发生,变量i可以在–32768和32767之间取任何值。
注意:
如果功能CheckRangeSigned和CheckRangeUnsigned按照上例实现,则在FOR循环中可对子范围类型连续使用循环。
示例:
VAR
ui:UINT(0..10000);
END_VAR
FORui:=0TO10000DO
...
END_FOR
FOR循环不会剩余,因为ui不会大于10000。象CheckRange功能内容一样,当在FOR循环中使用增量值时,也应考虑这些问题。
上一篇:ABB机器人编程方式
下一篇:ABB机器人变量类型转换功能
-
ABB机器人标准数据类型
一、标准数据类型 1、BOOLBOOL类型变量可取值TRUE和FALSE。保留8位内存空间。 2、整型数据类型所有的整型数据类型为: BYTE 字节 WORD 字 DWORD
2012-06-09 -
ABB机器人变量类型转换功能
二、变量类型转换功能 不能直接从“大类型”向“小类型”变量转换。(例如:从INT到BYTE,或从DINT到WORD)。要完成此功能,可以使用特殊功能块实现。作为一种规则,你可以用此功能将一种类型的变量转换成任何需要的类型变量。 句法:
2012-06-09 -
ABB机器人编程方式
四、编程方式 1、指令表IL 指令表(IL)由一系列指令组成。每条指令都由一个新行开始,包含一个操作符以及和操作符类型相关的一个或多个操作数,并用逗号分开。在指令前可以有标号,后接一个冒号。 注解必须在一行的最后,指令之间可以插入空行
2012-06-09 -
ABB机器人全部运算符及功能
五、CoDeSys中全部运算符及功能名 ST中操作符 IL中操作符 IL中的修饰符 意义 ‘ 字符串分界符(例如:’string1’) [..]
2012-06-25