• {{item.name}}
{{item.name}}
{{item2.name}}
更多
常问问题

如何使用SIMOTION中的Commandid

star star star star star
5.0 分
  • 软件编程
  • 仿真
  • 脚本
  • 数字量输入
文档编号:F0690| 文档类型:常问问题| 发布时间:2024年01月24日
  • 0
  • 202
  • 1454
         SIMOTION程序中与工艺对象(TO)相关的每个命令中都有一个名称为“Commandid”的输入参数,顾名思义,Commandid即是用于识别该TO命令的一个唯一的识别符,系统通过Commandid来识别这个命令。 ......

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%未阅读,请登录后下载/查看文档

  • 评论
更多
  • 分享

    扫码分享

提示
您即将前往“全球技术资源库”。
“全球技术资源库”的用户名与本地支持中心(下载中心、技术论坛、找答案、1847工业学习平台)的用户名不通用。如果需要在全球技术资源库下载文档,您需要重新登录或注册。
确定

扫码进入移动端

信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。