diff options
11 files changed, 217 insertions, 31 deletions
diff --git a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c index a2a74b2e6..871b97cac 100644 --- a/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c +++ b/Software/Embedded_SW/Embedded/Common/SW_Info/SW_Info.c @@ -20,7 +20,7 @@ typedef struct } TangoVersion_t; -TangoVersion_t _gTangoVersion = {1,6,0,0}; +TangoVersion_t _gTangoVersion = {1,6,1,0}; #define BUILD_DATE __DATE__ char Dat[50] = BUILD_DATE; diff --git a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c index e72895d9b..a6ac9898a 100644 --- a/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c +++ b/Software/Embedded_SW/Embedded/Drivers/FPGA/FPGA_GPIO/FPGA_GPIO.c @@ -894,6 +894,8 @@ bool Get_COVER_1_State(COVERS_ENUM CoverId) default: return false; } +#else + return OK; #endif } diff --git a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c index ad7e91b88..5edb039bd 100644 --- a/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c +++ b/Software/Embedded_SW/Embedded/Drivers/Motors/Motor.c @@ -260,10 +260,12 @@ float MotorGetSpeedFromFPGA_Res(TimerMotors_t _motorId) uint32_t MotorGetADCFromFPGA(TimerMotors_t _motorId) { - #ifndef EVALUATION_BOARD +#ifndef EVALUATION_BOARD FPGA_Get_ADC_OUT_Cmd(_motorId); return OK; - #endif +#else + return 0; +#endif } bool MotorParseStatus(TimerMotors_t _motorId) 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 9ece0efe6..fbbf1ec58 100644 --- a/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c +++ b/Software/Embedded_SW/Embedded/Modules/Waste/Waste_maint.c @@ -607,6 +607,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)))) { diff --git a/Software/Embedded_SW/Embedded/Software Release Notes.txt b/Software/Embedded_SW/Embedded/Software Release Notes.txt index d5db2f317..c4f9c9eca 100644 --- a/Software/Embedded_SW/Embedded/Software Release Notes.txt +++ b/Software/Embedded_SW/Embedded/Software Release Notes.txt @@ -1,3 +1,9 @@ +Embedded SW Release note - Version 1.6.1(1) - Pack 4 - Gen #2 +============================================================= +PBU at the beggining of pre-run +"special dispensers" feature removed +WHS prepare ready for old WHS + Embedded SW Release note - Version 1.6.0(1) - Pack 4 - Gen #2 ============================================================= Flash RAM handling: flash reduced to 0x4000 bytes only (16K) - used for semi-permanent data only - embedded parameters and alarm file. diff --git a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c index 4ab177244..6e2585d8f 100644 --- a/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c +++ b/Software/Embedded_SW/Embedded/StateMachines/Initialization/PowerIdle.c @@ -131,6 +131,7 @@ void PowerIdleSetIdle(void) { IdleToPowerDownControlId = AddControlCallback("IdleToPowerDown",PowerIdleToPowerDownCallBackFunction, eOneHour*2, TemplateDataReadCBFunction,0,0, 0 ); } + short_cycle = false; if (AutoHoming_Config >= AutoHoming_PowerOn_off ) { for (i=0;i<MAX_SYSTEM_DISPENSERS;i++) |
