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. 算法-------寻找旋转排序数组中的最小值
  2. “苹果光环”褪色后,瑞声靠什么坐稳头把交椅?
  3. Spring实战 MethodInvokingJobDetailFactoryBean使用与分析
  4. 如何解决Macbook pro无法写入U盘的问题
  5. 心痛!你的快递可能已经被烧毁,13吨快递“无一生还”
  6. 欧几里德算法(求最大公约数和最小公倍数)
  7. linux怎么进入mnt目录,「Linux基础知识」Linux路径的表示方式
  8. 【评价模型】熵权法和模糊评价模型
  9. RGB转灰度的几种算法
  10. python如何设置画布开始位置_Python用Turtle绘图,原来如此简单
  11. 视频黑屏画面检测 blackframe
  12. fHash(哈希校验工具)v2.1.9 绿色版
  13. Linux 管道 管道命令 命名管道
  14. GitHub消除马赛克项目
  15. 数字身份的万亿市场之争才刚开始
  16. 37 | 什么是SLI、SLO、SLA
  17. 在windows下实时监控、接受文件变化小工具
  18. r语言写九九乘法表并保存为txt文件
  19. 关于scanf函数返回值被忽略的解决方法
  20. 工作站和台式机的区别是什么

热门文章

  1. IDEA项目打包几种方式
  2. vue地址栏输入路由跳转到首页_vue 路由跳转四种方式 (带参数)
  3. 火狐浏览器不支持html5,这样写 火狐浏览器不支持?
  4. 制造业ERP系统具体操作流程是什么?
  5. 深入了解FileNet
  6. java opencv 提取车牌_OpenCV实现车牌字符分割(C++)
  7. 软件测试中的白盒测试的工具,软件测试人员该如何选择白盒测试工具?常用的白盒测试工具汇总...
  8. 无法保存此文档。它可能是只读的,或者正在被其他应用程序使用
  9. AutoCAD2016-2020设置经典模式界面
  10. Django下载文件——三种方法和大文件下载