如何使用SIMOTION中的Commandid

n

SIMOTION程序中与工艺对象(TO)相关的每个命令中都有一个名称为“Commandid”的输入参数,顾名思义,Commandid即是用于识别该TO命令的一个唯一的识别符,系统通过Commandid来识别这个命令。
Commandid的数据类型是SIMOTION标准功能中预定义好的一个结构体:CommandIdType。该结构体可以在程序中直接引用,无须声明,它的内部程序代码如下:n

TYPE
CommandIdType : STRUCT
SystemId_low : UDINT; // Lower-order part
SystemId_high : UDINT; // Higher-order part
END_STRUCT
END_TYPE

输入参数CommandId是一个可选参数,如果没有为TO命令分配CommandId,那么默认的CommandId是(0,0);当然也可以为TO命令分配一个CommandId,那么该Id会与TO命令绑定,并作为查询TO命令状态的参考。当TO命令进入缓冲区后即可以查询该命令的状态,在TO命令执行完成后,命令会从缓冲区中消失,CommandId也随之消失。如果在TO命令执行完成后还需要保留它的状态,那么可以使用_buffer…CommandId系统功能来暂时保存该命令的执行状态,此时该TO命令继续占用缓冲区的空间,使用_removeBuffered…CommandId系统功能可以再次释放缓冲区。命令缓冲区的大小可以在Axis的系统变量TypeOfAxis.DecodingConfig.NumberOfMaxBufferedCommandId中定义,默认为100。
在使用CommandId时,最常用的方法是首先使用_getCommandId系统功能生成一个项目内唯一的Id,再使用系统功能_getStateOf…Command来获取对应的TO命令的状态,比如_getStateOfAxisCommand、 _getStateofOutputCamCommand等。
下面举例说明,该程序可放在BackgroundTask中执行。n

INTERFACE
USEPACKAGE CAM; //使用工艺包
PROGRAM ProgramCycle; //声明程序
END_INTERFACE
IMPLEMENTATION
PROGRAM ProgramCycle
VAR //声明局部变量
boStartCommand : BOOL; // Command – issue command 命令:起动
boCommandStarted : BOOL; //Auxiliary variable -command issued 状态:已起动
boCommandDone : BOOL; // Auxiliary variable -command executed状态:已执行
i32Ret : DINT; // Return value of system functions 系统功能返回值
sCommandId : CommandIdType; // CommandId 命令Id
sRetCommandState : StructRetCommandState;// _getStateOfAxisCommand 命令//的返回值
r_trig_1 : R_TRIG; // 上升沿触发r_trig系统FB的背景变量
END_VAR
r_trig_1 (boStartCommand); // Call the edge detection 调用上升沿触发:起动信号
IF r_trig_1.q THEN // 如果检测到起动信号上升沿
sCommandId := _getCommandId (); // 生成命令Id
i32Ret := _bufferAxisCommandId ( // 保留命令在缓冲区中
axis := Axis_1,
commandId := sCommandId );
i32Ret := _pos( // 轴开始运行(假设轴已使能)
axis := Axis_1,
positioningMode := Relative,
position := 100,
nextCommand := IMMEDIATELY,
commandId := sCommandId );
boCommandStarted := TRUE; //辅助状态
boCommandDone := FALSE;
ELSEIF boCommandStarted AND NOT boCommandDone THEN
sRetCommandState := _getStateOfAxisCommand( //查询_pos命令的状态
axis := Axis_1,
commandId := sCommandId );
IF sRetCommandState.functionResult = 0 THEN //如果查询执行正常
IF sRetCommandState.commandIdState = EXECUTED THEN //如果_pos命令
//状态为Executed,即执行已完成
boCommandStarted := FALSE; //辅助变量
boCommandDone := TRUE;
i32Ret := _removeBufferedAxisCommandId( //将命令从缓冲区中移除
axis := Axis_1,
commandId := sCommandId );
END_IF;
END_IF;
END_IF;

//————————-其他程序————————-
END_PROGRAM
END_IMPLEMENTATIONn

关键词
SIMOTION, Commandidn

原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc329267.html

(1)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年11月5日
下一篇 2021年4月12日

相关推荐

发表回复

登录后才能评论