今天小编就为大家分享一篇python实现PID算法及测试的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
PID算法实现

import timeclass PID:def __init__(self, P=0.2, I=0.0, D=0.0):self.Kp = Pself.Ki = Iself.Kd = Dself.sample_time = 0.00self.current_time = time.time()self.last_time = self.current_timeself.clear()def clear(self):self.SetPoint = 0.0self.PTerm = 0.0self.ITerm = 0.0self.DTerm = 0.0self.last_error = 0.0self.int_error = 0.0self.windup_guard = 20.0self.output = 0.0def update(self, feedback_value):error = self.SetPoint - feedback_valueself.current_time = time.time()delta_time = self.current_time - self.last_timedelta_error = error - self.last_errorif (delta_time >= self.sample_time):self.PTerm = self.Kp * error#比例self.ITerm += error * delta_time#积分if (self.ITerm < -self.windup_guard):self.ITerm = -self.windup_guardelif (self.ITerm > self.windup_guard):self.ITerm = self.windup_guardself.DTerm = 0.0if delta_time > 0:self.DTerm = delta_error / delta_timeself.last_time = self.current_timeself.last_error = errorself.output = self.PTerm + (self.Ki * self.ITerm) + (self.Kd * self.DTerm)def setKp(self, proportional_gain):self.Kp = proportional_gaindef setKi(self, integral_gain):self.Ki = integral_gaindef setKd(self, derivative_gain):self.Kd = derivative_gaindef setWindup(self, windup):self.windup_guard = windupdef setSampleTime(self, sample_time):self.sample_time = sample_time

测试PID算法

import PID
import time
import matplotlib
matplotlib.use("TkAgg")
import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import spline
#这个程序的实质就是在前九秒保持零输出,在后面的操作中在传递函数为某某的系统中输出1def test_pid(P = 0.2, I = 0.0, D= 0.0, L=100):"""Self-test PID class.. note::...for i in range(1, END):pid.update(feedback)output = pid.outputif pid.SetPoint > 0:feedback += (output - (1/i))if i>9:pid.SetPoint = 1time.sleep(0.02)---"""pid = PID.PID(P, I, D)pid.SetPoint=0.0pid.setSampleTime(0.01)END = Lfeedback = 0feedback_list = []time_list = []setpoint_list = []for i in range(1, END):pid.update(feedback)output = pid.outputif pid.SetPoint > 0:feedback +=output# (output - (1/i))控制系统的函数if i>9:pid.SetPoint = 1time.sleep(0.01)feedback_list.append(feedback)setpoint_list.append(pid.SetPoint)time_list.append(i)time_sm = np.array(time_list)time_smooth = np.linspace(time_sm.min(), time_sm.max(), 300)feedback_smooth = spline(time_list, feedback_list, time_smooth)plt.figure(0)plt.plot(time_smooth, feedback_smooth)plt.plot(time_list, setpoint_list)plt.xlim((0, L))plt.ylim((min(feedback_list)-0.5, max(feedback_list)+0.5))plt.xlabel('time (s)')plt.ylabel('PID (PV)')plt.title('TEST PID')plt.ylim((1-0.5, 1+0.5))plt.grid(True)plt.show()if __name__ == "__main__":test_pid(1.2, 1, 0.001, L=80)
#  test_pid(0.8, L=50)

结果
写到这里,给大家推荐一个资源很全的python学习聚集地,点击进入,这里有资深程序员分享以前学习心得,学习笔记,还有一线企业的工作经验,且给大家精心整理一份python零基础到项目实战的资料,每天给大家讲解python最新的技术,前景,学习需要留言的小细节
以上这篇python实现PID算法及测试的例子就是小编分享给大家的全部内容了,

python基础教程:python实现PID算法及测试的例子相关推荐

  1. python基础教程-Python入门教程完整版(懂中文就能学会)

    提取码:sjfo 目录大纲: 本套教程15天 学前环境搭建 1-3 天内容为Linux基础命令 4-13 天内容为Python基础教程 14-15 天内容为 飞机大战项目演练 视频概括: 第一阶段(1 ...

  2. 什么是python基础教程-python基础教程之python是什么?概念解析

    Python,是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python是纯粹的自由软件, 源代码和解释器CP ...

  3. python办公自动化知识点_Python自动化办公知识点整理汇总|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? ​ 这可能是很多非IT职场人士面临的困 ...

  4. python下载电影天堂视频教程_一篇文章教会你利用Python网络爬虫获取电影天堂视频下载链接|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ [一.项目背景] 相信大家都有一种头疼的体验,要下载电影特别费劲,对吧?要一部一部的下载,而且不能直观的知 ...

  5. python基础教程-Python基础教程,Python入门教程(非常详细)

    Python 英文本意为"蟒蛇",直到 1989 年荷兰人 Guido van Rossum (简称 Guido)发明了一种面向对象的解释型编程语言(后续会介绍),并将其命名为 P ...

  6. python添加库详细教程_Python 中如何自动导入缺失的库?|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 在写 Python 项目的时候,我们可能经常会遇到导入模块失败的错误:ImportError: No mo ...

  7. python3.6.2下载教程_Windows下升级Python3.7.7后(原Python3.6.2版本)如何切换Python版本|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 笔者:风起怨江南 出处:https://www.cnblogs.com/mengjinxiang 笔者原创 ...

  8. Python基础教程:Python pass语句详解

    2019独角兽企业重金招聘Python工程师标准>>> Python pass 语句 Python pass是空语句,是为了保持程序结构的完整性. pass 不做任何事情,一般用做占 ...

  9. python药店销售数据分析_解析医院药店销售数据,看看Python数据分析结果有什么惊人的发现|python基础教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ 前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时 ...

最新文章

  1. STM32 电机教程 29 - 无刷无感入门1
  2. 复盘-电商产品「分类」功能迭代
  3. Win10+tensorflow:SSD调试问题:Unable to open table file ../checkpoints/ssd_300_vgg.ckpt
  4. IOS开发基础之团购案例17-xib和UITableView两种方式实现
  5. 教你如何使用FusionInsight SqoopShell
  6. c++ 如何获取移动硬盘型号信息_工程销售,如何高效快速获取项目信息
  7. html里球是哪个单词,html tag是什么意思
  8. 贝佐斯正接受14小时训练 以为周二进行的首次太空飞行做准备
  9. C++ string是否包含某字符串方法(已封装)
  10. LeetCode344. Reverse String
  11. liunx screen使用简单实验
  12. Postgresql的character varying = bytea问题
  13. matlab在同一窗口中画多个三维图像
  14. UILAbel 设置了attributedText 后省略号不显示
  15. win8.1硬盘安装ubuntu14.04双系统
  16. pyspark 数据写入hive_美团是如何应用Spark处理大数据的?
  17. ecshop源码分析-ecshop二次开发
  18. EDA课程设计代码汇总(信号发生器、抢答器、频率计、秒表、密码锁、计算器、VGA、PS2)
  19. c语言小游戏编程弹珠游戏,c语言 弹弹球小游戏
  20. 领域平均滤波 matlab,平均值滤波器 - MATLAB Simulink - MathWorks 中国

热门文章

  1. VS code 自动调整代码格式
  2. Docker服务启动报错:Job for docker.service failed because the control process exited with error
  3. 使用HTML设计网页
  4. mysql workbench8.0关键词大写_Mysql从入门到精通全文整理
  5. 将Excel数据导入SQL数据库
  6. 计算机右键管理无法访问指定设备,简单几步解决win10打开任务管理器显示无法访问指定设备方法...
  7. windows无法访问指定设备 路径或文件(100%解决)
  8. 最新UI界面漫画小程序源码,带后台支持流量主,24小时全自动更新!
  9. 4.9-11 ebook 小问题,自摘记,书城首页开发完毕。
  10. vegas不可识别格式素材怎么处理?