You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
4.4 KiB
175 lines
4.4 KiB
|
4 months ago
|
/*
|
||
|
|
* thicknessDataCollection.c
|
||
|
|
*
|
||
|
|
* Created on: Nov 7, 2025
|
||
|
|
* Author: BingooRobotFJX
|
||
|
|
*/
|
||
|
|
|
||
|
|
#include "thicknessDataCollection.h"
|
||
|
|
|
||
|
|
DataCollection_Continuous_STATE Current_DataCollection_Continuous_STATE;
|
||
|
|
|
||
|
|
DataCollection_Single_STATE Current_DataCollection_Single_STATE;
|
||
|
|
|
||
|
|
uint32_t Film_Thickness_index_Start = 0;
|
||
|
|
int IsSaveIndex = 0;
|
||
|
|
|
||
|
|
int IsThickness_Measureing = 0;
|
||
|
|
int Thickness_DoMeasureing = 0;
|
||
|
|
int Thickness_DoMeasureing_Last = 0;
|
||
|
|
|
||
|
|
int TiltControl_Time_ms = 3000;
|
||
|
|
|
||
|
|
/*添加霍尔接近开关和轻触开关限位 单次测量*/
|
||
|
|
int thicknessDataCollection_Single_Sensor()
|
||
|
|
{
|
||
|
|
switch (Current_DataCollection_Single_STATE)
|
||
|
|
{
|
||
|
|
|
||
|
|
case DataCollection_Single_Pre:
|
||
|
|
//IsThickness_Measureing = 1;
|
||
|
|
//记录数据索引
|
||
|
|
if (IsSaveIndex == 0)
|
||
|
|
{
|
||
|
|
Film_Thickness_index_Start = GV.Film_Thickness_index;
|
||
|
|
IsSaveIndex = 1;
|
||
|
|
}
|
||
|
|
//下压推杆进行漆膜测厚
|
||
|
|
fsm_state_set(¤t_tilt_state, &tilt_down_state);
|
||
|
|
if(GV.IO.DI0 == GPIO_PIN_RESET)//下压直至霍尔开关触发,开启计时
|
||
|
|
{
|
||
|
|
timer_handler_1.start_timer = 1;
|
||
|
|
Current_DataCollection_Single_STATE = DataCollection_Single_Start;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
|
||
|
|
case DataCollection_Single_Start:
|
||
|
|
/*****下降等待时间或者行程开关触发开始检查是否有数据,有就上升推杆,没有就等待超时上升*****/
|
||
|
|
if (CompareTimer(2000, &timer_handler_1))
|
||
|
|
{
|
||
|
|
fsm_state_set(¤t_tilt_state, &tilt_halt_state);
|
||
|
|
Current_DataCollection_Single_STATE = DataCollection_Single_Complete;
|
||
|
|
//测量超时即时
|
||
|
|
timer_handler_1.start_timer = 1;
|
||
|
|
|
||
|
|
}
|
||
|
|
if(GV.IO.DI1 == GPIO_PIN_RESET)//行程开关触发
|
||
|
|
{
|
||
|
|
fsm_state_set(¤t_tilt_state, &tilt_halt_state);
|
||
|
|
Current_DataCollection_Single_STATE = DataCollection_Single_Complete;
|
||
|
|
//测量超时即时
|
||
|
|
timer_handler_1.start_timer = 1;
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
break;
|
||
|
|
|
||
|
|
case DataCollection_Single_Complete:
|
||
|
|
//等待测量结束
|
||
|
|
if (GV.Film_Thickness_index != Film_Thickness_index_Start)
|
||
|
|
{
|
||
|
|
|
||
|
|
//上升推杆
|
||
|
|
fsm_state_set(¤t_tilt_state, &tilt_up_state);
|
||
|
|
//推杆上升定时
|
||
|
|
timer_handler_1.start_timer = 1;
|
||
|
|
Current_DataCollection_Single_STATE = DataCollection_Single_Complete2;
|
||
|
|
|
||
|
|
|
||
|
|
}
|
||
|
|
else //测量超时的情况
|
||
|
|
{
|
||
|
|
if (CompareTimer(2 * TiltControl_Time_ms, &timer_handler_1))
|
||
|
|
{
|
||
|
|
//上升推杆
|
||
|
|
fsm_state_set(¤t_tilt_state, &tilt_up_state);
|
||
|
|
|
||
|
|
//推杆上升定时
|
||
|
|
timer_handler_1.start_timer = 1;
|
||
|
|
Current_DataCollection_Single_STATE = DataCollection_Single_Complete2;
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
break;
|
||
|
|
case DataCollection_Single_Complete2:
|
||
|
|
if (CompareTimer(TiltControl_Time_ms, &timer_handler_1))
|
||
|
|
{
|
||
|
|
//标志位复位
|
||
|
|
IsSaveIndex = 0;
|
||
|
|
fsm_state_set(¤t_tilt_state, &tilt_halt_state);
|
||
|
|
return 0; /*为什么上升就变为0,而IsSaveIndex是上升完毕变为0,二者代码一致*/
|
||
|
|
}
|
||
|
|
|
||
|
|
break;
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
return 1;
|
||
|
|
}
|
||
|
|
|
||
|
|
void thicknessDataCollection_Single_Reset()
|
||
|
|
{
|
||
|
|
IsSaveIndex = 0;
|
||
|
|
Current_DataCollection_Single_STATE = DataCollection_Single_Pre;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
/*
|
||
|
|
* 进行多次连续测量,每隔固定距离测量一次
|
||
|
|
*/
|
||
|
|
//int waitTime=0;
|
||
|
|
|
||
|
|
void thicknessDataCollection_Continuous(int IsForwardMode)
|
||
|
|
{
|
||
|
|
static int WaitTime=0;
|
||
|
|
// waitTime=WaitTime;
|
||
|
|
switch (Current_DataCollection_Continuous_STATE)
|
||
|
|
{
|
||
|
|
|
||
|
|
|
||
|
|
case DataCollection_Continuous_StartMessure:
|
||
|
|
if(0==thicknessDataCollection_Single_Sensor()) //单次测量完毕
|
||
|
|
{
|
||
|
|
thicknessDataCollection_Single_Reset();//复位单次测量
|
||
|
|
Current_DataCollection_Continuous_STATE =DataCollection_Continuous_StartMove;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case DataCollection_Continuous_StartMove:
|
||
|
|
if (1 == IsForwardMode)
|
||
|
|
{
|
||
|
|
RobotForwardFunc();
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
RobotBackwardFunc();
|
||
|
|
}
|
||
|
|
WaitTime = GV.PV.MoveDistanceMM / (GV.PV.RobotMoveSpeed/60.0);/*m/min--mm/ms 得到的WaitTime为ms*/
|
||
|
|
timer_handler_1.start_timer = 1;
|
||
|
|
Current_DataCollection_Continuous_STATE = DataCollection_Continuous_WaitForDistance;
|
||
|
|
break;
|
||
|
|
case DataCollection_Continuous_WaitForDistance:
|
||
|
|
if ( CompareTimer(WaitTime, &timer_handler_1) )
|
||
|
|
{
|
||
|
|
fsm_state_set(¤t_robot_move_state, &robot_halt_state);
|
||
|
|
Current_DataCollection_Continuous_STATE = DataCollection_Continuous_Complete;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
case DataCollection_Continuous_Complete:
|
||
|
|
|
||
|
|
Current_DataCollection_Continuous_STATE=DataCollection_Continuous_StartMessure;
|
||
|
|
break;
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
void thicknessDataCollection_Continuous_Reset()
|
||
|
|
{
|
||
|
|
Current_DataCollection_Continuous_STATE = DataCollection_Continuous_StartMessure;
|
||
|
|
|
||
|
|
}
|
||
|
|
|