diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2021-01-11 17:25:10 +0200 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2021-01-11 17:25:10 +0200 |
| commit | a84e40980f7bc2c8ef3c2bfd546cfb3ecc6e05d7 (patch) | |
| tree | c1c676de3dacfd7a235cf51491b25a37a9c408fb /Software/Embedded_SW/Embedded/Modules | |
| parent | f45328f87cab862e94a7d749197a56c68bd155f0 (diff) | |
| download | Tango-a84e40980f7bc2c8ef3c2bfd546cfb3ecc6e05d7.tar.gz Tango-a84e40980f7bc2c8ef3c2bfd546cfb3ecc6e05d7.zip | |
short cycle, built in test, waste calculation
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules')
6 files changed, 203 insertions, 28 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/General/BuiltInTest.c b/Software/Embedded_SW/Embedded/Modules/General/BuiltInTest.c new file mode 100644 index 000000000..646f189e7 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Modules/General/BuiltInTest.c @@ -0,0 +1,131 @@ +/* + * BuiltInTest.c + * + * Created on: jAN 5 2021 + * Author: shlomo + * This file includes the BuiltInTest indication handling functions: + * Motors, heaters, temperature sensors,pressure sensors,dancers + */ + +#include "drivers/Motors/Motor.h" +#include "drivers/Heater/TemperatureSensor.h" +#include "drivers/FPGA/FPGA_SPI_Comm.h" +#include "drivers/FPGA/FPGA_GPIO/FPGA_GPIO.h" +#include "drivers/FPGA/FPGA.h" +#include "drivers/I2C_Communication/Dispenser_Card/IO_Ports/Dispenser_IO.h" + +#include <PMR/Diagnostics/EventType.pb-c.h> + +#include "Modules/General/GeneralHardware.h" +#include "modules/control/control.h" +#include "modules/AlarmHandling/AlarmHandling.h" +#include "modules/thread/thread_ex.h" +#include "modules/heaters/heaters_ex.h" +#include "modules/ids/ids_ex.h" + +uint32_t BuiltInTestControlId; +uint32_t BuiltInTest_VoltageMeter(uint32_t IfIndex) +{ + return OK; +} +uint32_t BuiltInTest_I2C_Comm(uint32_t IfIndex) +{ + return OK; +} +uint32_t BuiltInTest_UART_Comm(uint32_t IfIndex) +{ + return OK; +} +uint32_t BuiltInTest_Blower(uint32_t IfIndex) +{ + return OK; +} +uint32_t BuiltInTest_Fan(uint32_t IfIndex) +{ + return OK; +} +uint32_t BuiltInTest_Encoders(uint32_t IfIndex) +{ + return OK; +} +uint32_t BuiltInTest_Heater(uint32_t IfIndex) +{ + return OK; +} +uint32_t BuiltInTest_Dispenser(uint32_t IfIndex) +{ + return OK; +} +uint32_t BuiltInTest_PressureSensor(uint32_t IfIndex) +{ + return OK; +} +uint32_t BuiltInTest_PT_Sensor(uint32_t IfIndex) +{ + return OK; +} +uint32_t BuiltInTest_Motor(uint32_t IfIndex) +{ + return OK; +} +uint32_t BuiltInTest_Main_State(uint32_t IfIndex, uint32_t BusyFlag) +{ + uint8_t Motor_i,Heater_i,PT_Sensor_i,Dispenser_i; + uint32_t Status = OK; + /* + * + *Test motors (configured, used(4x,arc,flat, btsr)), + *Test heaters (if cold, current) + *Test pt100, + *Test pressure sensors (dispensers, head, whs) + *Test ??? + One report on init, define a way to report multiple failures. + */ + BuiltInTest_VoltageMeter(0); + BuiltInTest_I2C_Comm(I2C2_BASE); + BuiltInTest_I2C_Comm(I2C3_BASE); + BuiltInTest_I2C_Comm(I2C4_BASE); + BuiltInTest_UART_Comm(0); + for (Motor_i = 0; Motor_i<NUM_OF_MOTORS;Motor_i++) + { + if (isMotorConfigured(Motor_i)) + { + Status |= BuiltInTest_Motor(Motor_i); + } + } + for (Heater_i = 0; Heater_i<HEATER_TYPE_MAX_HEATERS;Heater_i++) + { + //if (isHeaterConfigured(Heater_i)) + { + Status |= BuiltInTest_Heater(Heater_i); + } + } + for (PT_Sensor_i = 0; PT_Sensor_i<MAX_HEAD_CARD_TEMP_SENS_ID_1;PT_Sensor_i++) + { + //if (isHeaterConfigured(PT_Sensor_i)) + { + Status |= BuiltInTest_PT_Sensor(PT_Sensor_i); + } + } + for (Dispenser_i = 0; Dispenser_i<MAX_SYSTEM_DISPENSERS;Dispenser_i++) + { + //if (isDispenserConfigured(Dispenser_i)) + { + Status |= BuiltInTest_Dispenser(Dispenser_i); + } + } + //Status |= BuiltInTest_PressureSensor(HEAD_FLOW_METER); + //Status |= BuiltInTest_PressureSensor(NU_FLOW_METER); + //Status |= BuiltInTest_PressureSensor(DRIER_FLOW_METER); + //Status |= BuiltInTest_PressureSensor(TUNNEL_SENSOR_IN); + //Status |= BuiltInTest_PressureSensor(TUNNEL_SENSOR_OUT); + + //Test motors + return OK; +} +void BuiltInTest_Start(void) +{ + BuiltInTestControlId = AddControlCallback("BuiltInTest", BuiltInTest_Main_State, eOneSecond, TemplateDataReadCBFunction,0,0, 0 ); + //return; +} + diff --git a/Software/Embedded_SW/Embedded/Modules/General/BuiltInTest.h b/Software/Embedded_SW/Embedded/Modules/General/BuiltInTest.h new file mode 100644 index 000000000..02c427c67 --- /dev/null +++ b/Software/Embedded_SW/Embedded/Modules/General/BuiltInTest.h @@ -0,0 +1,15 @@ +/* + * BuiltInTest.h + * + * Created on: Jan 4 2021 + * Author: shlomo + */ + +#ifndef MODULES_GENERAL_BUILT_IN_TEST_H_ +#define MODULES_GENERAL_BUILT_IN_TEST_H_ + + +void BuiltInTest_Start(void); + + +#endif /* MODULES_GENERAL_SAFETY_H_ */ diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h index ceb504099..f750e9445 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_ex.h @@ -46,6 +46,8 @@ extern DispenserRunningData IDS_Dispenser_Data[MAX_SYSTEM_DISPENSERS]; extern DispenserRunningData **dispenserdata; extern bool ActuatorsCleaningSequence; +extern bool short_cycle; + extern bool DispenserUsedInJob[MAX_SYSTEM_DISPENSERS]; extern int32_t CurrentDispenserSpeed[MAX_SYSTEM_DISPENSERS]; diff --git a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c index 97c37cc4f..9832bf773 100644 --- a/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c +++ b/Software/Embedded_SW/Embedded/Modules/IDS/IDS_print.c @@ -88,6 +88,9 @@ int lInterSegmentLength = 0; uint32_t InterSegmentStartWFCFDispensers; uint32_t WFCF = 80; bool EnableCleaning = true; + + bool short_cycle = false; + // in short cycle mode: no dispenser autohoming after job, no prerun. bool JobEndSequence = false; double Get_WFCF(void) { @@ -489,14 +492,17 @@ uint32_t InactiveDispenserHome(uint32_t DispenserId, uint32_t ReadValue) { if (AutoHoming_Config >= AutoHoming_JobEnd_PowerOn_off) { - if ((HomingActive[DispenserId] == false)&&(PrimingActive[DispenserId] == false)) + if (short_cycle==false) { - ReportWithPackageFilter(IDSFilter,"Homing Inactive dispenser",__FILE__,DispenserId,HomingActive[DispenserId],RpWarning,PrimingActive[DispenserId],0); - IDS_HomeDispenser (DispenserId, 1000 , NULL); - } - else - { - ReportWithPackageFilter(IDSFilter,"Inactive dispenser already homing",__FILE__,DispenserId,HomingActive[DispenserId],RpWarning,PrimingActive[DispenserId],0); + if ((HomingActive[DispenserId] == false)&&(PrimingActive[DispenserId] == false)) + { + ReportWithPackageFilter(IDSFilter,"Homing Inactive dispenser",__FILE__,DispenserId,HomingActive[DispenserId],RpWarning,PrimingActive[DispenserId],0); + IDS_HomeDispenser (DispenserId, 1000 , NULL); + } + else + { + ReportWithPackageFilter(IDSFilter,"Inactive dispenser already homing",__FILE__,DispenserId,HomingActive[DispenserId],RpWarning,PrimingActive[DispenserId],0); + } } } return OK; @@ -605,6 +611,11 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl DispenserBuildTimeCounter+=PRESSURE_READ_TIME_GAP; + if (short_cycle==true) + { + ReportWithPackageFilter(IDSFilter,"IDS prepare short cycle - skip pre-run",__FILE__,i,(int)DispenserTotalPrepareSteps[i],RpWarning,(int)(pressure*100),0); + pressureReady = true; + } if (pressureReady == false) { if (DispenserBuildTimeCounter<(2*eOneSecond)) @@ -972,15 +983,18 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl DispenserTotalPrepareSteps[i] = 0; if (AutoHoming_Config >= AutoHoming_JobEnd_PowerOn_off) { - if ((HomingActive[i] == false)&&(PrimingActive[i] == false)) + if (short_cycle==false) { - ReportWithPackageFilter(IDSFilter,"Homing Inactive dispenser",__FILE__,i,HomingActive[i],RpWarning,PrimingActive[i],0); - if (IDS_HomeDispenser (i, 1000 , NULL) == ERROR) - Control3WayValvesWithCallback (i, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer; - } - else - { - ReportWithPackageFilter(IDSFilter,"Inactive dispenser already homing",__FILE__,i,HomingActive[i],RpWarning,PrimingActive[i],0); + if ((HomingActive[i] == false)&&(PrimingActive[i] == false)) + { + ReportWithPackageFilter(IDSFilter,"Homing Inactive dispenser",__FILE__,i,HomingActive[i],RpWarning,PrimingActive[i],0); + if (IDS_HomeDispenser (i, 1000 , NULL) == ERROR) + Control3WayValvesWithCallback (i, MidTank_Dispenser, NULL); //direction: MidTank_Dispenser or Dispenser_Mixer; + } + else + { + ReportWithPackageFilter(IDSFilter,"Inactive dispenser already homing",__FILE__,i,HomingActive[i],RpWarning,PrimingActive[i],0); + } } } #ifdef DISPENSER_VALVES_OPEN @@ -1006,7 +1020,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 - MotorSetSpeed((TimerMotors_t)HW_Motor_Id,dispenserspeed); //set the dispenser to the + IDS_Dispenser_Start_Motor_and_Open_Valve(i,dispenserspeed, NULL); } /*else { @@ -1162,7 +1176,7 @@ bool AdjustDispenserSpeedToPressure(int DispenserId, double RefMaxPressure,doubl { if (DispenserUsedInJob[DispenserId] == true) { - IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL); + MotorStop(HW_Motor_Id, Hard_Hiz); 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); @@ -1549,7 +1563,7 @@ uint32_t IDSPreSegmentState(void *SegmentDetails, int SegmentId) { if (DispenserUsedInJob[DispenserId] == true) { - IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL); + MotorStop(HW_Motor_Id,Soft_Hiz); //26/03/19 test without valves CurrentDispenserSpeed[DispenserId] = 0; DispenserPreSegmentReady[DispenserId] = true; //27/03/19 check if job should be stopped REPORT_MSG(DispenserId,"Dispenser stopped pre Segment"); @@ -1622,7 +1636,7 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) /*IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId, segmentfirst_speed, NULL);*/ - IDS_Dispenser_Start_Motor_and_Open_Valve(DispenserId,segmentfirst_speed, NULL); + 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", @@ -1641,7 +1655,7 @@ void IDS_StartBrushStop(int n_dispensers, JobDispenser** Dispensers) //IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL);*/ if (DispenserUsedInJob[DispenserId] == true) { - IDS_Dispenser_Close_Valve_And_Stop_Motor(DispenserId,NULL); + MotorStop(HW_Motor_Id, Hard_Hiz); CurrentDispenserSpeed[DispenserId] = 0; } //ReportWithPackageFilter(IDSFilter,"inActive dispenser stopped", __FILE__, __LINE__, DispenserId, RpWarning, segmentfirst_speed, 0); @@ -1851,7 +1865,7 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) { DispenserDistanceToSpoolReady[Dispenser_i] = false; dispenserCount++; - IDS_Dispenser_Close_Valve_And_Stop_Motor(Dispenser_i,NULL); + 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); @@ -1895,10 +1909,13 @@ uint32_t IDSSegmentState(void *SegmentDetails, int SegmentId) //MotorStop(HW_Motor_Id,Hard_Hiz); if (AutoHoming_Config >= AutoHoming_JobEnd_PowerOn_off) { - if (deviceID!=LUBRICANT_DISPENSER) + if (short_cycle==false) { - ReportWithPackageFilter(IDSFilter,"IDS_Valve_EndValveReady start homing",__FILE__,deviceID,(int)AutoHoming_Config,RpWarning,(int)AutoHoming_JobEnd_PowerOn_off,0); - IDS_HomeDispenser (deviceID, 1000 , NULL); + if (deviceID!=LUBRICANT_DISPENSER) + { + ReportWithPackageFilter(IDSFilter,"IDS_Valve_EndValveReady start homing",__FILE__,deviceID,(int)AutoHoming_Config,RpWarning,(int)AutoHoming_JobEnd_PowerOn_off,0); + IDS_HomeDispenser (deviceID, 1000 , NULL); + } } } return OK; @@ -1939,8 +1956,7 @@ 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 - TimerMotors_t HW_Motor_Id = DispenserIdToMotorId[Dispenser_i]; - MotorStop(HW_Motor_Id,Hard_Hiz); + MotorStop(DispenserIdToMotorId[Dispenser_i],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 6a3c2074f..e22cff720 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Progress.c @@ -1010,15 +1010,24 @@ void Stub_ProgressRequest(MessageContainer* requestContainer) response.has_progress = true; } else - if(request->amount == 0xE4) //fast refresh for pressure + if(request->amount == 0xE4) //Set WFCF build to waste Time Value { 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) //short_cycle + { + Report("short_cycle ",__FILE__,__LINE__,request->delay,RpWarning,0,0); + short_cycle = request->delay; + response.progress = (double)short_cycle; + response.has_progress = true; + } else - if(request->amount == 0xE6) //fast refresh for pressure + if(request->amount == 0xE6) //HeaterSafetyTestSetLimits { Report("HeaterSafetyTestSetLimits ",__FILE__,__LINE__,request->delay,RpWarning,0,0); HeaterSafetyTestSetLimits(request->delay); diff --git a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c index 374977065..a2ab1f426 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c @@ -598,6 +598,8 @@ uint32_t Waste_PrepareCallbak(uint32_t IfIndex, uint32_t ReadValue) double HeadFlow = GetWHSAirFlow(HEAD_FLOW_METER); double HeadIn_Flow = PressureSensorGetPressure(HEAD_FAN_RIGHT); double HeadOut_Flow = PressureSensorGetPressure(HEAD_FAN_LEFT); + if(WHS_Type == WHS_TYPE_UNKNOWN) + WHS_FlowReady = true; //LP machine if ((HeadFlow<(headairflow*(1+AllowedRangeForWasteBlowerDeviation))) &&(HeadFlow>(headairflow*(1-AllowedRangeForWasteBlowerDeviation)))) { |
