#ifndef MODULES_THREAD_THREAD_EX_H_ #define MODULES_THREAD_THREAD_EX_H_ #include "PMR/Printing/JobSpool.pb-c.h" //typedef enum //{ #define WINDER_DANCER HARDWARE_DANCER_TYPE__LeftDancer #define POOLER_DANCER HARDWARE_DANCER_TYPE__MiddleDancer #define FEEDER_DANCER HARDWARE_DANCER_TYPE__RightDancer #define WINDER_2_DANCER HARDWARE_DANCER_TYPE__FourthDancer #define WINDER_3_DANCER HARDWARE_DANCER_TYPE__ThirdDancer #define WINDER_4_DANCER HARDWARE_DANCER_TYPE__RightDancer #define NUM_OF_DANCERS NUM_OF_ROTENC typedef struct { uint32_t startoffsetpulses; uint32_t spoolbackingrate; uint32_t segmentoffsetpulses;// the spool winding initial length in mm uint32_t milimetersperrotation; uint32_t SpoolBottomBackingRate;// the angle of the bottom of the spool double NumberOfRotationPerPassage; // how many rotations per spool passage double diameter; }InternalWinderConfigStruc; typedef enum threadMotorsEnum { FEEDER_MOTOR, DRYER_MOTOR, POOLER_MOTOR, WINDER_MOTOR, #ifdef FOUR_WINDERS WINDER_2_MOTOR, WINDER_3_MOTOR, WINDER_4_MOTOR, #endif SCREW_MOTOR, MAX_THREAD_MOTORS_NUM }threadMotorsEnum; extern double TotalProcessedLength; extern double PoolerTotalProcessedLength; extern int SecondFeederCorrection; extern bool SkipOpenLids,IgnoreConeMissing; void ThreadSetBreakSensorLimit(int limit); uint32_t InternalWindingConfigMessage(JobSpool* request); uint32_t ThreadConfigBreakSensor(void *request); double ThreadGetMotorSpeed(threadMotorsEnum MotorId); double ThreadGetMotorCalculatedError(int DancerId); uint32_t ThreadPrepareState(void *JobDetails); uint32_t ThreadPreSegmentState(void *SegmentDetails, uint32_t SegmentId); uint32_t ThreadSegmentState(void *SegmentDetails, int SegmentId); uint32_t ThreadDistanceToSpoolState(void); uint32_t ThreadEndState(); bool Set_Thread_Rockers_Bypass (int value); uint32_t StoreDancerConfigMessage(int DancerId); uint32_t LoadDancerConfigMessage(void); //uint32_t MotorPidRequestMessage(HardwarePidControl* request); extern float NumberOfRotationPerPassage; //debug for rotation per passage trials extern InternalWinderConfigStruc InternalWinderCfg; uint32_t Winder_Init(void); uint32_t Winder_Check_Cone(void); uint32_t Winder_Prepare(void *JobDetails); uint32_t Winder_Presegment(void *JobDetails, uint32_t SegmentId); uint32_t WinderDistanceToSpoolState(void ); uint32_t Winder_End(void); typedef enum { /*00*/ THREAD_LOAD_INIT, /*01*/ THREAD_LOAD_REDUCE_HEAT, //HEATERS OFF, DRYER BLOWER OFF, BLOWER LOW, /*02*/ THREAD_LOAD_LIFT_ROCKERS, //MACHINE IS READY. SEND MESSAGE, START TIMER TO CLOSE LIDS, WAIT FOR OPERATOR RESPONSE /*03*/ THREAD_LOAD_SET_LOAD_ARM_TO_START_POSITION,//USE NOTATION HOW MANY ROTATIONS IN THE DRYER, OR CHECK AGAINST STOPPER. MOVE SLOWLY /*04*/ THREAD_LOAD_OPEN_COVERS, //OPEN DYEING HEAD COVER AND DRYER LID /*05*/ THREAD_LOAD_LIFT_DANCERS, /*06*/ THREAD_LOAD_INITIAL_TENSION,//CHECK SPOOL PRESENCERUN WINDER UNTIL BREAK SENSOR IS IDENTIFIEING MOVEMENT FOR A SECOND /*07*/ THREAD_LOAD_CLOSE_ROCKERS, /*08*/ THREAD_LOAD_CLOSE_DANCERS, //SEND DANCER MOTORS TO PRESET LOCATION, CHECK THAT THE DANCERS ARE ON THE THREAD /*09*/ THREAD_LOAD_CLOSE_LIDS, /*10*/ THREAD_LOAD_JOG_FEEDER_TO_MIDDLE_POINT,//JOG THE FEEDER MOTOR UNTIL THE FEEDER DANCER IS AT MIDDLE POSITION /*11*/ THREAD_LOAD_DRYER_LOADING, //START FEEDER PID, ROTATE LOADING ARM COUNTER THREAD DIRECTION X CIRCLES ACCORDING TO RML. FEEDER SPEED IS 40 //KEEP NOTATION HOW MANY ROTATIONS IN THE DRYER /*12*/ THREAD_LOAD_RESUME_HEATING, /*13*/ THREAD_LOAD_JOG_THREAD, //JOG THREAD SHORTLY TO MAKE SURE SPOOL IS RUNNING. REPORT END OF LOADING /*14*/ THREAD_LOAD_END }THREAD_LOAD_STAGES_ENUM; uint32_t ThreadLoadButton(THREAD_LOAD_STAGES_ENUM ReadValue); bool ThreadLoadingActive(void); void ThreadLoadPollRequest(MessageContainer* requestContainer); void ThreadLoadRequest(MessageContainer* requestContainer); uint32_t StartThreadLoadingFunc(MessageContainer* requestContainer); uint32_t ContinueThreadLoadingFunc(MessageContainer* requestContainer); uint32_t StopThreadLoadingFunc(MessageContainer* requestContainer); uint32_t TryThreadLoadingFunc(MessageContainer* requestContainer); uint32_t AttemptThreadJoggingFunc(MessageContainer* requestContainer); void ThreadCheckArcHeadCovers(void); uint32_t Thread_Load_End(void); uint32_t ThreadLoadingRestartReport(void); //sending after a failure in the finalizing stage #endif