aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h
blob: 4ce48a639ec46a4eae58898cc4332ed8d34875c1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#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
//} DANCER_ENUM;
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

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