aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2018-07-15 14:32:42 +0300
committerShlomo Hecht <shlomo@twine-s.com>2018-07-15 14:32:42 +0300
commit3a674ea0ef5c71843bd876da3bb5e0b0f535110e (patch)
tree069f6411a4145dfa9ccfe0aa2f9a8758c92a8b8e /Software/Embedded_SW/Embedded
parentcc425e019d3a7d3494ac15ffe213b6b47b1c64ed (diff)
downloadTango-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')
-rw-r--r--Software/Embedded_SW/Embedded/Common/Utilities/idle_task.c4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/AlarmHandling/Diagnostics.c4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c8
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c27
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.c87
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Printing/PrintingSTM.h1
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);