From dd2bc0b67daea21cd1220a21d61da306c7523e31 Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 31 Mar 2020 19:38:11 +0300 Subject: Version 1.4.6.20 - Head Cleaning from PPC, Dye sequence stubs (special dispensers, WCF, Waste time) --- .../Embedded/Modules/IDS/IDS_dispenser.c | 9 +- Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h | 3 + .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 22 ++- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 185 ++++++++++++--------- .../Embedded/Modules/Stubs_Handler/Progress.c | 27 +++ 5 files changed, 156 insertions(+), 90 deletions(-) (limited to 'Software/Embedded_SW/Embedded/Modules') diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c index 1176d3132..98b3704ce 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_dispenser.c @@ -54,10 +54,11 @@ void IDS_Dispenser_SetPrepareValues( uint32_t DispenserBuildPressureSpeed, } void IDS_Dispenser_SetTimeOutValues(uint32_t CloseTimeout, uint32_t OpenTimeout) { -#ifndef SPECIAL_DISPENSERS - CloseValveTimeout = CloseTimeout; - OpenValveTimeout = OpenTimeout; -#endif + if (Special_Dispensers == false) + { + CloseValveTimeout = CloseTimeout; + OpenValveTimeout = OpenTimeout; + } Report("IDS_Dispenser_SetTimeOutValues ",__FILE__,__LINE__,OpenValveTimeout,RpWarning,(int)CloseValveTimeout,0); } diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h index 89892801b..ad1d5b5c4 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h @@ -94,6 +94,9 @@ void IDS_Dispenser_SetPreSegmentWFCFValues(double dispenserpresegmentwfcf, doubl void IDS_Dispenser_SetPreSegmentCleaningValues(double ids_cleaningspeed,double ids_cleaningstartspraypresegmenttime ,double ids_cleaningstopbeforesegmenttime,double ids_leftcleaningmotorspeed,double ids_rightcleaningmotorspeed); void IDS_Dispenser_SetAutoHoming_Config(AutoHoming_Config_enum Config); +double Get_WFCF(void); +double Get_WFCF_Time(void); + bool Set_Check_Pressure_Bypass(int); uint32_t IDS_Dispenser_Close_Valve_And_Stop_Motor(int DispenserId, callback_fptr callback); diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c index 107fd425b..1fe5968e6 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_maint.c @@ -90,11 +90,14 @@ AutoHoming_Config_enum AutoHoming_Config = AutoHoming_off; void IDS_Dispenser_SetAutoHoming_Config(AutoHoming_Config_enum Config) { Report("IDS_Dispenser_SetAutoHoming_Config ",__FILE__,__LINE__,Config,RpWarning,AutoHoming_Config,0); -#ifdef SPECIAL_DISPENSERS - AutoHoming_Config = AutoHoming_off; -#else - AutoHoming_Config = Config; -#endif + if (Special_Dispensers == false) + { + AutoHoming_Config = Config; + } + else + { + AutoHoming_Config = AutoHoming_off; + } } void IDS_Dispenser_SetBackLashValues(double initialdispenserpressure, uint32_t initialdispensertimeout, uint32_t initialdispensertimelag, uint32_t initialdispenserspeed) @@ -548,8 +551,9 @@ void IDS_Dispenser_Init(uint8_t DispenserId) PrimingActive[DispenserId]= false; Valve_Set(IDS_Id_to_AirValve[DispenserId], Atm_MidTank_OFF); Control3WayValvesWithCallback ((Valves_t)DispenserId, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer -#ifdef SPECIAL_DISPENSERS - if (ControlIdtoInactiveDispenserId[DispenserId] == 0xFF) - ControlIdtoInactiveDispenserId[DispenserId] = AddControlCallback("IDS_Check_Pressure", IDS_Check_Pressure_Callback, eOneMinute,TemplateDataReadCBFunction ,DispenserId, 0, 0 ); -#endif + if (Special_Dispensers == true) + { + if (ControlIdtoInactiveDispenserId[DispenserId] == 0xFF) + ControlIdtoInactiveDispenserId[DispenserId] = AddControlCallback("IDS_Check_Pressure", IDS_Check_Pressure_Callback, eOneMinute,TemplateDataReadCBFunction ,DispenserId, 0, 0 ); + } } diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index a34594d56..213774270 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -51,6 +51,8 @@ HardwarePidControlType ThreadDispenserIdToControlId[MAX_SYSTEM_DISPENSERS] = { JobUploadStrategy uploadstrategy = JOB_UPLOAD_STRATEGY__Default; bool DispenserReady[MAX_SYSTEM_DISPENSERS] = {true}; bool IDS_Active = false; + +bool Special_Dispensers = false; /******************** STRUCTURES AND ENUMs ********************************************/ uint32_t IDS_Valve_DistanceToSpoolReady(uint32_t deviceID, uint32_t ReadValue); uint32_t IDS_Valve_PresegmentReady(uint32_t deviceID, uint32_t ReadValue); @@ -82,7 +84,15 @@ int lInterSegmentLength = 0; uint32_t WFCF = 80; bool EnableCleaning = true; bool JobEndSequence = false; - void IDS_Dispenser_SetPreSegmentWFCFValues(double dispenserpresegmentwfcf, double ids_presegment_wfcf_timebeforesegment) +double Get_WFCF(void) +{ + return WFCF; +} +double Get_WFCF_Time(void) +{ + return InterSegmentStartWFCFDispensers; +} +void IDS_Dispenser_SetPreSegmentWFCFValues(double dispenserpresegmentwfcf, double ids_presegment_wfcf_timebeforesegment) { if (ids_presegment_wfcf_timebeforesegment) InterSegmentStartWFCFDispensers = ids_presegment_wfcf_timebeforesegment; @@ -506,13 +516,14 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) if (pressureReady == false) { -#ifndef SPECIAL_DISPENSERS - if (DispenserBuildTimeCounter<(2*eOneSecond)) + if (Special_Dispensers == false) { - //REPORT_MSG(DispenserBuildTimeCounter,"waiting 2 seconds for pressure changes"); - return OK; + if (DispenserBuildTimeCounter<(2*eOneSecond)) + { + //REPORT_MSG(DispenserBuildTimeCounter,"waiting 2 seconds for pressure changes"); + return OK; + } } -#endif for (i = 0; i < MAX_DYE_DISPENSERS; i++) { //IDS_StopHomeDispenser(i); @@ -522,33 +533,36 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) if (GetDispenserPressure(i) > DispenserPreparePressure*1.05) { NumofReadyDispensers++; -#ifdef SPECIAL_DISPENSERS - MotorStop(HW_Motor_Id, Hard_Hiz); - CurrentDispenserSpeed[i] = 0; + if (Special_Dispensers == true) + { + MotorStop(HW_Motor_Id, Hard_Hiz); + CurrentDispenserSpeed[i] = 0; //Report("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; - //Report("IDS reduce speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); -#endif + } + else + { + tempSpeed = CurrentDispenserSpeed[i]; + updatedSpeed = (tempSpeed*0.992>100)?tempSpeed*0.992:100; + MotorSetSpeed(HW_Motor_Id, updatedSpeed); + CurrentDispenserSpeed[i] = updatedSpeed; + //Report("IDS reduce speed",__FILE__,i,(int)tempSpeed,RpWarning,(int)updatedSpeed,0); + } } else { -#ifdef SPECIAL_DISPENSERS - tempSpeed = (DispenserPreparePressure-GetDispenserPressure(i))*InitialDispenserSpeed; - if (tempSpeed<300) - tempSpeed = 300; -#else - tempSpeed = CurrentDispenserSpeed[i]; -#endif + if (Special_Dispensers == true) + { + tempSpeed = (DispenserPreparePressure-GetDispenserPressure(i))*InitialDispenserSpeed; + if (tempSpeed<300) + tempSpeed = 300; + } + else + { + tempSpeed = CurrentDispenserSpeed[i]; + } updatedSpeed = (tempSpeed*1.03 12000)&&(InterSegmentStartWFCFDispensers == (InterSegmentStepsCount+12000))) { //start prepare 4 seconds before wcf @@ -1150,7 +1167,6 @@ uint32_t IDS_Cleaning_Stop_Cleaning_Solution (callback_fptr callback); //close waste valve one second before segment - trial Valve_Set(VALVE_MIXCHIP_WASTECH, Mixer_Head); } -//#endif return OK; } uint32_t IDSCheckSegmentData(void *SegmentDetails, int SegmentId) @@ -1336,11 +1352,14 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) { if (DispenserUsedInJob[DispenserId] == true) { -#ifdef SPECIAL_DISPENSERS - IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL); -#else - MotorStop(HW_Motor_Id,Soft_Hiz); //26/03/19 test without valves -#endif + if (Special_Dispensers == true) + { + IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL); + } + else + { + MotorStop(HW_Motor_Id,Soft_Hiz); //26/03/19 test without valves + } CurrentDispenserSpeed[DispenserId] = 0; //MotorSetSpeed(HW_Motor_Id, 5); //CurrentDispenserSpeed[Dispenser_i] = 5; @@ -1406,11 +1425,14 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) segmentfirst_speed, NULL);*/ //Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer -#ifdef SPECIAL_DISPENSERS - IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId,segmentfirst_speed, NULL); -#else - MotorSetSpeed(HW_Motor_Id, segmentfirst_speed); -#endif + if (Special_Dispensers == true) + { + IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId,segmentfirst_speed, NULL); + } + else + { + MotorSetSpeed(HW_Motor_Id, segmentfirst_speed); + } CurrentDispenserSpeed[DispenserId] = segmentfirst_speed; usnprintf(IdsMessage, 80, "Dispenser %d nl/sec %d nl/pulse %d Pulse/sec %d speed %d steps %d/%d", @@ -1429,11 +1451,14 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) //IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL);*/ if (DispenserUsedInJob[DispenserId] == true) { -#ifdef SPECIAL_DISPENSERS - IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL); -#else - MotorStop(HW_Motor_Id, Hard_Hiz); -#endif + if (Special_Dispensers == true) + { + IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL); + } + else + { + MotorStop(HW_Motor_Id, Hard_Hiz); + } CurrentDispenserSpeed[DispenserId] = 0; } //Report("inActive dispenser stopped", __FILE__, __LINE__, DispenserId, RpWarning, segmentfirst_speed, 0); @@ -1615,11 +1640,14 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) if (DispenserUsedInJob[Dispenser_i]==true)//unconfigured dispenser { DispenserDistanceToSpoolReady[Dispenser_i] = false; - #ifdef SPECIAL_DISPENSERS - IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,NULL); - #else - MotorStop(DispenserIdToMotorId[Dispenser_i],Hard_Hiz); - #endif + if (Special_Dispensers == true) + { + IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,NULL); + } + else + { + MotorStop(DispenserIdToMotorId[Dispenser_i],Hard_Hiz); + } Control3WayValvesWithCallback ((Valves_t)Dispenser_i, MidTank_Dispenser, IDS_Valve_DistanceToSpoolValveReady); //direction: MidTank_Dispenser or Dispenser_Mixer CurrentDispenserSpeed[Dispenser_i] = 0; //IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,IDS_Valve_DistanceToSpoolValveReady); @@ -1700,11 +1728,14 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) { if (DispenserUsedInJob[Dispenser_i] == true) { -#ifdef SPECIAL_DISPENSERS - IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,NULL); -#else - MotorStop(DispenserIdToMotorId[Dispenser_i],Hard_Hiz); -#endif + if (Special_Dispensers == true) + { + IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,NULL); + } + else + { + MotorStop(DispenserIdToMotorId[Dispenser_i],Hard_Hiz); + } Control3WayValvesWithCallback (Dispenser_i, MidTank_Dispenser, IDS_Valve_EndValveReady); //direction: MidTank_Dispenser or Dispenser_Mixer CurrentDispenserSpeed[Dispenser_i] = 0; diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index 7a9b66a0b..ed15b74bf 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -685,6 +685,33 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) response.has_progress = true; } else + if(request->amount == 0xE3) //fast refresh for pressure + { + Report("Set WFCF Value ",__FILE__,__LINE__,request->delay,RpWarning,(int)Get_WFCF_Time(),0); + IDS_Dispenser_SetPreSegmentWFCFValues((double) request->delay, Get_WFCF_Time()); + response.progress = (double)OK; + response.has_progress = true; + } + else + if(request->amount == 0xE4) //fast refresh for pressure + { + Report("Set WFCF build to waste Time Value ",__FILE__,__LINE__,request->delay,RpWarning,(int)Get_WFCF(),0); + IDS_Dispenser_SetPreSegmentWFCFValues(Get_WFCF(),(double) request->delay); + response.progress = (double)OK; + response.has_progress = true; + } + else + if(request->amount == 0xE5) //fast refresh for pressure + { + if (request->delay<=1) + { + Report("Set special dispensers ",__FILE__,__LINE__,request->delay,RpWarning,Special_Dispensers,0); + Special_Dispensers = request->delay; + } + response.progress = (double)OK; + response.has_progress = true; + } + else if(request->amount == 0xB1) //fast refresh for pressure { LOG_ERROR(request->delay,"Set loading arm center"); -- cgit v1.3.1