diff options
| author | Patrick Venture <venture@google.com> | 2019-02-11 10:21:05 -0800 |
|---|---|---|
| committer | Patrick Venture <venture@google.com> | 2019-02-11 11:22:27 -0800 |
| commit | 7442c37a1f037ae9615309cc1a22664b008eeac7 (patch) | |
| tree | eb2cb3fa61b93a5c5b4cbf4ced7627037807c799 | |
| parent | a1c5d3741d2ac66fe4fb04401e51547338b305da (diff) | |
| download | phosphor-pid-control-7442c37a1f037ae9615309cc1a22664b008eeac7.tar.gz phosphor-pid-control-7442c37a1f037ae9615309cc1a22664b008eeac7.zip | |
conf change: pid: all pid details are now camelCase
Convert all PID configuration details are now camelCase instead of snake
case.
Change-Id: Id132053f122dfcd8abaace17df91c99758eb2b0c
Signed-off-by: Patrick Venture <venture@google.com>
| -rw-r--r-- | README.md | 16 | ||||
| -rw-r--r-- | dbus/dbusconfiguration.cpp | 57 | ||||
| -rw-r--r-- | examples/swampd.conf | 18 | ||||
| -rw-r--r-- | pid/builderconfig.cpp | 34 | ||||
| -rw-r--r-- | pid/ec/pid.cpp | 2 | ||||
| -rw-r--r-- | pid/ec/pid.hpp | 18 | ||||
| -rw-r--r-- | pid/util.cpp | 40 | ||||
| -rw-r--r-- | scripts/pid-example.txt | 18 | ||||
| -rw-r--r-- | scripts/pid-example.yaml | 54 | ||||
| -rw-r--r-- | scripts/writepid.mako.cpp | 18 |
10 files changed, 141 insertions, 134 deletions
@@ -107,16 +107,16 @@ The internal thermometers specified will be read via sysfs. writePath: "/sys/class/hwmon/hwmon0/pwm0" pidinfo: samplerate: 0.1 // sample time in seconds - p_coeff: 0.01 // coefficient for proportional - i_coeff: 0.001 // coefficient for integral + proportionalCoeff: 0.01 // coefficient for proportional + integralCoeff: 0.001 // coefficient for integral integral_limit: min: 0 max: 100 output_limit: min: 0 max: 100 - slew_negative: 0 - slew_positive: 0 + slewNegative: 0 + slewPositive: 0 {PIDID}: type: "margin" ipmi: @@ -126,16 +126,16 @@ The internal thermometers specified will be read via sysfs. writePath: "" pidinfo: samplerate: 1 // sample time in seconds - p_coeff: 94.0 - i_coeff: 2.0 + proportionalCoeff: 94.0 + integralCoeff: 2.0 integral_limit: min: 3000 max: 10000 output_limit: min: 3000 max: 10000 - slew_negative: 0 - slew_positive: 0 + slewNegative: 0 + slewPositive: 0 ``` ### Chassis Delta diff --git a/dbus/dbusconfiguration.cpp b/dbus/dbusconfiguration.cpp index e4396c4..fa7a3dd 100644 --- a/dbus/dbusconfiguration.cpp +++ b/dbus/dbusconfiguration.cpp @@ -113,16 +113,21 @@ void debugPrint(void) std::cout << "\t\t\t}\n"; std::cout << "\t\t\t" << pidconf.second.setpoint << ",\n"; std::cout << "\t\t\t{" << pidconf.second.pidInfo.ts << ",\n"; - std::cout << "\t\t\t" << pidconf.second.pidInfo.p_c << ",\n"; - std::cout << "\t\t\t" << pidconf.second.pidInfo.i_c << ",\n"; - std::cout << "\t\t\t" << pidconf.second.pidInfo.ff_off << ",\n"; - std::cout << "\t\t\t" << pidconf.second.pidInfo.ff_gain << ",\n"; - std::cout << "\t\t\t{" << pidconf.second.pidInfo.i_lim.min << "," - << pidconf.second.pidInfo.i_lim.max << "},\n"; - std::cout << "\t\t\t{" << pidconf.second.pidInfo.out_lim.min << "," - << pidconf.second.pidInfo.out_lim.max << "},\n"; - std::cout << "\t\t\t" << pidconf.second.pidInfo.slew_neg << ",\n"; - std::cout << "\t\t\t" << pidconf.second.pidInfo.slew_pos << ",\n"; + std::cout << "\t\t\t" << pidconf.second.pidInfo.proportionalCoeff + << ",\n"; + std::cout << "\t\t\t" << pidconf.second.pidInfo.integralCoeff + << ",\n"; + std::cout << "\t\t\t" << pidconf.second.pidInfo.feedFwdOffset + << ",\n"; + std::cout << "\t\t\t" << pidconf.second.pidInfo.feedFwdGain + << ",\n"; + std::cout << "\t\t\t{" << pidconf.second.pidInfo.integralLimit.min + << "," << pidconf.second.pidInfo.integralLimit.max + << "},\n"; + std::cout << "\t\t\t{" << pidconf.second.pidInfo.outLim.min << "," + << pidconf.second.pidInfo.outLim.max << "},\n"; + std::cout << "\t\t\t" << pidconf.second.pidInfo.slewNeg << ",\n"; + std::cout << "\t\t\t" << pidconf.second.pidInfo.slewPos << ",\n"; std::cout << "\t\t\t}\n\t\t}\n"; } std::cout << "\t},\n"; @@ -402,25 +407,25 @@ void init(sdbusplus::bus::bus& bus) base.at("SetPoint")); } info.pidInfo.ts = 1.0; // currently unused - info.pidInfo.p_c = std::visit(VariantToDoubleVisitor(), - base.at("PCoefficient")); - info.pidInfo.i_c = std::visit(VariantToDoubleVisitor(), - base.at("ICoefficient")); - info.pidInfo.ff_off = std::visit(VariantToDoubleVisitor(), - base.at("FFOffCoefficient")); - info.pidInfo.ff_gain = std::visit(VariantToDoubleVisitor(), - base.at("FFGainCoefficient")); - info.pidInfo.i_lim.max = + info.pidInfo.proportionalCoeff = std::visit( + VariantToDoubleVisitor(), base.at("PCoefficient")); + info.pidInfo.integralCoeff = std::visit( + VariantToDoubleVisitor(), base.at("ICoefficient")); + info.pidInfo.feedFwdOffset = std::visit( + VariantToDoubleVisitor(), base.at("FFOffCoefficient")); + info.pidInfo.feedFwdGain = std::visit( + VariantToDoubleVisitor(), base.at("FFGainCoefficient")); + info.pidInfo.integralLimit.max = std::visit(VariantToDoubleVisitor(), base.at("ILimitMax")); - info.pidInfo.i_lim.min = + info.pidInfo.integralLimit.min = std::visit(VariantToDoubleVisitor(), base.at("ILimitMin")); - info.pidInfo.out_lim.max = std::visit(VariantToDoubleVisitor(), - base.at("OutLimitMax")); - info.pidInfo.out_lim.min = std::visit(VariantToDoubleVisitor(), - base.at("OutLimitMin")); - info.pidInfo.slew_neg = + info.pidInfo.outLim.max = std::visit(VariantToDoubleVisitor(), + base.at("OutLimitMax")); + info.pidInfo.outLim.min = std::visit(VariantToDoubleVisitor(), + base.at("OutLimitMin")); + info.pidInfo.slewNeg = std::visit(VariantToDoubleVisitor(), base.at("SlewNeg")); - info.pidInfo.slew_pos = + info.pidInfo.slewPos = std::visit(VariantToDoubleVisitor(), base.at("SlewPos")); double negativeHysteresis = 0; double positiveHysteresis = 0; diff --git a/examples/swampd.conf b/examples/swampd.conf index fd492ee..0866c5b 100644 --- a/examples/swampd.conf +++ b/examples/swampd.conf @@ -75,21 +75,21 @@ zones = ( ) set-point = 90.0 pid = { - sampleperiod = 0.1 - p_coefficient = 0.01 - i_coefficient = 0.001 - ff_off_coefficient = 0.0 - ff_gain_coefficient = 0.0 - i_limit = { + samplePeriod = 0.1 + proportionalCoeff = 0.01 + integralCoeff = 0.001 + feedFwdOffOffsetCoeff = 0.0 + feedFwdGainCoeff = 0.0 + integralCoeff = { min: 0.0 max: 100.0 } - out_limit = { + outLimit = { min: 0.0 max: 100.0 } - slew_neg = 0.0 - slew_pos = 0.0 + slewNeg = 0.0 + slewPos = 0.0 } } ) diff --git a/pid/builderconfig.cpp b/pid/builderconfig.cpp index 652724d..732d9fc 100644 --- a/pid/builderconfig.cpp +++ b/pid/builderconfig.cpp @@ -102,22 +102,24 @@ std::unordered_map<int64_t, std::unique_ptr<PIDZone>> /* set-point is only required to be set for thermal. */ /* TODO(venture): Verify this works optionally here. */ info.setpoint = pid.lookup("set-point"); - info.pidInfo.ts = pid.lookup("pid.sampleperiod"); - info.pidInfo.p_c = pid.lookup("pid.p_coefficient"); - info.pidInfo.i_c = pid.lookup("pid.i_coefficient"); - info.pidInfo.ff_off = pid.lookup("pid.ff_off_coefficient"); - info.pidInfo.ff_gain = pid.lookup("pid.ff_gain_coefficient"); - info.pidInfo.i_lim.min = pid.lookup("pid.i_limit.min"); - info.pidInfo.i_lim.max = pid.lookup("pid.i_limit.max"); - info.pidInfo.out_lim.min = pid.lookup("pid.out_limit.min"); - info.pidInfo.out_lim.max = pid.lookup("pid.out_limit.max"); - info.pidInfo.slew_neg = pid.lookup("pid.slew_neg"); - info.pidInfo.slew_pos = pid.lookup("pid.slew_pos"); - - std::cerr << "out_lim.min: " << info.pidInfo.out_lim.min - << "\n"; - std::cerr << "out_lim.max: " << info.pidInfo.out_lim.max - << "\n"; + info.pidInfo.ts = pid.lookup("pid.samplePeriod"); + info.pidInfo.proportionalCoeff = + pid.lookup("pid.proportionalCoeff"); + info.pidInfo.integralCoeff = pid.lookup("pid.integralCoeff"); + info.pidInfo.feedFwdOffset = + pid.lookup("pid.feedFwdOffOffsetCoeff"); + info.pidInfo.feedFwdGain = pid.lookup("pid.feedFwdGainCoeff"); + info.pidInfo.integralLimit.min = + pid.lookup("pid.integralCoeff.min"); + info.pidInfo.integralLimit.max = + pid.lookup("pid.integralCoeff.max"); + info.pidInfo.outLim.min = pid.lookup("pid.outLimit.min"); + info.pidInfo.outLim.max = pid.lookup("pid.outLimit.max"); + info.pidInfo.slewNeg = pid.lookup("pid.slewNeg"); + info.pidInfo.slewPos = pid.lookup("pid.slewPos"); + + std::cerr << "outLim.min: " << info.pidInfo.outLim.min << "\n"; + std::cerr << "outLim.max: " << info.pidInfo.outLim.max << "\n"; const Setting& inputs = pid["inputs"]; int icount = inputs.getLength(); diff --git a/pid/ec/pid.cpp b/pid/ec/pid.cpp index af70da7..7d8b403 100644 --- a/pid/ec/pid.cpp +++ b/pid/ec/pid.cpp @@ -74,7 +74,7 @@ double pid(pid_info_t* pidinfoptr, double input, double setpoint) // slew rate // TODO(aarena) - Simplify logic as Andy suggested by creating dynamic - // out_lim_min/max that are affected by slew rate control and just clamping + // outLim_min/max that are affected by slew rate control and just clamping // to those instead of effectively clamping twice. if (pidinfoptr->initialized) { diff --git a/pid/ec/pid.hpp b/pid/ec/pid.hpp index 432e043..74ad5a7 100644 --- a/pid/ec/pid.hpp +++ b/pid/ec/pid.hpp @@ -40,15 +40,15 @@ double pid(pid_info_t* pidinfoptr, double input, double setpoint); /* Condensed version for use by the configuration. */ struct pidinfo { - double ts; // sample time in seconds - double p_c; // coeff for P - double i_c; // coeff for I - double ff_off; // offset coeff for feed-forward term - double ff_gain; // gain for feed-forward term - ec::limits_t i_lim; // clamp of integral - ec::limits_t out_lim; // clamp of output - double slew_neg; - double slew_pos; + double ts; // sample time in seconds + double proportionalCoeff; // coeff for P + double integralCoeff; // coeff for I + double feedFwdOffset; // offset coeff for feed-forward term + double feedFwdGain; // gain for feed-forward term + ec::limits_t integralLimit; // clamp of integral + ec::limits_t outLim; // clamp of output + double slewNeg; + double slewPos; double positiveHysteresis; double negativeHysteresis; }; diff --git a/pid/util.cpp b/pid/util.cpp index 6993fbb..5c6e5d4 100644 --- a/pid/util.cpp +++ b/pid/util.cpp @@ -24,32 +24,32 @@ void initializePIDStruct(ec::pid_info_t* info, const ec::pidinfo& initial) std::memset(info, 0x00, sizeof(ec::pid_info_t)); info->ts = initial.ts; - info->proportionalCoeff = initial.p_c; - info->integralCoeff = initial.i_c; - info->feedFwdOffset = initial.ff_off; - info->feedFwdGain = initial.ff_gain; - info->integralLimit.min = initial.i_lim.min; - info->integralLimit.max = initial.i_lim.max; - info->outLim.min = initial.out_lim.min; - info->outLim.max = initial.out_lim.max; - info->slewNeg = initial.slew_neg; - info->slewPos = initial.slew_pos; + info->proportionalCoeff = initial.proportionalCoeff; + info->integralCoeff = initial.integralCoeff; + info->feedFwdOffset = initial.feedFwdOffset; + info->feedFwdGain = initial.feedFwdGain; + info->integralLimit.min = initial.integralLimit.min; + info->integralLimit.max = initial.integralLimit.max; + info->outLim.min = initial.outLim.min; + info->outLim.max = initial.outLim.max; + info->slewNeg = initial.slewNeg; + info->slewPos = initial.slewPos; info->negativeHysteresis = initial.negativeHysteresis; info->positiveHysteresis = initial.positiveHysteresis; } void dumpPIDStruct(ec::pid_info_t* info) { - std::cerr << " ts: " << info->ts << " p_c: " << info->proportionalCoeff - << " i_c: " << info->integralCoeff - << " ff_off: " << info->feedFwdOffset - << " ff_gain: " << info->feedFwdGain - << " i_lim.min: " << info->integralLimit.min - << " i_lim.max: " << info->integralLimit.max - << " out_lim.min: " << info->outLim.min - << " out_lim.max: " << info->outLim.max - << " slew_neg: " << info->slewNeg - << " slew_pos: " << info->slewPos + std::cerr << " ts: " << info->ts + << " proportionalCoeff: " << info->proportionalCoeff + << " integralCoeff: " << info->integralCoeff + << " feedFwdOffset: " << info->feedFwdOffset + << " feedFwdGain: " << info->feedFwdGain + << " integralLimit.min: " << info->integralLimit.min + << " integralLimit.max: " << info->integralLimit.max + << " outLim.min: " << info->outLim.min + << " outLim.max: " << info->outLim.max + << " slewNeg: " << info->slewNeg << " slewPos: " << info->slewPos << " last_output: " << info->lastOutput << " integral: " << info->integral << std::endl; diff --git a/scripts/pid-example.txt b/scripts/pid-example.txt index 3627196..8321b39 100644 --- a/scripts/pid-example.txt +++ b/scripts/pid-example.txt @@ -7,18 +7,18 @@ /* For temp/margin PIDs this is the set-point, ignored otherwise (double) */ set-point: 90.0 pid: /* The PID calculation configuration. */ - sampleperiod: 0.1 /* The input sample period. (double) */ - p_coefficient: 0.01 /* The proportional coefficient. (double) */ - i_coefficient: 0.001 /* The integral coefficient. (double) */ + samplePeriod: 0.1 /* The input sample period. (double) */ + proportionalCoeff: 0.01 /* The proportional coefficient. (double) */ + integralCoeff: 0.001 /* The integral coefficient. (double) */ /* The feed-forward offset coefficient. (double) */ - ff_off_coefficient: 0.0 + feedFwdOffOffsetCoeff: 0.0 /* The feed-forward gain coefficient. (double) */ - ff_gain_coefficient: 0.0 - i_limit: /* The integral limit clamp, min, max (double) */ + feedFwdGainCoeff: 0.0 + integralCoeff: /* The integral limit clamp, min, max (double) */ min: 0 max: 100 - out_limit: /* the PID output clamp, min, max (double) */ + outLimit: /* the PID output clamp, min, max (double) */ min: 0 max: 100 - slew_neg: -100 /* The slew negative value. (double) */ - slew_pos: 0 /* The slew positive value. (double) */ + slewNeg: -100 /* The slew negative value. (double) */ + slewPos: 0 /* The slew positive value. (double) */ diff --git a/scripts/pid-example.yaml b/scripts/pid-example.yaml index ea89b26..f7a4ba3 100644 --- a/scripts/pid-example.yaml +++ b/scripts/pid-example.yaml @@ -6,54 +6,54 @@ fan6 set-point: 90.0 pid: - sampleperiod: 0.1 - p_coefficient: 0.01 - i_coefficient: 0.001 - ff_off_coefficient: 0.0 - ff_gain_coefficient: 0.0 - i_limit: + samplePeriod: 0.1 + proportionalCoeff: 0.01 + integralCoeff: 0.001 + feedFwdOffOffsetCoeff: 0.0 + feedFwdGainCoeff: 0.0 + integralLimit: min: 0 max: 100 - out_limit: + outLimit: min: 0 max: 100 - slew_neg: 0 - slew_pos: 0 + slewNeg: 0 + slewPos: 0 temp1: type: temp inputs: temp1 set-point: 30.0 pid: - sampleperiod: 1 - p_coefficient: 94.0 - i_coefficient: 2.0 - ff_off_coefficient: 0.0 - ff_gain_coefficient: 0.0 - i_limit: + samplePeriod: 1 + proportionalCoeff: 94.0 + integralCoeff: 2.0 + feedFwdOffOffsetCoeff: 0.0 + feedFwdGainCoeff: 0.0 + integralLimit: min: 3000 max: 10000 - out_limit: + outLimit: min: 3000 max: 10000 - slew_neg: 0 - slew_pos: 0 + slewNeg: 0 + slewPos: 0 sluggish0: type: margin inputs: sluggish0 set-point: 50 pid: - sampleperiod: 1 - p_coefficient: 94.0 - i_coefficient: 2.0 - ff_off_coefficient: 0.0 - ff_gain_coefficient: 0.0 - i_limit: + samplePeriod: 1 + proportionalCoeff: 94.0 + integralCoeff: 2.0 + feedFwdOffOffsetCoeff: 0.0 + feedFwdGainCoeff: 0.0 + integralLimit: min: 3000 max: 10000 - out_limit: + outLimit: min: 3000 max: 10000 - slew_neg: 0 - slew_pos: 0 + slewNeg: 0 + slewPos: 0 diff --git a/scripts/writepid.mako.cpp b/scripts/writepid.mako.cpp index 852f4c0..394f326 100644 --- a/scripts/writepid.mako.cpp +++ b/scripts/writepid.mako.cpp @@ -36,15 +36,15 @@ std::map<int64_t, PIDConf> zoneConfig = { pos_hysteresis = details['pid']['pos_hysteresis'] %> ${setpoint}, - {${details['pid']['sampleperiod']}, - ${details['pid']['p_coefficient']}, - ${details['pid']['i_coefficient']}, - ${details['pid']['ff_off_coefficient']}, - ${details['pid']['ff_gain_coefficient']}, - {${details['pid']['i_limit']['min']}, ${details['pid']['i_limit']['max']}}, - {${details['pid']['out_limit']['min']}, ${details['pid']['out_limit']['max']}}, - ${details['pid']['slew_neg']}, - ${details['pid']['slew_pos']}, + {${details['pid']['samplePeriod']}, + ${details['pid']['proportionalCoeff']}, + ${details['pid']['integralCoeff']}, + ${details['pid']['feedFwdOffOffsetCoeff']}, + ${details['pid']['feedFwdGainCoeff']}, + {${details['pid']['integralLimit']['min']}, ${details['pid']['integralLimit']['max']}}, + {${details['pid']['outLimit']['min']}, ${details['pid']['outLimit']['max']}}, + ${details['pid']['slewNeg']}, + ${details['pid']['slewPos']}, ${neg_hysteresis}, ${pos_hysteresis}}, }, |

