From 595998bcdd9612a448552d5beccad1be0e791657 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Thu, 21 Jun 2018 20:23:24 +0300 Subject: some small bugs --- .../Embedded/Modules/Thread/Thread_print.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index f5462e398..fcbfb1bbb 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -472,7 +472,9 @@ uint32_t ThreadPreSegmentState(void *JobDetails) //set the speed only before the first segment, speed is constant accros job JobTicket* JobTicket = JobDetails; - float process_speed = JobTicket->processparameters->dyeingspeed; + float process_speed; + if (JobTicket->processparameters) + process_speed= JobTicket->processparameters->dyeingspeed; SetOriginMotorSpeed(process_speed); //ControlStart(); @@ -483,14 +485,14 @@ uint32_t ThreadPreSegmentState(void *JobDetails) //only for testing - when control works, these motors will take their speed from the dryer //MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_RDRIVING, OriginalMotorSpd_2PPS[FEEDER_MOTOR]); -//#warning rocker disabled - if (MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].has_directionthreadwize) - MotorSetDirection((TimerMotors_t)HARDWARE_MOTOR_TYPE__MOTO_RLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].directionthreadwize); - MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 5); - if (MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].has_directionthreadwize) - MotorSetDirection((TimerMotors_t)HARDWARE_MOTOR_TYPE__MOTO_LLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize); - MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 5); -//#warning rocker disabled +#warning rocker disabled +// if (MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].has_directionthreadwize) +// MotorSetDirection((TimerMotors_t)HARDWARE_MOTOR_TYPE__MOTO_RLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RLOADING].directionthreadwize); +// MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_RLOADING, 5); +// if (MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].has_directionthreadwize) +// MotorSetDirection((TimerMotors_t)HARDWARE_MOTOR_TYPE__MOTO_LLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize); +// MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 5); +#warning rocker disabled // MotorMovetoLimitSwitch (HARDWARE_MOTOR_TYPE__MOTO_RDRIVING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_RDRIVING].directionthreadwize, 0, GPI_LS_RLOADMOTOR_UP, EndState); //TODO @@ -506,6 +508,7 @@ uint32_t ThreadPreSegmentState(void *JobDetails) { ThreadUpdateProcessLength (0,(void *)NULL); PreSegmentReady(Module_Thread,ModuleDone); + JobCounter = 0; InitialProcess = false; } -- cgit v1.3.1 From 7d2119987aade33c587dac1cd476326f977922c5 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Fri, 22 Jun 2018 12:02:18 +0300 Subject: Job process info and job end info, some alarm handling --- .../Embedded/Modules/AlarmHandling/AlarmHandling.c | 84 ++++++++++++++++++++++ .../Embedded/Modules/Thread/Thread_print.c | 13 +++- .../Embedded/StateMachines/Printing/JobSTM.c | 20 +++--- .../Embedded/StateMachines/Printing/PrintingSTM.c | 18 ++--- .../Embedded/StateMachines/Printing/PrintingSTM.h | 5 +- 5 files changed, 114 insertions(+), 26 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules/Thread') diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index e8779d265..23560bd06 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -27,6 +27,10 @@ #include #include #include +#include +#include +#include "PMR/debugging/DebugLogCategory.pb-c.h" + char DiagnosticsToken[36] = {0}; bool DiagnosticsActive = false; @@ -131,8 +135,88 @@ void AlarmHandler_SendDiagnostics(void) return ; } +/*typedef enum _EventType { + EVENT_TYPE__ThreadBreak = 0, + EVENT_TYPE__ThreadTensionControlFailure = 1, + EVENT_TYPE__FeederConeInsufficiant = 2, + EVENT_TYPE__WinderGeneralError = 3, + EVENT_TYPE__WinderConeNotExists = 4, + EVENT_TYPE__ThreadFeedingGeneralError = 5, + EVENT_TYPE__DyeingHeadOverTemperature = 6, + EVENT_TYPE__DHThermalCutoff = 7, + EVENT_TYPE__DryerOverTemperature = 8, + EVENT_TYPE__DryerThermalCutoff = 9, + EVENT_TYPE__DyeingHeadHeatersCurrentOutOfRange = 10, + EVENT_TYPE__DryerHeatersCurrentOutOfRange = 11, + EVENT_TYPE__DryerDHeadCoverOpen = 12, + EVENT_TYPE__AirFilterClogged = 13, + EVENT_TYPE__AirFilterNotInstalled = 14, + EVENT_TYPE__WHSFailure = 15, + EVENT_TYPE__WasteContainerIsAlmostFull = 16, + EVENT_TYPE__WasteContainerIsFull = 17, + EVENT_TYPE__DispenserEmpty = 18, + EVENT_TYPE__DispenserLowLevel = 19, + EVENT_TYPE__DispenserRefillFailure = 20, + EVENT_TYPE__MidTankEmpty = 21, + EVENT_TYPE__MidTankLowLevel = 22, + EVENT_TYPE__MidTankNotInPlace = 23, + EVENT_TYPE__SystemBITFail = 24, + EVENT_TYPE__GeneralInternalOverTemperature = 25, + EVENT_TYPE__MachineCoverOpen = 26, + EVENT_TYPE__EmergencyPushButtonPressed = 27, + EVENT_TYPE__SystemGeneralError = 28, + EVENT_TYPE__RequestSent = 29, + EVENT_TYPE__ResponseReceived = 30, + EVENT_TYPE__RequestFailed = 31, + EVENT_TYPE__ApplicationException = 32, + EVENT_TYPE__ApplicationInformation = 33, + EVENT_TYPE__ApplicationStarted = 34, + EVENT_TYPE__ApplicationTerminated = 35, + EVENT_TYPE__RecordingStarted = 36, + EVENT_TYPE__RecordingStopped = 37 + PROTOBUF_C__FORCE_ENUM_TO_BE_INT_SIZE(EVENT_TYPE) +} EventType; + * */ +uint32_t AlarmHandlingConsequentActions(EventType EventId, DebugLogCategory Severity) +{ + switch (Severity) + { + case DEBUG_LOG_CATEGORY__Warning: + + //raise flag fr next job + break; + case DEBUG_LOG_CATEGORY__Error: + AbortJob(NULL,event_type__descriptor.name[EventId]); +//Stop Job + break; + case DEBUG_LOG_CATEGORY__Critical: + EndState(NULL,event_type__descriptor.name[EventId]); + //stop job + //turn machine off + break; + case DEBUG_LOG_CATEGORY__Debug: + case DEBUG_LOG_CATEGORY__Info: + default: + //do nothing + break; + + } +} + uint32_t AlarmHandlingLoop(uint32_t tick) { + //read dispensers limit switches. 25 - send warning. up - stop job and send alarm + + //Cone missing + //Dyeing head over temperature + //mixer over temperature + //dryer over temperature + //heaters failure + //dispenser pressure + //valve OCD + //Motor Status + //machine cover open + return OK; } void SendDiagnostics(void) diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index f5462e398..5c581c7e6 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -15,6 +15,8 @@ #include "PMR/Printing/JobSegment.pb-c.h" #include "PMR/Printing/JobTicket.pb-c.h" +#include + #include "StateMachines/Printing/PrintingSTM.h" #include "drivers/Motors/Motor.h" @@ -178,7 +180,7 @@ uint32_t ThreadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue) pooler_counter++; if (pooler_counter%10 == 0) { - SendJobProgress(CurrentProcessedLength/CurrentRequestedLength,CurrentSegmentId,false); + SendJobProgress(CurrentProcessedLength/CurrentRequestedLength,CurrentSegmentId,false, "Progress"); //SendJobProgress(/*KeepNormalizedError*/MotorControlConfig[index].m_calculatedError,CurrentSegmentId,false); } @@ -259,6 +261,8 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) int32_t TranslatedReadValue, avreageSampleValue = 0; uint32_t calculated_speed; double NormalizedError; + char Message[60]; + if (IfIndex>>8 != IfTypeThread) { LOG_ERROR (IfIndex, "Wrong Interface type"); @@ -293,7 +297,8 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) //TranslatedReadValue = 0;//test MotorSamples[index][MotorSamplePointer[index]] = TranslatedReadValue;//(-1 * TranslatedReadValue); MotorSamplePointer[index]++; - if (MotorSamplePointer[index] >= MotorsControl[index].pvinputfilterfactormode) MotorSamplePointer[index] = 0; + if (MotorSamplePointer[index] >= MotorsControl[index].pvinputfilterfactormode) + MotorSamplePointer[index] = 0; for (i=0;i DancerStopActivityLimit[index])&&(JobCounter > eOneSecond)) { - EndState(CurrentJob); + usnprintf(Message, 60, "Dancer % limit%d value %d Zero %d",DancerId,DancerStopActivityLimit[index],avreageSampleValue,DancersCfg[DancerId].zeropoint); + + EndState(CurrentJob,Message ); } NormalizedError = avreageSampleValue*NormalizedErrorCoEfficient[index]; MotorControlConfig[index].m_mesuredParam = NormalizedError; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index 0f9a915d0..4d102061b 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -79,7 +79,7 @@ static ReturnCode ExitState(void *JobDetails); * the array and enum of JobState_t below must be in sync order ***********************************************************************/ //static ReturnCode (* state[])(void *JobDetails) = { IdleState, ValidateState, PrepareState, PrintState, CleanState}; -void AbortJob(void); +void AbortJob(char *Msg); typedef enum @@ -269,7 +269,7 @@ void JobAbortFunc(MessageContainer* requestContainer) AbortJobRequest* request = abort_job_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); - EndState(CurrentJob); + EndState(CurrentJob, "Job Aborted by user"); //AbortJob(); AbortJobResponse response = ABORT_JOB_RESPONSE__INIT; @@ -370,24 +370,19 @@ void JobRequestFunc(MessageContainer* requestContainer) //free(requestContainer); } //******************************************************************************************************************** -void SendJobProgress(double percentage, int SegmentId, bool done) +void SendJobProgress(double percentage, int SegmentId, bool done, char *Message) { uint32_t status = NOT_SUPPORTED; MessageContainer responseContainer; uint8_t* container_buffer; - char DoneMsg[13] = "Job Finished"; - char ProgressMsg[13] = "Progress"; - - - JobResponse response = JOB_RESPONSE__INIT; JobStatus jobStatus = JOB_STATUS__INIT; if (done == true) { - jobStatus.message =DoneMsg; + jobStatus.message = Message; jobStatus.has_progress = true; - jobStatus.progress = 100.0; + jobStatus.progress = percentage; jobStatus.has_currentsegmentindex = false; response.status = &jobStatus; response.has_canceled = false; @@ -396,7 +391,7 @@ void SendJobProgress(double percentage, int SegmentId, bool done) } else { - jobStatus.message =ProgressMsg; + jobStatus.message =Message; jobStatus.has_progress = true; jobStatus.progress = percentage; jobStatus.has_currentsegmentindex = true; @@ -412,7 +407,7 @@ void SendJobProgress(double percentage, int SegmentId, bool done) SendChars((char*)container_buffer, container_size); } -void AbortJob(void) +void AbortJob(char *Msg) { ReturnCode retcode; retcode = JobSuccess; @@ -421,6 +416,7 @@ void AbortJob(void) Message.messageId = Abort; PrtMessage->messageId = PrintSystemFailure; + strcpy(PrtMessage->messageData,Msg); Message.msglen = 10; if (JobmsgQ != NULL) Mailbox_post(JobmsgQ , &Message, BIOS_NO_WAIT); diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c index bead5597d..ae8e208b5 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c @@ -36,7 +36,7 @@ static uint32_t EntryState(void *JobDetails); static uint32_t PrepareState(void *JobDetails); static uint32_t PreSegmentState(void *JobDetails, int); static uint32_t SegmentState(void *JobDetails, int); - uint32_t EndState(void *JobDetails); + uint32_t EndState(void *JobDetails, char *Message); static uint32_t ExitState(void *JobDetails); /********************************************************************** @@ -263,9 +263,9 @@ static uint32_t SegmentState(void *JobDetails, int SegmentId) } //******************************************************************************************************************** -uint32_t EndState(void *JobDetails) +uint32_t EndState(void *JobDetails, char *Message) { - SendJobProgress(100,0,true); + SendJobProgress(100,0,true,Message); if (Configured[Module_Winder]) { @@ -289,13 +289,13 @@ uint32_t EndState(void *JobDetails) ThreadEndState(CurrentJob); } - JobMessageStruc Message; + JobMessageStruc JobMessage; bool retcode = false; - Message.messageId = PrintingResultsOk; - Message.msglen = MAX_MSG_LEN; + JobMessage.messageId = PrintingResultsOk; + JobMessage.msglen = MAX_MSG_LEN; if (JobmsgQ != NULL) - retcode = Mailbox_post(JobmsgQ , &Message, BIOS_NO_WAIT); + retcode = Mailbox_post(JobmsgQ , &JobMessage, BIOS_NO_WAIT); return OK; } @@ -353,7 +353,7 @@ void PrintSTMMsgHandler(void * msg) if (SegmentId >= CurrentJob->n_segments) { //if (CurrentJob->) handle distance to spool - EndState(CurrentJob); + EndState(CurrentJob, "Job Ended"); } else { @@ -367,7 +367,7 @@ void PrintSTMMsgHandler(void * msg) case FinishResultsFail: break; case PrintSystemFailure: - EndState(CurrentJob); + EndState(CurrentJob, Message->messageData); break; default: break; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h index fc6780e94..0a210eeb1 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h @@ -130,8 +130,9 @@ void PrintSTMMsgHandler(void * msg); void JobRequestFunc(MessageContainer* requestContainer); void JobAbortFunc(MessageContainer* requestContainer); +void AbortJob(char *Msg); -void SendJobProgress(double percentage,int SegmentId, bool done); +void SendJobProgress(double percentage,int SegmentId, bool done, char *Message); uint32_t PrintingHWConfiguration(void *Configuration); @@ -139,7 +140,7 @@ uint32_t PrepareReady(int ModuleId, ModuleStateEnum result); uint32_t PreSegmentReady(int ModuleId, ModuleStateEnum result); uint32_t SegmentReady(int ModuleId, ModuleStateEnum result); uint32_t PrintingHWConfiguration(void *Configuration); -uint32_t EndState(void *JobDetails); +uint32_t EndState(void *JobDetails, char *Message); #endif /* STATEMACHINES_PRINTSTM_H_ */ -- cgit v1.3.1