/
PID.py
63 lines (45 loc) · 2.62 KB
/
PID.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
from matplotlib import pyplot as plt
from matplotlib.widgets import Slider
import numpy as np
import math
PGain = 0.4
IGain = 0.002
DGain = 0.2
fig, ax = plt.subplots()
plt.subplots_adjust(left=0.25, bottom=0.30)
axcolor = 'lightgoldenrodyellow'
axP = plt.axes([0.2, 0.1, 0.65, 0.03], facecolor=axcolor)
axI = plt.axes([0.2, 0.15, 0.65, 0.03], facecolor=axcolor)
axD = plt.axes([0.2, 0.2, 0.65, 0.03], facecolor=axcolor)
PSild = Slider(axP, 'P-Gain', 0, 1, 0.4, valstep=0.01)
ISild = Slider(axI, 'I-Gain', 0, 1, 0.1, valstep=0.01)
DSild = Slider(axD, 'D-Gain', 0, 1, 0.2, valstep=0.01)
t = [0.0]
def update(val):
PGain = PSild.val
IGain = ISild.val / 100
DGain = DSild.val
Sollwert = [0.0, 0.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10,10, 10, 10, 10, 10, 10, 10,10, 10, 10, 10, 10, 10, 10,10, 10, 10, 10, 10, 10, 10,10, 10, 10, 10, 10, 10, 10,10, 10, 10, 10, 10, 10, 10,10, 10, 10, 10, 10, 10, 10,10, 10, 10, 10, 10, 10, 10,10, 10, 10, 10, 10, 10, 10,10, 10, 10, 10, 10, 10, 10,10, 10, 10, 10, 10, 10, 10,10, 10, 10, 10, 10, 10, 10, 30, 30, 30, 30,
30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
30, 30, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
Istwert = [0.0, 0.0]
Fehler = [0.0, 0.0]
IFehler = 0
for i in range(1, len(Sollwert)):
t.append(i*0.1)
IFehler += Sollwert[i]-Istwert[i]
Fehler.append(Sollwert[i]-Istwert[i])
Istwert.append(Istwert[i] + PGain * Fehler[i]+DGain*(Fehler[i]-Fehler[i-1])+IGain*IFehler)
fig.canvas.draw_idle()
ax.cla()
ax.plot(Sollwert, label='Sollwert')
ax.plot(Istwert, label='Istwert')
ax.legend()
PSild.on_changed(update)
ISild.on_changed(update)
DSild.on_changed(update)
plt.show()