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

坐标系

本节主要介绍内容如下:


       注意
        
  • 坐标系运动指令轴号,为当前坐标系内绑定轴顺序索引号,非全局逻辑轴号。
  • 坐标系运动支持2轴平面模式、3轴空间模式以及多轴直线插补,提供常用空间直线、圆弧、多轴直线插补指令。
  • 坐标系需在坐标系运动指令之前配置,且仅需要配置一次。轴可同时被多个坐标系绑定,需保证不会同时被不同坐标系执行运动。
  • 每个坐标系可单独设置缓冲区深度,最大4096,支持运动过程动态增加新指令。
  • 最多支持12个坐标系同时运动。
  • 坐标系内轴脉冲数请勿超过32位。
  • 热复位后,坐标系需重新配置。


相关函数

          

YKM_SetGroupProfile 设置坐标系参数
YKM_GetGroupProfile 获取坐标系参数
YKM_InitGroup 坐标系轴绑定
YKM_DeInitGroup 解绑坐标系
YKM_GetGroupStatus 获取坐标系状态
YKM_ClearGroupWarn 清除坐标系报警
YKM_StopGroup 停止坐标系运动
YKM_StartGroup 启动坐标系运动
YKM_StartGroupEx 启动坐标系运动(CNC模式下的坐标系扩展用)
YKM_MoveLinearAbsolute 直线插补,绝对模式;
插补轴数3轴以内,占一个缓冲区,之后每增加8轴多占一个空间
YKM_MoveLinearAbsoluteEx 直线插补扩展,绝对模式;
插补轴数支持2到32个轴
YKM_MoveLinearRelative 直线插补,相对模式;
插补轴数3轴以内,占一个缓冲区,之后每增加8轴多占一个空间
YKM_MoveLinearRelativeEx 直线插补扩展,相对模式;
插补轴数支持2到32个轴
YKM_MoveCircularAbsolute 圆弧插补,绝对模式;
该命令占用两个缓冲区
插补轴数支持2轴或3轴
YKM_MoveCircularAbsoluteEx 圆弧插补扩展,绝对模式;
该命令占用两个缓冲区
插补轴数支持2轴或3轴
YKM_MoveCircularRelative 圆弧插补,相对模式;
该命令占用两个缓冲区
插补轴数支持2轴或3轴
YKM_MoveCircularRelativeEx 圆弧插补扩展,相对模式;
该命令占用两个缓冲区
插补轴数支持2轴或3轴
YKM_GroupWaitDigitalInput 等待数字输入,参考下一段运动行;
该命令占一个缓冲区
YKM_GroupDigitalOutput 数字输出,参考上一段运动行;
输出功能只支持3轴以内,该命令占两个缓冲区
YKM_GroupPwmOutput PWM输出,参考上一段运动行;
输出功能只支持3轴以内,该命令占两个缓冲区


运动说明

        

坐标系运动是控制运动平台以微小直线逼近理论轨迹曲线的运动。
运动速度为参与运动的轴合成矢量速度。
坐标系的停止指令使用的是坐标系的缓停减速度,其他触发导致坐标系停止的减速度用的都是坐标系急停减速度。
坐标系实际位置比较,是比较目标触发位置和实际位置的直线距离。
由于硬件及参数限制,在规划无法达到目标速度时,规划将自动降速或停止,以保证定位精度。
坐标系数字输出以移动指定距离输出模式的参数计算,X移动量平方+Y移动量平方,开根号。
坐标系PWM输出占空比=设置的占空比+XY合成速度*设置的比例;PWM输出频率=设置频率+XY合成速度*设置的比例。



       注意
        
  • 清除坐标系报警会清空当前坐标系指令缓冲区。
  • 参考点数字输出误差为一个运动周期,实际误差与速度有关。
  • 圆弧参数错误,API函数不会返回错误,运行的时候坐标系有错误代码出来。
  • 坐标系扩展多轴插补,合成速度,移动距离,只计算前面两轴。
  • 坐标系内数字输出或PWM输出,轨迹结束、清除报警、解绑坐标系等都不会主动关闭输出。
  • 部分坐标系运动指令占用缓冲区数量大于1,仅通过缓冲区空闲数量判断是否写入轨迹,可能会导致指令写入不成功(如空闲数量1,写入指令占用缓冲区数量2)。推荐同步判断函数返回值
  • 坐标系缓冲区无指令,启动坐标系运动,坐标系Done信号将立即变为ON。
  • 坐标系支持在运动未完成时,可动态添加指令。若运动完成后写入指令,需要重新启动坐标系运动。CNC模式不支持动态添加。
  • 坐标系停止指令,会清空坐标系缓冲区,无论运动是否已经启动。

流程图

        

参数详解

        

1.缓冲模式

YKM_BufferMode 速度平滑参数,连续运动与坐标系运动下须设置。

代码 示意图 说明
YKM_ABORTING
无效
0   不设置平滑参数
YKM_BUFFERED
1 在当前命令完成后再启动下一条命令
YKM_BLENDING_LOW
低速平滑
2 前后两个命令之间以低速平滑
YKM_BLENDING_PREV
前段速度平滑
3 以前一条命令的速度平滑
YKM_BLENDING_NEXT
后段速度平滑
4 以后一条命令的速度平滑
YKM_BLENDING_HIGH
以高速平滑
5 前后两个命令之间以高速平滑

2.过渡模式

YKM_TransitionMode 轨迹过渡参数,决定过渡段轨迹,坐标系运动须设置,推荐使用转角距离。

代码 示意图 说明
YKM_TRANS_NONE
0 不插入过渡轮廓线
YKM_START_VELOCITY
启动速度
1 用给定的起始速度过渡
YKM_CONSTANT_VELOCITY
固定速度
2 用给定的恒定速度过渡
YKM_CORNER_DISTANCE
拐角距离
3 用给定的拐角距离过渡
YKM_MAX_CORNER_DEVIATION
最大拐角误差
4 用给定的最大转角偏差过渡
YKM_MAX_PATH_DEVIATION
最大路径偏差
5 用给定的最大路径偏差过渡

3.过渡模式和缓冲模式组合

A:可以使用 N:不可以使用 U:未实现

TransitionMode ABORTING BUFFERED BLENDING_LOW BLENDING_PREV BLENDING_NEXT BLENDING_HIGH
None U U N N N N
StartVelocity U U U U U U
ConstantVelocity U U U U U U
CornerDistance N N A A A A
CornerDeviation N N A A A A
MaxPathDeviation N N U U U U

4.圆弧2种插补模式


模式 边界(BORDER) 圆心(CENTER)
功能 把辅助点、起始点、终点组成的圆作为运动的轨迹圆。 把辅助点定义为轨迹圆的圆心,因此,辅助点应该在起始点和终止点连线的垂线上。
说明
特点 单命令时角度小于2π。

单命令时角度小于2π且不等于π。

圆方程的多元解。



程序编写

          

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);
}
UINT32 groupIndex = 0;
//速度/加速度配置
YKM_GroupProfile profile;
profile.max_velocity = 500;
profile.start_velocity = 1;
profile.stop_dec_emg = 10000;
profile.stop_dec_smooth = 1000;
profile.stop_dec_jerk = 10000;
YKM_SetGroupProfile(groupIndex, profile);
//轴绑定
YKM_GroupConfig config;
config.System = YKM_COORDINATE_ACS;
config.axisNum = 2;
config.axisIndex0 = 0;
config.axisIndex1 = 1;
YKM_InitGroup(groupIndex, config);
//等待绑定完成
YKM_GroupStatus status;
while (!exit_cmd)
{
  result = YKM_GetGroupStatus(groupIndex, &status);
  print(result);
  if (status.Inited)
    break;
  Sleep(1);
}
//直线插补,绝对模式
YKM_MoveLinearAbsoluteConfig absConfig;
absConfig.position.x = 1000;
absConfig.position.y = 500;
absConfig.position.z = 0;
absConfig.velocity = 100;
absConfig.acceleration = 1000;
absConfig.deceleration = 1000;
absConfig.jerk = 5000;
absConfig.bufferMode = YKM_BLENDING_LOW;
absConfig.transMode = YKM_CORNER_DISTANCE;
absConfig.transPara.x = 1.0;
absConfig.transPara.y = 0;
absConfig.transPara.z = 0;
YKM_MoveLinearAbsolute(groupIndex, absConfig);
//直线插补,相对模式
YKM_MoveLinearRelativeConfig relConfig;
relConfig.distance.x = 100;
relConfig.distance.y = 500;
relConfig.distance.z = 0;
relConfig.velocity = 100;
relConfig.acceleration = 1000;
relConfig.deceleration = 1000;
relConfig.jerk = 5000;
relConfig.bufferMode = YKM_BLENDING_LOW;
relConfig.transMode = YKM_CORNER_DISTANCE;
relConfig.transPara.x = 1.0;
relConfig.transPara.y = 0;
relConfig.transPara.z = 0;
YKM_MoveLinearRelative(groupIndex, relConfig);
YKM_StartGroup(groupIndex);

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


常见问题及说明

          


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