Безударный перевод в FRP
Я могу построить PID-контроллер в сетевой библиотеке Haskell FRP, используя loop
от ArrowLoop
экземпляр предоставлен для Wire
s.
Я также могу реализовать переключение между контроллерами или между контроллером и ручным вводом, используя switch
,
Как я могу реализовать безударный перенос, например, используя стратегию "отслеживания", описанную здесь (или в любом количестве статей / книг по технике управления)? Другая стратегия может быть приемлемой, если она имеет хорошую производительность, но подход к отслеживанию привлекателен для моего приложения, потому что он также направлен на борьбу с Win-win.
У меня проблемы с прищуриванием блок-диаграммы достаточно сильно, чтобы она выглядела как два (или один?) loop
Приложения.
1 ответ
Есть два loop
с на каждой диаграмме. Это полезно при нахождении циклов для перерисовки диаграмм, чтобы все входы входили с одинаковых сторон всех элементов, все выходы выходили с одних и тех же сторон и, по возможности, минимизировали пересечения линий. На этих диаграммах входы входят в нижнюю, левую или верхнюю часть элемента, а выходы - в правую.
Общая система имеет один loop
, подавая результат процесса в вычитание для сравнения ошибок:
Система управления имеет один loop
подачу конечного управляющего выхода после выбора контроллера (ПИД-регулятора или ручного управления) в ПИД-регулятор слежения. Общий вывод - это вывод справа.
Контроллер PID отслеживания имеет два loop
s. Одним из них является петля обратной связи для производной. loop
ибо производная может исчезнуть внутри другого компонента. Другой loop
возвращает вывод ПИД-регулятора в сравнение между выходом ПИД-регулятора и управляющим выходом, фактически контролирующим процесс. Обратите внимание, что порядок удаления ветвей P,D и I на этой диаграмме отличается для удаления пересечений линий.
Обратите внимание, что если бы у отслеживающего ПИД-регулятора был свой собственный выход, подключенный к треку, отличие от первого вычитания было бы 0, а ветвь интеграции не изменилась бы при добавлении 0.