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 实现PID控制一阶惯性系统相关推荐

  1. LabVIEW——房间温度PID控制实验系统数据采集

    参考我之前写的PID程序的博客: LabVIEW增量式PID算法控制房间温度变化的简单例子的程序 程序功能说明 本项目采用LabVIEW软件设计开发房间温度传感器温度数据采集的程序.程序包括VISA函 ...

  2. 针对具有纯滞后环节的一阶惯性系统PID参数整定(衰减曲线法)

    假定被控系统的传递函数为: 一.建立开环结构图,观察系统对阶跃输入信号的跟随性. 由图二可知:开环系统的的上升时间很长,并且输出到达不了给定值,下面对该系统进行PID参数整定,进行PID控制. 图1 ...

  3. 【自动控制理论(一)】对PID控制的理解

    PID公式 以上是离散PID计算公式,PID的连续和离散,以及离散中的位置和增量,原理上都是完全一样的.一般控制都是离散PID,而且离散的表达形式更加直观,这里只给出离散的形式. PID控制的理解 非 ...

  4. Python代码实现PID控制

    Python代码实现PID控制 位置式PID 增量式PID控制. 1.位置式 2.增量式 3.口诀 4.reference PID控制常用的简单分为位置式和增量式. 位置式PID 是输入的是目标位置到 ...

  5. Udacity机器人软件工程师课程笔记(二十三) - 控制(其一)- PID控制及其python实现

    控制(Controls) 1.PID控制简介 在工程实际中,应用最为广泛的调节器控制规律为比例.积分.微分控制,简称PID控制,又称PID调节.PID控制器问世至今已有近70年历史,它 以其结构简单. ...

  6. 理论应用实例水杯_PID理解起来很难?系统讲解PID控制及参数调节,理论加实际才好...

    在实际工程中,应用最为广泛的调节器控制规律为比例.积分.微分控制,简称PID控制,又称PID调节.PID控制器问世至今以其结构简单.稳定性好.工作可靠.调整方便而成为工业控制的主要技术之一. PID调 ...

  7. 模糊pid控制的温度系统matlab源代码_变风量空调模糊 PID 控制系统的仿真研究

    一般在负荷变化较大的大型中央空调系统中,采用温度恒定和改变风量的调节方式,从而使控制房间的送风量随系统负荷的变化而变化的中央空调系统叫做变风量空调系统.该系统最大优点就是a节能,如果全年运行,可节约能 ...

  8. 参数整定临界比例度实验_PID理解起来很难?系统讲解PID控制及参数调节,理论加实际才好!...

    在实际工程中,应用最为广泛的调节器控制规律为比例.积分.微分控制,简称PID控制,又称PID调节.PID控制器问世至今以其结构简单.稳定性好.工作可靠.调整方便而成为工业控制的主要技术之一. PID调 ...

  9. PID控制通俗解释与PID参数的整定方法--以温控系统为例

    PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID控制的原理可以用人对炉温的手动控制来理解.阅读本文不需要高深的数学知识 ...

  10. 现控报告-- 分析倒立摆系统稳定性、能控性及能观性分析,设计PID控制方案(附matlab)

    目录 摘要 数学建模 1. 倒立摆系统简介 2. 直线倒立摆系统数学模型 系统传递函数模型 系统状态空间数学模型 系统分析 3. 直线一级倒立摆系统分析 (1)系统稳定性分析 (2)系统能控性和能观性 ...

最新文章

  1. java观察者模式类图_设计模式(十八)——观察者模式(JDK Observable源码分析)...
  2. spring boot 在eclipse里启动正常,但打包后启动不起来
  3. 思考: 什么时候需要disable MMU/i-cache/d-cache?
  4. python编程基础张勇答案_Python程序开发、编程基础阶段试题及答案
  5. ubuntu14.04 安装php5-fpm
  6. spellcheck 属性 html5的新属性,对元素内容进行拼写检查
  7. linux的forx函数-进程控制
  8. 简单神经网络和卷积神经网络识别手写数字
  9. 2021年下半年软件设计师下午真题及答案解析
  10. robotium测试
  11. 系统讲解一下整站SEO优化都涉及到哪些工作?
  12. 很好用的博客文章编辑器!!!!!
  13. python3.6的新特性:f-strings格式化输出;python3.8新特性:f-strings增加了 = 说明符
  14. 1434:相亲的胖胖
  15. python:PyQt5 简单示例
  16. python大神的成长之路普通话三分钟_三分钟普通话说话30篇-我的成长之路 - 希赛网...
  17. DD-WRT无线路由绝招DHCP转发
  18. 文明重启怎么做RUST堡垒_文明重启怎么地下建房-地下建房技巧
  19. linux 解压缩压缩文件(zip、rar、7z、tar)
  20. Galera集群--搭建(2个数据节点+1个仲裁)

热门文章

  1. 机器人多维度高速精密切割加工 引领切割技术升级
  2. Java同步队列(非阻塞队列与阻塞队列)——java并发容器
  3. linux cximage动态库,64位Linux编译cximage手记
  4. 404终结者——IPFS新引擎Filenet
  5. JAVA架构师之路-视频学习
  6. java工程师的职业规划_Java工程师如何进行职业规划?
  7. vb.net 使用ftp协议上传、下载文件(Visual Studio 2019)
  8. 对话系统的简单综述及应用智能客服
  9. matlab——imhist和histeq函数
  10. cass二次开发vba和lisp_CAD二次开发LISP视频_小懒人CAD工具箱_CAD插件_CASS插件_LISP代码...