aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Embedded_SW/Embedded/Modules/IDS
diff options
context:
space:
mode:
authorShlomo Hecht <shlomo@twine-s.com>2020-09-02 10:34:05 +0300
committerShlomo Hecht <shlomo@twine-s.com>2020-09-02 10:34:05 +0300
commitb2977e51824febd45cfb7d33e8c4c8aa6514666c (patch)
treeb85fb77db01387eae8d1f4db1d821bea193109ad /Software/Embedded_SW/Embedded/Modules/IDS
parentf8588504c5953ff39b36c113c7443c4dedbd4d1e (diff)
downloadTango-b2977e51824febd45cfb7d33e8c4c8aa6514666c.tar.gz
Tango-b2977e51824febd45cfb7d33e8c4c8aa6514666c.zip
version 1.4.6.44 p1 IDS pre-run and remove integral on thread loading feeder control
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules/IDS')
-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
3 files changed, 65 insertions, 52 deletions
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;