форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
52 строки
1.9 KiB
Python
52 строки
1.9 KiB
Python
# MM1.py - Модуль с функциями моделирования звеньев системы
|
|
|
|
def usilitel(xt, k):
|
|
"""
|
|
Усилитель (пропорциональное звено)
|
|
xt - входной сигнал
|
|
k - коэффициент усиления
|
|
"""
|
|
return k * xt
|
|
|
|
def realdvig(xt, k, T, y_prev, yin_prev):
|
|
"""
|
|
Реальный двигатель (апериодическое звено 1-го порядка)
|
|
xt - входной сигнал
|
|
k - коэффициент передачи
|
|
T - постоянная времени
|
|
y_prev - предыдущее значение выходного сигнала
|
|
yin_prev - предыдущее значение внутренней переменной
|
|
Возвращает [y_current, yin_current]
|
|
"""
|
|
# Дискретная реализация апериодического звена
|
|
# Принимаем dt = 1 для простоты
|
|
dt = 1.0
|
|
yin_current = yin_prev + (xt - yin_prev) * dt / T
|
|
y_current = k * yin_current
|
|
return [y_current, yin_current]
|
|
|
|
def tahogen(xt, k, y_prev):
|
|
"""
|
|
Тахогенератор (интегрирующее звено)
|
|
xt - входной сигнал (скорость вращения)
|
|
k - коэффициент передачи
|
|
y_prev - предыдущее значение выходного сигнала
|
|
"""
|
|
# Дискретная реализация интегратора
|
|
dt = 1.0
|
|
y_current = y_prev + k * xt * dt
|
|
return y_current
|
|
|
|
def nechus(xt, Xm):
|
|
"""
|
|
Звено "зона нечувствительности"
|
|
xt - входной сигнал
|
|
Xm - половина ширины зоны нечувствительности
|
|
"""
|
|
if abs(xt) <= Xm:
|
|
return 0.0
|
|
elif xt > Xm:
|
|
return xt - Xm
|
|
else:
|
|
return xt + Xm
|