該程序是一個雙軸運動,繪制圓形
原始程序(可以直接使用)
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-任意路徑規劃(單軸或者多軸-斜線或者折線)