<div dir="ltr"><div>Hi,</div><div><br></div><div>I'm bad at feedback control math, but we've seen issues like this that can't be addressed by tuning alone, so I thought I'd weigh in.</div><div><br></div>We've observed some noise in the RPM readings on some platforms, which can create oscillations in the RPM control loop. Our thermal engineers end up simplifying things by using only feedforward coefficients to control RPM, and then use the feedback control for temperatures. This simplifies it to a single feedback loop which should also make tuning generally easier and avoid these sorts of problems with hunting/limit cycles/instability.<br>So for the speed loop you only need to tune: <br>                        "feedFwdOffsetCoeff": 0.0,<br>                        "feedFwdGainCoeff": 1.0,  <div>until RPM is correct at failsafe and minimum RPMs. This isn't particularly robust, but we don't really need it to be. Robust control of temperature is our priority.<br><br>Then you can tune thermal performance with the thermal loop:<br>                        "proportionalCoeff": 0.1,<br>                        "integralCoeff": 1.0,</div><div><br></div><div>Many of the other parameters aren't linear but are useful to address/prevent integral windup and over-torque/over-current conditions.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Nov 11, 2020 at 10:16 AM Patrick Venture <<a href="mailto:venture@google.com">venture@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">On Sun, Sep 27, 2020 at 6:27 AM 周 远清 <<a href="mailto:zhouyuanqing8@outlook.com" target="_blank">zhouyuanqing8@outlook.com</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">




<div dir="ltr">
<div>
<div id="gmail-m_-1632571504690627176gmail-m_-6430746694988440840appendonsend" style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<span style="font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255);display:inline">Hi everyone,</span><br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<span style="font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255);display:inline"><br>
</span></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<span style="font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255);display:inline">          For the parameters of the following table, does the PID code of openbmc have a clearer transfer function corresponding
 to this table? By adjusting the following parameters, fancontrol has taken effect. I set 5000 rpm, but the fan will change back and forth between 4500-5500. The change in this range is still relatively large. If there is a transfer function, the adjustment
 will be more accurate and faster.</span></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<span style="font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255);display:inline"><br>
</span></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<a href="https://github.com/openbmc/phosphor-pid-control/blob/master/configure.md" id="gmail-m_-1632571504690627176gmail-m_-6430746694988440840LPlnk" target="_blank">https://github.com/openbmc/phosphor-pid-control/blob/master/configure.md</a><br>
<div>
<div id="gmail-m_-1632571504690627176gmail-m_-6430746694988440840LPBorder_GTaHR0cHM6Ly9naXRodWIuY29tL29wZW5ibWMvcGhvc3Bob3ItcGlkLWNvbnRyb2wvYmxvYi9tYXN0ZXIvY29uZmlndXJlLm1k" style="width:100%;margin-top:16px;margin-bottom:16px;max-width:800px;min-width:424px">
<table id="gmail-m_-1632571504690627176gmail-m_-6430746694988440840LPContainer771081" style="padding:12px 36px 12px 12px;width:100%;border-width:1px;border-style:solid;border-color:rgb(200,200,200);border-radius:2px">
<tbody>
<tr valign="top" style="border-spacing:0px">
<td>
<div id="gmail-m_-1632571504690627176gmail-m_-6430746694988440840LPImageContainer771081" style="margin-right:12px;height:160px;overflow:hidden">
<a id="gmail-m_-1632571504690627176gmail-m_-6430746694988440840LPImageAnchor771081" href="https://github.com/openbmc/phosphor-pid-control/blob/master/configure.md" target="_blank"><img id="gmail-m_-1632571504690627176gmail-m_-6430746694988440840LPThumbnailImageId771081" alt="" height="160" style="display: block;" width="160" src="https://avatars3.githubusercontent.com/u/13670043?s=400&v=4"></a></div>
</td>
<td style="width:100%">
<div id="gmail-m_-1632571504690627176gmail-m_-6430746694988440840LPTitle771081" style="font-size:21px;font-weight:300;margin-right:8px;font-family:wf_segoe-ui_light,"Segoe UI Light","Segoe WP Light","Segoe UI","Segoe WP",Tahoma,Arial,sans-serif;margin-bottom:12px">
<a id="gmail-m_-1632571504690627176gmail-m_-6430746694988440840LPUrlAnchor771081" href="https://github.com/openbmc/phosphor-pid-control/blob/master/configure.md" style="text-decoration:none" target="_blank">openbmc/phosphor-pid-control</a></div>
<div id="gmail-m_-1632571504690627176gmail-m_-6430746694988440840LPDescription771081" style="font-size:14px;max-height:100px;color:rgb(102,102,102);font-family:wf_segoe-ui_normal,"Segoe UI","Segoe WP",Tahoma,Arial,sans-serif;margin-bottom:12px;margin-right:8px;overflow:hidden">
OpenBMC PID-based Thermal Control Daemon. Contribute to openbmc/phosphor-pid-control development by creating an account on GitHub.</div>
<div id="gmail-m_-1632571504690627176gmail-m_-6430746694988440840LPMetadata771081" style="font-size:14px;font-weight:400;color:rgb(166,166,166);font-family:wf_segoe-ui_normal,"Segoe UI","Segoe WP",Tahoma,Arial,sans-serif">
<a href="http://github.com" target="_blank">github.com</a></div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<br>
<span style="font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255);display:inline">
<table style="box-sizing:border-box;border-spacing:0px;border-collapse:collapse;margin-top:0px;margin-bottom:16px;display:block;width:max-content;max-width:100%;overflow:auto;color:rgb(36,41,46);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";font-weight:normal">
<thead style="box-sizing:border-box">
<tr style="box-sizing:border-box;background-color:rgb(255,255,255);border-top:1px solid rgb(198,203,209)">
<th style="box-sizing:border-box;padding:6px 13px;font-weight:600;border:1px solid rgb(223,226,229)">
field</th>
<th style="box-sizing:border-box;padding:6px 13px;font-weight:600;border:1px solid rgb(223,226,229)">
type</th>
<th style="box-sizing:border-box;padding:6px 13px;font-weight:600;border:1px solid rgb(223,226,229)">
meaning</th>
</tr>
</thead>
<tbody style="box-sizing:border-box">
<tr style="box-sizing:border-box;background-color:rgb(255,255,255);border-top:1px solid rgb(198,203,209)">
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">samplePeriod</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">double</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
How frequently the value is sampled. 0.1 for fans, 1.0 for temperatures.</td>
</tr>
<tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)">
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">proportionalCoeff</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">double</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
The proportional coefficient.</td>
</tr>
<tr style="box-sizing:border-box;background-color:rgb(255,255,255);border-top:1px solid rgb(198,203,209)">
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">integralCoeff</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">double</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
The integral coefficient.</td>
</tr>
<tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)">
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">feedFwdOffsetCoeff</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">double</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
The feed forward offset coefficient.</td>
</tr>
<tr style="box-sizing:border-box;background-color:rgb(255,255,255);border-top:1px solid rgb(198,203,209)">
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">feedFwdGainCoeff</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">double</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
The feed forward gain coefficient.</td>
</tr>
<tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)">
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">integralLimit_min</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">double</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
The integral minimum clamp value.</td>
</tr>
<tr style="box-sizing:border-box;background-color:rgb(255,255,255);border-top:1px solid rgb(198,203,209)">
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">integralLimit_max</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">double</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
The integral maximum clamp value.</td>
</tr>
<tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)">
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">outLim_min</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">double</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
The output minimum clamp value.</td>
</tr>
<tr style="box-sizing:border-box;background-color:rgb(255,255,255);border-top:1px solid rgb(198,203,209)">
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">outLim_max</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">double</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
The output maximum clamp value.</td>
</tr>
<tr style="box-sizing:border-box;background-color:rgb(246,248,250);border-top:1px solid rgb(198,203,209)">
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">slewNeg</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">double</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
Negative slew value to dampen output.</td>
</tr>
<tr style="box-sizing:border-box;background-color:rgb(255,255,255);border-top:1px solid rgb(198,203,209)">
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">slewPos</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
<code style="box-sizing:border-box;font-family:SFMono-Regular,Consolas,"Liberation Mono",Menlo,monospace;font-size:13.6px;padding:0.2em 0.4em;margin:0px;background-color:rgba(27,31,35,0.05);border-radius:6px">double</code></td>
<td style="box-sizing:border-box;padding:6px 13px;border:1px solid rgb(223,226,229)">
Positive slew value to accelerate output.</td>
</tr>
</tbody>
</table>
<br></span></div></div></div></blockquote><div><a class="gmail_plusreply" id="gmail-m_-1632571504690627176gmail-plusReplyChip-0" href="mailto:krellan@google.com" target="_blank">+Josh Lehan</a> for input. </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><span style="font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255);display:inline">
</span></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<hr style="display:inline-block;width:98%">
<div id="gmail-m_-1632571504690627176gmail-m_-6430746694988440840divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>发件人:</b> 周 远清 <<a href="mailto:zhouyuanqing8@outlook.com" target="_blank">zhouyuanqing8@outlook.com</a>><br>
<b>发送时间:</b> 2020年9月27日 11:17<br>
<b>收件人:</b> openbmc <<a href="mailto:openbmc@lists.ozlabs.org" target="_blank">openbmc@lists.ozlabs.org</a>><br>
<b>抄送:</b> <a href="mailto:uperic@163.com" target="_blank">uperic@163.com</a> <<a href="mailto:uperic@163.com" target="_blank">uperic@163.com</a>><br>
<b>主题:</b> about pid speed control</font>
<div> </div>
</div>
<div dir="ltr">
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
Hi everyone,</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
    I added the phophor-pid-control module to my project. After the PID module was started, the pwm value oscillated between 12 and 153. I deleted other configurations and only kept one fan and one temp. I have debugged various PID parameter values of fan,
 and there is no obvious change in the phenomenon. Please take a look at it, thank you.</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<span style="color:rgb(81,167,249)"> </span><span style="color:rgb(81,167,249)">  </span><span style="color:rgb(81,167,249)">The configuration is as follows</span><span style="color:rgb(81,167,249)">: </span></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
   4611 root      7616 S    /usr/bin/swampd -t -l /tmp/<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
   root@starlake-sn:~# cat /etc/thermal.d/setpoint</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
   3000</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<span style="color:rgb(81,167,249)"> </span><span style="color:rgb(81,167,249)">  config.json as follow:</span></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
   {
<div>    "sensors" : [</div>
<div>        {</div>
<div>            "name": "Fan0_Speed",</div>
<div>            "type": "fan",</div>
<div>            "readPath": "/xyz/openbmc_project/sensors/fan_tach/Fan0_Speed",  
</div>
<div>            "writePath": "/xyz/openbmc_project/sensors/fan_tach/Fan0_Speed",  </div>
<div>            "min": 0,</div>
<div>            "max": 255,</div>
<div>            "timeout": 0</div>
<div>        },</div>
<div>        {</div>
<div>            "name": "inlet_Temp",</div>
<div>            "type": "temp",</div>
<div>            "readPath": "/xyz/openbmc_project/sensors/temperature/inlet_Temp",</div>
<div>            "writePath": "",</div>
<div>            "min": 0,</div>
<div>            "max": 0,</div>
<div>            "ignoreDbusMinMax": true,</div>
<div>            "timeout": 0</div>
<div>        }</div>
    ],</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
  "zones" : [
<div>        {</div>
<div>            "id": 1,</div>
<div>            "minThermalOutput": 3000.0,</div>
<div>            "failsafePercent": 75.0,</div>
<div>            "pids": [</div>
<div>                {</div>
<div>                    "name": "Fan0_Speed",</div>
<div>                    "type": "fan",</div>
<div>                    "inputs": ["Fan0_Speed"],</div>
<div>                    "setpoint": 50.0,</div>
<div>                    "pid": {</div>
<div>                        "samplePeriod": 0.1,</div>
<div>                        "proportionalCoeff": 20.0,</div>
<div>                        "integralCoeff": 0.1,     </div>
<div>                        "feedFwdOffsetCoeff": 0.0,</div>
<div>                        "feedFwdGainCoeff": 1.0,  </div>
<div>                        "integralLimit_min": 0.0, </div>
<div>                        "integralLimit_max": 5.0, </div>
<div>                        "outLim_min": 5.0,        </div>
<div>                        "outLim_max": 60.0,       </div>
<div>                        "slewNeg": 0.0,</div>
<div>                        "slewPos": 0.0</div>
<div>                    }</div>
<div>                },</div>
<div>                {</div>
<div>                    "name": "inlet_Temp",</div>
<div>                    "type": "temp",</div>
<div>                    "inputs": ["inlet_Temp"],     </div>
<div>                    "setpoint": 50.0,</div>
<div>                    "pid": {                      amplePeriod": 0.1,      </div>
<div>                        "samplePeriod": 1.0,      </div>
<div>                        "proportionalCoeff": -0.1,</div>
<div>                        "integralCoeff": 1.0,     36;34Hin": 5.0,</div>
<div>                        "feedFwdOffsetCoeff": 0.0,</div>
<div>                        "feedFwdGainCoeff": 0.0,  </div>
<div>                        "integralLimit_min": 0.0, </div>
<div>                        "integralLimit_max": 0.0, </div>
<div>                        "outLim_min": 3000.0,     </div>
<div>                        "outLim_max": 16000.0,    </div>
<div>                        "slewNeg": 0.0,</div>
<div>                        "slewPos": 0.0,</div>
<div>                        "positiveHysteresis": 1.0,</div>
<div>                        "negativeHysteresis": 1.0 </div>
                    }<br>
</div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
           }
<div>            ]</div>
<div>        }</div>
<div>    ]</div>
}<br>
</div>
</div>
</div>
</div>

</blockquote></div></div>
</blockquote></div>