Безударный перевод в FRP

Я могу построить PID-контроллер в сетевой библиотеке Haskell FRP, используя loop от ArrowLoop экземпляр предоставлен для Wires.

Я также могу реализовать переключение между контроллерами или между контроллером и ручным вводом, используя switch,

Как я могу реализовать безударный перенос, например, используя стратегию "отслеживания", описанную здесь (или в любом количестве статей / книг по технике управления)? Другая стратегия может быть приемлемой, если она имеет хорошую производительность, но подход к отслеживанию привлекателен для моего приложения, потому что он также направлен на борьбу с Win-win.

У меня проблемы с прищуриванием блок-диаграммы достаточно сильно, чтобы она выглядела как два (или один?) loop Приложения.

1 ответ

Решение

Есть два loopс на каждой диаграмме. Это полезно при нахождении циклов для перерисовки диаграмм, чтобы все входы входили с одинаковых сторон всех элементов, все выходы выходили с одних и тех же сторон и, по возможности, минимизировали пересечения линий. На этих диаграммах входы входят в нижнюю, левую или верхнюю часть элемента, а выходы - в правую.

Общая система имеет один loop, подавая результат процесса в вычитание для сравнения ошибок:

Общий процесс PID

Система управления имеет один loopподачу конечного управляющего выхода после выбора контроллера (ПИД-регулятора или ручного управления) в ПИД-регулятор слежения. Общий вывод - это вывод справа.

Переопределенный вручную ПИД-контроллер

Контроллер PID отслеживания имеет два loops. Одним из них является петля обратной связи для производной. loop ибо производная может исчезнуть внутри другого компонента. Другой loop возвращает вывод ПИД-регулятора в сравнение между выходом ПИД-регулятора и управляющим выходом, фактически контролирующим процесс. Обратите внимание, что порядок удаления ветвей P,D и I на этой диаграмме отличается для удаления пересечений линий.

ПИД-регулятор слежения

Обратите внимание, что если бы у отслеживающего ПИД-регулятора был свой собственный выход, подключенный к треку, отличие от первого вычитания было бы 0, а ветвь интеграции не изменилась бы при добавлении 0.

Другие вопросы по тегам