diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2020-11-16 16:16:33 +0200 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2020-11-16 16:16:33 +0200 |
| commit | cbd5e135024f32e282866b07951bbf1645019a01 (patch) | |
| tree | 1538bfbcc698340ab0f2556bc6f7ad9270034097 /Software | |
| parent | 3f8b5c336b2eddda520ee46cd53b29e33ff591c6 (diff) | |
| download | Tango-cbd5e135024f32e282866b07951bbf1645019a01.tar.gz Tango-cbd5e135024f32e282866b07951bbf1645019a01.zip | |
fix alarm handling (resolves bugs #4085, #4097). dancer setup - per dancer
Diffstat (limited to 'Software')
7 files changed, 67 insertions, 45 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c index e754b0df2..5c24b2338 100644 --- a/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c +++ b/Software/Embedded_SW/Embedded/Modules/AlarmHandling/AlarmHandling.c @@ -631,8 +631,16 @@ JobEndReasonEnum getEndReason(uint32_t AlarmId) switch (AlarmItem[AlarmId].AlarmSource) { case ALARM_SOURCE_TYPE__TemperatureAlarm: - usnprintf(AlarmReasonStr, 100, "Temperature problem in heater %d",AlarmItem[AlarmId].DeviceId); - return JOB_TEMPERATURE_ALARM; + if (AlarmItem[AlarmId].Severity == DEBUG_LOG_CATEGORY__Critical) + { + usnprintf(AlarmReasonStr, 100, "Safety Critical Alarm %d",AlarmItem[AlarmId].EventType); + return JOB_SAFETY_CRITICAL_ALARM; + } + else + { + usnprintf(AlarmReasonStr, 100, "Temperature problem in heater %d",AlarmItem[AlarmId].DeviceId); + return JOB_TEMPERATURE_ALARM; + } case ALARM_SOURCE_TYPE__LimitSwitchAlarm: usnprintf(AlarmReasonStr, 100, "Dispenser %d empty",AlarmItem[AlarmId].DeviceId); return JOB_OUT_OF_DYE; @@ -987,13 +995,20 @@ JobEndReasonEnum AlarmHandlingPrepareJob(void *CurrentJob) } if ((IFS_Availability[1] == IFS_RECOGNIZED_INIT_PASSED)&&(IFS_Availability[2] == IFS_RECOGNIZED_INIT_PASSED)) //ifs installed -check cartridges { - - tempFoundReason = Waste_CheckState(&AlarmId); - if (tempFoundReason!=JOB_OK) - { - FoundReason = tempFoundReason; - ReportWithPackageFilter(AlarmFilter,"waste handling alarm preventing job", __FILE__,__LINE__,AlarmItem[Alarm_i].EventType, AlarmItem[Alarm_i].Severity, AlarmItem[Alarm_i].DeviceId, 0); - } + tempFoundReason = Waste_CheckState(&AlarmId); + if (tempFoundReason!=JOB_OK) + { + for (Alarm_i = 0;Alarm_i<NumOfSystemAlarms;Alarm_i++) + { + if (AlarmId == (AlarmItem[Alarm_i].EventType)) + { + FoundReason = tempFoundReason; + AlarmId = Alarm_i; + ReportWithPackageFilter(AlarmFilter,"waste handling alarm preventing job", __FILE__,AlarmId,AlarmItem[Alarm_i].EventType, AlarmItem[Alarm_i].Severity, AlarmItem[Alarm_i].DeviceId, 0); + break; + } + } + } } if ((AlarmState[Alarm_i].Status == true)&&(FoundReason == JOB_OK)) { diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index 193a35e12..cc2c508c0 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -885,7 +885,9 @@ void FlashInitAndLoad(void) } Report("Hardware Initialized", __FILE__,__LINE__,Bytes, RpMessage, GENHWCFG_MAP_IN_FLASH, 0); - StoreDancerConfigMessage(); + StoreDancerConfigMessage(0); + StoreDancerConfigMessage(1); + StoreDancerConfigMessage(2); Report("Dancer Initialized", __FILE__,DancersCfg[0].zeropoint,DancersCfg[1].zeropoint, RpMessage, DancersCfg[2].zeropoint, 0); /*Bytes = AlarmHandlingLoadFile(); if (Bytes>0) diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c index 021dd243f..5be5f1232 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_Blowers.c @@ -53,7 +53,7 @@ #define PRESSURE_SENSOR_CP 0.269 #define PRESSURE_SENSOR_B 0.45 #define V0_DEFAULT_VALUE 1050 -#define FAN_MIN_RPM_THRESHOLD 4000 +#define FAN_MIN_RPM_THRESHOLD 3200 extern uint16_t Head_Fan_Tach[2]; extern uint8_t Head_Fan_PWM_Command[2]; @@ -92,8 +92,8 @@ void HeadBlowersInit() HeadBlowerControl[0].m_params.MAX = 200; HeadBlowerControl[0].m_params.MIN = -200; HeadBlowerControl[0].m_params.Kd = 0; - HeadBlowerControl[0].m_params.Kp = 350; - HeadBlowerControl[0].m_params.Ki = 25; + HeadBlowerControl[0].m_params.Kp = 800; + HeadBlowerControl[0].m_params.Ki = 80; HeadBlowerControl[0].m_params.IntegralErrorMultiplier = 10; HeadBlowerControl[0].m_params.ProportionalErrorMultiplier = 10; HeadBlowerControl[0].m_params.epsilon = 0; @@ -110,8 +110,8 @@ void HeadBlowersInit() HeadBlowerControl[1].m_params.MAX = 200; HeadBlowerControl[1].m_params.MIN = -200; HeadBlowerControl[1].m_params.Kd = 0; - HeadBlowerControl[1].m_params.Kp = 350; - HeadBlowerControl[1].m_params.Ki = 25; + HeadBlowerControl[1].m_params.Kp = 800; + HeadBlowerControl[1].m_params.Ki = 80; HeadBlowerControl[1].m_params.IntegralErrorMultiplier = 10; HeadBlowerControl[1].m_params.ProportionalErrorMultiplier = 10; HeadBlowerControl[1].m_params.epsilon = 0; @@ -354,12 +354,13 @@ void HeadBlowersCfg() uint32_t PressureSensorInit(int blowerId) { - uint32_t rpm, V0 = 0; + uint32_t V0; - rpm = HeadBlowersGetRPM(blowerId); - if (rpm < FAN_MIN_RPM_THRESHOLD) { + if (HeadBlowersGetRPM(blowerId) < FAN_MIN_RPM_THRESHOLD) { V0 = MillisecGetTemperatures(BlowerIdToSensorId[blowerId]); V0 /= 10; + } else { + V0 = V0_DEFAULT_VALUE; } return V0; } diff --git a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c index 3d2db071e..27a7dfb31 100644 --- a/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c +++ b/Software/Embedded_SW/Embedded/Modules/Stubs_Handler/Stub_Dancer.c @@ -70,6 +70,7 @@ void Stub_DancerPositionRequest(MessageContainer* requestContainer) response.has_general_status = true; response.detailed_status = DANCER_ENC[request->dancer_id].Det_status; response.has_general_status = true; + StoreDancerConfigMessage(Dancer_Id); } else if(Dancer_Id < NUM_OF_ROTENC*2) { @@ -86,8 +87,6 @@ void Stub_DancerPositionRequest(MessageContainer* requestContainer) response.detailed_status = ERROR; // use the Reserved bits to send our errors response.has_general_status = true; } - if (Dancer_Id == 2) - StoreDancerConfigMessage(); responseContainer = createContainer(MESSAGE_TYPE__StubDancerPositionResponse, requestContainer->token, true, &response, &stub_dancer_position_response__pack, &stub_dancer_position_response__get_packed_size); //free(request); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h index 07ecf5d0b..11a92ab63 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_ex.h @@ -46,7 +46,7 @@ uint32_t ThreadEndState(); bool Set_Thread_Rockers_Bypass (int value); -uint32_t StoreDancerConfigMessage(void); +uint32_t StoreDancerConfigMessage(int DancerId); uint32_t LoadDancerConfigMessage(void); //uint32_t MotorPidRequestMessage(HardwarePidControl* request); diff --git a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c index 1920db03a..626bcde7c 100644 --- a/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Thread/Thread_init.c @@ -188,34 +188,35 @@ uint32_t MotorPidRequestMessage(HardwarePidControl* request) } char DancerConfigPath[50] = "0://SysInfo//DancCfg.cfg"; -uint32_t StoreDancerConfigMessage() +uint32_t StoreDancerConfigMessage(int DancerId) { uint32_t status = OK; // FRESULT Fresult = FR_OK; //HardwareConfiguration DancerConfig; HardwareDancer Dancers[MAX_SYSTEM_DANCERS]; - // uint8_t* response_buffer; +#ifdef FOUR_WINDERS + uint8_t DancerAddress[MAX_SYSTEM_DANCERS] = {EEPROM_STORAGE_DANCER_0,EEPROM_STORAGE_DANCER_1,EEPROM_STORAGE_DANCER_2,EEPROM_STORAGE_DANCER_3,EEPROM_STORAGE_DANCER_4}; +#else + uint8_t DancerAddress[MAX_SYSTEM_DANCERS] = {EEPROM_STORAGE_DANCER_0,EEPROM_STORAGE_DANCER_1,EEPROM_STORAGE_DANCER_2}; +#endif // size_t response_size = 0; - int Dancer_i; + int Dancer_i = DancerId; //hardware_configuration__init(&DancerConfig); //DancerConfig.dancers = (HardwareDancer**)my_malloc(sizeof(HardwareDancer*)*MAX_SYSTEM_DANCERS); - for (Dancer_i = 0; Dancer_i < MAX_SYSTEM_DANCERS; Dancer_i++) - { - hardware_dancer__init(&Dancers[Dancer_i]); - //DancerConfig.dancers[Dancer_i] = &Dancers[Dancer_i]; - Dancers[Dancer_i].has_zeropoint = true; - Dancers[Dancer_i].hardwaredancertype = Dancer_i; - Dancers[Dancer_i].has_hardwaredancertype = true; - Dancers[Dancer_i].zeropoint=Control_Read_Dancer_Position(Dancer_i,0); - //DancerConfig.n_dancers++; - DancersCfg[Dancer_i].zeropoint = Dancers[Dancer_i].zeropoint; - DancersCfg[Dancer_i].zeropoint = Control_Read_Dancer_Position(Dancer_i,0); - } + hardware_dancer__init(&Dancers[Dancer_i]); + //DancerConfig.dancers[Dancer_i] = &Dancers[Dancer_i]; + Dancers[Dancer_i].has_zeropoint = true; + Dancers[Dancer_i].hardwaredancertype = Dancer_i; + Dancers[Dancer_i].has_hardwaredancertype = true; + Dancers[Dancer_i].zeropoint=Control_Read_Dancer_Position(Dancer_i,0); + //DancerConfig.n_dancers++; + DancersCfg[Dancer_i].zeropoint = Dancers[Dancer_i].zeropoint; + DancersCfg[Dancer_i].zeropoint = Control_Read_Dancer_Position(Dancer_i,0); + + - status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_0,DancersCfg[0].zeropoint); - status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_1,DancersCfg[1].zeropoint); - status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_2,DancersCfg[2].zeropoint); + status |= MCU_E2PromProgram(DancerAddress[Dancer_i],DancersCfg[Dancer_i].zeropoint); Report("~~~~~~Store eeprom 0",__FILE__,DancersCfg[0].zeropoint,(int)DancersCfg[1].zeropoint,RpWarning,(int)DancersCfg[2].zeropoint,0); #ifdef FOUR_WINDERS status |= MCU_E2PromProgram(EEPROM_STORAGE_DANCER_3,DancersCfg[HARDWARE_DANCER_3].zeropoint); diff --git a/Software/Stubs Collection/stubs/ChangePidDuringRun.cs b/Software/Stubs Collection/stubs/ChangePidDuringRun.cs index 4d07cac71..9422e2cdc 100644 --- a/Software/Stubs Collection/stubs/ChangePidDuringRun.cs +++ b/Software/Stubs Collection/stubs/ChangePidDuringRun.cs @@ -8,19 +8,19 @@ using System.Threading; using System.Threading.Tasks; using System.Collections.Generic; using Tango.PMR.Stubs; +using Tango.PMR.Hardware; using Tango.Stubs; public void OnExecute(StubManager stubManager) { +StubHeatingTestRequest stubHeatingTestRequest = new StubHeatingTestRequest(); stubHeatingTestRequest.DryerZone1Temp = 0; stubHeatingTestRequest.DryerZone2Temp = 0; HardwarePidControl hardwarePidControl = new HardwarePidControl(); -hardwarePidControl.HardwarePidControlType = Tango.PMR.Hardware.HardwarePidControlType.FeederMotor; hardwarePidControl.OutputProportionalPowerLimit = 0.5; //Maximal additional power hardwarePidControl.OutputProportionalBand = 5; -hardwarePidControl.IntegralTime = 7000; //Ki hardwarePidControl.DerivativeTime = 0; //Kd hardwarePidControl.SensorCorrectionAdjustment = 0; hardwarePidControl.SensorMinValue = 0; @@ -30,15 +30,19 @@ hardwarePidControl.SetPointControlOutputRate = 0; hardwarePidControl.ControlOutputType = 0.001; ////Dt hardwarePidControl.SsrControlOutputType = 0; hardwarePidControl.OutputOnOffHysteresisValue = 100; //Kp divider -hardwarePidControl.ProcessVariableSamplingRate = 0; -hardwarePidControl.PvInputFilterFactorMode = 6; //averaging the readouts / number of samples +hardwarePidControl.ProcessVariableSamplingRate = 10; +hardwarePidControl.PvInputFilterFactorMode = 4; //averaging the readouts / number of samples hardwarePidControl.OutputProportionalCycleTime = 0; hardwarePidControl.AcHeatersHalfCycleTime = 0; -hardwarePidControl.ProportionalGain = 5000; //Kp hardwarePidControl.PidActive = false; hardwarePidControl.Epsilon = 0; +hardwarePidControl.OutputOnOffHysteresisValue = 100; -stubHeatingTestRequest.HardwarePidControl1 = hardwarePidControl1; +hardwarePidControl.HardwarePidControlType = Tango.PMR.Hardware.HardwarePidControlType.MotorWinder; +hardwarePidControl.IntegralTime = 8000; //Ki +hardwarePidControl.ProportionalGain = 7000; //Kp + +stubHeatingTestRequest.HardwarePidControl1 = hardwarePidControl; StubHeatingTestPollRequest stubHeatingTestPollRequest = new StubHeatingTestPollRequest(); |
