/
laba1.py
101 lines (89 loc) · 5.69 KB
/
laba1.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import numpy as np
import matplotlib.pyplot as plt
import control.matlab as con
import math
class Lab1():
def BAGUVIX(GG1, name_gg1, GG2, name_gg2, t): # функция для построения графиков характеристик
topic = {
'G1': 'безынерционного звена',
'G2': 'апериодического звена',
'G3': 'интегрирующего звена',
'G4': 'реального диф. звена',
'G5': 'идеального диф. звена',
} # словарь для графика
if name_gg1 in topic: # определяем какой именно строим, для графика
k1 = topic[name_gg1]
plt.figure(1) # Вывод графиков в отдельном окне
y1, t1 = con.step(GG1, t)
y2, t2 = con.step(GG2, t)
lines = [y1, y2]
# plt.subplot(1, 1, 1) # 1цифра - количество строк в графике, 2 -тьиьтиколичество графиков в строке, 3 -номер графика
lines[0], lines[1] = plt.plot(t, y1,"r", t, y2,"b")
plt.legend(lines, ['h(t) для 1', 'h(t) для 2'], loc='best', ncol=2, fontsize=10)
plt.title('Переходная характеристика' + '\n для ' + k1, fontsize=10)
plt.ylabel('h')
plt.xlabel('t, c')
plt.grid()
plt.figure(2)
y2, t2 = con.impulse(GG2, t)
y1, t1 = con.impulse(GG1, t)
lines[0], lines[1] = plt.plot(t, y1,"r", t, y2,"b")
plt.legend(lines, ['w(t) для 1', 'w(t) для 2'], loc='best', ncol=2, fontsize=10)
plt.title('Импульсная характеристика' + '\n для ' + k1, fontsize=10)
plt.ylabel('w')
plt.xlabel('t, c')
plt.grid()
plt.figure(3)
mag1, phase1, omega1 = con.bode(GG1, dB=False)
# plt.plot()
plt.title('Частотные характеристики' + "\n для " + k1, fontsize=10, y=2.2)
mag1, phase1, omega1 = con.bode(GG2, dB=False)
plt.plot()
plt.title('Частотные характеристики' + "\n для " + k1, fontsize=10, y=2.2)
plt.show()
# Для задания своих чисел через консоль
# F = Proverka
# td = F.Kek('Введите длительность процесса в секундах= ').Prov()
# k1 = F.Kek('Введите коэф. к для безынерцинного звена = ').Prov1()
# k2 = F.Kek('Введите коэф. к для апериодического звена = ').Prov1()
# T2 = F.Kek('Введите коэф. T для апериодического звена = ').Prov1()
# k3 = F.Kek('Введите коэф. к для интегрального звена = ').Prov1()
# T3 = int(input('Введите коэф. T для интегрального звена = '))
# k4 = F.Kek('Введите коэф. к для реал дифф звена = ').Prov1()
# T4 = F.Kek('Введите коэф. T для реал дифф звена = ').Prov1()
r = 2 # для изменения
td = 50
t = np.linspace(0, stop=10, num=1000) # stop - конечное число, num-число точек при расчете
# print(t)
k1 = 2 # коэф. к для безынерцинного звена 1
k2 = 1 # коэф. к для апериодического звена 1
T2 = 2 # коэф. T для апериодического звена1
k3 = 3 # коэф. к для интегрального звена 1
T3 = 1 # коэф. T для интегрального звена 1
k4 = 4 # коэф. к для реал дифф звена1
T4 = 2 # коэф. T для реал дифф звена 1
k5 = 1
T5 = 10 ** -4 #малое число, иначе не получится
G11 = con.tf(k1, 1) # Безынерционное звено 1
G21 = con.tf(k2, [T2, 1]) # Апериодическое звено звено 1
G31 = con.tf(k3, [T3, 0]) # Интегрирующее звено 1
G41 = con.tf([k4, 0], [T4, 1]) # Реальное диф. звено звено 1
G51 = con.tf([k5, 0], [T5, 1]) # Идеальное диф. звено звено 1
k1 = k1 * r # коэф. к для безынерцинного звена 2
k2 = k2 * r # коэф. к для апериодического звена 2
T2 = T2 / r # коэф. T для апериодического звена 2
k3 = k3 * r # коэф. к для интегрального звена 2
T3 = 1 # коэф. T для интегрального звена 2
k4 = k4 * r # коэф. к для реал дифф звена 2
T4 = T4 / r # коэф. T для реал дифф звена 2
k5 = k5 * r
G12 = con.tf(k1, 1) # Безынерционное звено 2
G22 = con.tf(k2, [T2, 1]) # Апериодическое звено звено 2
G32 = con.tf(k3, [T3, 0]) # Интегрирующее звено 2
G42 = con.tf([k4, 0], [T4, 1]) # Реальное диф. звено звено 2
G52 = con.tf([k5, 0], [T5, 1]) # Идеальное диф. звено звено 1
# Go1 = BAGUVIX(G11, 'G1', G12, 'G12', t) # Безынерционные звенья
# Go2 = BAGUVIX(G21, 'G2', G22, 'G22', t) # Апериодические звенья
Go3 = BAGUVIX(G31, 'G3', G32, 'G32', t) # Интегрирующие звенья
# Go4 = BAGUVIX(G41, 'G4', G42, 'G42', t) # Реальное диф. звенья
# Go5 = BAGUVIX(G51, 'G5', G52, 'G52', t) #Идеальное диф. звенья