aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/StateMachines
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2020-12-03 12:28:18 +0200
committerShlomo Hecht <shlomo@twine-s.com>2020-12-03 12:28:18 +0200
commitaf782aca2364948527c1107a02428897fb8382a1 (patch)
tree788c3e9bdf2dcc41188f710a2f05cd5e1e8acc9d /Software/Embedded_SW/Embedded/StateMachines
parentfbfe1b3cc3024a6b0401fb0a2c53bead70462338 (diff)
downloadTango-af782aca2364948527c1107a02428897fb8382a1.tar.gz
Tango-af782aca2364948527c1107a02428897fb8382a1.zip
thread loading, mostly
Diffstat (limited to 'Software/Embedded_SW/Embedded/StateMachines')
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c116
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c2
2 files changed, 70 insertions, 48 deletions
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
index 21bf400de..dedf8ba98 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
+++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
@@ -109,6 +109,7 @@ HeadCleaningParameters *CleaningParameters = NULL;
bool CopyConfigured[MAX_SYSTEM_MODULES];
bool CleaningJobActive = false, JoggingJobActive = false;
char ErrorMsg[100];
+uint32_t JobEndTimeMillisec = 0;
ModuleStateEnum PrepareWaiting[MAX_SYSTEM_MODULES] = {ModuleIdle,ModuleIdle,ModuleIdle,ModuleIdle,ModuleIdle};
double job_length = 0.0;
@@ -396,58 +397,77 @@ uint32_t ThreadJoggingFunc(int speed)
{
ProcessParameters ProcessParametersCopy;
uint32_t status = OK;
- if ((JobIsActive() == true)||(JoggingJobActive == true)||(MachineReadyForHeating == false)||(FPGABurningActive==true))
+// JobEndTimeMillisec = msec_millisecondCounter;
+
+ if (JobIsActive() == true)
{
- status = ERROR;
- Report("Jog JobIsActive or machine initialisation", __FILE__, __LINE__, JobIsActive(), RpWarning, JoggingJobActive, 0);
+ Report("cannot jog while JobIsActive", __FILE__, __LINE__, JobIsActive(), RpWarning, JoggingJobActive, 0);
+ return ERROR;
}
- else
+ if (JoggingJobActive == true)
{
- //memcpy(&CopyConfigured,&Configured,sizeof(CopyConfigured));
- //usnprintf(ErrorMsg, 80,"Copy Configured T %d W %d I %d H %d W %d",CopyConfigured[Module_Thread],CopyConfigured[Module_Winder],CopyConfigured[Module_IDS],CopyConfigured[Module_Heaters],CopyConfigured[Module_Waste]);
- //Report(ErrorMsg, __FILE__, __LINE__, 0, RpWarning, 0, 0);
+ Report("cannot jog while JoggingJobActive", __FILE__, __LINE__, JoggingJobActive, RpWarning, JoggingJobActive, 0);
+ return ERROR;
+ }
+ if (MachineReadyForHeating == false)
+ {
+ Report("cannot jog while Machine not ReadyForHeating", __FILE__, __LINE__, MachineReadyForHeating, RpWarning, JoggingJobActive, 0);
+ return ERROR;
+ }
+ if (FPGABurningActive==true)
+ {
+ Report("cannot jog while FPGABurningActive", __FILE__, __LINE__, FPGABurningActive, RpWarning, JoggingJobActive, 0);
+ return ERROR;
+ }
+ if ((msec_millisecondCounter - JobEndTimeMillisec) <2000)
+ {
+ Report("cannot jog while Job Is ending", __FILE__, __LINE__, msec_millisecondCounter, RpWarning, JobEndTimeMillisec, 0);
+ return ERROR;
+ }
+ //memcpy(&CopyConfigured,&Configured,sizeof(CopyConfigured));
+ //usnprintf(ErrorMsg, 80,"Copy Configured T %d W %d I %d H %d W %d",CopyConfigured[Module_Thread],CopyConfigured[Module_Winder],CopyConfigured[Module_IDS],CopyConfigured[Module_Heaters],CopyConfigured[Module_Waste]);
+ //Report(ErrorMsg, __FILE__, __LINE__, 0, RpWarning, 0, 0);
- //set the job handler to ignore heaters, ids and waste in the state machine
- Configured[Module_Thread] = true;
- Configured[Module_Winder] = true;
- Configured[Module_IDS] = false;
- Configured[Module_Heaters] = false;
- Configured[Module_Waste] = false;
- //set the requested speed without changing other process parameters
- memcpy (&ProcessParametersCopy,&ProcessParametersKeep,sizeof(ProcessParameters));
- if(speed)
- ProcessParametersCopy.dyeingspeed = speed;
- else
- ProcessParametersCopy.dyeingspeed = 40;
- if (HandleProcessParameters(&ProcessParametersCopy,false)!= OK)
- {
- Report("Process parameters handling failed", __FILE__, __LINE__, 0, RpWarning, 0, 0);
- status = FAILED;
- }
- else
- {
- //load essential job prameters to enable thread running
- Ticket.n_segments = 1;
- n_segments = 1;
- Ticket.segments = my_malloc(sizeof(Ticket.segments));
- TSegment = my_malloc(sizeof(JobSegment));
- Tspool = my_malloc(sizeof(JobSpool));
- TSegment->length = 200.0;
- TSegment->n_brushstops = 0;
- Ticket.segments[0] = TSegment;
- Tspool->backingrate = 32;
- Tspool->bottombackingrate = 32;
- Tspool->segmentoffsetpulses = 1000;
- Tspool->startoffsetpulses = 220;
- Tspool->rotationsperpassage = 3.1415926*2;
- Tspool->has_limitswitchstartpointoffset = false;
- Ticket.spool = Tspool;
- Ticket.threadparameters = &SavedThreadParameters;
- CurrentJob = &Ticket;
- InternalWindingConfigMessage(Tspool);
- JoggingJobActive = true;
- StartJob(&Ticket);
- }
+ //set the job handler to ignore heaters, ids and waste in the state machine
+ Configured[Module_Thread] = true;
+ Configured[Module_Winder] = true;
+ Configured[Module_IDS] = false;
+ Configured[Module_Heaters] = false;
+ Configured[Module_Waste] = false;
+ //set the requested speed without changing other process parameters
+ memcpy (&ProcessParametersCopy,&ProcessParametersKeep,sizeof(ProcessParameters));
+ if(speed)
+ ProcessParametersCopy.dyeingspeed = speed;
+ else
+ ProcessParametersCopy.dyeingspeed = 40;
+ if (HandleProcessParameters(&ProcessParametersCopy,false)!= OK)
+ {
+ Report("Process parameters handling failed", __FILE__, __LINE__, 0, RpWarning, 0, 0);
+ status = FAILED;
+ }
+ else
+ {
+ //load essential job prameters to enable thread running
+ Ticket.n_segments = 1;
+ n_segments = 1;
+ Ticket.segments = my_malloc(sizeof(Ticket.segments));
+ TSegment = my_malloc(sizeof(JobSegment));
+ Tspool = my_malloc(sizeof(JobSpool));
+ TSegment->length = 200.0;
+ TSegment->n_brushstops = 0;
+ Ticket.segments[0] = TSegment;
+ Tspool->backingrate = 32;
+ Tspool->bottombackingrate = 32;
+ Tspool->segmentoffsetpulses = 1000;
+ Tspool->startoffsetpulses = 220;
+ Tspool->rotationsperpassage = 3.1415926*2;
+ Tspool->has_limitswitchstartpointoffset = false;
+ Ticket.spool = Tspool;
+ Ticket.threadparameters = &SavedThreadParameters;
+ CurrentJob = &Ticket;
+ InternalWindingConfigMessage(Tspool);
+ JoggingJobActive = true;
+ StartJob(&Ticket);
}
return status;
}
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c
index 7db59946e..3e790eabe 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c
+++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c
@@ -59,6 +59,7 @@ uint16_t n_units = 1;
uint16_t n_unit_segments = 0;
extern bool JobActive;
+extern uint32_t JobEndTimeMillisec;
/**********************************************************************
* the array and enum of PrintingState_t below must be in sync order
***********************************************************************/
@@ -656,6 +657,7 @@ uint32_t EndState(void *JobDetails, char *Message)
CloseJobFile();
//ROM_IntMasterEnable();
JobActive = false; //bug 4162 - test carefully
+ JobEndTimeMillisec = msec_millisecondCounter; //#4027
SendJobProgress(0.0,0,true,Message);
if ((JoggingJobActive==false)&&(CleaningJobActive == false))
{