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