# PID 常见问题

![](../../../../img/home/FAQ.png)  为什么PID控制器没有运行？

PID控制器被添加后，要靠PID_Compact指令块控制，其中工艺对象数据块中的sRet.i_Mode参数用于设置控制器运行方式，共有如下5种模式：

0 : Inactive（未激活）

1 : Start Up整定方式

2 : Tuning in Run整定方式

3 : Automatic Mode自动模式

4 : Manual Mode手动模式

PID控制器未使能自整定，则sRet.i_Mode默认值为0，控制器处于未激活模式，需要手动给sRet.i_Mode参数赋值，如将3写入参数中，PID控制器处于自动模式。

**![](../../../../img/home/FAQ.png) 
使能运行自整定与启动自整定的条件是什么？**

Start Up（启动自整定）

①\| 设定值 -- 反馈值 \| \> 0.3 \* \| 输入高限 -- 输入低限 \|\
②\| 设定值 -- 反馈值 \| \> 0.5 \* \| 给定值 \|\
③指令块的状态应为"Manual Mode"（手动模式） 或 "Inactive
Mode"（未激活模式）

Tune in Run（运行中整定）

①\| 设定值 -- 反馈值 \| \< 0.3 \* \| 输入高限 -- 输入低限 \|\
②\| 设定值 -- 反馈值 \| \> 0.5 \* \| 给定值 \|\
③指令块的状态应为"Manual Mode"（手动模式） ,"Inactive
Mode"（未激活模式）或Automatic Mode（自动模式)

假如使能运行自整定时满足启动自整定的条件，则会先执行启动自整定，结束后再执行运行中整定，整定完成后系统进入自动模式，假如整定失败控制器会进入模式0，且在error管脚输出错误代码

**![](../../../../img/home/FAQ.png) 
PID控制器产生错误，使能Reset端为何不能让控制器重新运行？**

当PID控制器在自动模式时发生错误，如反馈值超限，则PID控制器将会进入未激活模式，这时使能Reset只能清除错误，若想要控制器重新运行，需要将3写入sRet.i_Mode以使控制器进入自动模式，但此参数只对数值
变化响应，在大多数情况下sRet.i_Mode参数已经被设为3了，所以需要先将此参数清零后，再写入3才能使控制器进入自动模式

**![](../../../../img/home/FAQ.png) 
循环中断时间与PID控制器的采样时间有什么关系？**

循环中断时间为添加循环中断后对指定两次中断的间隔时间，PID控制器采样时间：sRet.r_Ctrl_Cycle是控制器两次计算之间的间隔时间。PID控制器的采样时间是循环中断时间的整数倍。若用户使能自整定择系统会自动计算sRet.r_Ctrl_Cycle参数，若用户使用手动方式设定，则一定要注意此参数为循环中断时间的整数倍

例如：PID控制器的采样时间是1s,循环中断时间为100ms，则在1S的时间内，循环中断执行了10次，但前9次PID控制器都不进行运算，只在第10次运算若用户使能PWM输出，则PWM的周期即为sRet.r_Ctrl_Cycle，其分辨率为循环中断的时间。

例如：PID控制器的采样周期为1S，循环中断时间为100ms,则PWM的周期为1S，分辨率为100ms,一个周期内可能的脉宽为：0（关闭），100，200，300，400，500，600，700，800，900，1000ms（全开）
