ProCon说明   快速入门   运动控制   EtherCAT   实时程序   API函数   控件库   硬件说明   问题排查   示例代码  
  

缓冲区运动

本节主要介绍内容如下:


       注意
        
  • 单轴连续运动,缓冲区16级; 运动完成后,会自动清除IO数据 ;缓冲区每个轴独立的。
  • 多种组合方式,可以实现不同的应用。
  • inpos支持,比较当前行号的目标位置和轴当前位置。


相关函数

        

YKM_MoveContinuesAbsolute 连续运动:绝对模式
YKM_MoveContinuesRelative 连续运动:相对模式
YKM_MoveContinuesVelocity 连续运动:速度模式
YKM_MoveContinuesOutput 连续运动:数字输出
YKM_MoveContinuesInput 连续运动:数字输入
YKM_MoveContinuesDelay 连续运动:延时
YKM_MoveContinuesStart 连续运动:启动


       注意
        
  • 连续运动指令加速度和变加速不能太小,否则可能导致速度变化时间过长,轴无法停止。


运动说明

        
  • 连续运动实现多条运动指令衔接。缓冲区大小为16条指令,支持动态添加。平滑参数参考坐标系章节缓冲模式定义
  • 输入/输出的位置参数,可选比较规划位置或实际位置;不支持同一个位置输出两个IO/读取两个输入。
  • IO输出命令前面不能没有位置指令,否则不会触发输出,多条IO输出触发位置的顺序也有要求,根据运动位置的先后设置。
  • 位置命令和IO命令配合,是先判断IO信号,在判断位置的到位信号。
  • 写入的指令需要全部执行完成,才给完成信号。


  • 流程图

            


    流程图以连续速度运动举例,其他连续运动与其流程相同



    程序编写

              

    RetCode result;
    int exit_cmd = 0;
    UINT32 axisIndex = 0;
    UINT32 axisIndex = 0;

    //库加载
    result = YKM_LoadLib();
    YKM_BusInfo busInfo;

    //等待系统初始化完成
    while (!exit_cmd)
    {
      result = YKM_GetBusInfo(&busInfo);
      if (busInfo.running)
        break;
      Sleep(100);
    }

    //设置第一段速度运动参数
    YKM_MoveVelocityConfig moveVelocityConfig1;
    memset(&moveVelocityConfig1, 0, sizeof(YKM_MoveRelativeConfig));
    moveVelocityConfig1.direction = YKM_DIRECTION::YKM_DIRECTION_POSITIVE;
    moveVelocityConfig1.acceleration = 1000;
    moveVelocityConfig1.deceleration = 1000;
    moveVelocityConfig1.jerk = 10000;
    moveVelocityConfig1.velocity = 100;

    //设置第二段速度运动参数
    YKM_MoveVelocityConfig moveVelocityConfig2;
    moveVelocityConfig2.direction = YKM_DIRECTION::YKM_DIRECTION_POSITIVE;
    moveVelocityConfig2.acceleration = 1000;
    moveVelocityConfig2.deceleration = 1000;
    moveVelocityConfig2.jerk = 10000;
    moveVelocityConfig2.velocity = 50;

    //设置输入信号参数
    UINT32 byteIndex = 0, bitIndex = 0;

    //第一段速度运动
    result = YKM_MoveContinuesVelocity(axisIndex, moveVelocityConfig1, YKM_BufferMode::YKM_BLENDING_PREV);
    print(result);

    //输入信号,收到输入信号后切换到下一条指令中去
    result = YKM_MoveContinuesInput(axisIndex, byteIndex, bitIndex, YKM_TrigMode::YKM_TRIGMODE_UPEDGE);
    print(result);

    //相对定位
    result = YKM_MoveContinuesVelocity(axisIndex, moveVelocityConfig2, YKM_BufferMode::YKM_BLENDING_PREV);
    print(result);

    YKM_MoveContinuesStart(axisIndex);

    //等待目标位置到达
    YKM_AxisStatus status;
    while (!exit_cmd)
    {
      result = YKM_ReadAxisInfo(axisIndex, &status);
      if (0 != status.Done)
        break;
      Sleep(1);
    }



    常见问题及说明

              


      
    Copyright © 2015 深圳市优易控软件有限公司 www.proutech.com