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.
 
 
 
 
 
 

174 lines
4.4 KiB

/*
* 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(&current_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(&current_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(&current_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(&current_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(&current_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(&current_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(&current_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;
}