From 8f59ef6ef5aa1c4f9d5fc19fc26df4b92fe5662c Mon Sep 17 00:00:00 2001 From: Shlomo Hecht Date: Tue, 5 Jan 2021 13:18:52 +0200 Subject: PBU in pre-run preparations --- .../Embedded/Common/SWUpdate/FirmwareUpgrade.c | 3 +- Software/Embedded_SW/Embedded/DataDef.h | 5 +- .../Embedded/Modules/IDS/IDS_dispenser.c | 7 +- .../Embedded_SW/Embedded/Modules/IDS/IDS_maint.c | 35 ++--- .../Embedded_SW/Embedded/Modules/IDS/IDS_print.c | 141 ++++++++++----------- .../Embedded/Modules/Stubs_Handler/Progress.c | 11 -- .../Embedded/Modules/Thread/Thread_print.c | 14 +- .../Embedded/Software Release Notes.txt | 10 ++ .../Initialization/PowerOffSequence.c | 8 +- 9 files changed, 100 insertions(+), 134 deletions(-) (limited to 'Software') diff --git a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c index a404ca8ee..64c5dd9a2 100644 --- a/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c +++ b/Software/Embedded_SW/Embedded/Common/SWUpdate/FirmwareUpgrade.c @@ -56,6 +56,7 @@ uint32_t ActivateVersionCallBackFunction(uint32_t IfIndex, uint32_t BusyFlag) ActivateVersionResponse response = ACTIVATE_VERSION_RESPONSE__INIT; MessageContainer responseContainer; bool last = true; + double file_progress = (double)vme_index/CurrentFileSize; if (CurrentRunningFile3.0)&&(DispenserPBUReady[i]==false)) + { + Control3WayValvesWithCallback ((Valves_t)i, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer + DispenserPBUReady[i] = true; + } +#endif //IDS_StopHomeDispenser(i); if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers { @@ -642,8 +649,16 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl { if (AdjustDispenserSpeedToPressure(i,DispenserPreparePressure,pressure) == true) { +#ifdef DISPENSER_PBU_PRE_RUN + if(DispenserPBUReady[i] == true) + { + NumofReadyDispensers++; + DispenserReady[i] = true; + } +#else NumofReadyDispensers++; DispenserReady[i] = true; +#endif } } //ReportWithPackageFilter(IDSFilter,"IDS prepare",__FILE__,i,(int)DispenserTotalPrepareSteps[i],RpWarning,(int)(CurrentDispenserSpeed[i]*100),0); @@ -661,6 +676,16 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl ReportWithPackageFilter(IDSFilter,"IDS stop cleaner",__FILE__,CLEANER_DISPENSER,(int)(pressure*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0); CurrentDispenserSpeed[CLEANER_DISPENSER] = 0; } + + pressure = GetDispenserPressure(LUBRICANT_DISPENSER); + if ((pressure > 0.01)&&(lubricant_speed > 0.1)) + { + HW_Motor_Id = DispenserIdToMotorId[LUBRICANT_DISPENSER]; + MotorStop(HW_Motor_Id, Hard_Hiz); + if (CurrentDispenserSpeed[LUBRICANT_DISPENSER]) + ReportWithPackageFilter(IDSFilter,"IDS stop lubricant",__FILE__,LUBRICANT_DISPENSER,(int)(pressure*100),RpWarning,(int)CurrentDispenserSpeed[LUBRICANT_DISPENSER] ,0); + CurrentDispenserSpeed[LUBRICANT_DISPENSER] = 0; + } #endif if ((NumofReadyDispensers)&&(DispenserBuildTimeCounter%1000 == 0)) { @@ -743,14 +768,7 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl segmentfirst_speed /= 100; DispenserSegmentReady[DispenserId] = false; //Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer - if (Special_Dispensers == true) - { - IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId,segmentfirst_speed,NULL); - } - else - { - MotorSetSpeed(HW_Motor_Id, segmentfirst_speed); - } + MotorSetSpeed(HW_Motor_Id, segmentfirst_speed); CurrentDispenserSpeed[DispenserId] = segmentfirst_speed; /*usnprintf(IdMessage, 80, @@ -808,6 +826,14 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl CurrentDispenserSpeed[CLEANER_DISPENSER] = 0; ReportWithPackageFilter(IDSFilter,"IDS stop cleaner",__FILE__,CLEANER_DISPENSER,(int)(pressure*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0); } + if (CurrentDispenserSpeed[LUBRICANT_DISPENSER]) + { + HW_Motor_Id = DispenserIdToMotorId[LUBRICANT_DISPENSER]; + MotorStop(HW_Motor_Id, Hard_Hiz); + if (CurrentDispenserSpeed[LUBRICANT_DISPENSER]) + ReportWithPackageFilter(IDSFilter,"IDS stop lubricant",__FILE__,LUBRICANT_DISPENSER,(int)(pressure*100),RpWarning,(int)CurrentDispenserSpeed[LUBRICANT_DISPENSER] ,0); + CurrentDispenserSpeed[LUBRICANT_DISPENSER] = 0; + } #endif SafeRemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback ); DispenserPrepareControlId = 0xFF; @@ -859,11 +885,6 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl TargetNumberOfStepsPreRun = InitialDispenserTimeout; MaximalPressurePreRun = InitialDispenserPressure; - if(Head_Type == HEAD_TYPE_ARC) - { - MotorMovetoLimitSwitch(HARDWARE_MOTOR_TYPE__MOTO_DH_LID,1-MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DH_LID].directionthreadwize, 30, Motor_Id_to_LS_IdDown[HARDWARE_MOTOR_TYPE__MOTO_DH_LID], NULL,30000); - } - for (Motor_i = 0;Motor_i < MAX_SYSTEM_DISPENSERS;Motor_i++) { TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[Motor_i]; @@ -904,6 +925,7 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl { int i; double dispenserspeed = 0; + double pressure; if (IDS_Active == false) { @@ -930,6 +952,16 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl } DispenserTotalPrepareSteps[i] = 0; ReportWithPackageFilter(IDSFilter,"Dispenser total prepare steps zero",__FILE__,i,DispenserTotalPrepareSteps[i],RpWarning,IDS_Dispenser_Data[i].consumedinnanolitter,0); +#ifdef DISPENSER_PBU_PRE_RUN + pressure = GetDispenserPressure(i); + if (pressure<3.0) + { + Control3WayValvesWithCallback ((Valves_t)i, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer + DispenserPBUReady[i] = false; + } + else + DispenserPBUReady[i] = true; +#endif } else { @@ -962,10 +994,6 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl for (i = 0; i < MAX_DYE_DISPENSERS; i++) { dispenserspeed = DispenserPrepareSpeed; - if (Special_Dispensers == true) - { - dispenserspeed = 300; - } TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[i]; if (DispenserUsedInJob[i] == true) //we actually should check for all dispensers @@ -974,14 +1002,7 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl { ReportWithPackageFilter(IDSFilter,"Prepare Speed",__FILE__,HomingActive[i],i,RpWarning,(int)dispenserspeed,0); MotorSetDirection((TimerMotors_t)HW_Motor_Id,MotorsCfg[HW_Motor_Id].directionthreadwize); //set the dispenser to the - if (Special_Dispensers == true) - { - MotorSetSpeed((TimerMotors_t)HW_Motor_Id,dispenserspeed); //set the dispenser to the - } - else - { - IDS_Dispenser_Start_Motor_and_Open_Valve(i,dispenserspeed, NULL); - } + MotorSetSpeed((TimerMotors_t)HW_Motor_Id,dispenserspeed); //set the dispenser to the } /*else { @@ -998,6 +1019,16 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl CurrentDispenserSpeed[CLEANER_DISPENSER] = INITIAL_CLEANER_SPEED; } ReportWithPackageFilter(IDSFilter,"IDS start cleaner",__FILE__,CLEANER_DISPENSER,(int)(GetDispenserPressure(CLEANER_DISPENSER)*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0); + if (lubricant_speed > 0.1) + { + if (GetDispenserPressure(LUBRICANT_DISPENSER) < 0.01) + { + TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[LUBRICANT_DISPENSER]; + MotorSetSpeed((TimerMotors_t)HW_Motor_Id,INITIAL_CLEANER_SPEED ); //set the dispenser to the + CurrentDispenserSpeed[LUBRICANT_DISPENSER] = INITIAL_CLEANER_SPEED; + } + ReportWithPackageFilter(IDSFilter,"IDS start lubricant",__FILE__,CLEANER_DISPENSER,(int)(GetDispenserPressure(CLEANER_DISPENSER)*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0); + } #endif } @@ -1127,14 +1158,7 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl { if (DispenserUsedInJob[DispenserId] == true) { - if (Special_Dispensers == true) - { - IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL); - } - else - { - MotorStop(HW_Motor_Id, Hard_Hiz); - } + IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL); CurrentDispenserSpeed[DispenserId] = 0; //usnprintf(IdsMessage, 80,"Presegment Prepare Dispenser %d stopped",DispenserId,(int) segmentfirst_speed); //ReportWithPackageFilter(IDSFilter,IdsMessage, __FILE__, __LINE__, Dispenser_i, RpWarning, segmentfirst_speed, 0); @@ -1402,7 +1426,7 @@ uint32_t IDSCheckSegmentData(void *SegmentDetails, int SegmentId) }//for brushstops } } - ReportWithPackageFilter(IDSFilter,"Unhandled brushstops result",__FILE__,__LINE__,(int)Brush_i,RpWarning,(int)PrevSegment->brushstopscount,0); + ReportWithPackageFilter(IDSFilter,"Unhandled brushstops result",__FILE__,__LINE__,(int)Brush_i,RpWarning,(int)PrevSegment,0); return OK; } uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) @@ -1521,14 +1545,7 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) { if (DispenserUsedInJob[DispenserId] == true) { - 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 - } + IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL); CurrentDispenserSpeed[DispenserId] = 0; DispenserPreSegmentReady[DispenserId] = true; //27/03/19 check if job should be stopped REPORT_MSG(DispenserId,"Dispenser stopped pre Segment"); @@ -1601,15 +1618,7 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) /*IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId, segmentfirst_speed, NULL);*/ - //Control3WayValvesWithCallback (DispenserId, Dispenser_Mixer, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer - if (Special_Dispensers == true) - { - IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId,segmentfirst_speed, NULL); - } - else - { - MotorSetSpeed(HW_Motor_Id, segmentfirst_speed); - } + IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId,segmentfirst_speed, NULL); CurrentDispenserSpeed[DispenserId] = segmentfirst_speed; /*usnprintf(IdsMessage, 80, "Dispenser %d nl/sec %d nl/pulse %d Pulse/sec %d speed %d steps %d/%d", @@ -1628,14 +1637,7 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) //IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL);*/ if (DispenserUsedInJob[DispenserId] == true) { - if (Special_Dispensers == true) - { - IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL); - } - else - { - MotorStop(HW_Motor_Id, Hard_Hiz); - } + IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL); CurrentDispenserSpeed[DispenserId] = 0; } //ReportWithPackageFilter(IDSFilter,"inActive dispenser stopped", __FILE__, __LINE__, DispenserId, RpWarning, segmentfirst_speed, 0); @@ -1845,14 +1847,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) { DispenserDistanceToSpoolReady[Dispenser_i] = false; dispenserCount++; - if (Special_Dispensers == true) - { - IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,NULL); - } - else - { - MotorStop(DispenserIdToMotorId[Dispenser_i],Hard_Hiz); - } + IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,NULL); 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); @@ -1940,14 +1935,8 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) if (DispenserUsedInJob[Dispenser_i] == true) { AlarmHandlingSetAlarm (EVENT_TYPE__DISPENSER_1_UNDERPRESSURE+Dispenser_i,OFF); //handle alarm detection and operation - if (Special_Dispensers == true) - { - IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,NULL); - } - else - { - MotorStop(DispenserIdToMotorId[Dispenser_i],Hard_Hiz); - } + TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[Dispenser_i]; + MotorStop(HW_Motor_Id,Hard_Hiz); #ifdef DISPENSER_VALVES_OPEN Control3WayValvesWithCallback (Dispenser_i, Dispenser_Mixer, IDS_Valve_EndValveReady); //direction: MidTank_Dispenser or Dispenser_Mixer #else diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index 659a308db..6a3c2074f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -1018,17 +1018,6 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) 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 == 0xE6) //fast refresh for pressure { Report("HeaterSafetyTestSetLimits ",__FILE__,__LINE__,request->delay,RpWarning,0,0); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c index 697f1bd5d..40748b0ee 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_print.c @@ -1114,6 +1114,12 @@ uint32_t ThreadPrepareState(void *JobDetails) PrepareWaitCount = 0; + status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__LeftDancer, windertension); + ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Winder",__FILE__,HARDWARE_DANCER_TYPE__LeftDancer,PrepareWaitCount,RpWarning,(int)windertension,0); +#ifndef BTSR_NO_PULLER_TFU + status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__MiddleDancer, pullertension); + ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Puller",__FILE__,HARDWARE_DANCER_TYPE__MiddleDancer,PrepareWaitCount,RpWarning,(int)pullertension,0); +#endif #ifdef UFEEDER_BTSR status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__LeftDancer, JobTicket->btsrparameters->exittension); ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Winder",__FILE__,HARDWARE_DANCER_TYPE__LeftDancer,PrepareWaitCount,RpWarning,(int)JobTicket->btsrparameters->exittension,0); @@ -1122,16 +1128,10 @@ uint32_t ThreadPrepareState(void *JobDetails) BTSR_Read_Length(RUFeeder1, HIGHEST); ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension BTSR",__FILE__,application,type,RpError,tension,tension_err); #else - status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__LeftDancer, windertension); - ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Winder",__FILE__,HARDWARE_DANCER_TYPE__LeftDancer,PrepareWaitCount,RpWarning,(int)windertension,0); -#endif -#ifndef BTSR_NO_PULLER_TFU - status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__MiddleDancer, pullertension); - ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Puller",__FILE__,HARDWARE_DANCER_TYPE__MiddleDancer,PrepareWaitCount,RpWarning,(int)pullertension,0); -#endif #ifndef BTSR_NO_FEEDER_TFU status = ThreadPrepare_Tension (HARDWARE_DANCER_TYPE__RightDancer, feedertension); ReportWithPackageFilter(ThreadFilter,"ThreadPrepare_Tension Feeder",__FILE__,HARDWARE_DANCER_TYPE__RightDancer,PrepareWaitCount,RpWarning,(int)feedertension,0); +#endif #endif FirstCalcInJob = true; diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index 55bb213d2..d5db2f317 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -9,6 +9,16 @@ IDS - gradient brushstop offset size from the file store real time and use in error log BTSR Support +Embedded SW Release note - Version 1.5.3(5) - Pack 3+ (Mid-Alpha) +============================================================= +fix file system bug (file delete when there is no existing file) +fix alarm report - dispenser Id +pull down cleaner dispenser on pressure rise during segment +fix cartridge percentage +fix INIT reporting (BIT skipping) +fix idle head blowers setting (1.2 m^3/H) and arc head setting (60c) +build lubricant pressure before job (to 0.01) + Embedded SW Release note - Version 1.5.3(4) - Pack 3 ============================================================= remove ErrFile.txt handling (storing logs while report is disconnected) - from release version diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c index b5ebdee17..a77b22c47 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerOffSequence.c @@ -484,11 +484,9 @@ uint32_t PowerOffTurnOffDryerFan(void) int i; Control_Dryer_Fan(STOP,75);//use START or STOP, 0 - 100% PowerOffMachineState++; - if (Special_Dispensers == false) - { - for (i=0;i