Audit finding
- ID:
AUD-022
- Status: Verified defect
- Severity: High
- Confidence: High
- Audited revision:
2f479320d805a1f9f35ebe4afaaeeded48913a94
Problem
Step/ramp simulation passes UI kp, ki, and kd directly into the discrete incremental recurrence. Bode/root-locus code interprets the same values as continuous Kd*s^2 + Kp*s + Ki coefficients and then discretizes them. No Ki*Ts or Kd/Ts mapping reconciles the models, so views represent different controllers.
Source:
|
|
|
TransferFunction PidSimulator::GetPidTf() const |
|
{ |
|
float kp = configuration.tunings.kp; |
|
float ki = configuration.tunings.ki; |
|
float kd = configuration.tunings.kd; |
|
|
|
return { { kd, kp, ki }, { 1.0f, 0.0f } }; |
|
} |
|
|
|
TransferFunction PidSimulator::GetOpenLoopTf() const |
and
|
std::size_t numSamples = referenceSignal.size(); |
|
|
|
TimeResponse response; |
|
response.time.resize(numSamples); |
|
response.reference = referenceSignal; |
|
response.output.resize(numSamples, 0.0f); |
|
response.controlSignal.resize(numSamples, 0.0f); |
|
response.error.resize(numSamples, 0.0f); |
|
|
|
::controllers::PidIncrementalSynchronous<float> pid(configuration.tunings, configuration.limits); |
|
|
|
plant->Reset(); |
|
|
|
for (std::size_t i = 0; i < numSamples; ++i) |
|
{ |
|
response.time[i] = static_cast<float>(i) * dt; |
|
|
|
float y = plant->Output(); |
|
response.output[i] = y; |
|
response.error[i] = referenceSignal[i] - y; |
|
|
|
pid.SetPoint(referenceSignal[i]); |
|
float u = pid.Process(y); |
|
response.controlSignal[i] = u; |
|
|
Allowed Kd=0 also leaves a leading-zero polynomial that the root solver treats as full order.
Acceptance criteria
Audit finding
AUD-0222f479320d805a1f9f35ebe4afaaeeded48913a94Problem
Step/ramp simulation passes UI
kp,ki, andkddirectly into the discrete incremental recurrence. Bode/root-locus code interprets the same values as continuousKd*s^2 + Kp*s + Kicoefficients and then discretizes them. NoKi*TsorKd/Tsmapping reconciles the models, so views represent different controllers.Source:
numerical-toolbox-cpp/simulator/controllers/PidController/application/PidSimulator.cpp
Lines 33 to 43 in 2f47932
numerical-toolbox-cpp/simulator/controllers/PidController/application/PidSimulator.cpp
Lines 109 to 133 in 2f47932
Allowed
Kd=0also leaves a leading-zero polynomial that the root solver treats as full order.Acceptance criteria