PID & Modbus fine tuning

This commit is contained in:
2022-10-31 23:56:51 +03:00
parent b94ab723ee
commit c23543b213
2 changed files with 20 additions and 9 deletions

View File

@@ -340,7 +340,13 @@ int out_Modbus::findRegister(int registerNum, int posInBuffer, int regType)
{
debugSerial<<F("Ignored - equal with setted val")<<endl;
}
else executeCommand(execObj, -1, mappedParam);
else
{
executeCommand(execObj, -1, mappedParam);
// if param updated by device and no new value queued to send - update @V to avoid "Ignored - equal with setted val"
if (settedValue && !(execObj->subtype & MB_NEED_SEND))
settedValue->valueint=param;
}
//#endif
}
}
@@ -593,13 +599,14 @@ if (itemParametersObj && itemParametersObj->type ==aJson_Object)
aJsonObject *execObj = aJson.getObjectItem(itemParametersObj,suffixStr);
if (execObj && execObj->type == aJson_Object)
{
/*
aJsonObject *polledValue = aJson.getObjectItem(execObj,"@S");
if (polledValue && polledValue->type == aJson_Int && (polledValue->valueint == Value))
{
debugSerial<<F("Ignored - not changed")<<endl;
}
else
else */
{ //Schedule update
execObj->subtype |= MB_NEED_SEND;
@@ -608,7 +615,6 @@ if (itemParametersObj && itemParametersObj->type ==aJson_Object)
{
outValue->valueint=Value;
outValue->subtype =regType & 0xF;
if (outValue->type == aJson_Int) polledValue->valueint=Value; //to pevent suppressing to change back to previously polled value if this occurs before next polling
}
else //No container to store value yet
// If no @V in config - creating with INT type - normal behavior - no supress in-to-out
@@ -618,6 +624,10 @@ if (itemParametersObj && itemParametersObj->type ==aJson_Object)
outValue = aJson.getObjectItem(execObj,"@V");
if (outValue) outValue->subtype =regType & 0xF;
}
aJsonObject *polledValue = aJson.getObjectItem(execObj,"@S");
if (polledValue && outValue->type == aJson_Int) polledValue->valueint=Value; //to pevent suppressing to change back to previously polled value if this occurs before next polling
}
}
}

View File

@@ -213,16 +213,17 @@ int out_pid::getAlarmVal()
aJsonObject * param;
switch (aJson.getArraySize(kPIDObj))
{
case 7: //kP,kI,kD, alarmTO, alarmVal, outMin, outMax
case 6: //kP,kI,kD, alarmTO, alarmVal, outMin
case 5: //kP,kI,kD, alarmTO, alarmVal
param = aJson.getArrayItem(kPIDObj, 4);
case 8: //kP,kI,kD,dT, alarmTO, alarmVal, outMin, outMax
case 7: //kP,kI,kD,dT, alarmTO, alarmVal, outMin
case 6: //kP,kI,kD,dT,alarmTO, alarmVal
param = aJson.getArrayItem(kPIDObj, 5);
alarmValDefined=true;
if (param->type == aJson_Float) outAlarm=param->valuefloat;
else if (param->type == aJson_Int) outAlarm=param->valueint;
else alarmValDefined=false;
case 4: //kP,kI,kD, alarmTO
case 5: //kP,kI,kD,dT, alarmTO
case 4: //kP,kI,kD,dT
case 3: //kP,kI,kD
case 2: //kP,kI
case 1: //kP
@@ -234,7 +235,7 @@ int out_pid::getAlarmVal()
{
if (!alarmValDefined) outAlarm = 0.;
}
else if (!alarmValDefined) outAlarm = .255;
else if (!alarmValDefined) outAlarm = 255.;
}
}
return outAlarm;