diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2018-07-15 14:32:42 +0300 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2018-07-15 14:32:42 +0300 |
| commit | 3a674ea0ef5c71843bd876da3bb5e0b0f535110e (patch) | |
| tree | 069f6411a4145dfa9ccfe0aa2f9a8758c92a8b8e /Software/Embedded_SW/Embedded | |
| parent | cc425e019d3a7d3494ac15ffe213b6b47b1c64ed (diff) | |
| download | Tango-3a674ea0ef5c71843bd876da3bb5e0b0f535110e.tar.gz Tango-3a674ea0ef5c71843bd876da3bb5e0b0f535110e.zip | |
idle task priorities upped. distance to spool added. some job related bugs
Diffstat (limited to 'Software/Embedded_SW/Embedded')
9 files changed, 109 insertions, 27 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c b/Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c index 8600d8ff3..84b4da4ee 100644 --- a/Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c +++ b/Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c @@ -26,8 +26,8 @@ #include "Modules/Control/Control.h" #include "Modules/Control/MillisecTask.h" -#define MAX_PRIORITY 10 -#define SECOND_MAX_PRIORITY 9 +#define MAX_PRIORITY 15 +#define SECOND_MAX_PRIORITY 14 #define MIN_PRIORITY 0 #define SECOND_MIN_PRIORITY 1 #define TICKS_IN_SECOND 1000 diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/Diagnostics.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/Diagnostics.c index 94b49a8d9..fda4eceb7 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/Diagnostics.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/Diagnostics.c @@ -297,8 +297,8 @@ uint32_t StartDiagnosticsRequestFunc(MessageContainer* requestContainer) // ReportInitParams InitParams; //ControlStart(); DiagnosticRequestAccepted = true; -//#warning test only - shoud be started and stopped with job execution -// DiagnosticsStart(); +#warning test only - shoud be started and stopped with job execution + DiagnosticsStart(); StartDiagnosticsRequest* request = start_diagnostics_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); strcpy (DiagnosticsToken, requestContainer->token); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index 7f119ae79..80df0c536 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -48,7 +48,7 @@ uint32_t DryerHeaterMaxTempControl = 0xFF; #warning the PT100 id for the dryer control is number2 - dryer internal ambient sensor. #warning the PT100 for head 4 is number 5 uint32_t HeaterId2PT100Id[MAX_HEATERS_NUM] = {TEMP_SENSE_ANALOG_DRYER_TEMP2,TEMP_SENSE_ANALOG_DRYER_TEMP1,TEMP_SENSE_ANALOG_DRYER_TEMP3,TEMP_SENSE_ANALOG_DYEINGH_TEMP1,TEMP_SENSE_ANALOG_DYEINGH_TEMP2,TEMP_SENSE_ANALOG_DYEINGH_TEMP3,TEMP_SENSE_ANALOG_DYEINGH_TEMP4,TEMP_SENSE_ANALOG_DYEINGH_TEMP5,TEMP_SENSE_ANALOG_MIXCHIP_TEMP,TEMP_SENSE_ANALOG_MIXCHIP_TEMP}; -uint32_t DryerInternalPT100Id = TEMP_SENSE_ANALOG_DRYER_TEMP1; +uint32_t DryerInternalPT100Id = TEMP_SENSE_ANALOG_DRYER_TEMP3; bool HeatersRestart = false; bool HeaterMaxTempFlag[MAX_HEATERS_NUM] = {false,false,false,false,false,false,false,false,false,false}; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 046821634..bd3fe5aea 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -270,7 +270,7 @@ uint32_t IDSPreSegmentState(void *JobDetails, int SegmentId) if ((int)segmentfirst_speed > 0) { DispenserSegmentReady[DispenserId] = false; - Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, IDS_Valve_SegmentReady); //direction: MidTank_Dispenser or Dispenser_Mixer + Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer MotorSetSpeed(HW_Motor_Id, segmentfirst_speed); HeatingTestSendResonse(0,false,0, Dispenser_Mixer,DispenserId, segmentfirst_speed,SegmentId,JobBrushStopId,"Dispenser !!!!!!!!!!!"); } diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index 2bd03f406..e40be86a0 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -11,9 +11,9 @@ #include "StateMachines/Printing/PrintingSTM.h" #include "Modules/Control/Control.h" -#include "Common/report/report.h" +#include "modules/General/process.h" -#include "modules/general/process.h" +#include "Common/report/report.h" #include "drivers/FPGA/FPGA.h" @@ -226,13 +226,13 @@ uint32_t WinderPresegmentReady(uint32_t deviceID, uint32_t ReadValue) uint32_t Winder_Presegment(void *JobDetails, uint32_t SegmentId) { JobTicket* JobTicket = JobDetails; - float screw_speed = 0; float RotationsPerSecond; + int process_speed = dyeingspeed; if (dyeingspeed == 0) { - LOG_ERROR (-1," unknown job speed"); + LOG_ERROR (dyeingspeed," job speed zero"); return ERROR; } diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h index 4a7f1144c..56e88204f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h @@ -17,6 +17,7 @@ uint32_t InternalWindingConfigMessage(JobSpool* request); uint32_t ThreadPrepareState(void *JobDetails); uint32_t ThreadPreSegmentState(void *JobDetails); uint32_t ThreadSegmentState(void *JobDetails, int SegmentId); +uint32_t ThreadDistanceToSpoolState(void); uint32_t ThreadEndState(void *JobDetails); uint32_t ThreadInitialTestStub(); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 29e2cd3f6..fd86f0973 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -26,7 +26,8 @@ #include "drivers/Motors/Motor.h" #include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" #include "modules/heaters/heaters.h" -#include "modules/general/process.h" +#include "modules/General/process.h" + ////////////////////////////////State machine operation//////////////////////////////////// //the state machine operation is used to operate in runtime correct profile flow execution //by recieved esign flow of the user from the UI @@ -292,7 +293,7 @@ uint32_t ThreadControlCBFunction(uint32_t IfIndex, uint32_t ReadValue) int DancerId; static int pooler_counter = 0; int32_t TranslatedReadValue, avreageSampleValue = 0; - double tempcalcspeed = 0; + //double tempcalcspeed = 0; uint32_t calculated_speed; double NormalizedError; char Message[60]; @@ -546,18 +547,10 @@ uint32_t ThreadPreSegmentState(void *JobDetails) float process_speed = dyeingspeed; if (dyeingspeed == 0) { - LOG_ERROR (-1," unknown job speed"); + LOG_ERROR (dyeingspeed," job speed zero"); return ERROR; } - /*if (JobTicket->processparameters) - if (JobTicket->processparameters->dyeingspeed) - process_speed= JobTicket->processparameters->dyeingspeed; - else - { - LOG_ERROR (-1," unknown job speed"); - return ERROR; - } - */ + SetOriginMotorSpeed(process_speed); ThreadControlActive = true; // set the new speed in the dryer motor to the speed of the new segment @@ -606,7 +599,7 @@ void ThreadSegmentEnded(void) } void ThreadDistanceToSpoolEnded(void) { - + DistanceToSpoolReady(Module_Thread,ModuleDone); } double seglength = 0.0; //******************************************************************************************************************** @@ -620,6 +613,14 @@ uint32_t ThreadSegmentState(void *JobDetails, int SegmentId) } //******************************************************************************************************************** +uint32_t ThreadDistanceToSpoolState(void ) +{ + seglength = dryerbufferlength; + ThreadUpdateProcessLength (seglength,(void *)ThreadDistanceToSpoolEnded); + return OK; +} + +//******************************************************************************************************************** uint32_t ThreadEndState(void *JobDetails) { int Motor_i; diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c index 5749c0019..10e865bdc 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c @@ -24,6 +24,7 @@ #include "modules/ids/ids_ex.h" #include "PMR/Hardware/UploadHardWareConfigurationRequest.pb-c.h" #include "PMR/Hardware/HardwareMotorType.pb-c.h" +#include "modules/General/process.h" ////////////////////////////////State machine operation//////////////////////////////////// //the state machine operation is used to operate in runtime correct profile flow execution //by recieved esign flow of the user from the UI @@ -59,6 +60,7 @@ typedef struct //////////////////////////////////////////////////////////////////////////// ModuleStateEnum SegmentWaiting[MAX_SYSTEM_MODULES] = {ModuleIdle,ModuleIdle,ModuleIdle,ModuleIdle,ModuleIdle}; ModuleStateEnum PreSegmentWaiting[MAX_SYSTEM_MODULES] = {ModuleIdle,ModuleIdle,ModuleIdle,ModuleIdle,ModuleIdle}; +ModuleStateEnum DistanceToSpoolWaiting[MAX_SYSTEM_MODULES] = {ModuleIdle,ModuleIdle,ModuleIdle,ModuleIdle,ModuleIdle}; ModuleStateEnum PrintWaiting[MAX_SYSTEM_MODULES] = {ModuleIdle,ModuleIdle,ModuleIdle,ModuleIdle,ModuleIdle}; ModuleStateEnum EndWaiting[MAX_SYSTEM_MODULES] = {ModuleIdle,ModuleIdle,ModuleIdle,ModuleIdle,ModuleIdle}; @@ -93,7 +95,7 @@ uint32_t PrintingHWConfiguration(void *Configuration) (request->motors[i]->hardwaremotortype == HARDWARE_MOTOR_TYPE__MOTO_DRYER_DRIVING)) { Configured[Module_Thread] = true; - break; + //break; } if ((request->motors[i]->hardwaremotortype == HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_1)|| (request->motors[i]->hardwaremotortype == HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_2)|| @@ -105,7 +107,7 @@ uint32_t PrintingHWConfiguration(void *Configuration) (request->motors[i]->hardwaremotortype == HARDWARE_MOTOR_TYPE__MOTO_DISPENSER_8)) { Configured[Module_IDS] = true; - break; + //break; } } } @@ -276,7 +278,7 @@ static uint32_t SegmentState(void *JobDetails, int SegmentId) SendJobProgress(0.0, SegmentId, false, "Segment Start"); if (Configured[Module_IDS]) { - SegmentWaiting[Module_IDS] = ModuleWaiting; + //SegmentWaiting[Module_IDS] = ModuleWaiting; IDSSegmentState(JobDetails,SegmentId); } if (Configured[Module_Thread]) @@ -291,6 +293,75 @@ static uint32_t SegmentState(void *JobDetails, int SegmentId) } return OK; } +//******************************************************************************************************************** +uint32_t DistanceToSpoolReady(int ModuleId, ModuleStateEnum result) +{ + int i; + bool ready = true; + uint32_t status = OK; + + JobMessageStruc Message; + PrintMessageStruc *PrtMessage = (PrintMessageStruc *)Message.messageData; + + assert (ModuleId<MAX_SYSTEM_MODULES); + assert (result<=ModuleFail); + + if (DistanceToSpoolWaiting[ModuleId] != ModuleWaiting) + { + LOG_ERROR (ModuleId, "Message from unrelated module!!"); + } + + DistanceToSpoolWaiting[ModuleId] = result; + if (result == ModuleFail) status = ERROR; + for (i=0;i<MAX_SYSTEM_MODULES ;i++) + { + if (DistanceToSpoolWaiting[i] == ModuleWaiting) + ready = false; + } + if ((ready == false)&&(status == OK)) return OK; + else + { + Message.messageId = PrintMessage; + if (status == OK) + { + PrtMessage->messageId = FinishResultsOk; + SendJobProgress(0.0, 0, false, "DistanceToSpool Done"); + } + else + { + PrtMessage->messageId = FinishResultsFail; + SendJobProgress(0.0, 0, false, "DistanceToSpool Fail"); + } + //memcpy(Message.messageData,JobDetails,MAX_MSG_LEN); + Message.msglen = 10; + if (JobmsgQ != NULL) + Mailbox_post(JobmsgQ , &Message, BIOS_NO_WAIT); + } + return 0; + +} + +//******************************************************************************************************************** +static uint32_t DistanceToSpoolState(void *JobDetails) +{ + SendJobProgress(0.0, 0, false, "DistanceToSpool Start"); + /*if (Configured[Module_IDS]) + { + //DistanceToSpoolWaiting[Module_IDS] = ModuleWaiting; + IDSSegmentState(JobDetails,SegmentId); + }*/ + if (Configured[Module_Thread]) + { + DistanceToSpoolWaiting[Module_Thread] = ModuleWaiting; + ThreadDistanceToSpoolState(); + } + if (Configured[Module_Winder]) + { + //DistanceToSpoolWaiting[Module_Winder] = ModuleWaiting; + //Winder_DistanceToSpool(JobDetails); + } + return OK; +} //******************************************************************************************************************** uint32_t EndState(void *JobDetails, char *Message) @@ -303,6 +374,7 @@ uint32_t EndState(void *JobDetails, char *Message) PrepareWaiting[Module_Winder] = ModuleIdle; SegmentWaiting[Module_Winder] = ModuleIdle; PreSegmentWaiting[Module_Winder] = ModuleIdle; + DistanceToSpoolWaiting[Module_Winder] = ModuleIdle; // EndWaiting[Module_Winder] = ModuleWaiting; Winder_End(); } @@ -311,6 +383,7 @@ uint32_t EndState(void *JobDetails, char *Message) PrepareWaiting[Module_IDS] = ModuleIdle; SegmentWaiting[Module_IDS] = ModuleIdle; PreSegmentWaiting[Module_IDS] = ModuleIdle; + DistanceToSpoolWaiting[Module_IDS] = ModuleIdle; //EndWaiting[Module_IDS] = ModuleWaiting; IDSEndState(JobDetails); } @@ -325,6 +398,7 @@ uint32_t EndState(void *JobDetails, char *Message) PrepareWaiting[Module_Thread] = ModuleIdle; SegmentWaiting[Module_Thread] = ModuleIdle; PreSegmentWaiting[Module_Thread] = ModuleIdle; + DistanceToSpoolWaiting[Module_Thread] = ModuleIdle; //EndWaiting[Module_Thread] = ModuleWaiting; ThreadEndState(CurrentJob); } @@ -392,8 +466,10 @@ void PrintSTMMsgHandler(void * msg) SegmentId++; if (SegmentId >= CurrentJob->n_segments) { - //if (CurrentJob->) handle distance to spool + if (dryerbufferlength == 0) EndState(CurrentJob, "Job Ended"); + else + DistanceToSpoolState(CurrentJob); } else { @@ -401,10 +477,13 @@ void PrintSTMMsgHandler(void * msg) } break; case SegmentResultsFail: + EndState(CurrentJob, "Job Failed"); break; case FinishResultsOk: + EndState(CurrentJob, "Job Ended"); break; case FinishResultsFail: + EndState(CurrentJob, "Job Distance t Spool Failed"); break; case PrintSystemFailure: EndState(CurrentJob, Message->messageData); diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h index fa1353f54..8bdecbaa1 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h @@ -140,6 +140,7 @@ uint32_t PrintingHWConfiguration(void *Configuration); uint32_t PrepareReady(int ModuleId, ModuleStateEnum result); uint32_t PreSegmentReady(int ModuleId, ModuleStateEnum result); uint32_t SegmentReady(int ModuleId, ModuleStateEnum result); +uint32_t DistanceToSpoolReady(int ModuleId, ModuleStateEnum result); uint32_t PrintingHWConfiguration(void *Configuration); uint32_t EndState(void *JobDetails, char *Message); |
