aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2019-03-14 23:56:45 +0200
committerShlomo Hecht <shlomo@twine-s.com>2019-03-14 23:56:45 +0200
commit581fc5ccade02a541b9e9fff2ab8c34bf6deef2c (patch)
tree15c9bfc0326a4492e4ab380c3fe14d4624c18ef4 /Software/Embedded_SW/Embedded
parent8df72202be31480ecd82d475523a8708c34ebd53 (diff)
downloadTango-581fc5ccade02a541b9e9fff2ab8c34bf6deef2c.tar.gz
Tango-581fc5ccade02a541b9e9fff2ab8c34bf6deef2c.zip
version 1.3.7.9
Diffstat (limited to 'Software/Embedded_SW/Embedded')
-rw-r--r--Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c2
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h1
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/SSI_Comm/Dancer/Dancer.c5
-rw-r--r--Software/Embedded_SW/Embedded/Drivers/SSI_Comm/Dancer/Dancer.h1
-rw-r--r--Software/Embedded_SW/Embedded/Embedded.cfg1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c6
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS.h1
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c10
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c27
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c34
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c25
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c4
-rw-r--r--Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c103
16 files changed, 148 insertions, 84 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
index 15e9fe828..5efeaa71d 100644
--- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
+++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c
@@ -20,7 +20,7 @@ typedef struct
} TangoVersion_t;
-TangoVersion_t _gTangoVersion = {1,3,7,88};
+TangoVersion_t _gTangoVersion = {1,3,7,9};
#define BUILD_DATE __DATE__
char Dat[50] = BUILD_DATE;
char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//d
diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h
index 7599c10db..ecc70765b 100644
--- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h
+++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.h
@@ -201,6 +201,7 @@ uint32_t MotorMovetoBreakSensor (TimerMotors_t _motorId,bool direction, uint32_t
uint32_t MotorMovetoDancerPosition (TimerMotors_t _motorId,bool direction, uint32_t Freq,uint32_t DancerId,bool dancervaluedirection, callback_fptr callback,uint32_t timeout);
uint32_t MotorAbortMovetoLimitSwitch (TimerMotors_t _motorId);
uint32_t MotorMoveToStopper (TimerMotors_t _motorId,bool direction, uint32_t Speed, callback_fptr callback,uint32_t backlash,uint32_t timeout);
+uint32_t MotorMovetoEncoderPosition (TimerMotors_t MotorId, callback_fptr callback,uint32_t timeout);
uint32_t MotorGoTo(TimerMotors_t _motorIdn, uint32_t Steps);
#endif /* DRIVERS_MOTOR_H_ */
diff --git a/Software/Embedded_SW/Embedded/Drivers/SSI_Comm/Dancer/Dancer.c b/Software/Embedded_SW/Embedded/Drivers/SSI_Comm/Dancer/Dancer.c
index 6c692ed10..de2ceb698 100644
--- a/Software/Embedded_SW/Embedded/Drivers/SSI_Comm/Dancer/Dancer.c
+++ b/Software/Embedded_SW/Embedded/Drivers/SSI_Comm/Dancer/Dancer.c
@@ -84,6 +84,11 @@ uint32_t Read_Dryer_ENC_Position ()
FPGA_SSI_Dryer_ENC_Transnit();
return Dryer_ENC.Position;
}
+uint32_t Control_Read_Dryer_Position(HardwareDancerType DancerId, uint32_t Parameter1)
+{
+ return Dryer_ENC.Position;
+ //return SSI_enc.Position;
+}
void Loop_SSI()
{
diff --git a/Software/Embedded_SW/Embedded/Drivers/SSI_Comm/Dancer/Dancer.h b/Software/Embedded_SW/Embedded/Drivers/SSI_Comm/Dancer/Dancer.h
index bc03b3e9e..7a843b1c1 100644
--- a/Software/Embedded_SW/Embedded/Drivers/SSI_Comm/Dancer/Dancer.h
+++ b/Software/Embedded_SW/Embedded/Drivers/SSI_Comm/Dancer/Dancer.h
@@ -12,6 +12,7 @@
uint32_t Read_Dancer_Position (HardwareDancerType DancerId);
uint32_t Control_Read_Dancer_Position(HardwareDancerType DancerId, uint32_t Parameter1, uint32_t Parameter2);
uint32_t Read_Dryer_ENC_Position ();
+uint32_t Control_Read_Dryer_Position(uint32_t DryerID, uint32_t Parameter1, uint32_t Parameter2);
void Loop_SSI();
diff --git a/Software/Embedded_SW/Embedded/Embedded.cfg b/Software/Embedded_SW/Embedded/Embedded.cfg
index ea7a370b8..89aff2c92 100644
--- a/Software/Embedded_SW/Embedded/Embedded.cfg
+++ b/Software/Embedded_SW/Embedded/Embedded.cfg
@@ -60,6 +60,7 @@ Program.global.timer1 = Hwi.create(37, "&MillisecInterrupt", hwi6Params);
var hwi17Params = new Hwi.Params();
hwi17Params.instance.name = "timer3";
hwi17Params.arg = 3;
+hwi17Params.priority = 96;
Program.global.timer3 = Hwi.create(51, "&ScrewTimerInterrupt", hwi17Params);
/*
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
index 5fe242436..8e4a36e62 100644
--- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
+++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c
@@ -499,9 +499,9 @@ uint32_t MillisecLowLoop(uint32_t tick)
//Read_MidTank_Pressure_Sensor(Disp_i);
}
FPGA_GetAllDispensersValveBusyOCD();
- /*temp = Read_Fans_Tacho();
+ temp = Read_Fans_Tacho();
DrawerFansStatus = temp & 0x1F;
- SystemFansStatus = temp & 0xE0;*/
+ SystemFansStatus = temp & 0xE0;
KeepAliveOneSecondCall();
for (Motor_i = 0;Motor_i < NUM_OF_MOTORS;Motor_i++)
{
diff --git a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c
index e3f593924..425894857 100644
--- a/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c
+++ b/Software/Embedded_SW/Embedded/Modules/Diagnostics/DiagnosticActions.c
@@ -254,6 +254,12 @@ uint32_t SetDigitalOutRequestRequestFunc(MessageContainer* requestContainer)
else
Valve_Set(VALVE_MIXCHIP_WASTECH,0);
break;
+ case INTERFACE_IOS__GPO_BLOWER_PWM:
+ if (request->value == true)
+ Control_Dryer_Fan(START,75);//use START or STOP, 0 - 100%();
+ else
+ Control_Dryer_Fan(STOP,0);//use START or STOP, 0 - 100%();
+ break;
default:
responseContainer.has_error = true;
responseContainer.error = ERROR_CODE__GENERAL_ERROR;
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
index 3f62fc3b6..a6fbe3ebc 100644
--- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c
@@ -782,6 +782,8 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
if (readValue > HeaterCmd[index].targettemperatue)
{
DeActivateHeater(index);
+ HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,0);
+ HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,0);
}
return ERROR;
}
@@ -795,6 +797,8 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue)
DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary);
DeActivateHeater(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain);
//Heaters OFF until coming into the proportional band
+ HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain,0);
+ HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary,0);
return OK;
}
// if (readValue < ((HeaterCmd[index].targettemperatue * (100-HeaterControl[index].outputproportionalband))/100))
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h
index d27fb7c56..e7e6f3ff6 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h
@@ -31,7 +31,6 @@ void IDS_Dispenser_Set_Flow_Params (char DispenserId,double NanoLitterPerPulse,c
void IDS_Dispenser_RefillStarted (char DispenserId);
void IDS_Dispenser_RefillEnded (char DispenserId);
void IDS_Dispenser_MovingDirection (char DispenserId, bool direction);
-uint32_t IDS_Dispenser_Build_Pressure(int DispenserId, callback_fptr callback);
#endif //MODULES_IDS_IDS_H_
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c
index acaf19744..abfabe17d 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c
@@ -62,10 +62,15 @@ uint32_t IdsGetMotorSpeed(uint32_t DispenserId)
uint32_t IDS_Dispenser_Build_Pressure_Callback(uint32_t DispenserId, uint32_t ReadValue)
{
+ uint32_t status;
DispenserPrepareTime[DispenserId]+=DispenserPrepareTimeLag;
if ((GetDispenserPressure(DispenserId)>=DispenserPreparePressure)||(DispenserPrepareTime[DispenserId]>=DispenserPrepareTimeout))
{
+ if (DispenserPrepareTime[DispenserId]>=DispenserPrepareTimeout)
+ status = ERROR;
+ else
+ status = OK;
if (SafeRemoveControlCallback(DispenserControlId[DispenserId], IDS_Dispenser_Build_Pressure_Callback )==OK)
DispenserControlId[DispenserId] = 0xFF;
else
@@ -76,11 +81,12 @@ uint32_t IDS_Dispenser_Build_Pressure_Callback(uint32_t DispenserId, uint32_t Re
if (DispenserCallback[DispenserId])
{
- DispenserCallback[DispenserId](DispenserId,ReadValue);
+
+ DispenserCallback[DispenserId](DispenserId,status);
DispenserCallback[DispenserId] = 0;
}
}
- return OK;
+ return status;
}
uint32_t IDS_Dispenser_Build_Pressure(int DispenserId, callback_fptr callback)
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
index bf73ed7fa..b201e6611 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h
@@ -39,6 +39,9 @@ uint32_t IDSSegmentState(void *JobDetails, int SegmentId);
uint32_t IDSDistanceToSpoolState(void);
uint32_t IDSEndState(void *JobDetails);
+uint32_t IDS_StartLubrication(void);
+uint32_t IDS_StopLubrication(void);
+
uint32_t IDS_DispenserPidRequestMessage(HardwarePidControl* request);
uint32_t IDS_DispenserControlInit();
@@ -49,6 +52,7 @@ uint32_t IDS_Dispenser_Alarm_On (uint8_t deviceID);
uint32_t IDS_Dispenser_Alarm_Off (uint8_t deviceID);
uint32_t IDS_CheckDispenserLimitSwitch (LimitSwitchAlarms LS_Id);
+uint32_t IDS_Dispenser_Build_Pressure(int DispenserId, callback_fptr callback);
void IDS_Dispenser_SetTimeOutValues(uint32_t CloseTimeout, uint32_t OpenTimeout);
void IDS_Dispenser_SetBackLashValues(double initialdispenserpressure, uint32_t initialdispensertimeout, uint32_t initialdispensertimelag);
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
index 2be233962..0a9d40a15 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
@@ -31,11 +31,12 @@ typedef struct
PID_Config_Params m_params;
}DispenserControlConfig_t;
HardwarePidControl *DispensersControl;// = (HardwarePidControl *)GENHWCFG_MAP_IN_FLASH + 0x4000;
-
+#define LUBRICANT_DISPENSER 7
+#define MAX_DYE_DISPENSERS 7
int32_t DispenserSamples[MAX_SYSTEM_DISPENSERS][MAX_CONTROL_SAMPLES] = {0};
int DispenserSamplePointer[MAX_SYSTEM_DISPENSERS] = {0};
double DispenserNormalizedErrorCoEfficient[MAX_SYSTEM_DISPENSERS] = {0};
-
+double lubricant_speed = 0.0;
HardwarePidControlType ThreadDispenserIdToControlId[MAX_SYSTEM_DISPENSERS] = { HARDWARE_PID_CONTROL_TYPE__Dispenser1,HARDWARE_PID_CONTROL_TYPE__Dispenser2,HARDWARE_PID_CONTROL_TYPE__Dispenser3,HARDWARE_PID_CONTROL_TYPE__Dispenser4,HARDWARE_PID_CONTROL_TYPE__Dispenser5,HARDWARE_PID_CONTROL_TYPE__Dispenser6,HARDWARE_PID_CONTROL_TYPE__Dispenser7,HARDWARE_PID_CONTROL_TYPE__Dispenser8};
bool DispenserReady[MAX_SYSTEM_DISPENSERS] = {true};
@@ -160,6 +161,13 @@ void DispenserPrepareReady(void)
if (JobTicket->segments[Segment_i]->brushstops[Brush_i]->dispensers[Dispenser_i]->nanolitterpersecond>0.0)
{
DispenserUsedInJob[DispenserId] = true;
+ if(DispenserId == LUBRICANT_DISPENSER)
+ {
+ lubricant_speed = JobTicket->segments[0]->brushstops[0]->dispensers[Dispenser_i]->nanolitterpersecond/
+ JobTicket->segments[0]->brushstops[0]->dispensers[Dispenser_i]->nanoliterperpulse;
+ REPORT_MSG (lubricant_speed*100, "LUBRICANT_SPEED*100");
+ }
+
}
}//for dispenser
}//if dispensers
@@ -522,3 +530,18 @@ uint32_t IDSPreSegmentState(void *JobDetails, int SegmentId)
return OK;
}
+uint32_t IDS_StartLubrication(void)
+{
+ IDS_Dispenser_Start_Motor_and_Open_Valve(LUBRICANT_DISPENSER,lubricant_speed,NULL);
+ Lubricant_2Way_Valve (START);
+ return OK;
+}
+uint32_t IDS_StopLubrication(void)
+{
+ if(DispenserUsedInJob[LUBRICANT_DISPENSER])
+ {
+ IDS_Dispenser_Close_Valve_And_Stop_Motor(LUBRICANT_DISPENSER,IDS_Valve_EndValveReady);
+ Lubricant_2Way_Valve (STOP);
+ }
+ return OK;
+}
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
index a82fe37e6..ff319918e 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
@@ -38,21 +38,21 @@
/* typedef enum
{
0 THREAD_LOAD_INIT,
- 1 THREAD_LOAD_REDUCE_HEAT, //HEATERS OFF, DRYER BLOWER OFF, BLOWER LOW,
- 2 THREAD_LOAD_SET_LOAD_ARM_TO_START_POSITION,//USE NOTATION HOW MANY ROTATIONS IN THE DRYER, OR CHECK AGAINST STOPPER. MOVE SLOWLY
- 3 THREAD_LOAD_CENTER_HEAD_ROCKERS, //puthead cleaning rockers to middle position
- 4 THREAD_LOAD_OPEN_COVERS, //OPEN DYEING HEAD COVER AND DRYER LID
+ 1 THREAD_LOAD_REDUCE_HEAT, //HEATERS OFF, DRYER BLOWER OFF, BLOWER LOW,
+ 2 THREAD_LOAD_SET_LOAD_ARM_TO_START_POSITION, //USE NOTATION HOW MANY ROTATIONS IN THE DRYER, OR CHECK AGAINST STOPPER. MOVE SLOWLY
+ 3 THREAD_LOAD_CENTER_HEAD_ROCKERS, //puthead cleaning rockers to middle position
+ 4 THREAD_LOAD_OPEN_COVERS, //OPEN DYEING HEAD COVER AND DRYER LID
5 THREAD_LOAD_LIFT_DANCERS,
- 6 THREAD_LOAD_LIFT_ROCKERS, //MACHINE IS READY. SEND MESSAGE, START TIMER TO CLOSE LIDS, WAIT FOR OPERATOR RESPONSE
- 7 THREAD_LOAD_INITIAL_TENSION,//CHECK SPOOL PRESENCERUN WINDER UNTIL BREAK SENSOR IS IDENTIFIEING MOVEMENT FOR A SECOND
+ 6 THREAD_LOAD_LIFT_ROCKERS, //MACHINE IS READY. SEND MESSAGE, START TIMER TO CLOSE LIDS, WAIT FOR OPERATOR RESPONSE
+ 7 THREAD_LOAD_INITIAL_TENSION, //CHECK SPOOL PRESENCERUN WINDER UNTIL BREAK SENSOR IS IDENTIFIEING MOVEMENT FOR A SECOND
8 THREAD_LOAD_CLOSE_ROCKERS,
- 9 THREAD_LOAD_CLOSE_DANCERS, //SEND DANCER MOTORS TO PRESET LOCATION, CHECK THAT THE DANCERS ARE ON THE THREAD
+ 9 THREAD_LOAD_CLOSE_DANCERS, //SEND DANCER MOTORS TO PRESET LOCATION, CHECK THAT THE DANCERS ARE ON THE THREAD
10 THREAD_LOAD_CLOSE_LIDS,
11 THREAD_LOAD_RESUME_HEATING,
- 12 THREAD_LOAD_JOG_FEEDER_TO_MIDDLE_POINT,//JOG THE FEEDER MOTOR UNTIL THE FEEDER DANCER IS AT MIDDLE POSITION
- 13 THREAD_LOAD_DRYER_LOADING, //START FEEDER PID, ROTATE LOADING ARM COUNTER THREAD DIRECTION X CIRCLES ACCORDING TO RML. FEEDER SPEED IS 40
- //KEEP NOTATION HOW MANY ROTATIONS IN THE DRYER
- 14 THREAD_LOAD_JOG_THREAD, //JOG THREAD SHORTLY TO MAKE SURE SPOOL IS RUNNING. REPORT END OF LOADING
+ 12 THREAD_LOAD_JOG_FEEDER_TO_MIDDLE_POINT, //JOG THE FEEDER MOTOR UNTIL THE FEEDER DANCER IS AT MIDDLE POSITION
+ 13 THREAD_LOAD_DRYER_LOADING, //START FEEDER PID, ROTATE LOADING ARM COUNTER THREAD DIRECTION X CIRCLES ACCORDING TO RML. FEEDER SPEED IS 40
+ //KEEP NOTATION HOW MANY ROTATIONS IN THE DRYER
+ 14 THREAD_LOAD_JOG_THREAD, //JOG THREAD SHORTLY TO MAKE SURE SPOOL IS RUNNING. REPORT END OF LOADING
15 THREAD_LOAD_END
}THREAD_LOAD_STAGES_ENUM;*/
THREAD_LOAD_STAGES_ENUM LoadStages = THREAD_LOAD_INIT;
@@ -222,9 +222,9 @@
else
{
LoadStages++;
- if (LoadStages != THREAD_LOAD_INITIAL_TENSION) //on this satge we should wait for user call
+ if (LoadStages != THREAD_LOAD_INITIAL_TENSION) //on this stage we should wait for user call
{
- ThreadLoadStateMachine(LoadStages);
+ //ThreadLoadStateMachine(LoadStages);
}
}
}
@@ -340,7 +340,7 @@
{
Control_Dryer_Fan(START,75);//use START or STOP, 0 - 100%
LoadStages++;
- ThreadLoadStateMachine(LoadStages);
+ //ThreadLoadStateMachine(LoadStages);
}
return OK;
}
@@ -371,7 +371,7 @@
LoadStages++;
if (LoadStages != THREAD_LOAD_INITIAL_TENSION) //on this satge we should wait for user call
{
- ThreadLoadStateMachine(LoadStages);
+ //ThreadLoadStateMachine(LoadStages);
}
}
}
@@ -417,7 +417,7 @@
//Keep Notation How Many Rotations In The Dryer
//LoadArmInfo.LoadArmBackLash = 0;
- //LoadArmInfo.LoadArmRounds = 0xFF;
+ LoadArmInfo.LoadArmRounds = 0xFF;
FileWrite(&LoadArmInfo, sizeof(LoadArmInfo),LoadArmPath);
return OK;
}
@@ -428,7 +428,7 @@
ControlId = 0xFF;
ThreadAbortJoggingFunc();
LoadStages++;
- ThreadLoadStateMachine(LoadStages);
+ //ThreadLoadStateMachine(LoadStages);
return OK;
}
uint32_t Thread_Load_Jog_Thread(void)
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
index c598e0c55..0277d1daa 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c
@@ -40,6 +40,8 @@ void ScrewsStartControlTimer (void);
bool Winder_ScrewHoming = false;
bool ScrewCurrentDirection = false; //holds current screw direction
uint32_t ScrewDirectionChangeCounter = 1; //holds the current number of runs of the screw - will be used to build the cone
+uint32_t ScrewChangeCounter = 0;
+uint32_t ScrewChangeLimit = 0;
uint32_t CalculationDirectionChangeCounter = 1; //holds the current number of runs of the screw - will be used to build the cone
uint16_t WinderMotorSpeed[MAX_WINDER_SPEED_CALCULATION];
uint16_t WinderMotorSpeedCounter = 0;
@@ -196,13 +198,17 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag)
double RotationsPerSecond;
int32_t Averagewinderspeed = 0;
- TotalWinderSpeed-=WinderMotorSpeed[WinderMotorSpeedCounter];
- WinderMotorSpeed[WinderMotorSpeedCounter] = CurrentControlledSpeed[WINDER_MOTOR];
- TotalWinderSpeed+=WinderMotorSpeed[WinderMotorSpeedCounter];
- if (WinderMotorSpeedCounter++>=MAX_WINDER_SPEED_CALCULATION)
+ ScrewChangeCounter++;
+ if ((ScrewChangeCounter>3)&&(ScrewChangeCounter<(ScrewChangeLimit-2))) //do not take the winder speed near the limits
{
- WinderMotorSpeedCounter=0;
- WinderMotorSpeedRollOver=true;
+ TotalWinderSpeed-=WinderMotorSpeed[WinderMotorSpeedCounter];
+ WinderMotorSpeed[WinderMotorSpeedCounter] = CurrentControlledSpeed[WINDER_MOTOR];
+ TotalWinderSpeed+=WinderMotorSpeed[WinderMotorSpeedCounter];
+ if (WinderMotorSpeedCounter++>=MAX_WINDER_SPEED_CALCULATION)
+ {
+ WinderMotorSpeedCounter=0;
+ WinderMotorSpeedRollOver=true;
+ }
}
if (ScrewDirectionChangeCounter == CalculationDirectionChangeCounter)
@@ -260,7 +266,7 @@ uint32_t Screw100msecDirectionChange(uint32_t deviceID, uint32_t BusyFlag)
//Report(TempScrewStr,__FILE__,__LINE__,0,RpWarning,0, 0);
//Report(ScrewStr,__FILE__,__LINE__,ScrewCurrentDirection,RpWarning,CalculationDirectionChangeCounter, 0);
//REPORT_MSG(temp , "new winder speed");
- Report("new winder speed",__FILE__,__LINE__,temp,RpWarning,ScrewSpeed,0);
+ Report("new winder speed",__FILE__,ScrewNumberOfSteps,temp,RpWarning,ScrewSpeed,0);
}
/********************************************************************************/
@@ -397,6 +403,7 @@ void ScrewsStartControlTimer (void)
//ROM_TimerConfigure(Screw_timerBase, TIMER_CFG_PERIODIC); // 32 bits Timer
TimerEnable(Screw_timerBase, TIMER_A);
ROM_IntEnable(INT_TIMER3A);
+ //IntPrioritySet(Screw_timerBase, 0x40);
ROM_TimerIntEnable(Screw_timerBase, TIMER_TIMA_TIMEOUT);
ROM_TimerLoadSet(Screw_timerBase, TIMER_A,(int)1200000/*10 millisec*/ );
Report("ScrewsStartControlTimer direction,speed ", __FILE__,__LINE__,ScrewCurrentDirection, RpMessage, ScrewSpeed, 0);
@@ -410,9 +417,11 @@ void ScrewTimerInterrupt(int ARG0)
if (SCREW_TimerActivated == true)
{
+ ROM_TimerLoadSet(Screw_timerBase, TIMER_A,(int)ScrewRunningTime);
MotorSetDirection (HARDWARE_MOTOR_TYPE__MOTO_SCREW, ScrewCurrentDirection);
MotorSetSpeedDirect(HARDWARE_MOTOR_TYPE__MOTO_SCREW,ScrewSpeed);
- ROM_TimerLoadSet(Screw_timerBase, TIMER_A,(int)ScrewRunningTime);
+ ScrewChangeCounter = 0;
+ ScrewChangeLimit = ScrewRunningTime/12000000;
ScrewDirectionChangeCounter++;
}
else
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
index 6a8474438..f4dc6a170 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c
@@ -30,6 +30,7 @@
#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h"
#include "modules/heaters/heaters.h"
#include "modules/General/process.h"
+#include "modules/ids/ids_ex.h"
#include "Modules/AlarmHandling/AlarmHandling.h"
#include "Control/MillisecTask.h"
@@ -708,6 +709,7 @@ uint32_t ThreadPreSegmentState(void *JobDetails, uint32_t SegmentId)
MotorSetDirection((TimerMotors_t)HARDWARE_MOTOR_TYPE__MOTO_LLOADING,MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_LLOADING].directionthreadwize);
MotorSetSpeed(HARDWARE_MOTOR_TYPE__MOTO_LLOADING, 1);
}
+ IDS_StartLubrication();
}
// activate control fr all motors
//set speed for both rocker motors
@@ -807,7 +809,7 @@ char Endstr[150];
}
MotorStop(HARDWARE_MOTOR_TYPE__MOTO_RLOADING,Hard_Hiz);
MotorStop(HARDWARE_MOTOR_TYPE__MOTO_LLOADING,Hard_Hiz);
-
+ IDS_StopLubrication();
return OK;
}
diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
index 8c3d127ab..05ed98abd 100644
--- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
+++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c
@@ -587,70 +587,73 @@ void JobRequestFunc(MessageContainer* requestContainer)
ErrorCode error = ERROR_CODE__NONE;
JobEndReasonEnum JobAlarmReason = JOB_OK;
- JobRequest* request = job_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
- if (request != NULL)
+ if (JobActive == false)
{
- ustrncpy (JobToken, requestContainer->token,36);
- previousJobLength = 0.0;
- JobTicket *Ticket = request->jobticket;
- int TicketSize = job_ticket__get_packed_size(Ticket);
- if (TicketSize >= MAX_TICKET_SIZE)
+ JobRequest* request = job_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data);
+ if (request != NULL)
{
- LOG_ERROR (TicketSize, "job ticket message too long");
- status = FAILED;
- error = ERROR_CODE__BAD_CRC;
- usnprintf(ErrorMsg, 100, "job ticket message too long");
- }
- else
- {
- //memcpy(CurrentJob, Ticket,TicketSize);
- CurrentJob = Ticket;
- if (CurrentRequest!= NULL)
- job_request__free_unpacked(CurrentRequest,NULL);
- CurrentRequest = request;
-
- status = PASSED;
- JobEndReason = JOB_OK;
- JobAlarmReason = AlarmHandlingPrepareJob(CurrentJob);
- if (JobAlarmReason ==OK)
+ ustrncpy (JobToken, requestContainer->token,36);
+ previousJobLength = 0.0;
+ JobTicket *Ticket = request->jobticket;
+ int TicketSize = job_ticket__get_packed_size(Ticket);
+ if (TicketSize >= MAX_TICKET_SIZE)
{
-#warning Process parameters in job request are not handled. push separately for now
- if (Ticket->processparameters)
+ LOG_ERROR (TicketSize, "job ticket message too long");
+ status = FAILED;
+ error = ERROR_CODE__BAD_CRC;
+ usnprintf(ErrorMsg, 100, "job ticket message too long");
+ }
+ else
+ {
+ //memcpy(CurrentJob, Ticket,TicketSize);
+ CurrentJob = Ticket;
+ if (CurrentRequest!= NULL)
+ job_request__free_unpacked(CurrentRequest,NULL);
+ CurrentRequest = request;
+
+ status = PASSED;
+ JobEndReason = JOB_OK;
+ JobAlarmReason = AlarmHandlingPrepareJob(CurrentJob);
+ if (JobAlarmReason ==OK)
{
- if (HandleProcessParameters(Ticket->processparameters)!= OK)
+ #warning Process parameters in job request are not handled. push separately for now
+ if (Ticket->processparameters)
{
- status = FAILED;
- error = ERROR_CODE__INVALID_PARAMETER;
- usnprintf(ErrorMsg, 100, "Hardware Parameters Not Set");
+ if (HandleProcessParameters(Ticket->processparameters)!= OK)
+ {
+ status = FAILED;
+ error = ERROR_CODE__INVALID_PARAMETER;
+ usnprintf(ErrorMsg, 100, "Hardware Parameters Not Set");
+ }
}
- }
- REPORT_MSG(0,"Process parameters in job request are not handled. push separately for now");
- if (Ticket->spool)
- {
- if (InternalWindingConfigMessage(Ticket->spool)!= OK)
+ REPORT_MSG(0,"Process parameters in job request are not handled. push separately for now");
+ if (Ticket->spool)
{
- status = FAILED;
- error = ERROR_CODE__INVALID_PARAMETER;
- usnprintf(ErrorMsg, 100, "spool parameters error");
+ if (InternalWindingConfigMessage(Ticket->spool)!= OK)
+ {
+ status = FAILED;
+ error = ERROR_CODE__INVALID_PARAMETER;
+ usnprintf(ErrorMsg, 100, "spool parameters error");
+ }
}
- }
+ }
+ else
+ {
+ status = FAILED;
+ error = JobError_to_ErrorCode[JobAlarmReason];
+ usnprintf(ErrorMsg, 100, "Existing alarms prevent running");
+ }
}
- else
+ if (status == PASSED)
{
- status = FAILED;
- error = JobError_to_ErrorCode[JobAlarmReason];
- usnprintf(ErrorMsg, 100, "Existing alarms prevent running");
+ Report("Job Request ",__FILE__,__LINE__,Ticket->processparameters->dyeingspeed,RpWarning,Ticket->n_segments, Ticket->intersegmentlength);
+ StartJob(CurrentJob);
}
}
- if (status == PASSED)
- {
- Report("Job Request ",__FILE__,__LINE__,Ticket->processparameters->dyeingspeed,RpWarning,Ticket->n_segments, Ticket->intersegmentlength);
- StartJob(CurrentJob);
- }
+ else
+ status = FAILED;
}
- else
- status = FAILED;
JobResponse response = JOB_RESPONSE__INIT;
JobStatus jobStatus = JOB_STATUS__INIT;