iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python基础之 python实现PID算法及测试的例子
  • 466
分享到

python基础之 python实现PID算法及测试的例子

2023-06-02 00:06:26 466人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

  PID算法实现  import time  class PID:  def __init__(self, P=0.2, I=0.0, D=0.0):  self.Kp = P  self.Ki = I  self.Kd = D  sel

  PID算法实现

  import time

  class PID:

  def __init__(self, P=0.2, I=0.0, D=0.0):

  self.Kp = P

  self.Ki = I

  self.Kd = D

  self.sample_time = 0.00

  self.current_time = time.time()

  self.last_time = self.current_time

  self.clear()

  def clear(self):

  self.SetPoint = 0.0

  self.PTerm = 0.0

  self.ITerm = 0.0

  self.DTerm = 0.0

  self.last_error = 0.0

  self.int_error = 0.0

  self.windup_guard = 20.0

  self.output = 0.0

  def update(self, feedback_value):

  error = self.SetPoint - feedback_value

  self.current_time = time.time()

  delta_time = self.current_time - self.last_time

  delta_error = error - self.last_error

  if (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_guard

  elif (self.ITerm > self.windup_guard):

  self.ITerm = self.windup_guard

  self.DTerm = 0.0

  if delta_time > 0:

  self.DTerm = delta_error / delta_time

  self.last_time = self.current_time

  self.last_error = error

  self.output = self.PTerm + (self.Ki * self.ITerm) + (self.Kd * self.DTerm)

  def setKp(self, proportional_gain):

  self.Kp = proportional_gain

  def setKi(self, integral_gain):

  self.Ki = integral_gain

  def setKd(self, derivative_gain):

  self.Kd = derivative_gain

  def setWindup(self, windup):

  self.windup_guard = windup

  def 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

  #这个程序的实质就是在前九秒保持零输出,在后面的操作中在传递函数为某某的系统中输出1

  def test_pid(P = 0.2, I = 0.0, D= 0.0, L=100):

  """Self-test PID class

  .. note:: 郑州做人流医院哪家好 Http://www.020gzzj.com/

  ...

  for i in range(1, END):

  pid.update(feedback)

  output = pid.output

  if pid.SetPoint > 0:

  feedback += (output - (1/i))

  if i>9:

  pid.SetPoint = 1

  time.sleep(0.02)

  ---

  """

  pid = PID.PID(P, I, D)

  pid.SetPoint=0.0

  pid.setSampleTime(0.01)

  END = L

  feedback = 0

  feedback_list = []

  time_list = []

  setpoint_list = []

  for i in range(1, END):

  pid.update(feedback)

  output = pid.output

  if pid.SetPoint > 0:

  feedback +=output# (output - (1/i))控制系统的函数

  if i>9:

  pid.SetPoint = 1

  time.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)

  得出结果

--结束END--

本文标题: python基础之 python实现PID算法及测试的例子

本文链接: https://www.lsjlt.com/news/228164.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python基础之 python实现PID算法及测试的例子
      PID算法实现  import time  class PID:  def __init__(self, P=0.2, I=0.0, D=0.0):  self.Kp = P  self.Ki = I  self.Kd = D  sel...
    99+
    2023-06-02
  • python实现ROA算子边缘检测算法
    python实现ROA算子边缘检测算法的具体代码,供大家参考,具体内容如下 代码 import numpy as np import cv2 as cv def ROA(im...
    99+
    2024-04-02
  • python基础编程小实例之计算圆的面积
    目录题目代码解析总结编程语言:python3.9 题目 编写程序,要求程序能根据用户输入的圆半径数据计算圆的面积(圆的面积公式:S=πr^2),并分别输出圆的直径和面积 imp...
    99+
    2023-03-13
    python计算圆的面积代码
  • Python基础之矩阵输入的实例
    目录Python矩阵输入python输入(数组、矩阵)一维输入对应不同变量一维数组的输入问题二维数组的输入问题Python矩阵输入 经常在尝试python一些函数功能时想随便输入一个...
    99+
    2024-04-02
  • python基础知识之try...except...的详细用法实例
    目录前言1.异常类只能来处理指定的异常情况,如果非指定异常则无法处理2.多分支3.万能异常Exception4.多分支+Exception5.异常的其他机构(try…f...
    99+
    2024-04-02
  • Python实战之IQ测试系统的实现
    目录导语一、运行环境二、资料素材三、代码展示四、效果展示1)智商测试限时版本​2)木子测试导语 智商测试 通常,智商测试测验一个人在数字、空间、逻辑、词汇、创造、记忆等方面的能力。 ...
    99+
    2024-04-02
  • Python基础必备之语法结构实例分析
    这篇文章主要讲解了“Python基础必备之语法结构实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python基础必备之语法结构实例分析”吧!Python 语句语句是 Python 解...
    99+
    2023-06-30
  • python基础语法之函数应用实例分析
    这篇“python基础语法之函数应用实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python基础语法之函数应用实例...
    99+
    2023-06-30
  • Python入门之基础语法的示例分析
    这篇文章将为大家详细讲解有关Python入门之基础语法的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.p...
    99+
    2023-06-15
  • Python Selenium 之数据驱动测试的实现!
    数据驱动模式的测试好处相比普通模式的测试就显而易见了吧!使用数据驱动的模式,可以根据业务分解测试数据,只需定义变量,使用外部或者自定义的数据使其参数化,从而避免了使用之前测试脚本中固定的数据。可以将测试脚本与测试数据分离,使得测试脚本在不...
    99+
    2023-10-27
    python selenium 测试工具 postman 自动化测试 软件测试 测试工程师
  • 基于python实现微信收红包自动化测试脚本(测试用例)
    测试用例(1)  测试用例(2) 代码如下(python): # coding=utf-8 from appium import webdriver impor...
    99+
    2024-04-02
  • Python实现异常检测LOF算法的示例代码
    目录背景LOF 算法1. k邻近距离2. k距离领域3. 可达距离4. 局部可达密度5. 局部异常因子LOF算法流程LOF优缺点Python 实现 LOFPyODSklearn大家好...
    99+
    2024-04-02
  • JavaScript实现基础排序算法的示例详解
    目录前言正文1、冒泡排序2、选择排序3、插入排序4、快速排序前言 文本来总结常见的排序算法,通过 JvavScript  来实现 正文 1、冒泡排序 算法思想:比较相邻两个...
    99+
    2024-04-02
  • 使用Python实现基数排序算法原理的实例
    基数排序算法是桶排序算法的一种,是对基于相同位置的值,进行分组排序。可能这么说有点不好理解,可以看下面的基数排序算法原理实例。 基数排序算法原理实例 指定数组[121,432,564,23,1,45,788],将数组进行基数排序,...
    99+
    2024-01-22
    算法的概念
  • Python自动化测试之登录脚本的实现
    目录环境准备1、安装selenium模块2、安装浏览器驱动器代码1、登录代码2、xpath定位元素标签环境准备 前提已经安装好python、pycharm,配置了对应的环境变量。 1...
    99+
    2023-02-23
    Python自动化登录 Python自动化测试登录
  • Python基于决策树算法的分类预测怎么实现
    今天小编给大家分享一下Python基于决策树算法的分类预测怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、决策树的...
    99+
    2023-06-26
  • 利用Python实现网络测试的示例代码
    Speedtest CLI 专为软件开发人员、系统管理员和计算机爱好者等打造,是 Ookla® 提供技术支持的首款正式 Linux 本机 Speedtest 应用程序。 Sp...
    99+
    2024-04-02
  • python+appium实现自动化测试的示例代码
    目录1.什么是Appium2.启动一个app自动化程序的步骤3.appium服务介绍4. appium客户端使用5.adb的使用 6.Appium启动过程分析1....
    99+
    2024-04-02
  • Python实现贪心算法的示例
    目录一、贪心算法简介二、解决思路1.同学导师给的思路2.问题分解三、算法代码实现四、算法测试结果五、算法复杂性分析今天一个研究生同学问我一个问题,问题如下: 超市有m个顾客要结账,每...
    99+
    2024-04-02
  • Python基础之变量和变量实现的简单乘
    上篇我们知道了关于python的一个hello world的简单程序代码,现在我们来了解关于python里面的变量,我们来了解下,变量是什么? 变量:变量是为了存储程序运算过程中的一些中间结果,为了方便之后的调用,同一变量可以重新赋值。 ...
    99+
    2023-01-30
    变量 简单 基础
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作