diff options
| author | Shlomo Hecht <shlomo@twine-s.com> | 2018-11-05 10:03:00 +0200 |
|---|---|---|
| committer | Shlomo Hecht <shlomo@twine-s.com> | 2018-11-05 10:03:00 +0200 |
| commit | 8bce53c5bea437d09946e1d29f153bfaa7a45133 (patch) | |
| tree | 81e97e3ec148e689c69e6c820703435ee01ef8b9 /Software/Embedded_SW/Embedded/Modules | |
| parent | 05538cca177a09a2d97c35700c6dd19a1bf5f7f0 (diff) | |
| parent | 648a3fdc373fc1555a8d1e1908e8b4dfa2203820 (diff) | |
| download | Tango-8bce53c5bea437d09946e1d29f153bfaa7a45133.tar.gz Tango-8bce53c5bea437d09946e1d29f153bfaa7a45133.zip | |
merge
Diffstat (limited to 'Software/Embedded_SW/Embedded/Modules')
5 files changed, 98 insertions, 82 deletions
diff --git a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c index 9eb9d9822..5785bafe4 100644 --- a/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c +++ b/Software/Embedded_SW/Embedded/Modules/Control/MillisecTask.c @@ -486,6 +486,10 @@ uint32_t MillisecLoop(uint32_t tick) { MillisecReadFromTempSensor(Sensor_i, NULL); } + if (watchdogCriticalAlarm == false) + { + Control_WD(ENABLE,5); //activate heaters/dispenser watchdog, 0.5 seconds + } } if (O900Millisecond_Tick) @@ -499,10 +503,6 @@ uint32_t MillisecLoop(uint32_t tick) CalculateDispenserPressure(Disp_i); } FPGA_GetAllDispensersValveBusyOCD(); - if (watchdogCriticalAlarm == false) - { - Control_WD(ENABLE,50); //activate heaters/dispenser watchdog, 5 seconds - } DrawerFansStatus = Read_Fans_Tacho(); KeepAliveOneSecondCall(); } diff --git a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c index a5f3f48cf..ed1f23cb1 100644 --- a/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c +++ b/Software/Embedded_SW/Embedded/Modules/General/GeneralHardware.c @@ -26,14 +26,10 @@ HardwareBlower BlowerCfg; -uint32_t HWConfigurationFunc(MessageContainer* requestContainer) +uint32_t HWConfiguration(UploadHardwareConfigurationRequest* UploadRequest) { uint32_t status = 0; int Motor_i, Dancer_i, Dispenser_i,PID_i; - MessageContainer responseContainer; - UploadHardwareConfigurationResponse response = UPLOAD_HARDWARE_CONFIGURATION_RESPONSE__INIT; - - UploadHardwareConfigurationRequest* UploadRequest = upload_hardware_configuration_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); if (UploadRequest == NULL) { @@ -42,6 +38,10 @@ uint32_t HWConfigurationFunc(MessageContainer* requestContainer) } HardwareConfiguration *request = UploadRequest->hardwareconfiguration; + if (JobIsActive()) + { + return ERROR; + } PrintingHWConfiguration(request); if (request->n_winders == 1) status += InternalWinderConfigMessage(request->winders); @@ -122,8 +122,28 @@ uint32_t HWConfigurationFunc(MessageContainer* requestContainer) AlarmHandlingStart(); //ThreadInitialTestStub(request); + return OK; + + + +} +uint32_t HWConfigurationFunc(MessageContainer* requestContainer) +{ + uint32_t status = 0; + int Motor_i, Dancer_i, Dispenser_i,PID_i; + MessageContainer responseContainer; + UploadHardwareConfigurationResponse response = UPLOAD_HARDWARE_CONFIGURATION_RESPONSE__INIT; + + UploadHardwareConfigurationRequest* UploadRequest = upload_hardware_configuration_request__unpack(NULL, requestContainer->data.len, requestContainer->data.data); + + status = HWConfiguration(UploadRequest); responseContainer = createContainer(MESSAGE_TYPE__UploadHardwareConfigurationResponse, requestContainer->token, true, &response, &upload_hardware_configuration_response__pack, &upload_hardware_configuration_response__get_packed_size); + if (status!= OK) + { + responseContainer.error = ERROR_CODE__INVALID_PARAMETER; + responseContainer.errormessage = "JOb Active or incorrect parameters"; + } uint8_t* container_buffer = malloc(message_container__get_packed_size(&responseContainer)); size_t container_size = message_container__pack(&responseContainer, container_buffer); free(responseContainer.data.data); diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h index 6a682969f..975635342 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters.h @@ -22,25 +22,23 @@ typedef struct HeaterPIDControlConfigstruc { bool configured; int id; //HardwarePidControlType - char name[20]; int32_t outputproportionalpowerlimit; float outputproportionalband; - int32_t integraltime; - int32_t derivativetime; - int32_t sensorcorrectionadjustment; - int32_t sensortypeandsetpointlimits; - int32_t setpointramprateorsoftstartramp; - int32_t setpointcontroloutputrate; - float controloutputtype; - int32_t ssrcontroloutputtype; - int32_t outputonoffhysteresisvalues; - int32_t processvariablesamplingrate; - int32_t pvinputfilterfactormode; + //int32_t sensorcorrectionadjustment; + //int32_t sensortypeandsetpointlimits; + //int32_t setpointramprateorsoftstartramp; + //int32_t setpointcontroloutputrate; + //int32_t outputonoffhysteresisvalues; + //int32_t processvariablesamplingrate; + //int32_t pvinputfilterfactormode; int32_t sensormaxvalue; int32_t sensorminvalue; double kp; double ki; double kd; + double epsilon; + double dt; + bool pidactive; }HeaterPIDControlConfig; typedef struct HeaterCommandstruc diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c index bf1f1128d..6f6cf702d 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_init.c @@ -140,58 +140,44 @@ uint32_t HeaterConfigRequestMessage(HardwarePidControl* request) { HeaterControl[HeaterId].configured = true; HeaterControl[HeaterId].id = HeaterId; - //strncpy (HeaterControl[HeaterId].name, request->name, 20); HeaterControl[HeaterId].outputproportionalpowerlimit = request->outputproportionalpowerlimit; HeaterControl[HeaterId].outputproportionalband = request->outputproportionalband; - HeaterControl[HeaterId].integraltime = request->integraltime; - HeaterControl[HeaterId].derivativetime = request->derivativetime; - HeaterControl[HeaterId].sensorcorrectionadjustment = request->sensorcorrectionadjustment; - //sensorminvalue,sensormaxvalue are used for the dryer heater as internal heater control if (HeaterId == HARDWARE_PID_CONTROL_TYPE__DryerAirTemperature) - //if ((HeaterId == HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain)||(HeaterId != HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary)) { HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain].sensormaxvalue = request->sensormaxvalue; HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain].sensorminvalue = request->sensorminvalue; HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary].sensormaxvalue = request->sensormaxvalue; HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary].sensorminvalue = request->sensorminvalue; } - //HeaterControl[HeaterId].sensortypeandsetpointlimits = request->sensortypeandsetpointlimits; - HeaterControl[HeaterId].setpointramprateorsoftstartramp = request->setpointramprateorsoftstartramp; - HeaterControl[HeaterId].setpointcontroloutputrate = request->setpointcontroloutputrate; - HeaterControl[HeaterId].controloutputtype = request->controloutputtype; - HeaterControl[HeaterId].ssrcontroloutputtype = request->ssrcontroloutputtype; - HeaterControl[HeaterId].outputonoffhysteresisvalues = request->outputonoffhysteresisvalue; - HeaterControl[HeaterId].processvariablesamplingrate = request->processvariablesamplingrate; - HeaterControl[HeaterId].pvinputfilterfactormode = request->pvinputfilterfactormode; - //HeaterControl[HeaterId].kp = 0.5; - //HeaterControl[HeaterId].ki = 0.1; - //HeaterControl[HeaterId].kd = 0.0; HeaterControl[HeaterId].kp = request->proportionalgain; HeaterControl[HeaterId].ki = request->integraltime; HeaterControl[HeaterId].kd = request->derivativetime; + HeaterControl[HeaterId].dt = request->controloutputtype; + HeaterControl[HeaterId].epsilon = request->epsilon; + HeaterControl[HeaterId].pidactive = request->pidactive; + //HeaterControl[HeaterId].sensorcorrectionadjustment = request->sensorcorrectionadjustment; + //sensorminvalue,sensormaxvalue are used for the dryer heater as internal heater control + //HeaterControl[HeaterId].sensortypeandsetpointlimits = request->sensortypeandsetpointlimits; + //HeaterControl[HeaterId].setpointramprateorsoftstartramp = request->setpointramprateorsoftstartramp; + //HeaterControl[HeaterId].setpointcontroloutputrate = request->setpointcontroloutputrate; + //HeaterControl[HeaterId].ssrcontroloutputtype = request->ssrcontroloutputtype; + //HeaterControl[HeaterId].outputonoffhysteresisvalues = request->outputonoffhysteresisvalue; + //HeaterControl[HeaterId].processvariablesamplingrate = request->processvariablesamplingrate; + //HeaterControl[HeaterId].pvinputfilterfactormode = request->pvinputfilterfactormode; if (HeaterId < MAX_AC_HEATERS) AcHeaterConfigured[HeaterId] = true; //check if all A/C heaters are defined. if they are - validate the configuration - if (((HeaterId == HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain)||(HeaterId == HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary)) + /*if (((HeaterId == HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain)||(HeaterId == HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary)) &&HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain].configured - &&HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary].configured - /*&&HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2].id*/) + &&HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary].configured) { if (HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain].outputproportionalpowerlimit - + HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary].outputproportionalpowerlimit - /*+ HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeater200w2].outputproportionalpowerlimit*/> 100) - ValidationError += 2; - if (ValidationError) - { + + HeaterControl[HARDWARE_PID_CONTROL_TYPE__DryerHeaterSecondary].outputproportionalpowerlimit > 100) LOG_ERROR (ValidationError, "Validation Error in Heaters Control"); return ERROR; - } - else - { - } - } + }*/ return OK; } diff --git a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c index 1a4086a34..8ae7a117b 100644 --- a/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c +++ b/Software/Embedded_SW/Embedded/Modules/Heaters/Heaters_print.c @@ -329,8 +329,8 @@ uint32_t PrepareHeater(int HeaterId, uint32_t SetTemperatue) HeaterPIDConfig[HeaterId].m_params.Kd = HeaterControl[HeaterId].kd; HeaterPIDConfig[HeaterId].m_params.Kp = HeaterControl[HeaterId].kp; HeaterPIDConfig[HeaterId].m_params.Ki = HeaterControl[HeaterId].ki; - HeaterPIDConfig[HeaterId].m_params.dt = 0.01; - HeaterPIDConfig[HeaterId].m_params.epsilon = 10; + HeaterPIDConfig[HeaterId].m_params.dt = HeaterControl[HeaterId].dt; + HeaterPIDConfig[HeaterId].m_params.epsilon = HeaterControl[HeaterId].epsilon; //0.1 degree HeaterPIDConfig[HeaterId].m_calculatedError = 0; HeaterPIDConfig[HeaterId].m_integral = 0; HeaterPIDConfig[HeaterId].m_isEnabled = true; @@ -532,20 +532,26 @@ uint32_t HeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) if(HeaterPIDConfig[index].m_isEnabled && (HeaterPIDConfig[index].m_SetParam != 0)) { HeaterPIDConfig[index].m_mesuredParam = readValue; - if (readValue < ((HeaterCmd[index].targettemperatue * (100-HeaterControl[index].outputproportionalband))/100)) //below proportional band + if (HeaterControl[index].pidactive == false) { - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, 100); - //REPORT_MSG (readValue,"AC HEATER Over temperature"); + if (readValue < ((HeaterCmd[index].targettemperatue * (100-HeaterControl[index].outputproportionalband))/100)) //below proportional band + { + HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, 100); + //REPORT_MSG (readValue,"AC HEATER Over temperature"); + } + else if (readValue > ((HeaterCmd[index].targettemperatue * (100+HeaterControl[index].outputproportionalband))/100)) + { + HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, 0); + //REPORT_MSG (readValue,"AC HEATER Under temperature"); + } } - else if (readValue > ((HeaterCmd[index].targettemperatue * (100+HeaterControl[index].outputproportionalband))/100)) + else //PID active { - HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, 0); - //REPORT_MSG (readValue,"AC HEATER Under temperature"); + //check only for the proportional band limits + HeaterPIDConfig[index].m_calculatedError = PIDAlgorithmCalculation(HeaterPIDConfig[index].m_SetParam , HeaterPIDConfig[index].m_mesuredParam, + &HeaterPIDConfig[index].m_params, &HeaterPIDConfig[index].m_preError, &HeaterPIDConfig[index].m_integral); + HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, (int)(HeaterPIDConfig[index].m_calculatedError/100)); } -//check only for the proportional band limits - HeaterPIDConfig[index].m_calculatedError = PIDAlgorithmCalculation(HeaterPIDConfig[index].m_SetParam , HeaterPIDConfig[index].m_mesuredParam, - &HeaterPIDConfig[index].m_params, &HeaterPIDConfig[index].m_preError, &HeaterPIDConfig[index].m_integral); - //HeaterRecalculateSharedHeatersParams(HARDWARE_PID_CONTROL_TYPE__DryerHeaterMain, (int)(HeaterPIDConfig[index].m_calculatedError/100)); } @@ -618,30 +624,36 @@ uint32_t DCHeaterControlCBFunction(uint32_t IfIndex, uint32_t readValue) } if(HeaterPIDConfig[index].m_isEnabled && (HeaterPIDConfig[index].m_SetParam != 0)) { - if (readValue < ((HeaterCmd[index].targettemperatue * (100-HeaterControl[index].outputproportionalband))/100)) //below proportional band + if (HeaterControl[index].pidactive == false) { - HeaterRecalculateHeaterParams(index, 100); + if (readValue < ((HeaterCmd[index].targettemperatue * (100-HeaterControl[index].outputproportionalband))/100)) //below proportional band + { + HeaterRecalculateHeaterParams(index, 100); + } + else if (readValue > ((HeaterCmd[index].targettemperatue * (100+HeaterControl[index].outputproportionalband))/100)) + { + HeaterRecalculateHeaterParams(index, 0); + } + } - else if (readValue > ((HeaterCmd[index].targettemperatue * (100+HeaterControl[index].outputproportionalband))/100)) + else ///pid active { - HeaterRecalculateHeaterParams(index, 0); - } + //check only for the proportional band limits + HeaterPIDConfig[index].m_mesuredParam = readValue; + HeaterPIDConfig[index].m_calculatedError = PIDAlgorithmCalculation(HeaterPIDConfig[index].m_SetParam , HeaterPIDConfig[index].m_mesuredParam, + &HeaterPIDConfig[index].m_params, &HeaterPIDConfig[index].m_preError, &HeaterPIDConfig[index].m_integral); + // error[index][Counter[index]] = HeaterPIDConfig[index].m_preError; + // integral[index][Counter[index]] = HeaterPIDConfig[index].m_integral; + // output[index][Counter[index]] = HeaterPIDConfig[index].m_calculatedError; + // if (Counter[index]++ >=100) + // Counter[index] = 0; + // len = usnprintf(logmsg[index], 254, "PID%d: Temp %d Integral %d Output %d ",index,(int)HeaterPIDConfig[index].m_mesuredParam ,(int)HeaterPIDConfig[index].m_integral,(int)HeaterPIDConfig[index].m_calculatedError); + // Report(logmsg[index],__FILE__,__LINE__,index,RpWarning,index, Counter[index]); + // #warning PID is now only proportional (above) + HeaterRecalculateHeaterParams(index, (int)(HeaterPIDConfig[index].m_calculatedError/100)); -//check only for the proportional band limits - HeaterPIDConfig[index].m_mesuredParam = readValue; - HeaterPIDConfig[index].m_calculatedError = PIDAlgorithmCalculation(HeaterPIDConfig[index].m_SetParam , HeaterPIDConfig[index].m_mesuredParam, - &HeaterPIDConfig[index].m_params, &HeaterPIDConfig[index].m_preError, &HeaterPIDConfig[index].m_integral); - -// error[index][Counter[index]] = HeaterPIDConfig[index].m_preError; -// integral[index][Counter[index]] = HeaterPIDConfig[index].m_integral; -// output[index][Counter[index]] = HeaterPIDConfig[index].m_calculatedError; -// if (Counter[index]++ >=100) -// Counter[index] = 0; -// len = usnprintf(logmsg[index], 254, "PID%d: Temp %d Integral %d Output %d ",index,(int)HeaterPIDConfig[index].m_mesuredParam ,(int)HeaterPIDConfig[index].m_integral,(int)HeaterPIDConfig[index].m_calculatedError); -// Report(logmsg[index],__FILE__,__LINE__,index,RpWarning,index, Counter[index]); + } - #warning PID is now only proportional (above) - //HeaterRecalculateHeaterParams(index, (int)(HeaterPIDConfig[index].m_calculatedError/100)); } |
