From a7f5c67ab2afefbf5b597a84f4526dcb07cc3024 Mon Sep 17 00:00:00 2001 From: Andrey Klimov Date: Fri, 7 Jan 2022 12:56:01 +0300 Subject: [PATCH] PID regulatior init fix --- lighthub/modules/out_pid.cpp | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/lighthub/modules/out_pid.cpp b/lighthub/modules/out_pid.cpp index 89fb02f..b4da0c7 100644 --- a/lighthub/modules/out_pid.cpp +++ b/lighthub/modules/out_pid.cpp @@ -23,7 +23,7 @@ bool out_pid::getConfig() } aJsonObject * kPIDObj = aJson.getArrayItem(item->itemArg, 0); - if (kPIDObj->type != aJson_Array) + if (!kPIDObj || kPIDObj->type != aJson_Array) { errorSerial<setpoint = 20.; } - + store->input=0.0; + store->output=0.0; + store->alarmTimer=millis(); + store->alarmArmed=true; + store->alarmTimeout=alarmTO; //in sec + alarm(true); if (!store->pid) - {store->pid= new PID (&store->input, &store->output, &store->setpoint, kP, kI, kD, direction); if (!store->pid) return false; store->pid->SetMode(AUTOMATIC); //store->pid->SetOutputLimits(outMin,outMax); store->pid->SetSampleTime(dT*1000.0); - store->alarmTimer=millis(); - store->alarmArmed=false; - store->alarmTimeout=alarmTO; //in sec - return true;} else errorSerial<pid && (Status() == CST_INITIALIZED) && item && (item->getCm //short cmd = st.getCmd(); if (item->getCmd() != CMD_OFF) { - if(store->pid->Compute() && !store->alarmArmed) + if(store->pid->Compute() ) { - debugSerial<itemArr->name<setpoint<input<<(" out:") << store->output<output-store->prevOut)>OUTPUT_TRESHOLD) + debugSerial<itemArr->name<setpoint<input<<(" out:") << store->output <pid->GetKp() <pid->GetKi() <pid->GetKd(); + if (store->alarmArmed) debugSerial << F(" Alarm"); + debugSerial<output-store->prevOut)>OUTPUT_TRESHOLD) && !store->alarmArmed) { aJsonObject * oCmd = aJson.getArrayItem(item->itemArg, 1); itemCmd value((float) (store->output));// * (100./255.))); @@ -195,12 +198,12 @@ return 1;//store->pollingInterval; void out_pid::alarm(bool state) { -if (!item || item->itemArg) return; +if (!item || !item->itemArg) return; if (state) { aJsonObject * kPIDObj = aJson.getArrayItem(item->itemArg, 0); - if (kPIDObj->type != aJson_Array) + if (!kPIDObj || kPIDObj->type != aJson_Array) { errorSerial<input<alarmTimer=millis(); if (store->alarmArmed) { - alarm(false); - store->alarmArmed=false; + store->alarmArmed=false; + alarm(false); } return 1; //break;