可以声明一个数据类型为某个工艺对象(TO)的变量,例如位置轴,并将一个相应的定位轴指派给此变量。
这样的一个变量被命名为一个参考。
数据类型_AXIS_REF
一个数据类型为_AXIS_REF 的变量被用作选定的工艺对象的参考。此数据类型在PLCopen编程环境里被用来将轴参考转换成PLCopen程序块。这样,可以使用灵活的连接来创建应用,而不是固定的分配给某个工艺对象(在实例化和分配过程中)。
下标列举了可与数据类型 _AXIS_REF使用的工艺对象。
支持的工艺对象 | 数据类型 |
---|---|
Speed-controlled axis | driveAxis |
Positioning axis | posAxis |
Synchronous axis | followingAxis |
Path axis | _pathAxis |
External encoder | externalEncoderType |
Addition object | _additionObjectType |
Formula object | _formulaObjectType |
Fixed gear | _fixedGearType |
Controller object | _controllerObjectType |
Sensor object |
_sensorType |
数据类型_AXIS_REF不能与以下工艺对象一起使用。
不支持的工艺对象 | 数据类型 |
---|---|
Measuring input | measuringInputType |
Temperature chael | temperatureControllerType |
Cam | camType |
Synchronous object | followingObjectType |
Path object | _pathObjectType |
Output cam | outputCamType |
Output cam track | _camTrackType |
除了在PLCopen环境中使用之外,_AXIS_REF还可以在一般功能中使用,例如主值的输入块中。
数据类型 ANYOBJECT
数据类型ANYOBJECT可用来替代_AXIS_REF 。
可以将系统中上述所有工艺对象指定为此种数据类型。
应用
例如,可以核对一个轴的操作状态而无需考虑其类型。
下面的程序用来核对传输的工艺对象是否是一个轴对象。轴对象可以是速度轴,位置轴,同步轴或路径轴。
这里使用了类型为 _AXIS_REF 的输入变量。为了确保轴工艺对象已被传输,被传输的工艺对象参考被转换成driveAxis类型。 由于轴工艺对象的固有特性,这种类型转换对所有类型的轴都适用。
使用功能ANYOBJECT_TO_OBJECT 来转换工艺对象的类型。此功能将分层的TO数据类型(速度轴,位置轴,跟随轴)的变量或者通用类型_AXIS_REF 和ANYOBJECT的变量转换成兼容的TO数据类型。如果转换不可行,例如由于不兼容的工艺对象的传输,则值TO#NIL 将被赋值给目标变量。
VAR_INPUT
toAxisRef : _AXIS_REF;
END_VAR
VAR
toDriveAxis : driveAxis;
END_VAR
// Convert from _AXIS_REF to driveAxis
toDriveAxis := ANYOBJECT_TO_OBJECT(toAxisRef);
// Check if conversion succeeded
IF (toDriveAxis <> TO#NIL) THEN
... // E.g. execution of PLCopen commands
ELSE
... // Some kind of error handling
END_IF;
另外一种方法是定义传输工艺对象的具体类型。例如,可以定义传输轴的哪个功能被执行。接下来的程序中确定了传输工艺对象的具体类型,布尔型变量被赋值。
VAR_INPUT
toAxisRef : _AXIS_REF;
END_VARVAR
toDriveAxis : driveAxis;
toPosAxis : posAxis;
toFollowingAxis : followingAxis;
toPathAxis : _pathAxis;
toExtEncoder : externalEncoderType;
boIsDriveAxis : BOOL;
boIsPosAxis : BOOL;
boIsFollowingAxis : BOOL;
boIsPathAxis : BOOL;
boIsExtEncoder : BOOL;
END_VARboIsDriveAxis := FALSE;
boIsPosAxis := FALSE;
boIsFollowingAxis := FALSE;
boIsPathAxis := FALSE;
boIsExtEncoder := FALSE;toPathAxis := ANYOBJECT_TO_OBJECT(toAxisRef);
IF (toPathAxis <> TO#NIL) THEN
boIsPathAxis := TRUE;
ELSE
toFollowingAxis := ANYOBJECT_TO_OBJECT(toAxisRef);
IF (toFollowingAxis <> TO#NIL) THEN
boIsFollowingAxis := TRUE;
ELSE
toPosAxis := ANYOBJECT_TO_OBJECT(toAxisRef);
IF (toPosAxis <> TO#NIL) THEN
boIsPosAxis := TRUE;
ELSE
toDriveAxis := ANYOBJECT_TO_OBJECT(toAxisRef);
IF (toDriveAxis <> TO#NIL) THEN
boIsDriveAxis := TRUE;
ELSE
toExtEncoder := ANYOBJECT_TO_OBJECT(toAxisRef);
IF (toExtEncoder <> TO#NIL) THEN
boIsExtEncoder := TRUE;
END_IF;
END_IF;
END_IF;
END_IF;
END_IF;
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc324304.html