aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules/Thread
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2020-01-02 14:52:39 +0200
committerShlomo Hecht <shlomo@twine-s.com>2020-01-02 14:52:39 +0200
commit0e9b372b364a9d8307dd194ac06e7d9a22c58576 (patch)
tree8ca56d1763f48668dfb72bb2207cec2ccb5dc4f3 /Software/Embedded_SW/Embedded/Modules/Thread
parent253ce3357f1b83ed25251e5779fe41b60b81bcf3 (diff)
downloadTango-0e9b372b364a9d8307dd194ac06e7d9a22c58576.tar.gz
Tango-0e9b372b364a9d8307dd194ac06e7d9a22c58576.zip
some fixes from Beta +
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules/Thread')
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c147
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c12
2 files changed, 123 insertions, 36 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
index fb5de9011..40000b8bb 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
@@ -74,6 +74,8 @@
int32_t keepkvalrun,keepkvalhold;
uint8_t CallbackCounter = 0;
uint8_t TimeoutsCounter = 0;
+ bool SecondTry = false,TryAgain = false;
+ int MessageState = 0; //0 - none, 1 = start, 2 = continue
uint32_t UnloadingStart = 0;
uint8_t NumberOfDrierLoaderCycles = 0;
@@ -112,7 +114,8 @@
else
return false;
}
- uint32_t Thread_Load_Init(void)
+ bool InitCalled = false;
+ uint32_t Thread_Load_Init(THREAD_LOAD_STAGES_ENUM Stage)
{
//void* buffer = NULL;
//uint32_t Bytes = 0;
@@ -128,7 +131,8 @@
//EEPROM_STORAGE_DRYER_CYCLES
MCU_E2PromRead(EEPROM_STORAGE_DRYER_CYCLES,&LoadArmInfo.LoadArmRounds);
- Read_Dryer_ENC_Position();
+
+ Report("Read_Dryer_ENC_Position()",__FILE__,__LINE__,0,RpWarning,Read_Dryer_ENC_Position(),0);
//if (LoadArmInfo.LoadArmRounds <= 2)
// LoadArmInfo.LoadArmRounds = 20;
@@ -151,8 +155,12 @@
StopInitSequence();
memcpy (&ProcessParametersRecover,&ProcessParametersKeep,sizeof(ProcessParameters));
//NumberOfDrierLoaderCycles = loadLoadArmParameters();
- LoadStages++;
- ThreadLoadStateMachine(LoadStages);
+ if (Stage == THREAD_LOAD_INIT)
+ {
+ LoadStages++;
+ ThreadLoadStateMachine(LoadStages);
+ }
+ InitCalled = true;
return OK;
}
@@ -179,6 +187,7 @@
LOG_ERROR (LoadStages, "Thread_Load_Init failed");
strcpy(LoadErrorMsg,"Thread_Load_Init failed");
LoadStatus = ERROR;
+ TryAgain = true;
}
else
{
@@ -273,13 +282,37 @@
//Use Notation How Many Rotations In The Drier, Or Check Against Stopper. Move Slowly
return OK;
}*/
- uint32_t Thread_Load_Jog_Feeder_To_Middle_Point_Callback(uint32_t deviceID, uint32_t BusyFlag)
+ uint32_t Thread_Load_Jog_Feeder_To_Middle_Point_Callback(uint32_t deviceID, uint32_t Condition)
{
- CallbackCounter--;
- Report("Thread_Load_Jog_Feeder_To_Middle_Point_Callback",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0);
- //storeLoadArmParameters();
- LoadStages++;
- ThreadLoadStateMachine(LoadStages);
+ if (Condition == true)
+ {
+ CallbackCounter--;
+ Report("Thread_Load_Jog_Feeder_To_Middle_Point_Callback",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0);
+ //storeLoadArmParameters();
+ LoadStages++;
+ ThreadLoadStateMachine(LoadStages);
+ }
+ else
+ {
+ CallbackCounter--;
+ Report("Thread_Load_Jog_Feeder_To_Middle_Point TimeOut!",__FILE__,__LINE__,LoadStages,RpMessage,CallbackCounter,0);
+ //storeLoadArmParameters();
+ if (SecondTry == true)
+ {
+ LoadStages++;
+ ThreadLoadStateMachine(LoadStages);
+ LoadStatus = OK;
+ }
+ else
+ {
+ TimeoutsCounter = 0;
+ load.color = fastBILNK;
+ usnprintf(LoadErrorMsg, 100, "Thread_Load_Jog_Feeder_To_Middle_Point TimeOut!");
+ LoadStatus = ERROR;
+ ThreadLoadingReport();
+ TryAgain = true;
+ }
+ }
return OK;
}
@@ -321,6 +354,7 @@
usnprintf(LoadErrorMsg, 100, "Load sequence timeout %d motor %d",LoadStages, MotorId);
LoadStatus = ERROR;
ThreadLoadingReport();
+ TryAgain = true;
}
else
{
@@ -371,10 +405,10 @@
uint32_t Thread_Load_Lift_Dancers(void)
{
REPORT_MSG(LoadStages, "Thread Load State Machine step");
- keepkvalhold = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].kvalhold;
+ /*keepkvalhold = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].kvalhold;
MotorSetKvalHold(HARDWARE_MOTOR_TYPE__MOTO_RDANCER, 40);
CallbackCounter++;
- MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RDANCER,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize, 15, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_RDANCER], Thread_Load_HomingCallback,15000);
+ MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RDANCER,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize, 15, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_RDANCER], Thread_Load_HomingCallback,15000);*/
CallbackCounter++;
MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_LDANCER1,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1].directionthreadwize, 500, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_LDANCER1], Thread_Load_HomingCallback,25000);
@@ -387,8 +421,17 @@
keepkvalrun = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].kvalrun;
if (keepkvalrun>=25)
keepkvalrun = 25;
+
+ Report("Read_Dryer_ENC_Position()",__FILE__,__LINE__,0,RpWarning,Read_Dryer_ENC_Position(),0);
+
Report("Thread_Load_Lift_Rockers",__FILE__,__LINE__,keepkvalrun,RpMessage,keepmicrostep,0);
+ Report("Thread_Load_Lift_right dancer",__FILE__,__LINE__,0,RpMessage,0,0);
+ keepkvalhold = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].kvalhold;
+ MotorSetKvalHold(HARDWARE_MOTOR_TYPE__MOTO_RDANCER, 40);
+ CallbackCounter++;
+ MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RDANCER,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDANCER].directionthreadwize, 22, Motor_Id_to_LS_IdUp[HARDWARE_MOTOR_TYPE__MOTO_RDANCER], Thread_Load_HomingCallback,15000);
+
REPORT_MSG(LoadStages, "Thread Load State Machine step");
MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 8);
MotorSetMicroStep(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 8);
@@ -489,7 +532,7 @@
{
REPORT_MSG(LoadStages, "Thread Load State Machine step");
CallbackCounter++;
- MotorMovetoDancerPosition (HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].directionthreadwize, 100, FEEDER_DANCER ,true, Thread_Load_Jog_Feeder_To_Middle_Point_Callback,2000);
+ MotorMovetoDancerPosition (HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].directionthreadwize, 100, FEEDER_DANCER ,true, Thread_Load_Jog_Feeder_To_Middle_Point_Callback,4000);
return OK;
}
@@ -529,14 +572,16 @@
}
float numberOfSteps = 0;
float numberOfCycles = 0;
- uint32_t DrierPrevLocation = 0;
+ double DrierPrevLocation = 0;
uint32_t Thread_Load_Dryer_Loading_Callback(uint32_t MotorId, uint32_t ReadValue)
{
numberOfCycles++;
- uint32_t temp = Control_Read_Dryer_Position(0,0);
- if ((abs (temp -DrierPrevLocation)>20 )&&(ReadValue == NOTBUSY))
+
+ Report("Thread_Load_Dryer_Loading_Callback",__FILE__,(int)TotalLoadedLen,(int)DrierPrevLocation,RpMessage,ReadValue,0);
+
+ if ((fabs (TotalLoadedLen -DrierPrevLocation)>50 )&&(ReadValue == NOTBUSY))
{
- DrierPrevLocation = temp;
+ DrierPrevLocation = TotalLoadedLen ;
//Report("Thread_Load_Dryer_Loading_Callback",__FILE__,__LINE__,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0);
//Report("Thread_Load_Dryer_Loading_Callback details",__FILE__,(int)(TotalLoadedLen),numberOfCycles,RpMessage,CallbackCounter,0);
if (LoadStages != THREAD_LOAD_DRYER_LOADING)
@@ -558,6 +603,8 @@
else
{
LOG_ERROR(LoadStages,"Load sequence timeout - drier loading");
+ TryAgain = true;
+ SecondTry = false;
Report("Store Number of cycles in drier - halted",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmInfo.LoadArmRounds,0);
MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,numberOfCycles);
TimeoutsCounter = 0;
@@ -727,6 +774,8 @@
{
numberOfCycles++;
uint32_t temp = Control_Read_Dryer_Position(0,0);
+ Report("Thread_Load_Dryer_Loading_Callback",__FILE__,ReadValue,temp,RpMessage,DrierPrevLocation,0);
+ //Report("Thread_Load_Dryer_Loading_Callback details",__FILE__,(int)(TotalLoadedLen),numberOfCycles,RpMessage,CallbackCounter,0);
if ((abs (temp -DrierPrevLocation)>20 )&&(ReadValue == NOTBUSY))
{
DrierPrevLocation = temp;
@@ -754,6 +803,7 @@
Report("Store Number of cycles in drier - halted",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmInfo.LoadArmRounds,0);
MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,LoadArmInfo.LoadArmRounds-numberOfCycles);
TimeoutsCounter = 0;
+ CallbackCounter = 0;
if(PullerControlId != 0xFF)
{
MotorStop(ThreadMotorIdToMotorId[POOLER_MOTOR],Hard_Hiz);
@@ -851,15 +901,15 @@
MCU_E2PromRead(EEPROM_STORAGE_DRYER_CENTER,&DrierPrevLocation);
- Report("Thread_Load_Set_Load_Arm_To_Start_Position",__FILE__,UnloadingStart,LoadStages,RpMessage,NumberOfDrierLoaderCycles,0);
+ Report("Thread_Load_Set_Load_Arm_To_Start_Position",__FILE__,UnloadingStart,LoadStages,RpMessage, LoadArmInfo.LoadArmRounds,0);
MotorSetMaxSpeed (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/4*MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulleyradius);
// status |= MotorMoveToStopper(HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, (1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize),
// MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].pulseperround/4, Thread_Load_Set_Load_Arm_To_Stopper_Callback,LoadArmInfo.LoadArmBackLash,1000);
MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize,
numberOfSteps-400, Thread_Load_Dryer_UnLoading_Callback, 10000);
- Screw_Dir = MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize;
- status = MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_SCREW,Screw_Dir, 80, screw[Screw_Dir], Thread_Load_switchCallback,30000);
+ Screw_Dir = 1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_SCREW].directionthreadwize;
+ status = MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_SCREW,Screw_Dir, 80, screw[Screw_Dir], Thread_Load_switchCallback,20000);
//Keep Notation How Many Rotations In The Dryer
//LoadArmInfo.LoadArmRounds = (int)dryerbufferlength;
@@ -877,11 +927,24 @@
{
case THREAD_LOAD_INIT:
//LoadStages++;
- Thread_Load_Init();
+ MessageState = 1;
+
+ Thread_Load_Init(ReadValue);
break;
case THREAD_LOAD_REDUCE_HEAT: //HEATERS OFF, DRYER BLOWER OFF, BLOWER LOW,
//LoadStages++;
+ MessageState = 1;
+ if (InitCalled == false)
+ {
+ REPORT_MSG(ReadValue,"Thread_Load_Init called from 1");
+ Thread_Load_Init(ReadValue);
+ }
+ else
+ {
+ REPORT_MSG(ReadValue,"Thread_Load_Init called from 0");
+ }
Thread_Load_Reduce_Heat();
+ InitCalled = false;
break;
case THREAD_LOAD_SET_LOAD_ARM_TO_START_POSITION://USE NOTATION HOW MANY ROTATIONS IN THE DRYER, OR CHECK AGAINS STOPPER. MOVE SLOWLY
//LoadStages++;
@@ -939,6 +1002,7 @@
ThreadLoadingReport();
break;
case THREAD_LOAD_END:
+ MessageState = 0;
LoadStages = THREAD_LOAD_END;
Thread_Load_End();
break;
@@ -961,9 +1025,19 @@ uint32_t ThreadLoadButton(THREAD_LOAD_STAGES_ENUM ReadValue)
return ERROR;
}
Report("ThreadLoadButton",__FILE__,__LINE__,LoadStages,RpMessage,ReadValue,0);
- if (LoadStages > ReadValue)
+ if (LoadStatus == ERROR)
{
- ThreadLoadStateMachine(LoadStages+1);
+ if ((SecondTry == false)&&(TryAgain == true))
+ {
+ LoadStatus = OK;
+ SecondTry = true;
+ ThreadLoadStateMachine(LoadStages);
+ }
+ else
+ {
+ SecondTry = false;
+ ThreadLoadStateMachine(LoadStages+1);
+ }
}
else
{
@@ -1071,7 +1145,7 @@ uint32_t ThreadLoadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
NormalizedError = avreageSampleValue*NormalizedErrorCoEfficient[index];
MotorControlConfig[index].m_mesuredParam = NormalizedError;
- MotorControlConfig[index].m_calculatedError = AdvancedPIDAlgorithmCalculation((float)MotorControlConfig[index].m_SetParam , (float)MotorControlConfig[index].m_mesuredParam,
+ MotorControlConfig[index].m_calculatedError = PIDAlgorithmCalculation((float)MotorControlConfig[index].m_SetParam , (float)MotorControlConfig[index].m_mesuredParam,
&MotorControlConfig[index].m_params, &MotorControlConfig[index].m_preError, &MotorControlConfig[index].m_integral);
if (index != FEEDER_MOTOR) //feeder unit handles errors opposite to left unit
{
@@ -1209,7 +1283,7 @@ void ThreadLoadPollRequest(MessageContainer* requestContainer)
stub_heating_test_poll_request__free_unpacked(request,NULL);
}
char ThreadLoadingToken[36+1] = {0};
-int MessageState = 0; //0 - none, 1 = start, 2 = continue
+char DefaultErrSrt[] = "OK";
uint32_t ThreadLoadingReport(void)
{
MessageContainer responseContainer;
@@ -1219,7 +1293,14 @@ uint32_t ThreadLoadingReport(void)
if (ThreadLoadingToken[0] == 0)
return OK;
- if (MessageState == 1)
+ if (MessageState == 0)
+ {
+ response.has_state = true;
+ response.state = THREAD_LOADING_STATE__None;
+ response.errorreason = DefaultErrSrt;
+
+ }
+ else if (MessageState == 1)
{
response.has_state = true;
if (LoadStatus == OK)
@@ -1228,6 +1309,7 @@ uint32_t ThreadLoadingReport(void)
if (LoadStages == THREAD_LOAD_INITIAL_TENSION)
{
response.state = THREAD_LOADING_STATE__ReadyForLoading;
+ response.errorreason = DefaultErrSrt;
}
}
else
@@ -1242,10 +1324,11 @@ uint32_t ThreadLoadingReport(void)
if (LoadStatus == OK)
{
response.state = THREAD_LOADING_STATE__Finalizing;
- if (LoadStages >= THREAD_LOAD_JOG_THREAD)
+ if (LoadStages > THREAD_LOAD_JOG_THREAD)
{
response.state = THREAD_LOADING_STATE__Completed;
- last = true;
+ response.errorreason = DefaultErrSrt;
+ //last = true;
}
}
else
@@ -1273,7 +1356,7 @@ uint32_t StartThreadLoadingFunc(MessageContainer* requestContainer)
{
StartThreadLoadingRequest *request = start_thread_loading_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
ustrncpy (ThreadLoadingToken, requestContainer->token,36);
- MessageState = 1;
+ //MessageState = 1;
Report("StartThreadLoadingFunc",__FILE__,__LINE__,0,RpWarning,(int)LoadStages,0);
ThreadLoadingReport();
return OK;
@@ -1301,6 +1384,10 @@ uint32_t ContinueThreadLoadingFunc(MessageContainer* requestContainer)
size_t container_size = message_container__pack(&responseContainer, container_buffer);
my_free(responseContainer.data.data);
SendChars((char*)container_buffer, container_size);
+ if (LoadStages == THREAD_LOAD_INITIAL_TENSION) //on this satge we should wait for user call
+ {
+ ThreadLoadStateMachine(LoadStages);
+ }
return OK;
}
@@ -1311,7 +1398,7 @@ uint32_t StopThreadLoadingFunc(MessageContainer* requestContainer)
MessageContainer responseContainer;
MessageState = 2;
Thread_Load_End();
- Report("StopThreadLoadingFunc",__FILE__,__LINE__,(int)11,RpWarning,(int)LoadStages,0);
+ Report("StopThreadLoadingFunc",__FILE__,__LINE__,0xFF,RpWarning,(int)LoadStages,0);
responseContainer = createContainer(MESSAGE_TYPE__StopThreadLoadingResponse, requestContainer->token, true, &Cresponse, &stop_thread_loading_response__pack, &stop_thread_loading_response__get_packed_size);
responseContainer.continuous = false;
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
index dd31e9cda..0a3a9e149 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
@@ -143,7 +143,7 @@ void ThreadUpdateProcessLength (double length, void *Funcptr)
CurrentProcessedLength = 0;
ProcessedLengthFuncPtr = (ProcessedLengthFunc)Funcptr;
}
-char Lenstr[150];
+char Lenstr[160];
uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue)
{
uint32_t positionDiff = 0,prevprev;
@@ -300,12 +300,12 @@ uint32_t PoolerThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue)
{
if (PrepareState == true)
{
-#ifdef Use_Head_Card
- strcpy(Lenstr,"Heating up");
-#else
+//#ifdef Use_Head_Card
+// strcpy(Lenstr,"Heating up");
+//#else
//later - add temperatures
TemperatureListString(Lenstr);
-#endif
+//#endif
SendJobProgress(0.0,0,false, Lenstr);
}
else
@@ -602,7 +602,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue)
NormalizedError = avreageSampleValue*NormalizedErrorCoEfficient[index];
MotorControlConfig[index].m_mesuredParam = NormalizedError;
DancerError[DancerId] = NormalizedError;
- MotorControlConfig[index].m_calculatedError = AdvancedPIDAlgorithmCalculation((float)MotorControlConfig[index].m_SetParam , (float)MotorControlConfig[index].m_mesuredParam,
+ MotorControlConfig[index].m_calculatedError = PIDAlgorithmCalculation((float)MotorControlConfig[index].m_SetParam , (float)MotorControlConfig[index].m_mesuredParam,
&MotorControlConfig[index].m_params, &MotorControlConfig[index].m_preError, &MotorControlConfig[index].m_integral);
if (index != FEEDER_MOTOR) //feeder unit handles errors opposite to left unit
{