📄 motor.c.bak
字号:
x=-a;
x*=2;
if(x >= 0)
{
u_Y_Step = x;
STMT_Order.b.Y_Direct = 1;
}
else
{
u_Y_Step = -x;
STMT_Order.b.Y_Direct = 0;
}
u_X_Step_Timer = 49;
u_Y_Step_Timer = 49;
}
if(u_Direction == 1)
{
a = Needle[u_Buffer_Index].X_Reference;
n_X_Reference += a;
x=a;
x*=2;
if(x>=0)
{
u_X_Step = x;
STMT_Order.b.X_Direct = 1;
}
else
{
u_X_Step = -x;
STMT_Order.b.X_Direct = 0;
}
a = Needle[u_Buffer_Index].Y_Reference;
n_Y_Reference += a;
x=a;
x*=2;
if(x>=0)
{
u_Y_Step = x;
STMT_Order.b.Y_Direct = 1;
}
else
{
u_Y_Step = -x;
STMT_Order.b.Y_Direct = 0;
}
u_X_Step_Timer = 49;
u_Y_Step_Timer = 49;
}
if(u_Mode > 0)
{
STMT_Order.b.X_Motor = STMT_AUTO;
STMT_Order.b.Y_Motor = STMT_AUTO;
}
else
{
STMT_Order.b.X_Motor = STMT_MANUAL;
STMT_Order.b.Y_Motor = STMT_MANUAL;
}
}
#define RUN_EMBROIDER_STOP 0 //停止
#define RUN_EMBROIDER 1 //绣花
#define RUN_EMBROIDER_BACK 3 //回退
#define RUN_CUT_STRING 4 //剪线
#define RUN_NULL_GO 5 //空走
#define RUN_CHANGE_COLOR 6 //换色
//====================================================
//Sub-routine Name:void Motor_Run_Set(void)
//Description:
//
//Input:
//Output:
//Modified:
//===================================================
void Motor_Run_Set(void)
{
static unsigned short Status_Flag = 0;//bit0:电机开始运行 bit1:开始针设定 bit2:开始针执行完成 bit3:走一针标示
static unsigned short Null_Over_Flag = 0;
static unsigned short u_Delay_Counts = 0;
switch(State.Run)
{
case RUN_EMBROIDER_STOP: //绣花停止
Z_Order.b.EMB_State = NULL;
Z_Order.b.Run = Z_ORDER_STOP;
Status_Flag &= ~0x02; //清开始针执行完成标示
Status_Flag &= ~0x08; //清走一针标示
Null_Over_Flag = 0;
u_Delay_Counts = 0;
u_Circle_Count = 0;
if(State.Handle == HANDLE_R_HLD || State.Handle == HANDLE_R)
{
State.Run = RUN_EMBROIDER; // 绣花
Status_Flag |= 0x04; //开始针设定
State.Handle = HANDLE_NULL;
}
if(State.Handle == HANDLE_L_HLD || State.Handle == HANDLE_L)
{
State.Run = RUN_EMBROIDER_BACK; //回退
State.Handle = HANDLE_NULL;
}
if(State.Handle == HANDLE_ENTER)
{
State.Run = RUN_NULL_GO; //空走
State.Handle = HANDLE_NULL;
}
if(State.Handle == HANDLE_BACK)
{
State.Run = RUN_EMBROIDER; //绣一针
u_Needle_Over = 0;
State.Handle = HANDLE_NULL;
Status_Flag |= 0x04;
Status_Flag |= 0x08; //走一针
}
if(State.Handle == HANDLE_NULL_ONE_STEP)
{
State.Run = RUN_NULL_GO; //空走一针
State.Handle = HANDLE_NULL;
Status_Flag |= 0x08; //走一针
}
if(State.Handle == HANDLE_BACK_ONE_STEP)
{
State.Run = RUN_EMBROIDER_BACK; //空退一针
State.Handle = HANDLE_NULL;
Status_Flag |= 0x08; //走一针
}
if(Cut_Request_Flag == 1)
{
Z_Order.b.Run = Z_ORDER_RUN; //Z轴电机启动
Cut_Request_Flag = 0;
State.Run = RUN_CUT_STRING; //剪线
n_Speed_Desired = 800;
}
if(Change_Request_Flag == 1)
{
Change_Request_Flag = 0;
State.Run = RUN_CHANGE_COLOR; //换色
}
break;
case RUN_EMBROIDER: //绣花状态
if(State.Handle == HANDLE_L_HLD || State.Handle == HANDLE_L)
{
Z_Order.b.Run = Z_ORDER_BRAKE; //停止绣花,刹车
State.Handle = HANDLE_NULL;
}
if((Z_FBK.b.Run == Z_ORDER_STOP) && (Status_Flag & 0x02))
{
State.Run = RUN_EMBROIDER_STOP;
if(Needle[u_Buffer_Index].Work_State == 2) //绣花完成退出
{
}
break;
}
if((STMT_FBK.b.X == 0)&&(STMT_FBK.b.Y == 0))
{
if((Needle[u_Buffer_Index].Work_State == 1) ||(Status_Flag & 0x04))//开始
{
Needle_Set(); //抬针
Motor_Pattern_To_Order(0,1);
STMT_Order.b.Flag = 1;
Status_Flag |= 0x01;
Status_Flag &=~ 0x04;
Z_Order.b.EMB_State = NULL; //抬针,到第一针位置,Z电机停止
u_Needle_Over = 0;
++u_Buffer_Index;
Motor_File_Read();
break;
}
if(Status_Flag & 0x01)
{
Needle_Clear(); //落针
Z_Order.b.EMB_State = EMBROIDER; //落针,开始绣第一针
Z_Order.b.Run = Z_ORDER_RUN; //Z轴电机启动
Status_Flag &= ~0x01; //开始针设定完成
break;
}
Status_Flag |= 0x02; //开始针执行完成
if(u_Needle_Over == 0)break;
if(Status_Flag & 0x08)
{
Z_Order.b.Run = Z_ORDER_BRAKE;
}
if(u_Needle_Over > 1)
{
u_Error_Flag = 1;
Z_Order.b.Run = Z_ORDER_BRAKE;
}
u_Needle_Over = 0;
if(Needle[u_Buffer_Index].Work_State == 2) //绣花完成退出
u_Over_Needle_Index = Needle[u_Buffer_Index].Sequence;
else if (u_Buffer_Index > 0)
u_Over_Needle_Index = Needle[u_Buffer_Index - 1].Sequence;
else
u_Over_Needle_Index = 0;
if(Z_Order.b.Run == Z_ORDER_BRAKE) //刹车状态退出
{
Needle_Set(); //抬针
break;
}
if(STMT_Order.b.Flag > 0)
u_Error_Flag = 1;
Motor_Pattern_To_Order(1,1);
STMT_Order.b.Flag = 1;
if(Needle[u_Buffer_Index].Embroider_Mode == 2)
{
Needle_Set(); //跳针时抬针
}
else
{
Needle_Clear(); //落针
}
if(Needle[u_Buffer_Index].Work_State == 2) //绣花完成退出,停针
{
Z_Order.b.Run = Z_ORDER_BRAKE;
break;
}
if(Needle[u_Buffer_Index + 1].Embroider_Mode == CHANGE_COLOR)
{
Z_Order.b.Run = Z_ORDER_BRAKE; //换色停针
}
Cal_Speed_Limit(); //计算速度限幅
++u_Buffer_Index;
Motor_File_Read();
if((u_File_Point/2 - u_Jump_num)!= Needle[15].Sequence)
{
u_Error_Flag = 3; //读文件错误停针
Z_Order.b.Run = Z_ORDER_BRAKE;
}
}
break;
case RUN_EMBROIDER_BACK: //绣花回退
Z_Order.b.EMB_State = NULL;
Z_Order.b.Run = Z_ORDER_STOP;
if((STMT_FBK.b.X == 0)&&(STMT_FBK.b.Y == 0))
{
if(State.Handle == HANDLE_ENTER)
{
State.Run = RUN_EMBROIDER_STOP; //回退
State.Handle = HANDLE_NULL;
break;
}
if(Null_Over_Flag)
{
State.Run = RUN_EMBROIDER_STOP; //回退
State.Handle = HANDLE_NULL;
break;
}
if(u_Delay_Counts > 0)
{
--u_Delay_Counts;
break;
}
else
{
u_Delay_Counts = 500;
}
if(u_Buffer_Index > 0)
{
--u_Buffer_Index;
Motor_Pattern_To_Order(0,0);
STMT_Order.b.Flag = 1;
Motor_File_Read();
if(u_Buffer_Index > 0)
u_Over_Needle_Index = Needle[u_Buffer_Index-1].Sequence;
else
u_Over_Needle_Index = 0;
}
else
{
State.Run = RUN_EMBROIDER_STOP; //回退
u_Over_Needle_Index = Needle[u_Buffer_Index].Sequence;
}
if(Status_Flag & 0x08)
{
Null_Over_Flag = 1;
}
}
break;
case RUN_NULL_GO: //空走
if((STMT_FBK.b.X == 0)&&(STMT_FBK.b.Y == 0))
{
if(State.Handle == HANDLE_ENTER)
{
State.Handle = HANDLE_NULL;
State.Run = RUN_EMBROIDER_STOP;
break;
}
if((u_File_Point/2 - u_Jump_num)!= Needle[15].Sequence)
{
u_Error_Flag = 3;
State.Run = RUN_EMBROIDER_STOP;
break;
}
if(u_Delay_Counts > 0)
{
--u_Delay_Counts;
break;
}
else
{
u_Delay_Counts = 500;
}
if(Needle[u_Buffer_Index].Work_State == 2) //绣花完成退出
u_Over_Needle_Index = Needle[u_Buffer_Index].Sequence;
else if(u_Buffer_Index > 0)
u_Over_Needle_Index = Needle[u_Buffer_Index - 1].Sequence;
else
u_Over_Needle_Index = 0;
if(Null_Over_Flag == 1) //空走完成退出
{
State.Run = RUN_EMBROIDER_STOP;
break;
}
Motor_Pattern_To_Order(0,1);
STMT_Order.b.Flag = 1;
++u_Buffer_Index;
Motor_File_Read();
if(Needle[u_Buffer_Index].Work_State == 2) //绣花完成退出
{
Null_Over_Flag = 1;
}
if(Status_Flag & 0x08)
{
Null_Over_Flag = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -