diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2020-07-27 12:57:06 +0300 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2020-07-27 12:57:06 +0300 |
| commit | 6bb63a96166785b09ad2e65885133f32077dc6c8 (patch) | |
| tree | 47da865bd395aebe45060d06b513f2b054d2c7b0 /Software/Embedded_SW/Embedded/Modules | |
| parent | c12f613bbcf149668cfd3e15cde46bc75c508893 (diff) | |
| download | Tango-6bb63a96166785b09ad2e65885133f32077dc6c8.tar.gz Tango-6bb63a96166785b09ad2e65885133f32077dc6c8.zip | |
initial blower value 2/3 of process value. build pressure in cleaner. stop job on waste overlow or cartridge inserted
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules')
5 files changed, 47 insertions, 20 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index a9899afd7..ec743ea4a 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -724,7 +724,7 @@ void PrepareACHeater(int HeaterId,uint32_t Frequency, uint32_t SetTemperatue) { if(Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD) { - WHS_Set_SetPoint_Q_value(headairflow/2); + WHS_Set_SetPoint_Q_value(headairflow*2/3); } else { diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 5f1dfe138..a69b7fac5 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -45,6 +45,7 @@ HardwarePidControl DispensersCtrl[MAX_SYSTEM_DISPENSERS]; #define MAX_DYE_DISPENSERS 6 #define IDS_PRESEGMENT_TIME_STEP 50 +int32_t minimal_intersegment_length = 0; int32_t DispenserSamples[MAX_SYSTEM_DISPENSERS][MAX_CONTROL_SAMPLES] = {0}; int DispenserSamplePointer[MAX_SYSTEM_DISPENSERS] = {0}; double DispenserNormalizedErrorCoEfficient[MAX_SYSTEM_DISPENSERS] = {0}; @@ -119,15 +120,15 @@ void IDS_Dispenser_SetPreSegmentWFCFValues(double dispenserpresegmentwfcf, doubl LeftRockerSpeed = ids_leftcleaningmotorspeed; if ( ids_rightcleaningmotorspeed) RightRockerSpeed = ids_rightcleaningmotorspeed; + minimal_intersegment_length = ids_cleaningstopbeforesegmenttime+ids_cleaningstartspraypresegmenttime+2000; Report("IDS_Dispenser_SetPreSegmentCleaningValues ",__FILE__,__LINE__,RightRockerSpeed,RpWarning,(int)LeftRockerSpeed,0); - Report("IDS_Dispenser_SetPreSegmentCleaningValues ",__FILE__,__LINE__,InterSegmentStartSprayCleaner,RpWarning,(int)InterSegmentCenterRockers,0); + Report("IDS_Dispenser_SetPreSegmentCleaningValues ",__FILE__,minimal_intersegment_length,InterSegmentStartSprayCleaner,RpWarning,(int)InterSegmentCenterRockers,0); Report("IDS_Dispenser actuator times ",__FILE__,(int)LeftRockerSpeed/100*IDS_PRESEGMENT_TIME_STEP,(int)LeftRockerSpeed%100*IDS_PRESEGMENT_TIME_STEP,RpWarning,(int)RightRockerSpeed*IDS_PRESEGMENT_TIME_STEP,0); - } uint32_t DispenserPreSegmentControlId = 0xFF; uint32_t BrushStopControlId = 0xFF; - uint32_t PreSegmentControlId = 0xFF; + //uint32_t PreSegmentControlId = 0xFF; /*uint32_t IDS_DispenserControlInit() { @@ -576,6 +577,13 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) } } } + if (GetDispenserPressure(CLEANER_DISPENSER) > 0.02) + { + HW_Motor_Id = DispenserIdToMotorId[CLEANER_DISPENSER]; + MotorStop(HW_Motor_Id, Hard_Hiz); + CurrentDispenserSpeed[CLEANER_DISPENSER] = 0; + Report("IDS stop cleaner",__FILE__,CLEANER_DISPENSER,(int)(GetDispenserPressure(CLEANER_DISPENSER)*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0); + } if ((NumofReadyDispensers)&&(DispenserBuildTimeCounter%1000 == 0)) { @@ -689,6 +697,13 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) //start new stage if (endOfPrepareWCF == true) { + if (CurrentDispenserSpeed[CLEANER_DISPENSER]) + { + HW_Motor_Id = DispenserIdToMotorId[CLEANER_DISPENSER]; + MotorStop(HW_Motor_Id, Hard_Hiz); + CurrentDispenserSpeed[CLEANER_DISPENSER] = 0; + Report("IDS stop cleaner",__FILE__,CLEANER_DISPENSER,(int)(GetDispenserPressure(CLEANER_DISPENSER)*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0); + } SafeRemoveControlCallback(DispenserPrepareControlId, IDS_Prepare_Callback ); DispenserPrepareControlId = 0xFF; Report("IDS_Prepare_Callback SafeRemoveControlCallback",__FILE__,DispenserBuildTimeCounter,NumofReadyDispensers,RpWarning,(int)NumOfActiveDispensers,0); @@ -848,6 +863,12 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) }*/ } } + TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[CLEANER_DISPENSER]; + MotorSetSpeed((TimerMotors_t)HW_Motor_Id,400); //set the dispenser to the + CurrentDispenserSpeed[CLEANER_DISPENSER] = 400; + Report("IDS start cleaner",__FILE__,CLEANER_DISPENSER,(int)(GetDispenserPressure(CLEANER_DISPENSER)*100),RpWarning,(int)CurrentDispenserSpeed[CLEANER_DISPENSER] ,0); + + } DispenserBuildTimeCounter = 0; DispenserPrepareControlId = AddControlCallback(NULL, IDS_Prepare_Callback, PRESSURE_READ_TIME_GAP,TemplateDataReadCBFunction ,0, 0, 0 ); @@ -1259,15 +1280,19 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) if (SegmentId>0) { lInterSegmentLength = ((IntersegmentLength*100)*1000/dyeingspeed); + lInterSegmentLength-=(lInterSegmentLength%100); //round to a 100 multiplication InterSegmentStepsCount = 0; - DispenserPreSegmentControlId = AddControlCallback(NULL,IDSPreSegmentStateCallbackRunner, IDS_PRESEGMENT_TIME_STEP,TemplateDataReadCBFunction ,0, 0, 0 ); - if (DispenserPreSegmentControlId == 0xFF) + if (minimal_intersegment_length<((IntersegmentLength*100)*1000/dyeingspeed)) { - Report("Add control callback failed",__FILE__,__LINE__,(int)100,RpWarning,(int)0,0); - return ERROR; + DispenserPreSegmentControlId = AddControlCallback(NULL,IDSPreSegmentStateCallbackRunner, IDS_PRESEGMENT_TIME_STEP,TemplateDataReadCBFunction ,0, 0, 0 ); + if (DispenserPreSegmentControlId == 0xFF) + { + Report("Add control callback failed",__FILE__,__LINE__,(int)100,RpWarning,(int)0,0); + return ERROR; + } + Report("Add control callback ",__FILE__,__LINE__,(int)100,RpWarning,(int)lInterSegmentLength,0); } - Report("Add control callback ",__FILE__,__LINE__,(int)100,RpWarning,(int)lInterSegmentLength,0); /*if (EnableCleaning == true) { InterSegmentStartSprayCleaner = 500; diff --git a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c index bfffb0d9b..1054da894 100644 --- a/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c +++ b/Software/Embedded_SW/Embedded/Modules/IFS/ifs.c @@ -141,11 +141,8 @@ bool CartridgeInkFull() CartridgeFinishedCount = 0; Report("IFS_filling ", __FILE__,__LINE__,int_MidTank_Pressure_1000, RpMessage, int_MidTank_Pressure_1000, 0); /**** detect if the MidTank_Pressure is the same, 5 times ****/ - if (DetectIfCartridgeFinished(int_MidTank_Pressure_1000)) { - //currently sensor work properly only until 1.6 - 1.8 Liter (TBD) - Report("DetectIfCartridgeFinished", __FILE__,__LINE__,int_MidTank_Pressure_1000, RpMessage, int_MidTank_Pressure_1000, 0); - //return true; - } + if (DetectIfCartridgeFinished(int_MidTank_Pressure_1000)) + return true; } return false; } @@ -274,7 +271,8 @@ void midTankStateMachine(void) Report("Power-down in process", __FILE__, __LINE__, 0, RpMessage, 0, 0); break; } - + if (!RdInkCartridgeSensor()) + break; //check RFID? (TBD) // send request for validation to ppc diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c index f95420725..01c70d42f 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/ThreadLoad.c @@ -116,6 +116,7 @@ bool InitCalled = false; uint32_t LoadArmRounds; + int CurrentlyLoaded = 0; uint32_t ThreadLoadStateMachine( THREAD_LOAD_STAGES_ENUM LoadStages); uint32_t ThreadLoadControlCBFunction(uint32_t index, uint32_t ReadValue); uint32_t ThreadLoadLengthCBFunction(uint32_t IfIndex, uint32_t ReadValue); @@ -210,7 +211,7 @@ { if(Head_Type > HEAD_TYPE_SYLKO_WITHOUT_CARD) { - WHS_Set_SetPoint_Q_value(headairflow/2); + WHS_Set_SetPoint_Q_value(headairflow*2/3); } else { @@ -639,7 +640,7 @@ { return OK; } - MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,numberOfCycles); + MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,numberOfCycles+CurrentlyLoaded); if (numberOfCycles<LoadArmRounds) { MotorMoveWithCallback (HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM, MotorsCfg[HARDWARE_MOTOR_TYPE__MOTO_DRYER_LOADARM].directionthreadwize, @@ -656,7 +657,7 @@ TryAgain = true; SecondTry = false; Report("Store Number of cycles in drier - halted",__FILE__,__LINE__,numberOfCycles,RpMessage,LoadArmRounds,0); - MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,numberOfCycles); + MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,numberOfCycles+CurrentlyLoaded); TimeoutsCounter = 0; CallbackCounter = 0; load.color = fastBILNK; @@ -687,7 +688,6 @@ { REPORT_MSG(LoadStages, "Thread Load State Machine step Thread_Load_Dryer_Loading"); - int CurrentlyLoaded = 0; if (dryerbufferlength) LoadArmRounds = (int)dryerbufferlength; if (LoadArmRounds <= 2) diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c index de95ddb03..f96de2dd0 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c @@ -466,7 +466,7 @@ void Waste_StateMachine(void) // RFID change status - TBD WasteTankState = WasteTankStateIdle; RemoveControlCallback(Cartridge_Cover_Control, Waste_DoorOpenDuringEmptying); - if (cartNotAllFull() == false) + //if (cartNotAllFull() == false) AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, true); Report("WasteTankStateEmptying done", __FILE__, __LINE__, 0, RpMessage, 0, 0); timeout_counter = 0; @@ -505,6 +505,8 @@ void Waste_Prepare(void) if (wasteLevel > wasteLevelOverflow) { Report("cannot start a job with waste tank overflow", __FILE__, __LINE__, wasteLevel, RpMessage, wasteLevelOverflow, 0); + JobEndReason = JOB_SAFETY_CRITICAL_ALARM; + AlarmHandlingSetAlarm( EVENT_TYPE__WASTE_CONTAINER_OVERFLOW, true); PrepareReady(Module_Waste,ModuleFail); return; } @@ -515,6 +517,8 @@ void Waste_Prepare(void) else { Report("cannot start a job with cartridges in the IFS", __FILE__, __LINE__, wasteLevel, RpMessage, wasteLevelOverflow, 0); + JobEndReason = JOB_OTHER_ALARM; + AlarmHandlingSetAlarm( EVENT_TYPE__ALL_WASTE_CARTRIDGES_FULL, true); PrepareReady(Module_Waste,ModuleFail); } return; |
