Python 实现控制一阶惯性系统
来源:互联网 发布:美工摄影师招聘 编辑:程序博客网 时间:2024/06/04 20:13
1.PID.py
# PID控制一阶惯性系统测试程序#*****************************************************************## 增量式PID系统 ##*****************************************************************#class IncrementalPID: def __init__(self, P, I, D): self.Kp = P self.Ki = I self.Kd = D self.PIDOutput = 0.0 #PID控制器输出 self.SystemOutput = 0.0 #系统输出值 self.LastSystemOutput = 0.0 #上次系统输出值 self.Error = 0.0 #输出值与输入值的偏差 self.LastError = 0.0 self.LastLastError = 0.0 #设置PID控制器参数 def SetStepSignal(self,StepSignal): self.Error = StepSignal - self.SystemOutput IncrementValue = self.Kp * (self.Error - self.LastError) + self.Ki * self.Error + self.Kd * (self.Error - 2 * self.LastError + self.LastLastError) self.PIDOutput += IncrementValue self.LastLastError = self.LastError self.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 = P self.Ki = I self.Kd = D self.SystemOutput = 0.0 self.ResultValueBack = 0.0 self.PidOutput = 0.0 self.PIDErrADD = 0.0 self.ErrBack = 0.0 def SetInertiaTime(self, InertiaTime,SampleTime): self.SystemOutput = (InertiaTime * self.ResultValueBack + SampleTime * self.PidOutput) / (SampleTime + InertiaTime) self.ResultValueBack = self.SystemOutput def SetStepSignal(self,StepSignal): Err = StepSignal - self.SystemOutput KpWork = self.Kp * Err KiWork = self.Ki * self.PIDErrADD KdWork = self.Kd * (Err - self.ErrBack) self.PidOutput = KpWork + KiWork + KdWork self.PIDErrADD += Err self.ErrBack = Err
2.TestPID.py
import PIDimport matplotlib.pyplot as pltplt.figure(1) # 创建图表1plt.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) # 选择图表1 plt.plot(IncrementalXaxis, IncrementalYaxis,'r') plt.xlim(0,120) plt.ylim(0,140) plt.title("IncrementalPID") plt.figure(2) # 选择图表2 plt.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.实现效果
阅读全文
0 0
- Python 实现控制一阶惯性系统
- C++Builder PID控制一阶惯性系统
- 一阶惯性系统
- 一阶惯性
- python 一阶插值
- 惯性
- 惯性
- adapterview控制惯性滑动的距离
- MEMS微惯性教学实验系统
- 最小二乘法的一阶、二阶辨识系统
- 一阶谓词逻辑的几个系统
- 一阶谓词逻辑系统的一个扩充
- 一阶谓词逻辑的几个系统(续)
- android Gallery 实现短距离滚动 取消惯性
- Cocos2d-js中实现惯性滑动效果
- Cocos2d-js中实现惯性滑动效果
- Python实现IOC控制反转
- ubuntu系统实现远程控制
- HDU
- 将.sql文件导入powerdesigner的实现方法详解
- Activemq Queue与Topoic并存 的解决办法
- Fox And Two Dots
- Linux下JDK中文乱码解决
- Python 实现控制一阶惯性系统
- css中overflow的那些坑
- 大写转换(SQL优化)
- JAVA接口和JAVA抽象类的区别
- win10 wamp 打开报错0xc0000142
- 项目总结及坑点
- Mysql5.7.14-linux版密码忘记解决办法
- php实现短链接系统
- Error:java.lang.NullPointerException: null value in entry: destinationDir=null