Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bumpless transfer in FRP

I can build a PID controller in the Haskell FRP library netwire using loop from the ArrowLoop instance provided for Wires.

I can also implement switching between controllers or between a controller and a manual input using switch.

How can I implement bumpless transfer, for example using the "tracking" strategy explained here (or in any number of control engineering articles/books)? Another strategy might be acceptable if it has good performance, but the tracking approach is appealing for my application because it also address anti-windup.

I'm having trouble squinting at the block diagram hard enough to make it look like the type of two (or one?) loop applications.

like image 972
Doug McClean Avatar asked Nov 01 '22 20:11

Doug McClean


1 Answers

There are two loops in each diagram. It's helpful when finding loops to redraw the diagrams so that all of the inputs enter the same sides of all of the elements, all of the outputs leave the same other sides, and, if possible, minimize line crossings. In these diagrams, inputs enter the bottom, left, or top of an element, and outputs leave to the right.

The overall system has one loop, feeding the output of the process into the subtraction for the error comparison:

Overall PID process

The control system has one loop, feeding the final control output after selection of controller (the PID controller or the manual control) into the tracking PID controller. The overall output is the Output on the far right.

Manually overridden PID Controller

The tracking PID controller has two loops. One is the feedback loop for the derivative. The loop for the derivative could disappear inside another component. The other loop feeds back the output of the PID controller into the comparison between the PID controller's output and the control output actually controlling the process. Note that the order of the P,D,and I branches is different in this diagram to remove the line crossings

Tracking PID controller

Notice that if the tracking PID controller had its own Output connected to Track, the difference from the first subtraction would be 0, and the integration branch would be unchanged by the addition of 0.

like image 187
Cirdec Avatar answered Nov 12 '22 21:11

Cirdec