# 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