该程序是一个双轴运动,绘制圆形
原始程序(可以直接使用)
GLOBAL INT X1,Y1,ii
GLOBAL REAL MY_ARRAY(4)(12)
GLOBAL REAL piX1 = 0; Y1 = 1 ! Axis assignment
pi = ACOS(-1) ! Shortcut for generating piii = 0
LOOP 12MY_ARRAY(0)(ii) = COS((ii/12)*2*pi) ! Generate x-pointsMY_ARRAY(1)(ii) = SIN((ii/12)*2*pi) ! Generate y-pointsii = ii + 1
ENDENABLE (X1,Y1)PVSPLINE (X1,Y1), 250
MPOINT (X1,Y1), MY_ARRAY, 12
ENDS (X1,Y1)STOP
解析代码
GLOBAL INT X1,Y1,ii 定义数据类型为整型的全局变量
GLOBAL REAL MY_ARRAY(4)(12) 定义数据类型为4行12列的数组的全局变量
GLOBAL REAL pi 定义数据类型为实数的全局变量X1 = 0; Y1 = 1 首先将轴与整型的全局变量关联
pi = ACOS(-1) pi就是π,这个公式就是快速计算π的公式ii = 0 给ii赋值为0
LOOP 12 循环12次MY_ARRAY(0)(ii) = COS((ii/12)*2*pi) 给X轴运动点位赋值(12个点位)MY_ARRAY(1)(ii) = SIN((ii/12)*2*pi) 给Y轴运动点位赋值(12个点位)ii = ii + 1
ENDENABLE (X1,Y1) 轴0,1上使能PVSPLINE (X1,Y1), 250 启动PVSPLINE运动,速度为250,每个点上面的速度
MPOINT (X1,Y1), MY_ARRAY, 12 运动点位输入运动指令内部,使用前面定义的数组,点数12ENDS (X1,Y1) 关闭轴X1,Y1
STOP 停止程序的运行
重点算法代码
LOOP 12 循环12次MY_ARRAY(0)(ii) = COS((ii/12)*2*pi) 给X轴运动点位赋值(12个点位)MY_ARRAY(1)(ii) = SIN((ii/12)*2*pi) 给Y轴运动点位赋值(12个点位)ii = ii + 1
END
数学原理
使用COS((ii/12)2pi)计算X坐标
使用SIN((ii/12)2pi)计算Y坐标
其中ii从0递增到11(共12次循环)
运动轨迹特性
会形成一个完美的单位圆(半径为1的圆)
12个点均匀分布在圆周上(每30°一个点)
点的顺序是逆时针方向排列
第一个点在(1,0)位置(3点钟方向)
可视化效果
如果将这些点按顺序用直线连接
会形成一个正十二边形
当点数足够多时(比如36个点),会越来越接近圆形
需要生成可视化演示代码吗?可以用HTML5 Canvas绘制这个轨迹。
关键指令
PVSPLINE
注:
1、如果 PVSPLINE 运动以 HALT 结束,则控制器在减速期间不会遵循运动轨迹
2、由于时间间隔和目标点已定义,变量VEL、ACC、DEC和JERK 对PVSPLINE没有影响。
重点:在使用PVSPLINE指令的时候,后面需要跟MPOINT指令一起使用,因为在MPOINT内部定义轴运动的坐标点位以及轴运动到每个点位置时候的速度大小,当使用PVSPLINE/t这个模式的时候还会定义点与点之间不等时间的间距
MPOINT运动点位的赋值参考之前博客
ACS-电机控制Buffer-任意路径规划(单轴或者多轴-斜线或者折线)