форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
62 строки
1.9 KiB
Python
62 строки
1.9 KiB
Python
import math
|
|
|
|
# Ввод параметров
|
|
znach = input('k1,T,k2,Xm,A,F,N=').split(',')
|
|
k1 = float(znach[0])
|
|
T = float(znach[1])
|
|
k2 = float(znach[2])
|
|
Xm = float(znach[3])
|
|
A = float(znach[4])
|
|
F = float(znach[5])
|
|
N = int(znach[6])
|
|
|
|
print(f"Параметры системы: k1={k1}, T={T}, k2={k2}, Xm={Xm}")
|
|
print(f"Входной сигнал: A={A}, F={F}, N={N}")
|
|
|
|
# Создание входного сигнала (синусоида)
|
|
vhod = []
|
|
for i in range(N):
|
|
vhod.append(A * math.sin((2 * i * math.pi) / F))
|
|
|
|
print("Входной сигнал:", vhod[:10]) # Покажем первые 10 значений
|
|
|
|
# Функции компонентов системы
|
|
def realdvig(xtt, kk1, TT, yti1, ytin1):
|
|
"""Модель реального двигателя"""
|
|
yp = kk1 * xtt # усилитель
|
|
yti1 = yp + yti1 # Интегратор
|
|
ytin1 = (yti1 + TT * ytin1) / (TT + 1) # Инерционное звено
|
|
return [yti1, ytin1]
|
|
|
|
def tahogen(xtt, kk2, yti2):
|
|
"""Модель тахогенератора"""
|
|
yp = kk2 * xtt # усилитель
|
|
yti2 = yp + yti2 # интегратор
|
|
return yti2
|
|
|
|
def nechus(xtt, gran):
|
|
"""Зона нечувствительности"""
|
|
if xtt < gran and xtt > (-gran):
|
|
ytt = 0
|
|
elif xtt >= gran:
|
|
ytt = xtt - gran
|
|
elif xtt <= (-gran):
|
|
ytt = xtt + gran
|
|
return ytt
|
|
|
|
# Моделирование системы
|
|
yi1 = 0 # состояние интегратора двигателя
|
|
yin1 = 0 # состояние инерционного звена
|
|
yi2 = 0 # состояние интегратора тахогенератора
|
|
|
|
vyhod = [] # выход системы
|
|
|
|
for xt in vhod:
|
|
xt1 = xt - yi2 # отрицательная обратная связь
|
|
[yi1, yin1] = realdvig(xt1, k1, T, yi1, yin1)
|
|
yi2 = tahogen(yin1, k2, yi2)
|
|
yt = nechus(yin1, Xm)
|
|
vyhod.append(yt)
|
|
|
|
print('Выход системы y=', vyhod)
|