Regulacja położenia kątowego wahadła odwróconego z

Transkrypt

Regulacja położenia kątowego wahadła odwróconego z
Regulacja położenia kątowego wahadła odwróconego z
wykorzystaniem regulatora PID
Instrukcja laboratoryjna
Etap I – dobór nastaw regulatora PID
Aby dobrać nastawy dla regulatora PID otwieramy program Simulink, a następnie plik o
nazwie „wahadlo_odwrocone”.
Dodajemy blok regulatora PID. Znajdziemy go w kategorii „Simulink” -> „Continuous”.
2
Tworzymy sprzężenie zwrotne od położenia kątowego.
Wchodzimy w ustawienia regulatora PID, klikając na niego dwa razy lewym przyciskiem
myszy. Wchodzimy w zakładkę „PID Advanced” i ustalamy limity na wyjściu. W
rzeczywistym obiekcie moment siły na silniku jest ograniczony do wartości 1,5 Nm i taką też
wartość wpisujemy. Zmiany zatwierdzamy przyciskiem „Apply”.
3
Wracamy do zakładki „Main” i klikamy na opcję samostrojenia „Tune”.
Po wykonaniu odpowiednich operacji przez Tuner, naszym oczom powinno się ukazać
następujące okno. Aby wyświetlić wyszukane wartości nastaw, klikamy opcję „Show
parameters”.
4
Do ręcznego skorygowania parametrów używamy suwaka. Przesuwając go w lewo lub w
prawo, ustawiamy agresywność i szybkość algorytmu. Wybierając wariant „Extended”
otrzymujemy dostęp do dwóch suwaków – „Bandwidth” i „Phase margin”. Pierwszy określa
agresywność algorytmu, drugi zaś decyduje o stabilności. Do wyboru mamy także rodzaj
wyświetlanego wykresu. Wykres odpowiedzi skokowej nie będzie przydatny dla naszego
układu, wybieramy więc wyświetlanie charakterystyki Bodego.
Po ręcznej korekcie parametrów i wybraniu odpowiednich nastaw zatwierdzamy zmiany i
wychodzimy z ustawień regulatora. Aby zasymulować reakcję układu na wytrącenie ze stanu
równowagi, dodajemy dwa bloki „Step”.
5
W pierwszym bloku ustawiamy skok z „0” na „1” w dziesiątej chwili.
Aby stworzyć impuls, w drugim bloku ustawiamy skok z „0” na „-1” w jedenastej chwili.
Odpowiednio sumujemy wypadkowy sygnał impulsu z sygnałem sterującym z regulatora za
pomocą bloku „Add” z kategorii „Math Operations”. Aby dodać trzecie wejście, wpisujemy
dodatkowy plus w odpowiedniej rubryce.
6
Wszystkie bloki łączymy ze sobą w odpowiedni sposób.
7
Dodajemy bloki „Scope” do obserwacji interesujących nas zmiennych, czyli wartości
sterowania, położenia kątowego i położenia liniowego wahadła.
Aby wyświetlać dowolny przedział czasowy, kasujemy limit zapamiętanych wartości,
klikając dwa razy na dany blok „Scope” i wybierając następującą ikonkę:
Odznaczamy opcję „Limit data points to last: …”. Powtarzamy czynność dla pozostałych
dwóch bloków „Scope”.
8
Czas symulacji możemy ustawić na 50. Przycisk uruchomienia programu znajduje się po
lewej stronie od ustawianego czasu.
Sprawdzamy zachowanie układu. Dla przykładu pokazano spodziewane wykresy zmiennych:

Moment siły

Położenie kątowe
9

Położenie liniowe
Aby dokonać ponownego samostrojenia należy pamiętać o odłączeniu sygnału impulsu od
układu!!!
Zapewne dość prosto udało się odnaleźć prawidłowe parametry. W rzeczywistości obiekt jest
nieco bardziej skomplikowany. Dodajmy bardzo małe opóźnienie w torze sterowania o
wartości 6 ms. W rzeczywistym obiekcie właśnie z takim opóźnieniem będziemy mieli do
czynienia. W tym celu dodajemy blok „Transport Delay” z kategorii „Continuous” i
wpisujemy odpowiednią wartość do parametru opóźnienia.
10
Nasz układ teraz powinien wyglądać tak:
11
Na wyjściu bloku regulatora prawdopodobnie pojawią się drgania niegasnące.
Pamiętając o odłączeniu sygnału impulsu od układu, dokonujemy samostrojenia i ręcznie, za
pomocą suwaków, dobieramy nastawy i testujemy ich działanie. Przy testach należy
sprawdzać odpowiedź układu, a więc zarówno położenie kątowe, jak i liniowe. Patrząc
jedynie na samo położenie kątowe możemy, na przykład, błędnie stwierdzić, że układ
regulacji zrekompensował zakłócenie i wahadło znajduje się w położeniu równowagi.
Analizując jednak położenie liniowe wahadła, widzimy, że wahadło nie stoi w miejscu, ale
porusza się ruchem jednostajnym. Jest to oczywiście sytuacja niepożądana i nastawy powinny
zostać zmienione.
12
Po osiągnięciu zadowalających efektów możemy zakończyć ten etap i przejść do etapu
drugiego.
13
Etap II – symulowany układ regulacji położenia kątowego wahadła
odwróconego
Otwieramy plik „wahadlo_odwrocone_etap_2”.
Model wahadła odwróconego jest inny, niż w poprzednim przypadku. Z powodu braku
obsługi algebraicznych sprzężeń zwrotnych przez kompilator, model nieliniowy został
zastąpiony przybliżoną transmitancją modelu liniowego utworzonego w okolicy punktu
pracy. Modele są ze sobą zgodne do odchylenia kątowego wahadła o 8°, przy większych
odchyleniach wyjście przybliżonego modelu dąży do nieskończonej wartości.
14
Z kategorii „B&R Automation Studio Toolbox” wybieramy blok „B&R Config” i dodajemy
go do projektu. Nie łączymy go z innymi blokami, jest to blok konfigurujący ustawienia, więc
wystarczy, że jest umieszczony w projekcie.
Po dodaniu klikamy dwa razy na blok w celu wybrania konfiguracji. Wybieramy opcję „C –
Code Generation (Embedded Real Time Target based)”.
Dodajemy bloki „B&R Input” i „B&R Output”. To dzięki nim uzyskamy dostęp do
zmiennych z poziomu Automation Studio. Łączymy je z wejściem i wyjściem modelu
wahadła odwróconego.
15
Nadajemy nazwy zmiennym – „Torque_in” dla zmiennej wejściowej i „theta_out” dla
wyjściowej.
16
Wchodzimy w ustawienia symulacji:
W zakładce „Solver” wpisujemy odpowiedni czas próbkowania. Czas próbkowania w
Matlabie musi zgadzać się z czasem próbkowania na sterowniku. W naszym przypadku będą
to 2 ms.
17
W celu integracji środowisk musimy teraz odczytać informacje o projekcie, który wgramy na
sterownik. Otwieramy w Automation Studio program „Inverted_Pendulum”. W lewym oknie
zmieniamy widok na „Configuration View”.
Odczytujemy nazwę konfiguracji i sterownik docelowy. W naszym przypadku będzie to
kolejno konfiguracja „Config1” i sterownik „4PP065_0571_P74”. Następnie otwieramy
podkategorię ustawień programu Simulink o nazwie „B&R Basic Settings”. W pierwszym
oknie u góry, czyli w „Automation Studio project path”, wybieramy ścieżkę do projektu. W
„Automation Studio task or library name” nadajemy nazwę naszemu obiektowi. Kolejnym
krokiem jest zaznaczenie opcji „Add task or library to hardware configuration” i wskazanie
poprzednio odczytanej nazwy konfiguracji i sterownika. Całość dodajemy do pierwszego
tasku.
18
Nasz model funkcjonuje w dziedzinie czasu ciągłego. Aby umożliwić działanie takiego
układu musimy włączyć obsługę tego typu obiektów w zakładce „B&R Advanced Settings”.
19
A także zdyskretyzować dziedzinę czasu w zakładce „Solver”. Opcja powinna się
automatycznie załączyć po włączeniu obsługi obiektów z czasem ciągłym, dla pewności
należy to jednak sprawdzić.
Po dokonaniu wymaganych ustawień możemy przystąpić do kompilacji projektu. Zmieniamy
ścieżkę w Matlabie na ścieżkę projektu Automation Studio.
Komendę kompilacji znajdziemy w Simulinku zakładce „Tools” -> „Code Generation” ->
„Build Model”.
Udane zakończenie procesu powinny zwieńczyć następujące komunikaty:
20
Możemy zamknąć środowisko Matlab. Uruchamiamy Automation Studio i otwieramy projekt
„Inverted_Pendulum”. Jeżeli poprawnie połączyliśmy program z Simulinka, powinniśmy go
zobaczyć w strukturze projektu.
Otwieramy kod programu „TorqueControl”.
W programie zostały zaznaczone miejsca, w których należy dopisać fragmenty kodu.
Pierwszym fragmentem do napisania jest wprowadzenie parametrów regulatora PID. Miejsce
zostało zaznaczone następującym komentarzem:
21
Odpowiednie zmienne do zapisu wartości nastaw znajdują się w strukturze „TorqueControl” > „Parameter” -> „PID”. Do niższych poziomów struktury przechodzi się wpisując kropkę. W
miejsce ‘xxx’ należy wprowadzić odpowiednie wartości.
Po wpisaniu kropki przy przechodzeniu w głąb struktury, bądź przy zastosowaniu skrótu
klawiszowego „CTRL + SPACJA”, uruchamia się podpowiedź nazwy zmiennej. Używając
tej funkcjonalności jesteśmy w stanie dość szybko dostać się do interesującej nas zmiennej.
Teraz musimy zaprogramować działanie regulatora. Do tego celu będą potrzebne nam dwa
bloki funkcyjne: „LCRPIDpara”, który konfiguruje regulator PID i „LCRPID”, który
odpowiada za wykonywanie odpowiedniego algorytmu sterującego. Deklaracje zmiennych
znajdują się w pliku o rozszerzeniu .var.
22
Aby dodać odpowiednią zmienną klikamy prawym przyciskiem w wolne pole i wybieramy
„Add Variable”.
Dodajemy dwie zmienne i nazywamy je „FB_PID” i „FB_PID_para”.
Definujemy rodzaj zmiennych, klikając na typ zmiennej, a następnie na przycisk z trzema
kropkami.
23
Wybieramy kategorię „Function Blocks”.
Dla zmiennej „FB_PID” wybieramy „LCRPID”. Czynność powtarzamy dla zmiennej
„FB_PID_para”, wybierając „LCRPIDpara”.
24
Zamykamy kartę deklaracji zmiennych, zapisując zmiany. Starajmy się często zapisywać
zmiany, najwygodniej jest to robić skrótem klawiszowym „CTRL + SHIFT + S”. Powracamy
do kodu programu i odnajdujemy miejsce do wywołania bloków.
Wpisujemy wartości dla bloku „LCRPIDpara”.
Parametry wejściowe oznaczają:

deadband – wielkość strefy nieczułości, „0” oznacza brak strefy,

deadband_mode – tryb działania strefy nieczułości, dostępne są trzy możliwości, tryb
„MODE_ZERO” oznacza załączenie strefy czułości dopiero po przekroczeniu
wartości zadanej przez wartość sterowaną, w naszym przypadku ustawienie trybu nie
ma znaczenia, ponieważ deadband = 0,

dY_max – maksymalna rampa dla wartości sterowania, „0” oznacza brak rampy,

d_mode – metoda różniczkowania, do wyboru różniczkowanie wartości sterowanej
lub odchyłki, „MODE_E” oznacza różniczkowanie odchyłki regulacji,

fbk_mode – rodzaj sprzężenia zwrotnego ze sterowania, możliwość podpięcia
zewnętrznej wartości z urządzenia wykonawczego, w naszym przypadku wybieramy
„MODE_INTERN”, czyli wartość wewnętrzną bloku,

invert – znak sprzężenia zwrotnego, w naszym przypadku sprzężenie zwrotne będzie
miało ujemny znak, zatem parametr będzie wynosił „TRUE”,

Kfbk – windup całkowania, dla wartości „0” windup jest wyłączony
25

Kw – współczynnik wartości zadanej przy obliczaniu akcji proporcjonalnej, przy
ustawieniu na „1” wartość zmiennej nie jest modyfikowana,

WX_max, WX_min – granice wartości zadanej i sterowanej potrzebne do
przeskalowania zmiennych, przy wartościach odpowiednio „100” i „0” wejścia nie są
skalowane.
Dokładniejsze informacje na temat parametrów bloku LCRPIDpara można znaleźć w B&R
Help Explorer w zakładce Programming -> Libraries -> Closed loop control and mathematics
-> LoopConR -> Function blocks and functions -> LCRPIDpara.
Na potrzeby symulacji blok będzie włączony i aktualizowany przez cały czas działania
programu:

enable – blok funkcyjny jest wykonywany tylko wtedy, gdy parametr przyjmuje
wartość „TRUE”,

enter – parametry są aktualizowane tylko wtedy, gdy parametr przyjmuje wartość
„TRUE”,
Następnie podpinamy pod wejścia odpowiednie zmienne:

Kp – wzmocnienie proporcjonalne regulatora PID

Tf – czas filtrowania dla rzeczywistej akcji różniczkującej

Tn – stała czasowa całkowania

Tv – stała czasowa różniczkowania
Nastawy zostały przeliczone z podanych przez użytkownika na postać przyjmowaną przez
regulator.
Na koniec wywołujemy blok funkcyjny, wstawiając po nazwie bloku funkcyjnego nawias
okrągły:
26
Te same czynności powtarzamy dla bloku LCRPID, wpisując następujący kod:
Gdzie parametry wejściowe oznaczają:

A – wartość sprzężenia w przód (feedforward),

hold_I – zatrzymanie akcji całkującej i utrzymanie jej dotychczasowej wielkości,

ident – adres struktury z parametrami regulatora, podajemy adres bloku LCRPIDpara,
czyli „FB_PID_para.ident”,

mode – tryb pracy regulatora, do wyboru m.in. tryb sterowania ręcznego, wystawienie
wielkości
maksymalnej,
minimalnej,
wyłączenie
regulatora.
„LCRPID_MODE_AUTO” oznacza tryb automatyczny,

W – wartość zadana, w naszym przypadku ustawiamy na stałe wartość „0”,
oznaczającą pionowe położenie wahadła,

Y_fbk – wartość sterowania do potrzebna sprzężenia zwrotnego w przypadku
zaznaczenia jej kontroli w parametrze „fbk_mode” bloku LCRPIDpara, my nie
korzystamy z tej funkcji, a więc wstawiamy „0”,

Y_man – wartość sterowania ręcznego, ustawiamy „0”, ponieważ w naszym
przypadku sterowanie jest zadawane w sposób automatyczny,

Y_max – maksymalna wartość sterowania, ustawiamy „1,5 [Nm]”,

Y_min – minimalna wartość sterowania, ustawiamy „-1,5 [Nm]”,

enable - blok funkcyjny jest wykonywany tylko wtedy, gdy parametr przyjmuje
wartość „TRUE”,

X – wartość mierzona, w naszym przypadku będzie to bieżąca wartość odchylenia
kątowego wahadła, czyli „TorqueControl.Parameter.IO.Theta_rad”.
27
Wartość
wyjścia
regulatora
przypisujemy
do
zmiennej
„Torque”
w
strukturze
„TorqueControl” -> „Parameter” -> „IO”.
Dokładniejsze informacje na temat parametrów bloku LCRPID można znaleźć w B&R Help
Explorer w zakładce Programming -> Libraries -> Closed loop control and mathematics ->
LoopConR -> Function blocks and functions -> LCRPID.
Zmienne w naszym modelu Simulink są typu LREAL. Musimy zatem dodać odpowiedni
fragment kodu przed i za blokiem funkcyjnym, aby przekonwertować odpowiednie wielkości
z REAL na LREAL.
Mając zaimplementowany model i regulator, pozostaje nam już tylko połączyć ze sobą
odpowiednie zmienne. Wybieramy „Physical View”, wybieramy sterownik i klikamy na
ikonkę „Variable Mapping”.
28
W otwartym oknie klikamy prawym przyciskiem myszy i wybieramy „Add Mapping”.
29
Klikamy na wybór „Source PV”.
Wybieramy zmienną „theta_out” z modelu wahadła.
Dla „Destination PV” wybieramy zmienną „Theta_model” ze struktury „TorqueControl” ->
„Parameter” -> „IO” programu „TorqueCont”.
30
Powtarzamy procedurę dla wartości momentu. Wybierając zmienną „Torque_model” ze
struktury „TorqueControl” -> „Parameter” -> „IO” programu „TorqueCont” na „Source PV” i
zmienną „Torque_in” z modelu wahadła dla „Destination PV”.
Zapisujemy wszystkie zmiany ikoną dyskietek, bądź skrótem „CTRL + SHIFT + S”.
Aktywujemy tryb symulacji ikoną „Activate Simulation”.
Następnie przebudowujemy projekt poleceniem „Rebuild”.
Po przebudowaniu wybieramy „Transfer” i w następnym oknie klikamy „OK”.
Podgląd zmiennych programu możemy sprawdzić w narzędziu „Watch”, dostępnym po
kliknięciu prawym przyciskiem myszy na plik z programem.
31
W otwartym oknie klikamy prawym przyciskiem myszy i wybieramy „Insert Variable”.
Zaznaczamy zmienną „Do_Impulse” ze struktury „TorqueControl” -> „Command”. Będzie to
zmienna odpowiedzialna za podanie zakłócenia o wartości 1 Nm.
Następnie
wybieramy
zmienne
„Theta_model”
„TorqueControl” -> „Parameter” -> „IO”.
32
i
„Torque_model”
ze
struktury
Teraz możemy obserwować zachowanie układu, podając jedynkę na obecność zakłócenia.
Aby zobaczyć przebieg wartości należy otworzyć narzędzie „Trace”.
Klikamy prawym przyciskiem myszy w górne okno i wybieramy „Insert New Trace”
33
Następnie klikamy prawym przyciskiem myszy na „Trace” i dodajemy do niego zmienne.
Dodajmy wejście i wyjście naszego modelu wahadła.
Jeszcze raz klikamy prawym przyciskiem myszy na „Trace” i wybieramy „Properties”.
34
Wpisujemy zapis 2500 wejść, czyli przy próbkowaniu 2 ms otrzymamy wykres z pięciu
sekund.
Przełączamy na zakładkę „Mode”. Zaznaczamy „Start tracing if trigger is TRUE” i
odznaczamy „Take sample only when trigger is TRUE”. Klikamy na przycisk „Trigger
condition”.
35
Klikamy na lewą stronę warunku i naciskamy spację, aby wybrać zmienną aktywującą
rysowanie wykresu. W naszym przypadku aktywacja nastąpi po podaniu zakłócenia, więc
wybieramy zmienną „Do_Impulse”.
Wstawiamy jedynkę do prawej strony warunku. Wykres wystartuje, gdy zmienna
„Do_Impulse” przybierze wartość „1”.
Ładujemy konfigurację na sterownik ikonką „Install”.
36
Po podaniu zakłócenia zmienną „Do_Impulse” zmienne powinny zacząć się zapisywać.
Zapisane wartości można wyświetlić na wykresie klikając ikonkę „Show Target Data”.
Właściwości wykresów możemy zmienić klikając na nie prawym przyciskiem myszy i
wybierając „Properties”.
W zakładce „Extensions” odznaczamy inteligentne skalowanie osi wykresów i wpisujemy
ręcznie własne wartości. Konfigurowany wykres zmieniamy klikając w lewo obok nazwy.
Edytowany wykres posiada zielony wskaźnik.
37
W zakładce „Values” możemy wybrać, które parametry będą widoczne na wykresie.
Teraz możemy przystąpić do testów. Po dokonaniu zmian w programie, aktualizujemy
program ikonką „Transfer”. Po zgraniu programu restartujemy model przyciskiem „Warm
Restart”. Przy złej regulacji odchylenie kątowe modelu dąży do nieskończoności, wtedy
należy również zrestartować program za pomocą ikony „Warm Restart”.
Po poprawnym wykonaniu części drugiej przejdź do części trzeciej.
38
Etap III –układ regulacji położenia kątowego wahadła odwróconego na
rzeczywistym obiekcie
Teraz porzucimy symulację i zajmiemy się sterowaniem rzeczywistym wahadłem
odwróconym. Część czynności będzie się powtarzała z poprzedniego etapu, więc aby nie
powielać rysunków pominięto przyswojone już operacje. Aby je sobie przypomnieć należy
się cofnąć do obrazków z etapu II. Pierwszym krokiem będzie dodanie bloku funkcyjnego
podającego moment siły na serwonapęd „MC_BR_TorqueControl”. Otwieramy plik
„TorqueControl.var”, dodajemy zmienną o nazwie „FB_TorqueControl” i określamy jej typ
jako blok funkcyjny „MC_BR_TorqueControl”.
Odnajdujemy miejsce w programie „TorqueControl.st” na wywołanie zdefiniowanego bloku.
Wpisujemy odpowiedni kod:
39
Gdzie poszczególne parametry oznaczają:

Acceleration – maksymalne przyspieszenie, podajemy bardzo dużą wartość, ponieważ
nie interesuje nas ograniczanie tej wartości,

Axis – adres kontrolowanej osi, w naszym przypadku będzie to adres osi „gAxis01”,

Mode – wybór trybu pracy bloku, tryb „mcV_LIMIT_OFF” oznacza pracę bez
narzuconych limitów,

NegMaxVelocity – maksymalna prędkość w ujemnym kierunku, podajemy bardzo
dużą ujemną wartość, ponieważ nie interesuje nas ograniczanie tej wartości,

PosMaxVelocity – maksymalna prędkość w dodatnim kierunku, podajemy bardzo
dużą dodatnią wartość, ponieważ nie interesuje nas ograniczanie tej wartości,

TorqueParID – adres wartości zadanej momentu siły, w naszym przypadku będzie
adres numer 586,

TorqueRamp – wartość rampy zadanego momentu siły, w naszym przypadku „0”,

Enable - blok funkcyjny jest wykonywany tylko wtedy, gdy parametr przyjmuje
wartość „TRUE”,

InitData – aktualizuje parametry wejściowe bloku przy podaniu narastającego zbocza,

StartSignal – rozpoczęcie sterowania momentem siły,

DataInitialized – parametr wyjściowy informujący o poprawnym wczytaniu
parametrów wejściowych.
Dokładniejsze informacje na temat parametrów bloku MC_BR_TorqueControl można znaleźć
w B&R Help Explorer w zakładce Programming -> Libraries -> Motion Libraries ->
ACP10_MC -> Function blocks -> Torque control -> MC_BR_TorqueControl.
Następnie wracamy do kodu związanego z blokiem „LCRPIDpara” i zmieniamy wywołanie
bloku ze sposobu ciągłego na zależny od zmiennych.
To samo robimy z blokiem „LCRPID”.
40
Ponadto zmieniamy znak sprzężenia zwrotnego regulatora, w rzeczywistym obiekcie będzie
ono dodatnie.
Kasujemy linijkę powyżej i poniżej wywołania bloku „LCRPID”, konwertujące zmienne
modelu na zmienne wchodzące w skład regulatora.
Usuwamy również połączenie zmiennych pomiędzy modelem, a regulatorem.
Usuwamy model Simulink z projektu.
41
Potwierdzamy usunięcie programu z konfiguracji.
W widoku „Physical View” projektu odnajdujemy moduł wejść analogowych X20AI2632 i
klikamy na niego dwa razy.
42
Klikamy na „AnalogInput01” w celu przypisania do niej zmiennej. Z tego kanału
odczytywane jest położenie kątowe wahadła.
Wybieramy zmienną „Theta_IO”.
43
Podobną czynność wykonujemy wchodząc w moduł wejść cyfrowych X20DI8371. Pod
drugie wejście podpinamy zmienną „Limit_switch_L”, a pod trzecią „Limit_switch_R”. Są to
krańcówki stanowiska z wahadłem, umieszczone odpowiednio z lewej i z prawej strony.
Wyłączamy tryb symulacji i wykonujemy „Rebuild” programu.
Nasz program jest gotowy do wgrania na sterownik. Używamy czytnika kart CF i zgrywamy
projekt na kartę poleceniem „Create Compact Flash”.
Program posiada wizualizację i to z niej będziemy teraz kontrolować obiekt. Z niej również
będziemy wprowadzać nowe nastawy dla regulatora. Omówienie wizualizacji zostanie
przeprowadzone przez prowadzącego. Po uzyskaniu niezbędnych informacji na temat
działania programu, możemy przystąpić do testów. Oczywiście podgląd zmiennych w
narzędziach „Watch” i „Trace” nadal jest możliwy. Aby to zrealizować należy połączyć się ze
sterownikiem przez kabel ethernetowy. Możemy tak obserwować, na przykład, zmienne
„TorqueControl.Parameter.IO.Theta_rad” i
„TorqueControl.Parameter.IO.Torque”,
nasze wejście i wyjście rzeczywistego obiektu.
44
czyli