📄 mainloop.c
字号:
if (work_status != 2){
if ((XBYTE[xytype(cur_order)] == 0)&&(cur_order == 0)){
work_status = 2;
}
else{
work_status = 1;
open_gao_pin();
}
}
}
}
else if (GenEpBuf[3] == 2){
if (work_status != 2){
work_status = 0;
}
close_gao_pin();
}
else if (GenEpBuf[3] == 3){
gaopzt = GAOPIN_KAI;
open_gao_pin();
}
else if (GenEpBuf[3] == 4){
gaopzt = GAOPIN_GUAN;
close_gao_pin();
}
else if (GenEpBuf[3] == 5){
dianjzt = MOT_RUN;
open_mot();
}
else if (GenEpBuf[3] == 6){
dianjzt = MOT_CLOSE;
close_mot();
}
else if (GenEpBuf[3] == 7){
read_jing_flag = 1;
}
else if (GenEpBuf[3] == 8){
}
else if (GenEpBuf[3] == 9){
read_jing_flag = 0;
diand_flag = 0;
diand_axis = 0;
diandbz = 0;
read_prog_flag = 0;
read_max_loop_flag = 0;
send_req_flag = 0;
read_nc_num_flag = 0;
io_wrong_flag = 0;
cur_order1 = 0;
e_order = cur_order = 0;
work_status = 0;
cur_off = 0;
XBYTE[xytype(0)] = 0;
XBYTE[xytype(1)] = 0;
XBYTE[xytype(2)] = 0;
XBYTE[xytype(3)] = 0;
XBYTE[xytype(4)] = 0;
if (dianjzt == MOT_RUN){
XBYTE[xytype(0)] = 1;
(long)(*((long *)(&(XBYTE[lpdata(cur_order,2)])))) = cur_x;
(long)(*((long *)(&(XBYTE[lpdata(cur_order,3)])))) = cur_y;
(long)(*((long *)(&(XBYTE[lpdata(cur_order,4)])))) = 0;
(long)(*((long *)(&(XBYTE[lpdata(cur_order,5)])))) = 0;
work_status = 1;
}
else{
cur_x = cur_y = cur_u = cur_v = cur_seg = cur_off = 0;
cur_x_step_order = cur_y_step_order = cur_u_step_order = cur_v_step_order = 0;
}
stop_flag = 0;
stop_byte = 0;
}
else if (GenEpBuf[3] == 10){
io_wrong_flag = 0;
read_prog_flag = 1;
mask_cc = 0;
}
else if (GenEpBuf[3] == 11){
read_max_loop_flag = 1;
}
else if (GenEpBuf[3] == 12){
if (gaopzt == GAOPIN_KAI){
if (dianjzt == MOT_RUN)
cc = 0x86;
else
cc = 0x87;
}
else{
if (dianjzt == MOT_RUN)
cc = 0x88;
else
cc = 0x89;
}
RAMCS = 1;
MCU_D12CS = 0;
D12_WriteEndpoint(3, 1, &cc);
}
else if (GenEpBuf[3] == 13){
read_nc_num_flag = 1;
}
else if (GenEpBuf[3] == 14){
read_jing_flag = 0;
read_prog_flag = 0;
read_max_loop_flag = 0;
send_req_flag = 0;
read_nc_num_flag = 0;
io_wrong_flag = 0;
cur_order1 = 0;
e_order = cur_order = 0;
work_status = 0;
cur_off = 0;
XBYTE[xytype(0)] = 0;
XBYTE[xytype(1)] = 0;
XBYTE[xytype(2)] = 0;
XBYTE[xytype(3)] = 0;
XBYTE[xytype(4)] = 0;
}
else if (GenEpBuf[3] == 20){
RAMCS = 1;
MCU_D12CS = 0;
MCU_D12CS = 0x1;
CKCON = 0x00;
D12_DATA = 0xff02; //定义数据地址
D12_COMMAND = 0xff03; //定义命令地址
MCU_D12CS = 0x0;
// D12SUSPD = 0x0;
IT0 = 0;//初始化中断
EX0 = 1;
PX0 = 0;
EA = 1;
MCU_D12CS = 0x1;
MCU_D12CS = 0x0;
bEPPflags.value = 0;
reconnect_USB();//联接USB总线
}
else if (GenEpBuf[3] == 30){
diand_flag = 1;
diand_axis = 1;
}
else if (GenEpBuf[3] == 31){
diand_flag = 1;
diand_axis = 2;
}
else if (GenEpBuf[3] == 32){
diand_flag = 1;
diand_axis = 3;
}
else if (GenEpBuf[3] == 33){
diand_flag = 1;
diand_axis = 4;
}
else if (GenEpBuf[3] == 40){//回退
anti_work_flag = 1;
old_cur_jing = cur_jing;
cur_jing = 200;
if (cur_off == 0){
cur_order --;
if (cur_order == -1){
cur_order1 = 0;
cur_order = 0;
cc = 0x8e;
RAMCS = 1;
MCU_D12CS = 0;
D12_WriteEndpoint(3, 1, &cc);
}
else{
cur_off = (long)(*((long *)(&(XBYTE[counterlen(cur_order)]))));
work_status = 1;
}
}
else
work_status = 1;
}
else if (GenEpBuf[3] == 60){//五相十拍
xiangxlx = 0;
}
else if (GenEpBuf[3] == 61){//三相六拍
xiangxlx = 1;
}
else if (GenEpBuf[3] == 62){//方向电平
xiangxlx = 2;
}
else if (GenEpBuf[3] == 70){//不自动开高频继续加工
work_status = 1;
}
else if (GenEpBuf[3] == 80){//自动开高频继续加工
if (io_wrong_flag == 0){
work_status = 1;
open_gao_pin();
}
}
}
}
void send_a_step(void)
{
char bz;
MCU_D12CS = 1;
RAMCS = 0;
bx = (long)(*((long *)(&(XBYTE[lpdata(cur_order,2)]))));
by = (long)(*((long *)(&(XBYTE[lpdata(cur_order,3)]))));
ex = (long)(*((long *)(&(XBYTE[lpdata(cur_order,4)]))));
ey = (long)(*((long *)(&(XBYTE[lpdata(cur_order,5)]))));
l1 = ex-bx;
l2 = ey-by;
if (l1 < 0)
l1 = -l1;
if (l2 < 0)
l2 = -l2;
xyt = XBYTE[xytype(cur_order)];
uvt = XBYTE[uvtype(cur_order)];
cur_work_seg = (long)(*((long *)(&(XBYTE[ncorder(cur_order)]))));
if (xyt == 1){ //直线
if (anti_work_flag == 0)
cur_off ++;
else
cur_off --;
if (l1 > l2){ //X计数
if (ex > bx){ //ex > bx
if (anti_work_flag == 0){
cur_x ++;
x_z();
}
else{
cur_x --;
x_z();
}
}
else{ //ex < bx
if (anti_work_flag == 0){
cur_x --;
x_f();
}
else{
cur_x ++;
x_z();
}
}
if (anti_work_flag == 0){
if (cur_x == ex) //末点
bz = 1;
else
bz = 0;
}
else{
if (cur_x == bx) //末点
bz = 1;
else
bz = 0;
}
if (bz == 1){
if (anti_work_flag == 0){
if (ey > cur_y)
y_z();
else if (ey < cur_y)
y_f();
cur_y = ey;
XBYTE[xytype(cur_order)] = 0;
cur_order1 = (cur_order+1)%MAX_ORDER;
cur_order = (cur_order+1)%MAX_ORDER;
cur_off = 0;
if (diandbz == 1){
diandbz = 0;
work_status = 0;
cc = 0x8c;
RAMCS = 1;
MCU_D12CS = 0;
D12_WriteEndpoint(3, 1, &cc);
}
else{
if (XBYTE[xytype(cur_order)] == 0){
work_status = 2;
e_order = 0;
cur_order1 = 0;
cur_order = 0;
send_req_order(0);
close_gao_pin();
}
}
}
else{
if (by > cur_y)
y_z();
else if (by < cur_y);
y_f();
cur_y = by;
cur_off = 0;
anti_work_flag = 0;
cur_jing = old_cur_jing;
}
}
else{ //中间点
l3 = by + 1.0*(ey-by)*(cur_x-bx)/(ex-bx);
if (l3 != cur_y){ //Y也要走
if (ey > by)
y_z();
else
y_f();
cur_y = l3;
}
}
}
else{//Y计数
if (ey > by){ //ey > by
if (anti_work_flag == 0){
cur_y ++;
y_z();
}
else{
cur_y --;
y_f();
}
}
else{ // ey < by
if (anti_work_flag == 0){
cur_y --;
y_f();
}
else{
cur_y ++;
y_z();
}
}
if (anti_work_flag == 0){
if (cur_y == ey) //末点
bz = 1;
else
bz = 0;
}
else{
if (cur_y == by) //末点
bz = 1;
else
bz = 0;
}
if (bz == 1){
if (anti_work_flag == 0){
if (ex > cur_x)
x_z();
else if (ex < cur_x)
x_f();
cur_x = ex;
XBYTE[xytype(cur_order)] = 0;
cur_order1 = (cur_order+1)%MAX_ORDER;
cur_order = (cur_order+1)%MAX_ORDER;
cur_off = 0;
if (diandbz == 1){
diandbz = 0;
work_status = 0;
cc = 0x8c;
RAMCS = 1;
MCU_D12CS = 0;
D12_WriteEndpoint(3, 1, &cc);
}
else{
if (XBYTE[xytype(cur_order)] == 0){
work_status = 2;
e_order = 0;
cur_order1 = 0;
cur_order = 0;
send_req_order(0);
close_gao_pin();
}
}
}
else{
if (bx > cur_x)
x_z();
else if (bx < cur_x)
x_f();
cur_x = bx;
anti_work_flag = 0;
cur_jing = old_cur_jing;
cur_off = 0;
}
}
else{//中间点
l3 = bx + 1.0*(ex-bx)*(cur_y-by)/(ey-by);
if (l3 != cur_x){//X也要走
if (ex > bx)
x_z();
else
x_f();
cur_x = l3;
}
}
}
}
else if ((xyt == 2)||(xyt == 3)){
bx = (long)(*((long *)(&(XBYTE[lpdata(cur_order,0)]))));
by = (long)(*((long *)(&(XBYTE[lpdata(cur_order,1)]))));
r = (ex*1.0-bx)*(ex*1.0-bx)+(ey*1.0-by)*(ey*1.0-by);
if ((cur_x > bx)&&(cur_y >= by)){
if (cur_x-bx > cur_y-by)
cc = 1;
else
cc = 2;
}
else if ((cur_x <= bx)&&(cur_y > by)){
if (bx-cur_x > cur_y-by)
cc = 4;
else
cc = 3;
}
else if ((cur_x < bx)&&(cur_y <= by)){
if (bx-cur_x > by-cur_y)
cc = 5;
else
cc = 6;
}
else{
if (cur_x-bx > by-cur_y)
cc = 8;
else
cc = 7;
}
if (xyt == 2){//ni yuan
if ((cc == 2)||(cc == 3)){
if (XBYTE[xy(cur_order)] == 0){
if (anti_work_flag == 0)
cur_off ++;
else
cur_off --;
}
if (anti_work_flag == 0){
cur_x --;
x_f();
}
else{
cur_x ++;
x_z();
}
}
else if ((cc == 6)||(cc == 7)){
if (XBYTE[xy(cur_order)] == 0){
if (anti_work_flag == 0)
cur_off ++;
else
cur_off --;
}
if (anti_work_flag == 0){
cur_x ++;
x_z();
}
else{
cur_x --;
x_f();
}
}
else if ((cc == 4)||(cc == 5)){
if (XBYTE[xy(cur_order)] == 1){
if (anti_work_flag == 0)
cur_off ++;
else
cur_off --;
}
if (anti_work_flag == 0){
cur_y --;
y_f();
}
else{
cur_y ++;
y_z();
}
}
else{
if (XBYTE[xy(cur_order)] == 1){
if (anti_work_flag == 0)
cur_off ++;
else
cur_off --;
}
if (anti_work_flag == 0){
cur_y ++;
y_z();
}
else{
cur_y --;
y_f();
}
}
}
else{//shun yuan
if ((cc == 2)||(cc == 3)){
if (XBYTE[xy(cur_order)] == 0){
if (anti_work_flag == 0)
cur_off ++;
else
cur_off --;
}
if (anti_work_flag == 0){
cur_x ++;
x_z();
}
else{
cur_x --;
x_f();
}
}
else if ((cc == 6)||(cc == 7)){
if (XBYTE[xy(cur_order)] == 0){
if (anti_work_flag == 0)
cur_off ++;
else
cur_off --;
}
if (anti_work_flag == 0){
cur_x --;
x_f();
}
else{
cur_x ++;
x_z();
}
}
else if ((cc == 4)||(cc == 5)){
if (XBYTE[xy(cur_order)] == 1){
if (anti_work_flag == 0)
cur_off ++;
else
cur_off --;
}
if (anti_work_flag == 0){
cur_y ++;
y_z();
}
else{
cur_y --;
y_f();
}
}
else{
if (XBYTE[xy(cur_order)] == 1){
if (anti_work_flag == 0)
cur_off ++;
else
cur_off --;
}
if (anti_work_flag == 0){
cur_y --;
y_f();
}
else{
cur_y ++;
y_z();
}
}
}
f1 = fabs((cur_x*1.0-bx)*(cur_x*1.0-bx)+(cur_y*1.0-by)*(cur_y*1.0-by)-r);
if (xyt == 2){// ni yuan
if ((cc == 1)||(cc == 4)){
if (f1 > fabs((cur_x*1.0-1-bx)*(cur_x*1.0-1-bx)+(cur_y*1.0-by)*(cur_y*1.0-by)-r)){
if (XBYTE[xy(cur_order)] == 0){
if (anti_work_flag == 0)
cur_off ++;
else
cur_off --;
}
if (anti_work_flag == 0){
cur_x --;
x_f();
}
else{
cur_x ++;
x_z();
}
}
}
if ((cc == 2)||(cc == 7)){
if (f1 > fabs((cur_x*1.0-bx)*(cur_x*1.0-bx)+(cur_y*1.0+1-by)*(cur_y*1.0+1-by)-r)){
if (XBYTE[xy(cur_order)] == 1){
if (anti_work_flag == 0)
cur_off ++;
else
cur_off --;
}
if (anti_work_flag == 0){
cur_y ++;
y_z();
}
else{
cur_y --;
y_f();
}
}
}
if ((cc == 3)||(cc == 6)){
if (f1 > fabs((cur_x*1.0-bx)*(cur_x*1.0-bx)+(cur_y*1.0-1-by)*(cur_y*1.0-1-by)-r)){
if (XBYTE[xy(cur_order)] == 1){
if (anti_work_flag == 0)
cur_off ++;
else
cur_off --;
}
if (anti_work_flag == 0){
cur_y --;
y_f();
}
else{
cur_y ++;
y_z();
}
}
}
if ((cc == 5)||(cc == 8)){
if (f1 > fabs((cur_x*1.0+1-bx)*(cur_x*1.0+1-bx)+(cur_y*1.0-by)*(cur_y*1.0-by)-r)){
if (XBYTE[xy(cur_order)] == 0){
if (anti_work_flag == 0)
cur_off ++;
else
cur_off --;
}
if (anti_work_flag == 0){
cur_x ++;
x_z();
}
else{
cur_x --;
x_f();
}
}
}
}
else if (xyt == 3){// shun yuan
if ((cc == 1)||(cc == 4)){
if (f1 > fabs((cur_x*1.0+1-bx)*(cur_x*1.0+1-bx)+(cur_y*1.0-by)*(cur_y*1.0-by)-r)){
if (XBYTE[xy(cur_order)] == 0){
if (anti_work_flag == 0)
cur_off ++;
else
cur_off --;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -