diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2020-10-07 21:40:34 +0300 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2020-10-07 21:40:34 +0300 |
| commit | a20d25bb885b3ec46d63bda7263fd98faa4095c2 (patch) | |
| tree | 65df8f99ebcf6b55f73798e89ed77fd237ffb4d0 /Software/Embedded_SW | |
| parent | d93d90e692d19ccb8c29892a3471e59f969124ee (diff) | |
| download | Tango-a20d25bb885b3ec46d63bda7263fd98faa4095c2.tar.gz Tango-a20d25bb885b3ec46d63bda7263fd98faa4095c2.zip | |
winder calibration from main EEPROM (for #3782, #3761). waste prepare (#2995) increased suction after job (#2994)
Diffstat (limited to 'Software/Embedded_SW')
9 files changed, 94 insertions, 25 deletions
diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c index 764ef0d44..9e626ec7f 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.c @@ -391,6 +391,8 @@ bool IFS_Clearing_Suction = false; bool IFS_Clearing_SuctionWaiting = false; int midtank_cleared = NUM_OF_MIDTANKS; +bool JobEndSuction = false; + void WHS_Set_IFS_Clearing_Suction (int midtank) { if (JobIsActive()) @@ -405,6 +407,12 @@ void WHS_Set_IFS_Clearing_Suction (int midtank) } Report("------------ WHS_Set_IFS_Clearing_Suction :-----------------", __FILE__,__LINE__, (int) IFS_Clearing_Suction, RpMessage, (int)JobIsActive(), 0); } +#define JobEndSuctionTime 30 +void WHS_Set_JobEndSuction (void) +{ + JobEndSuction = true; + Report("------------ WHS_Set_JobEndSuction :-----------------", __FILE__,__LINE__, (int) JobEndSuction, RpMessage, (int)JobIsActive(), 0); +} #define MAX_ALLOWED_BLOWER_VOLTAGE 4300 #define MIN_ALLOWED_BLOWER_VOLTAGE 2400 @@ -482,6 +490,14 @@ bool WHS_Set_Blower_Control_Closed_Loop(double Q_value) } } + if (JobEndSuction == true) + { + JobEndSuction = false; + Report("------------ Job end Clearing Suction -----------------", __FILE__,__LINE__, (int)4000, RpMessage, (int)JobEndSuctionTime, 0); + Control_Voltage_To_Blower(4000); + close_loop_time = JobEndSuctionTime; + return OK; + } volt = getBlowerState(); WHS_Pid_Testing_Func(Q_value,current_dying_head_flow_Q); //close_loop_time = 1; diff --git a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h index f5bc52858..3033d6d06 100644 --- a/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h +++ b/Software/Embedded_SW/Embedded/Drivers/I2C_Communication/WHS_Card/D_Max5805_ADC_Blower/WHS_Blower.h @@ -28,6 +28,8 @@ double get_average_Q(WHS_Flow_Meter ORF_id); bool WHS_Set_Blower_Control_Closed_Loop(double Q_value); void WHS_Start_Blower_Control_Closed_Loop (void); void WHS_Set_IFS_Clearing_Suction (int midtank); +void WHS_Set_JobEndSuction (void); + double WHS_Get_Blower_Control_Closed_Loop_SetPoint(void); void WHS_Set_SetPoint_Q_value(double value); void WHS_enable_control_loop(bool value); diff --git a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h index bb171dda4..12598ed07 100644 --- a/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h +++ b/Software/Embedded_SW/Embedded/Drivers/flash_ram/MCU_E2Prom.h @@ -33,7 +33,7 @@ typedef enum { EEPROM_STORAGE_MIDTANK_8_B, //EEPROM_STORAGE_SERIAL_NUM, //EEPROM_STORAGE_MAC_ADDR, - EEPROM_STORAGE_DRYER_BACKLASH, + EEPROM_STORAGE_WINDER_CALIBRATION, EEPROM_STORAGE_EMBEDDED_VERSION, EEPROM_ALARM_SUPPORT, EEPROM_ORIFICE1_ZERO_VALUE, diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index ca6c4d51f..01e3533d6 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -972,7 +972,7 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) } if (Configured[Module_Waste]) { - FoundReason = Waste_Prepare(); + FoundReason = Waste_CheckState(); } if ((AlarmState[Alarm_i].Status == true)&&(FoundReason == JOB_OK)) { diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c index e4a573e7b..a81cfff52 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -1041,7 +1041,6 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) response.progress = (double)MCU_E2PromProgram(EEPROM_STORAGE_DRYER_CYCLES,request->delay); response.has_progress = true; } - else if(request->amount == 0xB3) //fast refresh for pressure { @@ -1207,6 +1206,14 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) response.has_progress = true; } else + if(request->amount == 0xB20) //Set loading arm cycles + { + LOG_ERROR(request->delay,"Set winding calibration data"); + + response.progress = (double)MCU_E2PromProgram(EEPROM_STORAGE_WINDER_CALIBRATION,request->delay); + response.has_progress = true; + } + else if(request->amount == 0xC3) //suspend I2C task { if (request->delay == 0) diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c index f4d34284d..4ec45c5b8 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_Winder.c @@ -17,7 +17,7 @@ #include "Common/report/report.h" #include "drivers/FPGA/FPGA.h" - +#include "drivers/Flash_ram/MCU_E2Prom.h" #include "drivers/FPGA/FPGA_SPI_Comm.h" #include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" @@ -102,15 +102,22 @@ char ScrewStr[150]; uint32_t InternalWindingConfigMessage(JobSpool* request) { uint32_t status = PASSED; + int limitswitchstartpointoffset = 0; InternalWinderCfg.segmentoffsetpulses = request->segmentoffsetpulses; InternalWinderCfg.spoolbackingrate = request->backingrate; InternalWinderCfg.startoffsetpulses = request->startoffsetpulses; if (request->has_limitswitchstartpointoffset) { - InternalWinderCfg.startoffsetpulses += request->limitswitchstartpointoffset; + //InternalWinderCfg.startoffsetpulses += request->limitswitchstartpointoffset; Report("limit switch start point offset",__FILE__,__LINE__,(int)(request->startoffsetpulses),RpWarning,(int)(request->limitswitchstartpointoffset), 0); } + status |= MCU_E2PromRead(EEPROM_STORAGE_WINDER_CALIBRATION,&limitswitchstartpointoffset); + if ((status!= OK )||(limitswitchstartpointoffset == 0xFFFF)) + limitswitchstartpointoffset = 0; + Report("limit switch start point offset",__FILE__,(int)(request->startoffsetpulses),(int)(limitswitchstartpointoffset),RpWarning,status, 0); + InternalWinderCfg.startoffsetpulses += limitswitchstartpointoffset; + InternalWinderCfg.SpoolBottomBackingRate = request->bottombackingrate; InternalWinderCfg.NumberOfRotationPerPassage = 3.1415926*3;//request->rotationsperpassage; if (request->rotationsperpassage > 6.1) diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h index 996191b63..0a7534635 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_ex.h @@ -44,6 +44,7 @@ bool WHS_IsContainerFull(); bool WHS_WasteCartridgeLowerPresent(); bool WHS_WasteCartridgeMiddlePresent(); bool WHS_IsEmptying(); +uint32_t Waste_CheckState(void); uint32_t Waste_Prepare(void); bool WHS_IsVocPpmOverAlarmLimit(); diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c index 28a5720ab..fa89164d3 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c @@ -19,6 +19,7 @@ #include "CartridgeValidationRequest.pb-c.h" #include "CartridgeValidationResponse.pb-c.h" #include "Modules/General/buttons.h" +#include "modules/General/process.h" #include "Modules/IFS/ifs.h" #include <Drivers/I2C_Communication/I2C_Task.h> #include <Drivers/I2C_Communication/WHS_Card/D_MAX11614_ADC/WHS_MAX11614_A2D.h> @@ -501,7 +502,7 @@ void Waste_StateMachine(void) break; } } -uint32_t Waste_Prepare(void) +uint32_t Waste_CheckState(void) { //check if the waste is ready to run - waste level not above overflow level and no cartridge in the slots if (wasteLevel > wasteLevelOverflow) @@ -528,6 +529,45 @@ uint32_t Waste_Prepare(void) return JOB_WASTE_HANDLING_PROBLEM; } } +bool WHS_FlowReady = false,HeadIn_FlowReady = false,HeadOut_FlowReady = false; +uint32_t WasteReadyControlId = 0xFF; +uint32_t Waste_PrepareCallbak(uint32_t IfIndex, uint32_t ReadValue) +{ + bool ready = false, headready = false,whsready = false; + double HeadFlow = GetWHSAirFlow(HEAD_FLOW_METER); + double HeadIn_Flow = PressureSensorGetPressure(HEAD_PT100_ZONE_5_0X84_0); + double HeadOut_Flow = PressureSensorGetPressure(HEAD_PT100_ZONE_7_0X86_0); + if ((HeadFlow<(headairflow*1.07))&&(HeadFlow>(headairflow*0.93))) + WHS_FlowReady = true; + if ((HeadIn_FlowReady<(headBlowersFlow[0]*1.07))&&(HeadIn_FlowReady>(headBlowersFlow[0]*0.93))) + HeadIn_FlowReady = true; + if ((HeadOut_Flow<(headBlowersFlow[1]*1.07))&&(HeadOut_Flow>(headBlowersFlow[1]*0.93))) + HeadOut_FlowReady = true; + if (Head_Type <HEAD_TYPE_FLAT) + headready = true; + else if ((HeadIn_FlowReady == true)&&(HeadOut_FlowReady == true)) + headready = true; + if (WHS_Type == WHS_TYPE_UNKNOWN) + whsready = true; + else if (WHS_FlowReady == true) + whsready = true; + if ((headready == true)&&(whsready == true)) + ready = true; + if (ready == true) + { + SafeRemoveControlCallback(WasteReadyControlId,Waste_PrepareCallbak); + WasteReadyControlId = 0xFF; + PrepareReady(Module_Waste,ModuleDone); + } +} +uint32_t Waste_Prepare(void) +{ + WHS_FlowReady = false;HeadIn_FlowReady = false;HeadOut_FlowReady = false; + if (WasteReadyControlId != 0xFF) + RemoveControlCallback(WasteReadyControlId,Waste_PrepareCallbak); + //check that blowers are within 10% of designated flow: WHS, head blowers + WasteReadyControlId = AddControlCallback("Cartridge Cover Door", Waste_PrepareCallbak, eOneSecond, TemplateDataReadCBFunction, 0, 0, 0); +} bool WHS_IsVocPpmOverAlarmLimit() { @@ -565,3 +605,5 @@ bool WHS_IsVocPpmOverAlarmLimit() return false; } + + diff --git a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c index c217a68b3..86c8ef7da 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Printing/JobSTM.c @@ -209,10 +209,10 @@ static ReturnCode PrepareState(void *JobDetails) { PrepareWaiting[Module_Thread] = ModuleWaiting; } - /*if (Configured[Module_Waste]) + if (Configured[Module_Waste]) { PrepareWaiting[Module_Waste] = ModuleWaiting; - }*/ + } if (Configured[Module_Winder]) { PrepareWaiting[Module_Winder] = ModuleWaiting; @@ -245,8 +245,8 @@ static ReturnCode PrepareState(void *JobDetails) SendJobProgress(0.0, 0, false, "Winder prepare failed !!!!"); } } - //if (Configured[Module_Waste]) - // Waste_Prepare(); + if (Configured[Module_Waste]) + Waste_Prepare(); return retcode; } @@ -1406,12 +1406,10 @@ Void jobTask(UArg arg0, UArg arg1) CurrentJob = NULL; if (IFS_Clearing_SuctionWaiting == true) WHS_Set_IFS_Clearing_Suction(NUM_OF_MIDTANKS); - //if (CurrentRequest!= NULL) - // job_request__free_unpacked(CurrentRequest,NULL); - //CurrentRequest = NULL; - SuspendLargeMessages = false; - LOG_ERROR(4,"ResumeLargeMessages PrintingResultsOk"); - //DiagnosticsStart(); + WHS_Set_JobEndSuction(); + SuspendLargeMessages = false; + Report("Job Ended PrintingResultsOk",__FILE__,__LINE__, 4,RpMessage,0,0); + //DiagnosticsStart(); //CleanState(CurrentJob); break; case PrintingResultsFail: @@ -1422,15 +1420,11 @@ Void jobTask(UArg arg0, UArg arg1) SetMachineStatus(MACHINE_STATE__Ready); resetIdleCounter(); CurrentJob = NULL; - //if (CurrentRequest!= NULL) - // job_request__free_unpacked(CurrentRequest,NULL); - //CurrentRequest = NULL; - SuspendLargeMessages = false; - if (IFS_Clearing_SuctionWaiting == true) - WHS_Set_IFS_Clearing_Suction(NUM_OF_MIDTANKS); - LOG_ERROR(3,"ResumeLargeMessages PrintingResultsFail"); - //DiagnosticsStart(); - + SuspendLargeMessages = false; + if (IFS_Clearing_SuctionWaiting == true) + WHS_Set_IFS_Clearing_Suction(NUM_OF_MIDTANKS); + WHS_Set_JobEndSuction(); + Report("Job Ended PrintingResultsFail",__FILE__,__LINE__, 4,RpError,JobEndReason,0); //send message data as a validation error message to host ExitState(Message.messageData); break; |
