1.PID.py

#  PID控制一阶惯性系统测试程序#*****************************************************************#
#                      增量式PID系统                              #
#*****************************************************************#
class IncrementalPID:def __init__(self, P, I, D):self.Kp = Pself.Ki = Iself.Kd = Dself.PIDOutput = 0.0             #PID控制器输出self.SystemOutput = 0.0          #系统输出值self.LastSystemOutput = 0.0      #上次系统输出值self.Error = 0.0                 #输出值与输入值的偏差self.LastError = 0.0self.LastLastError = 0.0#设置PID控制器参数def SetStepSignal(self,StepSignal):self.Error = StepSignal - self.SystemOutputIncrementValue = self.Kp * (self.Error - self.LastError) + self.Ki * self.Error + self.Kd * (self.Error - 2 * self.LastError + self.LastLastError)self.PIDOutput += IncrementValueself.LastLastError = self.LastErrorself.LastError = self.Error#设置一阶惯性环节系统  其中InertiaTime为惯性时间常数def SetInertiaTime(self,InertiaTime,SampleTime):self.SystemOutput = (InertiaTime * self.LastSystemOutput + SampleTime * self.PIDOutput) / (SampleTime + InertiaTime)self.LastSystemOutput = self.SystemOutput# *****************************************************************#
#                      位置式PID系统                              #
# *****************************************************************#
class PositionalPID:def __init__(self, P, I, D):self.Kp = Pself.Ki = Iself.Kd = Dself.SystemOutput = 0.0self.ResultValueBack = 0.0self.PidOutput = 0.0self.PIDErrADD = 0.0self.ErrBack = 0.0def SetInertiaTime(self, InertiaTime,SampleTime):self.SystemOutput = (InertiaTime * self.ResultValueBack + SampleTime * self.PidOutput) / (SampleTime + InertiaTime)self.ResultValueBack = self.SystemOutputdef SetStepSignal(self,StepSignal):Err = StepSignal - self.SystemOutputKpWork = self.Kp * ErrKiWork = self.Ki * self.PIDErrADDKdWork = self.Kd * (Err - self.ErrBack)self.PidOutput = KpWork + KiWork + KdWorkself.PIDErrADD += Errself.ErrBack = Err

2.TestPID.py

import PID
import matplotlib.pyplot as plt
plt.figure(1) # 创建图表1
plt.figure(2) # 创建图表2#测试PID程序
def TestPID(P, I, D):IncrementalPid = PID.IncrementalPID(P, I, D)PositionalPid = PID.PositionalPID(P, I, D)IncrementalXaxis = [0]IncrementalYaxis = [0]PositionalXaxis = [0]PositionalYaxis = [0]for i in range(1, 500):#增量式IncrementalPid.SetStepSignal(100.2)IncrementalPid.SetInertiaTime(3,0.1)IncrementalYaxis.append(IncrementalPid.SystemOutput)IncrementalXaxis.append(i)#位置式PositionalPid.SetStepSignal(100.2)PositionalPid.SetInertiaTime(3,0.1)PositionalYaxis.append(PositionalPid.SystemOutput)PositionalXaxis.append(i)plt.figure(1)      # 选择图表1plt.plot(IncrementalXaxis, IncrementalYaxis,'r')plt.xlim(0,120)plt.ylim(0,140)plt.title("IncrementalPID")plt.figure(2)     # 选择图表2plt.plot(PositionalXaxis, PositionalYaxis, 'b')plt.xlim(0,120)plt.ylim(0,140)plt.title("PositionalPID")plt.show()if __name__ == "__main__":TestPID(4.5,0.5,0.1)

3.实现效果

Python 实现控制一阶惯性系统相关推荐

  1. Python解决控制问题系列之二:线性连续系统最优控制问题

    Python解决控制问题系列之二:线性连续系统最优控制问题 文章目录 Python解决控制问题系列之二:线性连续系统最优控制问题 1. 前言 2. 线性系统问题描述 3. Python 编程 3.1 ...

  2. 基于python的界面自动化测试-基于Python语言的自动化测试系统的设计与实现

    黄建军+李宥谋+刘婧+周欢 摘 要: 通过分析现代工业生产对自动化测试系统的要求,提出一种基于面向对象的编程语言Python构建的自动化测试系统.利用Python语言的高效.灵活和简洁等特点,结合Py ...

  3. python语音控制智能家电_Python 树莓派智能音箱语音控制电脑开关机-Python 实用宝典...

    完成下面这个有趣的实验,你所需要的东西有: 1.路由器(能够形成局域网,且电脑已用网线连接) 2.一个智能音箱(本教程使用的是亚马逊 Echo Dot 2) 3.主板支持wake on lan (大部 ...

  4. 手机控制linux电脑,通过Amora用symbian手机控制linux系统的电脑

    通过Amora用symbian手机控制linux系统的电脑 发布时间:2008-01-07 20:49:09来源:红联作者:Desktop 原文章地址http://yegle.net/2007/12/ ...

  5. python开发的著名软件公司_软件开发公司_软件外包_项目外包平台基于Python开发一个全文检索系统...

    基于Python开发一个全文检索系统.功能要求为: 使用全文检索引擎对文本进行检索.文本的格式为Word.PDF.TXT. 同时按数据域进行复合条件检索.数据域指文本对应的信息,例如创建人.文件编号. ...

  6. Python&Opencv手势识别系统

    Python手势识别与控制 概述 本文中的手势识别与控制功能主要采用 OpenCV 库实现, OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库, 可以运行在Linux, Windows ...

  7. Python 还原控制SCI论文算法系列1: 基于策略迭代的自适应最优控制器设计

    Python 还原控制SCI论文算法系列1: 基于策略迭代的自适应最优控制器设计 文章目录 Python 还原控制SCI论文算法系列1: 基于策略迭代的自适应最优控制器设计 0.前言 1.研究问题的描 ...

  8. python control控制系统库

    python control控制系统库 参考:Docs » Python Control Systems Library 系统创建 ①control.tf(num, den) 传递函数方式 contr ...

  9. 基于Python的网上订餐系统的设计与实现

    基于Python的网上订餐系统的设计与实现 源码获取:https://www.bilibili.com/video/BV1814y1L7XH/ 由于科学技术的快速进步,社会的每个领域都离不开电脑技术. ...

  10. python股权变动监控系统_每天5分钟玩转Python(12) - 生成器(下)

    这一章开始介绍生成器函数和 yield关键字,以及Python中的协程的概念. yield关键字 当我们调用一个普通的函数时,执行过程从第一条语句开始,直到碰到一个 return语句或者遇到一个异常抛 ...

最新文章

  1. PyTorch学习笔记——pytorch图像处理(transforms)
  2. python输出杨辉三角啊二维数组_Java输出杨辉三角形(使用二维数组)
  3. 有效使用Eclipse的热门提示
  4. Java语言最新实用案例教程_Java 语言实用案例教程
  5. Maven之生成测试覆盖度的插件cobertura-maven-plugin的使用
  6. sqlserver2008索引优化的相关研究(一)
  7. 美国域名总量增至8023万个:1月净增5.9万个
  8. python读取指定路径txt文件-python读取txt文件并取其某一列数据的示例
  9. 学好平面设计需要哪些技术功底?
  10. 关于Android开发中图片的三级缓存机制
  11. Python 批量转换视频音频采样率(附代码) | Python工具
  12. 手机参数中的4+64G到底是什么?
  13. IE6 遇到bug及解决办法
  14. glib实现Socket通信
  15. 数字化转型小贴士和陷阱
  16. java MySQL表的约束与数据库设计 详解
  17. iOS之UI--通讯录的实例关键知识技术点积累
  18. 亚马逊鲲鹏系统批量注册功能可以让你快速拥有大量亚马逊买家号
  19. 供应链管理起源:不能不提日本
  20. lcd屏幕有mipi接口吗_液晶屏MIPI接口与LVDS接口到底有什么区别详细资料说明

热门文章

  1. 三维GIS+电力巡检,开启电缆通道数字化巡检新局面
  2. 最好用图像处理库CxImage入门
  3. 数据结构和算法常见面试题大全
  4. matlab的开方算法_每天一个小算法(matlab armijo)
  5. matlab s变换
  6. 【CAD二次开发】CAD常用版本 DwgVersion
  7. 高通SDX12:sar sensor AW9610x驱动移植
  8. 持久层框架有哪些?区别是什么?Mybatis框架的优点和缺点
  9. 车标&车辆品牌检测Python[完整源码&视频安装教程&车标数据集&完整文档]
  10. 基于java的毕业设计管理系统