📄 mac.bak
字号:
buf[i] = 0;
}
e_x = atof(&(buf[b_p+1]));
e_x -= o_x;
buf[i] = chbak;
i = b_p + 1;
while ((buf[i] != 'Y')&&(buf[i] != 0))
i ++;
if (buf[i] == 'Y'){
j = b_p + 1;
while ((buf[j] != 'I')&&(buf[j] != 'J')&&(buf[i] != 0))
j ++;
if (buf[j] != 0){
chbak = buf[j];
buf[j] = 0;
}
e_y = atof(&(buf[i+1]));
e_y -= o_y;
buf[j] = chbak;
}
else{
e_y = b_y;
}
}
else{
e_x = b_x;
e_y = atof(&(buf[b_p+1]));
e_y -= o_y;
}
i = b_p + 1;
while ((buf[i] != 'I')&&(buf[i] != 0))
i ++;
if (buf[i] == 'I'){
j = b_p + 1;
while ((buf[j] != 'J')&&(buf[i] != 0))
j ++;
if (buf[j] != 0){
chbak = buf[j];
buf[j] = 0;
}
I = atof(&(buf[i+1]));
buf[j] = chbak;
}
else
I = oldi;
i = b_p + 1;
while ((buf[i] != 'J')&&(buf[i] != 0))
i ++;
if (buf[i] == 'J'){
J = atof(&(buf[i+1]));
}
else
J = oldj;
cx = I + b_x;
cy = J + b_y;
r = sqrt((b_x-cx)*(b_x-cx)+(b_y-cy)*(b_y-cy));
ba = count_angle(cx,cy,b_x,b_y);
ea = count_angle(cx,cy,e_x,e_y);
an = ba;
if (ba > ea){
len = r*(ba-ea);
}
else{
len = r*(ba + 2*PI - ea);
}
if (type == 3) // 2 clock wise
len = r*2*PI - len; // 3 anti clock wise
if ((fabs(ba-ea) < 0.0001) || (fabs(fabs(ba-ea)-2*PI) < 0.0001))
len = r*2*PI;
num = len;
if (num > 0){
for (i=0;i<num;i++){
step_len = len/num;
step_an = step_len / r;
if (type == 3){ // anti clock wise
n_an = ba + (i+1)*step_an;
}
else{
n_an = ba - (i+1)*step_an;
}
n_x = cx + r*cos(n_an);
n_y = cy + r*sin(n_an);
fprintf(t_fpe,"G01X%fY%f\n",n_x,n_y);
}
}
else{
fprintf(t_fpe,"G01X%fY%f\n",e_x,e_y);
}
oldx = e_x;
oldy = e_y;
}
float count_angle(float x0, float y0, float x1, float y1)
{
float a;
if ((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0) < 1e-8)
return 0;
a = acos((x1-x0)/sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0)));
if (y1 < y0)
a = 2*PI - a;
return a;
}
recover_data()
{
int i;
xmaxv = xmaxv3;
ymaxv = ymaxv3;
// test_dog();
zmaxv = zmaxv3;
xmaxa = xmaxa3;
ymaxa = ymaxa3;
zmaxa = zmaxa3;
xmaxv1 = xmaxv; // Max Speed units(G CODE) per danwei
ymaxv1 = ymaxv;
x_once_max_v_pulses = xmaxv*xsteps*interval/(1000.0);
y_once_max_v_pulses = ymaxv*ysteps*interval/(1000.0);
if (danwei == MINUTES){
x_once_max_v_pulses /= 60.0;
y_once_max_v_pulses /= 60.0;
}
x_times = x_once_max_v_pulses/x_once_max_a_pulses;
if (x_times > 1)
x_once_max_v_pulses = x_once_max_a_pulses*x_times;
x_len_to_acc = 0;
for (i=0;i<x_times;i++){
x_len_to_acc += (i+1)*x_once_max_a_pulses;
}
y_times = y_once_max_v_pulses/y_once_max_a_pulses;
if (y_times > 1)
y_once_max_v_pulses = y_once_max_a_pulses*y_times;
y_len_to_acc = 0;
for (i=0;i<y_times;i++){
y_len_to_acc += (i+1)*y_once_max_a_pulses;
}
}
set_data()
{
int i;
xmaxv3 = xmaxv;
ymaxv3 = ymaxv;
zmaxv3 = zmaxv;
xmaxa3 = xmaxa;
ymaxa3 = ymaxa;
zmaxa3 = zmaxa;
xmaxv = xmaxv2;
ymaxv = ymaxv2;
zmaxv = zmaxv2;
xmaxa = xmaxa2;
ymaxa = ymaxa2;
zmaxa = zmaxa2;
xmaxv1 = xmaxv; // Max Speed units(G CODE) per danwei
ymaxv1 = ymaxv;
x_once_max_v_pulses = xmaxv*xsteps*interval/(1000.0);
y_once_max_v_pulses = ymaxv*ysteps*interval/(1000.0);
if (danwei == MINUTES){
x_once_max_v_pulses /= 60.0;
y_once_max_v_pulses /= 60.0;
}
x_times = x_once_max_v_pulses/x_once_max_a_pulses;
if (x_times > 1)
x_once_max_v_pulses = x_once_max_a_pulses*x_times;
x_len_to_acc = 0;
for (i=0;i<x_times;i++){
x_len_to_acc += (i+1)*x_once_max_a_pulses;
}
y_times = y_once_max_v_pulses/y_once_max_a_pulses;
if (y_times > 1)
y_once_max_v_pulses = y_once_max_a_pulses*y_times;
y_len_to_acc = 0;
for (i=0;i<y_times;i++){
y_len_to_acc += (i+1)*y_once_max_a_pulses;
}
}
trans_line(int b_p,FILE *to_file)
{
int i;
fprintf(to_file,"%s\n",buf);
b[0] = oldx;
b[1] = oldy;
if (buf[b_p] == 'X'){
e[0] = atof(&(buf[b_p+1]));
e[0] -= o_x;
i = b_p + 1;
while ((buf[i] != 'Y')&&(buf[i] != 0))
i ++;
if (buf[i] == 'Y'){
e[1] = atof(&(buf[i+1]));
e[1] -= o_y;
}
else{
e[1] = b[1];
}
}
else{
e[0] = b[0];
e[1] = atof(&(buf[b_p+1]));
e[1] -= o_y;
}
oldx = e[0];
oldy = e[1];
}
proc_line(int b_p,FILE *to_file)
{
int i,j,flag;
int a_times,times[2];
int s,v,r_p,a_s_ps,max_times;
int a,num,p,half_ps,k,m;
long all_ps,run_ps,ps[2],ll;
int left,aver_add,left_add,type;
float l1,l2,l3,an;
double df;
float b_x,e_x,b_y,e_y,n_x,n_y;
vmax = x_once_max_v_pulses;
b[0] = x_ps/xsteps;
b[1] = y_ps/ysteps;
bb_x = x_ps;
bb_y = y_ps;
if (buf[b_p] == 'X'){
e[0] = atof(&(buf[b_p+1]));
e[0] -= o_x;
i = b_p + 1;
while ((buf[i] != 'Y')&&(buf[i] != 0))
i ++;
if (buf[i] == 'Y'){
e[1] = atof(&(buf[i+1]));
e[1] -= o_y;
}
else{
e[1] = b[1];
}
}
else{
e[0] = b[0];
e[1] = atof(&(buf[b_p+1]));
e[1] -= o_y;
}
if (fabs(e[0]-b[0]) + fabs(e[1]-b[1]) < 0.0001)
return -1;
if (fabs(e[0]) + fabs(e[1]) < 0.0001)
i = 0;
oldx = b[0];
oldy = b[1];
b_x = b[0]; b_y = b[1]; e_x = e[0]; e_y = e[1];
flag = 0;
i = 0;
while ((nbuf[i] != 'G')&&(nbuf[i] != 0))
i ++;
if (nbuf[i] == 0)
flag = 1;
else{
type = atoi(&(nbuf[i+1]));
if (type == 1){
i = 0;
while ((nbuf[i] != 'X')&&(nbuf[i] != 0))
i ++;
if (nbuf[i] == 0){
n_x = e[0];
}
else{
n_x = atof(&(nbuf[i+1]));
n_x -= o_x;
}
i = 0;
while ((nbuf[i] != 'Y')&&(nbuf[i] != 0))
i ++;
if (nbuf[i] == 0){
n_y = e[1];
}
else{
n_y = atof(&(nbuf[i+1]));
n_y -= o_y;
}
df = ((e_x-b_x)*(e_x-b_x));
df += ((e_y-b_y)*(e_y-b_y));
l1 = sqrt(df);
df = (n_x-e_x)*(n_x-e_x);
df += (n_y-e_y)*(n_y-e_y);
l2 = sqrt(df);
df = (n_x-b_x)*(n_x-b_x);
df += (n_y-b_y)*(n_y-b_y);
l3 = sqrt(df);
if (fabs(l3-l1-l2) < 0.001){
an = PI;
}
else
an = acos((l1*l1+l2*l2-l3*l3)/(2*l1*l2));
if (an < 5*PI/8)
flag = 1;
}
else
flag = 1;
}
if (sub_flag == 1)
add_flag = 1;
else
add_flag = 0;
if (flag == 1)
sub_flag = 1;
else
sub_flag = 0;
if (fabs(e_x)+fabs(e_y) < 0.001)
i = 0;
pulses_per_unit[0] = xsteps;
pulses_per_unit[1] = ysteps;
times[0] = times[1] = 0;
for (i=0;i<2;i++){
all_ps = fabs(e[i] - b[i])*pulses_per_unit[i];
ps[i] = all_ps;
}
ll = 0;
p = 0;
for (i=0;i<2;i++){
if (ll < ps[i]){
ll = ps[i];
p = i;
}
}
i = p;
flag = 0;
df = (e[0]-b[0])*(e[0]-b[0]);
df += (e[1]-b[1])*(e[1]-b[1]);
df = sqrt(df);
r_p = vmax*fabs(e[i]-b[i])/df;
all_ps = fabs(e[i] - b[i])*pulses_per_unit[i];
s = 0;
v = 0;
a = acc[i];
a_times = 0;
while (flag == 0){
if (v+a > r_p)
flag = 1;
else{
v += a;
s += v;
a_buf[a_times] = v;
a_times ++;
}
}
a_s_ps = 0;
if (add_flag == 1)
a_s_ps += s;
if (sub_flag == 1)
a_s_ps += s;
if (all_ps > a_s_ps + 4*r_p){
a_s_ps = 0;
if (add_flag == 1){
for (j=0;j<a_times;j++){
putxy(i,a_buf[j]);
}
a_s_ps += s;
}
if (sub_flag == 1){
a_s_ps += s;
}
run_ps = all_ps - a_s_ps;
if (r_p == 0){
putxy(i,all_ps);
}
else{
num = run_ps / r_p;
left = run_ps % r_p;
aver_add = left / num;
left_add = left % num;
for (j=0;j<num;j++){
if (j < left_add)
putxy(i,r_p + aver_add + 1);
else
putxy(i,r_p + aver_add);
}
if (sub_flag == 1){
for (j=a_times-1;j>=0;j--){
putxy(i,a_buf[j]);
}
}
}
}
else if ((add_flag == 1)||(sub_flag == 1)){
if ((add_flag == 1)&&(sub_flag == 1)){
half_ps = all_ps / 2;
if (half_ps > s){
left = half_ps - s;
num = left / r_p;
left_add = left % r_p;
k = 0;
for (j=0;j<a_times;j++){
if (j == 0){
if (left_add < a_buf[0]){
putxy(i,left_add);
b_buf[k++] = left_add;
}
putxy(i,a_buf[j]);
b_buf[k++] = a_buf[j];
}
else if (j == a_times-1){
putxy(i,a_buf[j]);
b_buf[k++] = a_buf[j];
if (left_add > a_buf[j]){
putxy(i,left_add);
b_buf[k++] = left_add;
}
}
else if ((left_add > a_buf[j-1]) && (left_add < a_buf[j])){
putxy(i,left_add);
b_buf[k++] = left_add;
putxy(i,a_buf[j]);
b_buf[k++] = a_buf[j];
}
else{
putxy(i,a_buf[j]);
b_buf[k++] = a_buf[j];
}
}
for (m=k-1;m>=0;m--){
if (m == 0){
if (all_ps % 2 == 1)
putxy(i,b_buf[m]+1);
else
putxy(i,b_buf[m]);
}
else
putxy(i,b_buf[m]);
}
}
else{
m = 0;
k = 0;
flag = 0;
while (flag == 0){
if (m + a_buf[k] > half_ps){
flag = 1;
}
else{
m += a_buf[k];
k ++;
}
}
left = half_ps - m;
if (k == 0){
putxy(i,all_ps);
}
else{
aver_add = left / k;
left_add = left % k;
m = 0;
for (j=0;j<k;j++){
if (j < left_add){
putxy(i,a_buf[j]+aver_add+1);
b_buf[m++] = a_buf[j]+aver_add+1;
}
else{
putxy(i,a_buf[j]+aver_add);
b_buf[m++] = a_buf[j]+aver_add;
}
}
for (k=m-1;k>=0;k--){
if (k == 0){
if (all_ps % 2 == 1)
putxy(i,b_buf[k]+1);
else
putxy(i,b_buf[k]);
}
else
putxy(i,b_buf[k]);
}
}
}
}
else if ((add_flag == 1)&&(sub_flag == 0)){
if (all_ps > s){
left = all_ps - s;
num = left / r_p;
left = left % r_p;
if (a_times == 0){
putxy(i,left);
for (j=0;j<num;j++)
putxy(i,r_p);
}
else{
aver_add = left / a_times;
left_add = left % a_times;
for (j=0;j<a_times;j++){
if (j < left_add)
putxy(i,a_buf[j]+aver_add+1);
else
putxy(i,a_buf[j]+aver_add);
}
for (j=0;j<num;j++)
putxy(i,r_p);
}
}
else{
m = 0;
k = 0;
flag = 0;
while (flag == 0){
if (m + a_buf[k] > all_ps){
flag = 1;
}
else{
m += a_buf[k];
k ++;
}
}
left = all_ps - m;
if (k == 0){
putxy(i,all_ps);
}
else{
aver_add = left / k;
left_add = left % k;
m = 0;
for (j=0;j<k;j++){
if (j < left_add)
putxy(i,a_buf[j]+aver_add+1);
else
putxy(i,a_buf[j]+aver_add);
}
}
}
}
else if ((add_flag == 0)&&(sub_flag == 1)){
if (all_ps > s){
left = all_ps - s;
num = left / r_p;
left = left % r_p;
if (a_times == 0){
for (j=0;j<num;j++)
putxy(i,r_p);
putxy(i,left);
}
else{
aver_add = left / a_times;
left_add = left % a_times;
for (j=0;j<num;j++)
putxy(i,r_p);
for (j=a_times-1;j>0;j--){
if (j < left_add)
putxy(i,a_buf[j]+aver_add+1);
else
putxy(i,a_buf[j]+aver_add);
}
}
}
else{
m = 0;
k = 0;
flag = 0;
while (flag == 0){
if (m + a_buf[k] > all_ps){
flag = 1;
}
else{
m += a_buf[k];
k ++;
}
}
left = all_ps - m;
if (k == 0){
putxy(i,all_ps);
}
else{
aver_add = left / k;
left_add = left % k;
m = 0;
for (j=k-1;j>=0;j--){
if (j < left_add)
putxy(i,a_buf[j]+aver_add+1);
else
putxy(i,a_buf[j]+aver_add);
}
}
}
}
}
else{
if (r_p == 0){
putxy(i,all_ps);
}
else{
num = all_ps / r_p;
left = all_ps % r_p;
if (num == 0){
putxy(i,all_ps);
}
else{
aver_add = left / num;
left_add = left % num;
for (j=0;j<num;j++){
if (j < left_add)
putxy(i,r_p + aver_add + 1);
else
putxy(i,r_p + aver_add);
}
}
}
}
if (sub_flag == 1){
putxy(i,0);
}
return 1;
}
put1()
{
int i;
strcpy(buf1,"P");
itoa(x,buf2,10);
strcat(buf1,buf2);
itoa(y,buf2,10);
strcat(buf1," ");
strcat(buf1,buf2);
put_a_line(to_file,buf1);
x_ps += x;
y_ps += y;
}
putxy(int i,int num)
{
if (i == 0){
x = num;
if (e[0] < b[0])
x = -x;
y = bb_y+(x_ps+x-bb_x)*(e[1]-b[1])/(e[0]-b[0])-y_ps;
}
if (i == 1){
y = num;
if (e[1] < b[1])
y = -y;
x = bb_x+(y_ps+y-bb_y)*(e[0]-b[0])/(e[1]-b[1])-x_ps;
}
put1();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -