Python 实现控制一阶惯性系统
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 实现控制一阶惯性系统相关推荐
- Python解决控制问题系列之二:线性连续系统最优控制问题
Python解决控制问题系列之二:线性连续系统最优控制问题 文章目录 Python解决控制问题系列之二:线性连续系统最优控制问题 1. 前言 2. 线性系统问题描述 3. Python 编程 3.1 ...
- 基于python的界面自动化测试-基于Python语言的自动化测试系统的设计与实现
黄建军+李宥谋+刘婧+周欢 摘 要: 通过分析现代工业生产对自动化测试系统的要求,提出一种基于面向对象的编程语言Python构建的自动化测试系统.利用Python语言的高效.灵活和简洁等特点,结合Py ...
- python语音控制智能家电_Python 树莓派智能音箱语音控制电脑开关机-Python 实用宝典...
完成下面这个有趣的实验,你所需要的东西有: 1.路由器(能够形成局域网,且电脑已用网线连接) 2.一个智能音箱(本教程使用的是亚马逊 Echo Dot 2) 3.主板支持wake on lan (大部 ...
- 手机控制linux电脑,通过Amora用symbian手机控制linux系统的电脑
通过Amora用symbian手机控制linux系统的电脑 发布时间:2008-01-07 20:49:09来源:红联作者:Desktop 原文章地址http://yegle.net/2007/12/ ...
- python开发的著名软件公司_软件开发公司_软件外包_项目外包平台基于Python开发一个全文检索系统...
基于Python开发一个全文检索系统.功能要求为: 使用全文检索引擎对文本进行检索.文本的格式为Word.PDF.TXT. 同时按数据域进行复合条件检索.数据域指文本对应的信息,例如创建人.文件编号. ...
- Python&Opencv手势识别系统
Python手势识别与控制 概述 本文中的手势识别与控制功能主要采用 OpenCV 库实现, OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库, 可以运行在Linux, Windows ...
- Python 还原控制SCI论文算法系列1: 基于策略迭代的自适应最优控制器设计
Python 还原控制SCI论文算法系列1: 基于策略迭代的自适应最优控制器设计 文章目录 Python 还原控制SCI论文算法系列1: 基于策略迭代的自适应最优控制器设计 0.前言 1.研究问题的描 ...
- python control控制系统库
python control控制系统库 参考:Docs » Python Control Systems Library 系统创建 ①control.tf(num, den) 传递函数方式 contr ...
- 基于Python的网上订餐系统的设计与实现
基于Python的网上订餐系统的设计与实现 源码获取:https://www.bilibili.com/video/BV1814y1L7XH/ 由于科学技术的快速进步,社会的每个领域都离不开电脑技术. ...
- python股权变动监控系统_每天5分钟玩转Python(12) - 生成器(下)
这一章开始介绍生成器函数和 yield关键字,以及Python中的协程的概念. yield关键字 当我们调用一个普通的函数时,执行过程从第一条语句开始,直到碰到一个 return语句或者遇到一个异常抛 ...
最新文章
- PyTorch学习笔记——pytorch图像处理(transforms)
- python输出杨辉三角啊二维数组_Java输出杨辉三角形(使用二维数组)
- 有效使用Eclipse的热门提示
- Java语言最新实用案例教程_Java 语言实用案例教程
- Maven之生成测试覆盖度的插件cobertura-maven-plugin的使用
- sqlserver2008索引优化的相关研究(一)
- 美国域名总量增至8023万个:1月净增5.9万个
- python读取指定路径txt文件-python读取txt文件并取其某一列数据的示例
- 学好平面设计需要哪些技术功底?
- 关于Android开发中图片的三级缓存机制
- Python 批量转换视频音频采样率(附代码) | Python工具
- 手机参数中的4+64G到底是什么?
- IE6 遇到bug及解决办法
- glib实现Socket通信
- 数字化转型小贴士和陷阱
- java MySQL表的约束与数据库设计 详解
- iOS之UI--通讯录的实例关键知识技术点积累
- 亚马逊鲲鹏系统批量注册功能可以让你快速拥有大量亚马逊买家号
- 供应链管理起源:不能不提日本
- lcd屏幕有mipi接口吗_液晶屏MIPI接口与LVDS接口到底有什么区别详细资料说明