POLITECHNIKA ŚWIĘTOKRZYSKA
w Kielcach
WYDZIAŁ MECHATRONIKI I BUDOWY MASZYN
ZAKŁAD MECHATRONIKI
LABORATORIUM PODSTAW AUTOMATYKI
INSTRUKCJA
ĆWICZENIE LABORATORYJNE NR 1
Temat: Badania symulacyjne podstawowych członów automatyki
(wyznaczanie odpowiedzi na wymuszenie skokowe). Zapoznanie się z
programem Matlab-Simulink. cz.1
Opracował:
dr inż. Paweł Łaski
Kielce 2006
Zasady pracy w Simulinku
Pracę z Simulinkiem można rozpocząć z okna poleceń Matlaba podając komendę:
» simulink
Wykonanie tego polecenia powoduje pojawienie się okna z tytułem simulink, którego
zawartość przedstawia rysunek:
Okno Simulinka
Okno to zawiera następujące biblioteki programowe:
Sources - bloki do generowania różnych sygnałów. Bloki tej biblioteki posiadają tylko
sygnały wyjściowe. Jej zawartość ilustruje rysunek.
Bloki biblioteki Sources
Funkcje realizowane przez poszczególne bloki:
• Clock - podaje czas symulacji i wyprowadza go jako zmienną;
• Signal Generator - generator sygnałowy fali sinusoidalnej, prostokątnej, pół-kształtnej
i przebiegu losowego;
• Sine Wave - generator fali sinusoidalnej;
• From File - odczyt danych z mat-pliku;
• Random Number - generator szumu białego z rozkładem Gaussa;
• Digital Clock - zegar cyfrowy;
• Constant - zadaje wartość stałą niezależną od czasu;
• Step Input - sygnał skoku jednostkowego;
• From Workspace - pobiera dane z przestrzeni roboczych;
• Band-Limited White Noise - generator szumu białego z ograniczonym pasmem;
• Repeating Sequence - generator dowolnego sygnału o zadanym okresie powtarzania;
• Pulse Generator - generator fali prostokątnej;
• Chirp Signal - generator sygnału z liniową rosnącą częstotliwością.
Sinks zawiera bloki przeznaczone do wizualizacji wyników, a także do sterowania
przebiegiem symulacji. Rodzaje bloków występujących w tej bibliotece ilustruje rysunek.
Bloki biblioteki Sinks
Bloki umieszczone w bibliotece Sinks zawierają jedynie wejścia i realizują następujące
funkcje:
• Scope - „oscyloskop";
• Graph - okno graficzne Matlaba do wykresów czasowych;
• Auto-Scale Graph - okno graficzne z automatycznym przesuwaniem skali;
• XY Graph - okno graficzne Matlaba do wykonywania wykresów XY;
• To Workspace - przesyła przebiegi czasowe do przestrzeni roboczej programu Matlab;
• To File - zapamiętuje przebiegi czasowe w mat-pliku;
• Stop Simulation - zatrzymuje symulację;
• Hit Crossing - automatycznie zwiększa dokładność obliczeń w otoczeniu punktów
nieciągłości.
Discrete - biblioteka bloków dyskretnych. Każdy z tych bloków zawiera na wejściu
impulsator oraz ekstrapolator zerowego rzędu (zero-order hołd) na wyjściu. Czas
próbkowania może być określony oddzielnie dla każdego bloku. Podaje się go w polu okna
dialogowego danego bloku. Wartości wyjściowe bloków dyskretnych są aktualizowane tylko
w momentach czasu t
odpowiadających całkowitej wielokrotności czasu
próbkowania T
s
(t=nT). Czas próbkowania T
s
może być wartością skalarną lub wektorową.
Bloki umieszczone w bibliotece Discrete realizują następujące funkcje:
Bloki biblioteki Discrete
• Unit Delay - opóźnienie sygnału wyjściowego (o jeden cykl okresu próbkowania);
• Discrete Zero-Pole - transmitancja dyskretna; dla zdefiniowania tej transmi-tancji
należy podać wartości zer, biegunów i współczynnik wzmocnienia;
• Filter - transmitancja filtru dyskretnego; jest określona wektorami współczynników
licznika i mianownika; współczynniki są podawane według malejących potęg
operatora l/z;
• Discrete Transfer Fen - transmitancja dyskretna opisana przez podanie wektorów
współczynników licznika i mianownika uszeregowanych według malejących potęg
operatora z;
• Discrete State-Space - model układu zapisany w postaci dyskretnego równania stanu i
wyjścia;
• Zero-Order Hołd, First-Order Hołd - ekstrapolatory odpowiednio zerowego i
pierwszego rzędu;
• Discrete-Time Integrator - dyskretny element całkujący;
• Discrete-Time Limited Integrator - element całkujący dyskretny z ograniczeniem
sygnału wyjściowego w zadanym zakresie.
Linear jest biblioteką bloków liniowych, której zawartość przedstawia rysunek:
Bloki biblioteki Linear
Biblioteka ta zawiera bloki:
• Sum - element sumujący; liczbę i rodzaj znaków (+-) określa użytkownik;
• Inner Product - iloczyn skalarny wektorów wejściowych;
• Integrator - element całkujący;
• Derivative - element różniczkujący;
• Gain - element wzmacniający (wyjście = Gain * wejście);
• Matrix Gain - macierzowy element całkujący;
• Slider Gain - wzmacniacz z nastawianiem wzmocnienia za pomocą suwaka;
• Transfer Fcn - transmitancja ciągła; dla określenia jej należy podać wektor
współczynników wielomianów licznika i mianownika; współczynniki są podawane w
kolejności malejących potęg s;
• Zero-Pole - transmitancja ciągła określona przez podanie biegunów, zer oraz
współczynnika wzmocnienia;
• State-Space - równanie stanu i wyjścia modelu ciągłego. Należy podać macierze A, B,
C, D oraz warunki początkowe.
Nonlinear zawiera bibliotekę bloków nieliniowych. Jej zawartość przedstawia rysunek:
W bibliotece tej występują bloki:
• Sign - realizuje zależność y = sign(x);
• Relay - przekaźnik dwupołożeniowy; należy podać: wartość, przy której zachodzi
załączenie i wyłączenie oraz wartość, jaka wystąpi na wyjściu po włączeniu i
wyłączeniu;
• Backlash - strefa histerezy;
• Saturation - element typu nasycenie; powoduje ograniczenie sygnału wyjściowego w
określonym zakresie;
Bloki biblioteki Nonlinear
• Quantizer - przekształca sygnał wejściowy w funkcję schodkową; wymaga podania
wartości przedziału kwantyzacji;
• Dead Zone - element typu strefa nieczułości; należy podać początkową i końcową
wartość strefy nieczułości;
• Coulombic Friction - element typu tarcie kulombowskie; realizuje zależność y =
sign(x) * (Gain * abs(x) + offset); w celu zdefiniowania elementu należy podać dwa
parametry: Gain i offset;
• Rate Limiter - ogranicznik szybkości zmian sygnału; należy podać współczynnik
nachylenia prostej dla dodatnich i ujemnych wartości sygnału wejściowego;
• Product - iloczyn wartości wejściowych; użytkownik musi podać liczbę wejść;
• Abs - wartość bezwzględna sygnału wejściowego (y = I u |);
• Look Up Table - określa funkcję odcinkowo-liniową na podstawie zadanej tablicy
(look up table);
• 2-D Look-Up Table - dwuwymiarowa tablica zależności;
• Relational Operator - operator relacji: <,<=,>=, = = , ~ = ;
• Logical Operator - realizuje operację logiczną na wartościach wejściowych.
Użytkownik podaje nazwę operatora logicznego (AND, OR, NAND, NOR, XOR,
NOT) oraz liczbę wejść;
• Combinatorial Logic - tablica logiki kombinatorycznej (tzw. tablica prawdy, tnie
table);
• Switch - służy do przełączania sygnałów wejściowych. Działanie bloku ilustrują
rysunki:
gdzie Xl, X3 są sygnałami wejściowymi, a X2 jest sygnałem sterującym;
• Fen - blok wyrażenia definiowanego przez użytkownika. Jako nazwę zmiennej
wejściowej należy używać u, np. cos(«[l]*exp(3.2-M[2]));
• S-Function - tzw. funkcja systemowa. Definicją S-funkcji może być schemat graficzny
utworzony w Simulinku, m- lub mex-plik. Nazwę S-funkcji podaje się w oknie
dialogowym (podobnie jak inne parametry);
• MATLAB Fen - blok zwracający funkcję Matlaba. Funkcja może być również
zdefiniowana w m-pliku funkcyjnym, którego nazwę podaje się w oknie dialogowym;
• Reset Integrator - blok całkujący z resetowaniem. Jego działanie polega na tym, że
zachodzi całkowanie sygnału z pierwszego wejścia (gdy na wejściu drugim jest sygnał
zero). Kiedy wejście 2 jest niezerowe, zachodzi przełączenie na wejście trzecie;
• Memory - blok używany do usuwania pętli algebraicznych. Jest wykorzystywany
łącznie z blokiem Clock dla określenia kroku całkowania poprzez spowodowanie
opóźnienia o jeden krok całkowania. W oknie dialogowym należy podać warunek
początkowy;
• Transport Delay - blok realizujący tzw. „czyste" opóźnienie. Należy podać trzy
parametry: początkową wartość odliczania czasu opóźnienia, czas trwania opóźnienia
i wielkość bufora startowego;
• Variable Transport Delay - blok zmiennego opóźnienia transportowego. Definicja
bloku wymaga podania maksymalnej wartości czasu opóźnienia, początkowej
wartości odliczania czasu oraz rozmiaru bufora. Sygnał na drugim wejściu reguluje
wartość czasu opóźnienia;
• Limited Integrator - integrator z ograniczeniem górnej (Upper bound) i dolnej (Lower
bound) granicy całkowania. Wartości te wprowadzane są przez użytkownika,
podobnie jak warunek początkowy. Dostępny jest rozmaskowany schemat tego bloku.
Connections zawiera bibliotekę połączeń. Należą do niej:
• Inport - port wejściowy; służy do wprowadzania zewnętrznych sygnałów wejściowych
do podsystemu;
• Outport - port wyjściowy; służy do wyprowadzania sygnałów wyjściowych
podsystemu do bloków zewnętrznych;
• Mux - dokonuje przekształcenia skalarnych sygnałów wejściowych w sygnał
wektorowy. Użytkownik podaje liczbę wejść;
• Demux - demultiplekser; dokonuje przekształcenia sygnału wektorowego na sygnały
skalarne. Użytkownik podaje liczbę wyjść.
Bloki biblioteki Connections
Extras zawiera dodatkowe biblioteki.
Biblioteka Demos zawiera dodatkowe toolbox-y jako rozszerzenia możliwości pakietu
SIMULINK.
Tworzenie modelu graficznego w Simulinku
Definiowanie nowego modelu w formie schematu blokowego (graficznie) odbywa się
po wywołaniu programu Simulink z okna poleceń Matlaba (MATLAB Command Window),
wyborze z menu File i opcji New. Powoduje to otwarcie nowego okna dla tego modelu, a
następnie umieszczenie w nim ikon bloków zawartych w bibliotekach Simulinka i połączenie
tych bloków liniami reprezentującymi ich wzajemne powiązania.
Konstruowanie modelu odbywa się w tzw. edytorze graficznym Simulinka, do którego
przenoszone są ikony bloków zawartych w bibliotekach standardowych lub własnych. Każdy
blok posiada swój symbol graficzny - ikonę. Przykłady standardowych i własnych ikon
bloków przedstawia rysunek:
Przykłady różnych ikon występujących w Simulinku
Maskowanie bloku umożliwia zmianę ikony bloku (oraz zawartości jego okna dialogowego).
Każdy blok ma unikalną (w danym modelu) nazwę, którą można edytować i zmieniać po
wskazaniu i kliknięciu jej pola kursorem myszy. Nazwa bloku jest umieszczona na zewnątrz
jego symbolu graficznego. Usytuowanie nazwy zależy od orientacji bloku.
Położenie nazwy bloku w zależności od orientacji bloku
Bloki mogą mieć wejścia (>) i wyjścia (>), a każdy blok ma swoje okienko dialogowe, które
otwiera się po wskazaniu ikony bloku kursorem myszy i podwójnym kliknięciu jej lewym
klawiszem. Wybór przycisku Help otwiera okienko pomocy dla danego bloku.
Działania na blokach w Simulinku
Na blokach mogą być wykonywane takie operacje, jak:
• zmiana położenia
• zmiana rozmiaru
• kopiowanie bloku
• usuwanie bloku.
Każda czynność wykonywana na bloku (blokach) powinna być poprzedzona wyborem bloku
(bloków). Wybór ten jest realizowany w następujący sposób:
• wybór jednego bloku lub napisu - wskazanie bloku lub napisu kursorem myszy i
jednokrotne kliknięcie lewym klawiszem;
• wybór fragmentu modelu - ustawić kursor myszy w lewym górnym rogu obszaru, na
którym znajduje się określony fragment modelu, a następnie wcisnąć lewy klawisz
myszy i trzymając go przeciągnąć kursor do dolnego prawego rogu zaznaczonego
fragmentu.
Dwa oddalone od siebie elementy schematu można zaznaczyć też w ten sposób, ale po
wskazaniu każdego z elementów należy kliknąć jednocześnie lewym i prawym klawiszem
myszy;
• wybór wszystkich elementów modelu - należy wykonać polecenie
Edit|Select All w oknie Simulinka.
• Zaznaczony blok lub zestaw bloków może być:
• usunięty przez naciśnięcie klawisza Del (lub przez wybór z menu okna Simulink
Edit|Clear);
• usunięty z jednoczesnym przekopiowaniem do pamięci podręcznej przez wybór Edit |
Cut z menu okna Simulink;
• przekopiowany do pamięci podręcznej poprzez wybór Edit|Copy z menu okna
Simulink. Zawartość pamięci podręcznej może być przekopiowana do okna
graficznego Matlaba w miejsce wskazane kursorem myszy, poprzez wybór Edit |
Paste.
• przesunięty w obrębie okna jednego modelu lub przekopiowany do innego okna; jest
tu wykorzystana tzw. technika ciągnij i upuść, która jak wiadomo polega na tym, że
należy wskazać zaznaczony element kursorem myszy, wcisnąć jej lewy klawisz i
trzymając go przesunąć zaznaczony element w nowe miejsce (w obrębie tego samego
okna). Jeśli przemieszczenie przeprowadza się w obrębie dwóch różnych okien, to
zachodzi kopiowanie zaznaczonego (wybranego) elementu;
• przekopiowany w obrębie jednego okna modelu również przez wykorzystanie techniki
ciągnij i upuść, ale przy dodatkowo wciśniętym klawiszu Ctrl podczas trwania tej
operacji.
W zaznaczonym bloku można zmieniać jego rozmiary przez wskazanie kursorem myszy
wybranego wierzchołka, wciśnięcie lewego klawisza myszy, a następnie zmianę wymiarów.
Zmiana kroju, wielkości i koloru czcionek napisów, koloru tła, symbolu graficznego bloku
(np. z cieniowaniem lub bez) odbywa się po wyborze odpowiedniej opcji z menu Style w
oknie Simulink.
Tworzenie połączeń między blokami
Połączenia między blokami wykonuje się za pomocą myszy. Po wskazaniu początku
połączenia należy wcisnąć i przytrzymać lewy klawisz myszy, a następnie rozpocząć
ciągnięcie linii (przez ruch myszą) do punktu końcowego. W przypadku gdy połączenie jest
już wykonane, ale trzeba wykonać na nim dodatkowe odgałęzienie, należy wcisnąć prawy
klawisz myszy i rozpocząć rysowanie linii. Jednoczesne naciśnięcie prawego i lewego
przycisku myszy prowadzi do utworzenia nowego wierzchołka we wskazanym punkcie.
Przemieszczanie bloków powoduje zachowanie ciągłości połączeń (z wyjątkiem przypadku,
kiedy przesuwanie zachodzi przy jednoczesnym wciśnięciu lewego i prawego klawisza
myszy). Połączenia między blokami można usuwać. W tym celu należy zaznaczyć dane
połączenie przez kliknięcie na nim lewym klawiszem myszy, a następnie usunąć je przez
naciśnięcie klawisza Del lub wybór opcji Clear z menu Edit w oknie Simulink (Edit|CIear).
Cel Ćwiczenia
Wyznaczyć:
1. Odpowiedź skokową.
2. Charakterystykę amplitudowo częstotliwościową.
3. Charakterystykę fazowo częstotliwościową.
4. Charakterystykę amplitudowo fazową (wykres Nyquista).
5. Składowe rzeczywistą i urojoną transmitancji.
6. Logarytmiczną charakterystykę amplitudowo częstotliwościową.
7. Logarytmiczną charakterystykę fazowo częstotliwościową.
8. Logarytmiczną charakterystykę amplitudowo fazową (wykres Blacka)
dla
następujących członów automatyki:
- inercyjnego I-go rzędu,
Wyznaczenie odpowiedzi y(t) na wymuszenie skokowe.
Zadanie rozwiązać dla następujących danych: T=0,01[s], k=2,
)
(
1
)
(
t
X
t
x
st
⋅
=
,
1
=
st
X
Transmitancja operatorowa członu inercyjnego I-go rzędu
1
)
(
)
(
)
(
+
⋅
=
=
s
T
k
s
X
s
Y
s
G
Pierwszy sposób: rozwiązanie numeryczne:
(
)
)
(
)
(
s
X
k
s
Y
s
s
T
⋅
=
⋅
+
⋅
)
(t
x
k
y
dt
dy
T
⋅
=
+
⋅
)
(
1
t
x
T
k
y
T
dt
dy
⋅
+
⋅
−
=
Rozwiązując numerycznie powyższe równanie wyznaczamy odpowiedź członu inercyjnego I-
go rzędu na skok jednostkowy.
Schemat blokowy w Matlab-Simulink
Wykresy x(t) i y=f(t)
Drugi sposób: rozwiązanie analityczne:
)
(
1
)
(
)
(
)
(
s
X
s
T
k
s
X
s
G
s
Y
⋅
+
⋅
=
⋅
=
s
x
s
X
t
x
t
x
st
st
1
)
(
)
(
1
)
(
⋅
=
⇒
⋅
=
(
)
1
1
1
)
(
1
)
(
)
(
)
(
+
⋅
⋅
⋅
=
⋅
⋅
+
⋅
=
⋅
+
⋅
=
⋅
=
s
T
s
x
k
s
x
s
T
k
s
X
s
T
k
s
X
s
G
s
Y
st
st
Po przejściu od transformaty Laplace’a
do postaci czasowej y(t) otrzymujemy zależność
opisującą odpowiedź skokową członu inercyjnego I-go rzędu
)
(s
Y
( )
( )
[ ]
(
)
⎟
⎟
⎠
⎞
⎜
⎜
⎝
⎛
−
⋅
⋅
+
=
⎥
⎦
⎤
⎢
⎣
⎡
+
⋅
⋅
⋅
=
=
−
−
−
T
t
st
st
e
x
k
y
s
T
s
x
k
L
s
Y
L
t
y
1
1
0
1
1
Wstawić wykres y=f(t)
Charakterystyka amplitudowo częstotliwościowa A(
ω).
Transmitancja widmowa członu inercyjnego I-go rzędu
)
(
)
(
1
1
1
1
1
1
1
1
)
(
)
(
2
2
2
2
2
2
2
2
ω
ω
ω
ω
ω
ω
ω
ω
ω
ω
ω
ω
ω
ω
Q
j
P
T
T
k
j
T
k
T
T
k
j
T
k
j
T
j
T
j
T
k
j
T
k
s
G
j
G
j
s
⋅
+
=
+
⋅
⋅
⋅
−
⋅
+
+
⋅
=
−
⋅
−
⋅
⋅
⋅
+
+
−
⋅
−
−
=
−
⋅
−
⋅
+
⋅
=
+
⋅
=
=
=
gdzie:
1
)
(
2
2
+
⋅
=
ω
ω
T
k
P
składowa rzeczywista transmitancji widmowej
1
)
(
2
2
+
⋅
⋅
⋅
−
=
ω
ω
ω
T
T
k
Q
składowa urojona transmitancji widmowej
( )
1
1
1
)
(
)
(
)
(
)
(
)
(
)
(
2
2
2
2
2
2
2
2
2
2
+
⋅
=
⎟
⎠
⎞
⎜
⎝
⎛
+
⋅
⋅
⋅
−
+
⎟
⎠
⎞
⎜
⎝
⎛
+
⋅
=
=
+
=
⋅
+
=
=
=
ω
ω
ω
ω
ω
ω
ω
ω
ω
ω
ω
T
k
T
T
k
T
k
Q
P
Q
j
P
j
G
f
A
moduł transmitancji
widmowej
0,0
0,5
1,0
1,5
2,0
0
200
400
600
800
1000
ω
A [dB]
2.1
0
A
ω
( )
5000
0
ω
0
1000
2000
3000
4000
5000
0
0.3
0.6
0.9
1.2
1.5
1.8
2.1
Charakterystyka fazowo częstotliwościowa
( )
ω
ϕ
.
Argument transmitancji widmowej
( )
( )
( )
[
]
(
)
ω
ω
ω
ω
ω
ω
ω
ϕ
⋅
−
=
⋅
−
=
=
=
=
T
arc
T
arc
P
Q
arc
j
G
f
tg
)
tg(
)
(
)
(
tg
arg
-1,6
-1,2
-0,8
-0,4
0,0
0
200
400
600
800
1000
ω
φ[rad]
0
1.6
φ ω
( )
5000
0
ω
0
1000
2000
3000
4000
5000
1.6
1.2
0.8
0.4
0
Charakterystyka amplitudowo fazowa (wykres Nyquista).
Składowa urojona transmitancji widmowej
1
)
(
2
2
+
⋅
⋅
⋅
−
=
ω
ω
ω
T
T
k
Q
Składowa rzeczywista transmitancji widmowej
1
)
(
2
2
+
⋅
=
ω
ω
T
k
P
-1,0
-0,8
-0,6
-0,4
-0,2
0,0
0,0
0,5
1,0
1,5
2,0
P(
ω)
Q(
ω)
Składowe rzeczywista i urojona transmitancji.
Składowa rzeczywista transmitancji widmowej
1
)
(
2
2
+
⋅
=
ω
ω
T
k
P
Składowa urojona transmitancji widmowej
1
)
(
2
2
+
⋅
⋅
⋅
−
=
ω
ω
ω
T
T
k
Q
-1,0
-0,8
-0,6
-0,4
-0,2
0,0
0
1000
2000
3000
4000
5000
ω
Q(
ω)
0,0
0,5
1,0
1,5
2,0
0
1000
2000
3000
4000
5000
ω
p(
ω)
Logarytmiczna charakterystyka amplitudowo częstotliwościowa.
( )
( )
( )
1
lg
20
1
1
lg
20
)
(
)
(
lg
20
)
(
)
(
lg
20
)
(
lg
20
)
(
lg
20
lg
2
2
2
2
2
2
2
2
2
2
1
+
⋅
=
⎟
⎠
⎞
⎜
⎝
⎛
+
⋅
⋅
⋅
−
+
⎟
⎠
⎞
⎜
⎝
⎛
+
⋅
=
+
=
=
⋅
+
=
=
=
=
=
ω
ω
ω
ω
ω
ω
ω
ω
ω
ω
ω
ω
ω
T
k
T
T
k
T
k
Q
P
Q
j
P
j
G
A
M
f
Lm
Logarytmiczna charakterystyka fazowo częstotliwościowa.
( )
( )
( )
[
]
(
)
(
ω
ω
ω
)
ω
ω
ω
ω
ϕ
⋅
−
=
⋅
−
=
=
=
=
T
arc
T
arc
P
Q
arc
j
G
f
tg
tg
)
(
)
(
tg
arg
lg
2
Logarytmiczna charakterystyka amplitudowo fazowa (wykres Blacka).
Logarytmiczna charakterystyka modułu
( )
( )
( )
1
lg
20
1
1
lg
20
)
(
)
(
lg
20
)
(
)
(
lg
20
)
(
lg
20
)
lg(
20
lg
2
2
2
2
2
2
2
2
2
2
1
+
⋅
=
⎟
⎠
⎞
⎜
⎝
⎛
+
⋅
⋅
⋅
−
+
⎟
⎠
⎞
⎜
⎝
⎛
+
⋅
=
+
=
=
⋅
+
=
=
=
=
=
ω
ω
ω
ω
ω
ω
ω
ω
ω
ω
ω
ω
ω
T
k
T
T
k
T
k
Q
P
Q
j
P
j
G
M
f
Lm
Logarytmiczna charakterystyka fazy
( )
( )
( )
(
)
(
ω
ω
ω
)
ω
ω
ω
ω
ϕ
⋅
−
=
⋅
−
=
=
=
=
T
arc
T
arc
P
Q
arc
j
G
f
tg
tg
)
(
(
tg
arg
lg
2