- {{item.name}}
如何使用SIMOTION中的Commandid
- 0
- 253
- 1454
SIMOTION程序中与工艺对象(TO)相关的每个命令中都有一个名称为“Commandid”的输入参数,顾名思义,Commandid即是用于识别该TO命令的一个唯一的识别符,系统通过Commandid来识别这个命令。
Commandid的数据类型是SIMOTION标准功能中预定义好的一个结构体:CommandIdType。该结构体可以在程序中直接引用,无须声明,它的内部程序代码如下:
TYPECommandIdType : STRUCT SystemId_low : UDINT; // Lower-order part SystemId_high : UDINT; // Higher-order partEND_STRUCTEND_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中执行。
INTERFACEUSEPACKAGE CAM; //使用工艺包PROGRAM ProgramCycle; //声明程序END_INTERFACEIMPLEMENTATIONPROGRAM ProgramCycleVAR //声明局部变量 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_VARr_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 THENsRetCommandState := _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_IMPLEMENTATION
关键词
SIMOTION, Commandid
剩余80%未阅读,请登录后下载/查看文档
- 评论
-
分享
扫码分享
- 收藏 收藏
- 点赞 点赞
- 纠错 纠错
{{item.nickName}}