aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c2
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS.h4
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c10
-rw-r--r--Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c103
-rw-r--r--Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c2
-rw-r--r--Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs4
6 files changed, 69 insertions, 56 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 64002276c..bf2c4e98d 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,4,6,43};
+TangoVersion_t _gTangoVersion = {1,4,6,44};
#define BUILD_DATE __DATE__
char Dat[50] = BUILD_DATE;
char _gTangoName [MAX_STRING_LEN] = "Tango01 ";//e
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h
index ee308ce62..1c17c4f6b 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS.h
@@ -13,6 +13,10 @@ extern double DispenserPreparePressure ;
extern uint32_t DispenserPrepareTimeout ;
extern uint32_t DispenserPrepareTimeLag ;
extern uint32_t InitialDispenserSpeed;
+extern double InitialDispenserPressure;
+extern uint32_t InitialDispenserTimeout;
+
+
extern uint32_t DispenserIdToMotorId[MAX_SYSTEM_DISPENSERS];
extern float DispenserPressure[MAX_SYSTEM_DISPENSERS];
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c
index 663a6713f..79418a8d8 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c
@@ -72,8 +72,8 @@ bool PrimingActive[MAX_SYSTEM_DISPENSERS] = {false,false,false,false,false,false
uint32_t DispenserHomingControlId[MAX_SYSTEM_DISPENSERS] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
uint32_t DispenserBacklashControlId[MAX_SYSTEM_DISPENSERS] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
uint32_t DispenserHomingTime[MAX_SYSTEM_DISPENSERS] = {0,0,0,0,0,0,0,0};
-#define INITIAL_DISPENSER_PRESSURE 2.10
-#define INITIAL_DISPENSER_TIMEOUT_LIMIT 60000
+#define INITIAL_DISPENSER_PRESSURE 3.85
+#define INITIAL_DISPENSER_TIMEOUT_LIMIT 120000
#define INITIAL_DISPENSER_TIMEOUT 100
#define INITIAL_DISPENSER_SPEED 1000
@@ -105,8 +105,10 @@ void IDS_Dispenser_SetAutoHoming_Config(AutoHoming_Config_enum Config)
void IDS_Dispenser_SetBackLashValues(double initialdispenserpressure, uint32_t initialdispensertimeout, uint32_t initialdispensertimelag, uint32_t initialdispenserspeed)
{
- InitialDispenserPressure = initialdispenserpressure;
- InitialDispenserTimeout = initialdispensertimeout;
+ if (initialdispenserpressure>2)
+ InitialDispenserPressure = initialdispenserpressure;
+ if (initialdispensertimeout>70000)
+ InitialDispenserTimeout = initialdispensertimeout;
InitialDispenserTimeLag = initialdispensertimelag;
InitialDispenserSpeed = initialdispenserspeed;
diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
index b15f70267..327d80eb1 100644
--- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
+++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c
@@ -514,6 +514,37 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue)
char IdMessage[100];
int SegmentPrepareWFCFCounter = 0;
bool pressureReady = false,endOfPrepareWCF = false;
+
+bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,double pressure)
+{
+ TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[DispenserId];
+ float updatedSpeed,tempSpeed;
+
+ if (pressure > RefMaxPressure*1.03)
+ {
+ tempSpeed = CurrentDispenserSpeed[DispenserId];
+ //updatedSpeed = (tempSpeed * 0.992 > 100) ? tempSpeed * 0.992 : 100;
+ updatedSpeed = tempSpeed*0.98;
+ MotorSetSpeed(HW_Motor_Id, updatedSpeed);
+ CurrentDispenserSpeed[DispenserId] = updatedSpeed;
+ ReportWithPackageFilter(IDSFilter,"IDS decrease speed",__FILE__,DispenserId,(int)updatedSpeed,RpWarning,(int)(pressure*100),0);
+ //return true; //ready
+ }
+ else if (pressure < RefMaxPressure*0.97)
+ {
+ tempSpeed = CurrentDispenserSpeed[DispenserId];
+ if (tempSpeed<50) tempSpeed = 50;
+ updatedSpeed = (tempSpeed * 1.02 < InitialDispenserSpeed) ? tempSpeed * 1.02 : InitialDispenserSpeed;
+ MotorSetSpeed(HW_Motor_Id, updatedSpeed);
+ CurrentDispenserSpeed[DispenserId] = updatedSpeed;
+ ReportWithPackageFilter(IDSFilter,"IDS increase speed",__FILE__,DispenserId,(int)updatedSpeed,RpWarning,(int)(pressure*100),0);
+ //return false; //not ready
+ }
+ if ((pressure>RefMaxPressure)&&(pressure<(RefMaxPressure+0.1)))
+ return true;
+ return false;
+}
+
//********************************************************************************************************************
uint32_t IDS_Prepare_Callback(uint32_t DispenserId, uint32_t ReadValue)
{
@@ -525,6 +556,7 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue)
//set the speed only before the first segment, speed is constant accros job
int Dispenser_i,n_dispensers;
double segmentfirst_speed;
+ double pressure;
//REPORT_MSG((int)DispenserPrepareControlId, "Prepare Callback");
@@ -532,75 +564,50 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue)
if (pressureReady == false)
{
- if (Special_Dispensers == false)
+ if (DispenserBuildTimeCounter<(2*eOneSecond))
{
- if (DispenserBuildTimeCounter<(2*eOneSecond))
+ for (i = 0; i < MAX_DYE_DISPENSERS; i++)
{
- for (i = 0; i < MAX_DYE_DISPENSERS; i++)
- {
- DispenserTotalPrepareSteps[i]+=(CurrentDispenserSpeed[i]*PRESSURE_READ_TIME_GAP/eOneSecond);
- DispenserLastMovementDown[i] = false;
- }
- //REPORT_MSG(DispenserBuildTimeCounter,"waiting 2 seconds for pressure changes");
- return OK;
+ DispenserTotalPrepareSteps[i]+=(CurrentDispenserSpeed[i]*PRESSURE_READ_TIME_GAP/eOneSecond);
+ DispenserLastMovementDown[i] = false;
}
+ //REPORT_MSG(DispenserBuildTimeCounter,"waiting 2 seconds for pressure changes");
+ return OK;
}
for (i = 0; i < MAX_DYE_DISPENSERS; i++)
{
+ pressure = GetDispenserPressure(i);
//IDS_StopHomeDispenser(i);
if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers
{
DispenserTotalPrepareSteps[i]+=(CurrentDispenserSpeed[i]*PRESSURE_READ_TIME_GAP/eOneSecond);
-
HW_Motor_Id = DispenserIdToMotorId[i];
- if (GetDispenserPressure(i) > DispenserPreparePressure*1.05)
+//#ifdef DISPENSER_UP_MOVEMENT
+ if (DispenserTotalPrepareSteps[i]<InitialDispenserTimeout)
{
-#ifdef DISPENSER_UP_MOVEMENT
- if (DispenserTotalPrepareSteps[i]>120000)
-#endif
- {
- NumofReadyDispensers++;
- ReportWithPackageFilter(IDSFilter,"Dispenser total prepare steps ready",__FILE__,DispenserTotalPrepareSteps[i],(int)(DispenserPreparePressure*100),RpWarning,IDS_Dispenser_Data[i].consumedinnanolitter,0);
- }
- if (Special_Dispensers == true)
- {
- MotorStop(HW_Motor_Id, Hard_Hiz);
- CurrentDispenserSpeed[i] = 0;
- //ReportWithPackageFilter(IDSFilter,"IDS stopped ready",__FILE__,i,(int)(DispenserPreparePressure*100),RpWarning,(int)NumofReadyDispensers,0);
- }
- else
- {
- tempSpeed = CurrentDispenserSpeed[i];
- updatedSpeed = (tempSpeed*0.992>100)?tempSpeed*0.992:100;
- MotorSetSpeed(HW_Motor_Id, updatedSpeed);
- CurrentDispenserSpeed[i] = updatedSpeed;
- //ReportWithPackageFilter(IDSFilter,"IDS reduce speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0);
- }
+ AdjustDispenserSpeedToPressure(i,InitialDispenserPressure,pressure);
+ }
+ else if (pressure > DispenserPreparePressure*1.2)
+ {
+ MotorStop(HW_Motor_Id, Hard_Hiz);
+ CurrentDispenserSpeed[i] = 1;
}
else
{
- if (Special_Dispensers == true)
- {
- tempSpeed = (DispenserPreparePressure-GetDispenserPressure(i))*InitialDispenserSpeed;
- if (tempSpeed<300)
- tempSpeed = 300;
- }
- else
- {
- tempSpeed = CurrentDispenserSpeed[i];
- }
- updatedSpeed = (tempSpeed*1.03<InitialDispenserSpeed)?tempSpeed*1.03:InitialDispenserSpeed;
- MotorSetSpeed(HW_Motor_Id, updatedSpeed);
- CurrentDispenserSpeed[i] = updatedSpeed;
+ if (AdjustDispenserSpeedToPressure(i,DispenserPreparePressure,pressure) == true)
+ NumofReadyDispensers++;
}
+//#endif
+ ReportWithPackageFilter(IDSFilter,"IDS prepare",__FILE__,i,(int)DispenserTotalPrepareSteps[i],RpWarning,(int)(CurrentDispenserSpeed[i]*100),0);
}
}
- if (GetDispenserPressure(CLEANER_DISPENSER) > 0.02)
+ pressure = GetDispenserPressure(CLEANER_DISPENSER);
+ if (pressure > 0.02)
{
HW_Motor_Id = DispenserIdToMotorId[CLEANER_DISPENSER];
MotorStop(HW_Motor_Id, Hard_Hiz);
if (CurrentDispenserSpeed[CLEANER_DISPENSER])
- ReportWithPackageFilter(IDSFilter,"IDS stop cleaner",__FILE__,CLEANER_DISPENSER,(int)(GetDispenserPressure(CLEANER_DISPENSER)*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0);
+ ReportWithPackageFilter(IDSFilter,"IDS stop cleaner",__FILE__,CLEANER_DISPENSER,(int)(pressure*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0);
CurrentDispenserSpeed[CLEANER_DISPENSER] = 0;
}
@@ -724,7 +731,7 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue)
HW_Motor_Id = DispenserIdToMotorId[CLEANER_DISPENSER];
MotorStop(HW_Motor_Id, Hard_Hiz);
CurrentDispenserSpeed[CLEANER_DISPENSER] = 0;
- ReportWithPackageFilter(IDSFilter,"IDS stop cleaner",__FILE__,CLEANER_DISPENSER,(int)(GetDispenserPressure(CLEANER_DISPENSER)*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0);
+ ReportWithPackageFilter(IDSFilter,"IDS stop cleaner",__FILE__,CLEANER_DISPENSER,(int)(pressure*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0);
}
SafeRemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback );
DispenserPrepareControlId = 0xFF;
diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
index c478b82de..84cc5cf20 100644
--- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
+++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c
@@ -717,7 +717,7 @@
MotorControlConfig[FEEDER_MOTOR].m_params.MIN = MotorsControl[FEEDER_MOTOR].outputproportionalpowerlimit*-1;
MotorControlConfig[FEEDER_MOTOR].m_params.Kd = MotorsControl[FEEDER_MOTOR].derivativetime;
MotorControlConfig[FEEDER_MOTOR].m_params.Kp = MotorsControl[FEEDER_MOTOR].proportionalgain;
- MotorControlConfig[FEEDER_MOTOR].m_params.Ki = MotorsControl[FEEDER_MOTOR].integraltime;
+ MotorControlConfig[FEEDER_MOTOR].m_params.Ki = 0;//MotorsControl[FEEDER_MOTOR].integraltime;
MotorControlConfig[FEEDER_MOTOR].m_params.IntegralErrorMultiplier = MotorsControl[FEEDER_MOTOR].setpointramprateorsoftstartramp;
MotorControlConfig[FEEDER_MOTOR].m_params.ProportionalErrorMultiplier = MotorsControl[FEEDER_MOTOR].outputonoffhysteresisvalue;
MotorControlConfig[FEEDER_MOTOR].m_params.epsilon = MotorsControl[FEEDER_MOTOR].epsilon;
diff --git a/Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs b/Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs
index ee610b445..5b2cfdc0d 100644
--- a/Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs
+++ b/Software/Stubs Collection/stubs/embeddedparametersbuild_w_cleaning.cs
@@ -35,8 +35,8 @@ configurationParameters.CloseValveTimeout = 20;
configurationParameters.OpenValveTimeout = 20;
//backlash after filling - target pressure, timoeout, time staps (speed will be added in general parameters)
-configurationParameters.InitialDispenserPressure = 0.25;
-configurationParameters.InitialDispenserTimeout = 60000; //20 seconds
+configurationParameters.InitialDispenserPressure = 3.85; //used for initial pre-run pressure
+configurationParameters.InitialDispenserTimeout = 120000; ////used for initial pre-run number of steps
configurationParameters.InitialDispenserTimeLag = 100;
//job prepare - build pressure in dispensers - target pressure, timoeout, time staps, speed