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

电子凸轮

本节主要介绍内容如下:


相关函数

          

YKM_SetCamInConfig 设置凸轮配置
YKM_WriteCamTable 写入凸轮表格数据
YKM_WriteCamTable 读取凸轮表格数据
YKM_StartCamIn 启动凸轮


       注意
        
  • 凸轮表位置为相对位置,以凸轮启动时的位置为起点。
  • 凸轮表最大长度为256
  • 热复位后数据需要重新写入; 先写凸轮配置,再写凸轮数据,再启动凸轮
  • 凸轮表, 速度夹角为角度单位(0~360)



  • 运动说明

            

  • 电子齿轮是向从上位控制器输入的位置指令中加入对象所设定电子齿轮比,并将此值作为位置控制部的位置指令的功能。通过使用此功能,可任意设定指定单位下的电机的旋转的移动量。
  • 电子凸轮可实现非线性跟随,由凸轮表及跟随模式决定跟随曲线及速度。
  • 一个主轴可同时被N(授权的凸轮数)个凸轮绑定,一个从轴只可被一个凸轮绑定。
  • 凸轮为位置跟随,加减速由算法计算。用户可调整速度夹角及加速度夹角。


  • 流程图

            



    程序编写

              

    RetCode result;
    int exit_cmd = 0;
    //库加载

    result = YKM_LoadLib();
    YKM_BusInfo busInfo;

    //等待系统初始化完成
    while (!exit_cmd)
    {
      result = YKM_GetBusInfo(&busInfo);
      if (busInfo.running)
        break;
      Sleep(100);
    }//凸轮配置
    YKM_CamInConfig camConfig;
    memset(&camConfig, 0, sizeof(YKM_CamInConfig));
    camConfig.curve = YKM_CamCurve::YKM_FOLLOW_POLY;
    camConfig.periodic = 0;
    camConfig.axisMaster = 0;
    camConfig.masterScaling = 1.0;
    camConfig.slaveScaling = 1.0;
    result = YKM_SetCamInConfig(axis, camConfig);

    //写入凸轮表格数据
    INT32 tableNum = 10;
    M_CamTable* camData = new YKM_CamTable[tableNum];
    memset(camData, 0,sizeof(YKM_CamTable) * tableNum);
    for(int i = 0; i < tableNum; i++)
    {
       camData[i].accRate = 100;
       camData[i].velRate = 10;
       camData[i].slavePosition = i * 10;
       camData[i].masterPosition = i * 10;
    } YKM_WriteCamTable(axis, tableNum, camData);
    //启动凸轮
    YKM_StartCamIn(axis);

    //////////////////////主轴运动,从轴根据凸轮表格数据进行跟随运动//////////////////////////////////
    //主轴参数配置

    YKM_MoveAbsoluteConfig absConfig;
    absConfig.position = 100;
    absConfig.velocity = 1000;
    absConfig.acceleration = 1000;
    absConfig.deceleration = 1000;
    absConfig.jerk = 10000;//启动主轴绝对位置
    result = YKM_MoveAbsolute(axisIndex, absConfig);
    //等待主轴目标位置到达
    YKM_AxisStatus status;
    while (!exit_cmd)
    {
      result = YKM_ReadAxisInfo(axisIndex, &status);
      if (0 != status.Done)
        break;
      Sleep(1);
    }



    常见问题及说明

              


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