python实现PID算法及测试的例子

  

<强> PID算法实现

        导入的时间      类PID:   def __init__(自我,P=0.2,=0.0, D=0.0):   自我。Kp=P   自我。Ki=我   自我。Kd=D   自我。sample_time=0.00   自我。当前时间=time.time ()   自我。last_time=self.current_time   self.clear ()   def清楚(自己):   自我。选点=0.0   自我。PTerm=0.0   自我。摘要=0.0   自我。DTerm=0.0   自我。last_error=0.0   self.int_error=0.0   自我。windup_guard=20.0   自我。输出=0.0   def更新(自我,feedback_value):   错误=自我。选点,feedback_value   自我。当前时间=time.time ()   delta_time=自我。当前时间- self.last_time   delta_error=错误- self.last_error   如果(delta_time祝辞=self.sample_time):   自我。PTerm=自我。Kp *错误#比例   自我。摘要+=错误* delta_time #积分   如果(自我。摘要& lt;-self.windup_guard):   自我。摘要=-self.windup_guard   elif(自我。摘要在self.windup_guard):   自我。摘要=self.windup_guard   自我。DTerm=0.0   如果delta_time比;0:   自我。DTerm=delta_error/delta_time   自我。last_time=self.current_time   自我。last_error=错误   自我。输出=自我。PTerm +(自我。Ki * self.ITerm) +(自我。Kd * self.DTerm)   def setKp(自我,proportional_gain):   自我。Kp=proportional_gain   def setKi(自我,integral_gain):   自我。Ki=integral_gain   def setKd(自我,derivative_gain):   自我。Kd=derivative_gain   def setWindup(自我,结束):   自我。windup_guard=结束   def setSampleTime(自我,sample_time):   自我。sample_time=sample_time      之前      

<强>测试PID算法

        进口PID   导入的时间   进口matplotlib   matplotlib.use (“TkAgg”)   进口matplotlib。pyplot作为plt   进口numpy np   从scipy.interpolate进口样条   #这个程序的实质就是在前九秒保持零输出,在后面的操作中在传递函数为某某的系统中输出1      def test_pid(我=0.0,P=0.2 D=0.0 L=100):   ”““自测PID类      . .注意::   …   我的范围(1):   pid.update(反馈)   输出=pid.output   如果pid。选点祝辞0:   输出反馈+=(- (1/i))   如果i> 9:   pid。选点=1   time . sleep (0.02)   ---   ”“”   pid=pid。PID (P, I, D)      pid.SetPoint=0.0   pid.setSampleTime (0.01)      结束=L   反?0      feedback_list=[]   time_list=[]   setpoint_list=[]      我的范围(1):   pid.update(反馈)   输出=pid.output   如果pid。选点祝辞0:   反馈+=#输出(输出- (1/i))控制系统的函数   如果i> 9:   pid。选点=1   time . sleep (0.01)      feedback_list.append(反馈)   setpoint_list.append (pid.SetPoint)   time_list.append(我)      time_sm=np.array (time_list)   time_smooth=np.linspace (time_sm.min (), time_sm.max (), 300)   feedback_smooth=花键(time_list feedback_list time_smooth)   plt.figure (0)   plt。情节(time_smooth feedback_smooth)   plt。情节(time_list setpoint_list)   plt。xlim (L (0,))   plt.ylim (min (feedback_list) -0.5, max (feedback_list) + 0.5))   plt。包含(时间(s))   plt。ylabel (PID (PV))   plt。标题(“测试PID”)      plt.ylim ((1 - 0.5, (1 + 0.5))      plt.grid(真正的)   plt.show ()      if __name__==癬_main__”:   test_pid (1.2、1、0.001 L=80)   # test_pid (0.8 L=50)   之前      

<强>结果

  

 python实现PID算法及测试的例子

  

以上这篇python实现PID算法及测试的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

python实现PID算法及测试的例子