5 VisSim Instrukcja przygotowawcza v 01a (2)

background image


Zakład Sterowania Ruchem Drogowym

Wydział Transportu PW

Do użytku wewnętrznego










Ćwiczenie 5


Realizacja algorytmów sterowania acyklicznego

Instrukcja przygotowawcza

(wersja 01a)














Opracował:

Mgr inż. Paweł Chrobot





Warszawa, marzec 2010 r.

background image

2

Przygotowanie do ćwiczenia

W ramach przygotowania do ćwiczenia należy:

1) przypomnieć wiadomości z wykładu w zakresie zasad tworzenia algorytmów

sterowania akomodacyjnego;

2) zapoznać się z niniejszą instrukcją przygotowawczą;
3) przeanalizować przedstawiony w instrukcji algorytm sterowania; przy analizie

szczególnie przydatne będą uwagi zawarte w części „Analiza algorytmu – uwagi”.

4) opracować podobny algorytm dla prostszego sterowania dwufazowego.

Na zajęciach modelowane będzie (alternatywnie) opisane w instrukcji sterowanie

czterofazowe bądź sterowanie dwufazowe (oparte na samodzielnie przygotowanym wcześniej
„na papierze” algorytmie).


Analiza algorytmu – uwagi
Przy analizowaniu algorytmu zwrócić uwagę na następujące wskazówki:

1) algorytm wykonywany jest na początku każdej sekundy symulacji;
2) przed każdorazowym wykonaniem algorytmu obliczane są aktualne wartości wyrażeń

zdefiniowanych w

okienku EXPRESSIONS; obliczona wartość podstawiona zostaje

pod nazwę wyrażenia;

3) zarówno w wyrażeniach jak i w algorytmie używane są stałe zdefiniowane w okienku

PARAMATERS;

4) w przypadku bloków warunkowych wyjście do dołu jest wyjściem FAŁSZ, zaś

wyjście w prawą stronę odpowiada wartości TRUE;

5) zdefiniowane w okienku PARAMETERS stałe TF1, TF2, TF3, TF4 określają w

algorytmie minimalne czasy realizacji odpowiednich faz;

6) zdefiniowanie w bloku PARAMETERS stałej DetA i nadanie jej wartości 12 służy do

nadania nazwy (DetA) detektorowi numerze systemowym (w VisSim’ie) 12.
Analogicznie jest dla pozostałych detektorów;

7) W definicjach wyrażeń oraz w algorytmie używane są następujące procedury i

funkcje:

a) Call (nr) – zwraca wartość 1, jeśli detektor nr był wzbudzony od chwili ostatniego

sprawdzenia. W następnym kroku czasu wartość ta jest automatycznie zerowana.

b) T_red (nr) – zwraca czas wyświetlania sygnału czerwonego (jaki upłynął) dla

grupy sygnałowej nr lub wartość 0, jeśli dla tej grupy sygnał czerwony nie jest
aktualnie wyświetlany.

c) StgA (nr) – zwraca wartość 1, jeśli aktualnie realizowana jest faza o numerze nr.

W przeciwnym wypadku zwraca wartość 1.

d) StgT (nr) – zwraca czas jaki upłynął od początku realizacji fazy nr. Jeśli faza ta

nie jest aktualnie realizowana, to zwracana jest wartość 0.

e) Is (nr1,nr2) – wywołuje przejście międzyfazowe z fazy nr1 do fazy nr2.

Wstęp

Jeszcze do dzisiaj dosyć powszechnie na skrzyżowaniach sterowanych drogową

sygnalizacją świetlną polskich ulic pracują sterowniki mogące realizować jedynie stosunkowo
proste sterowanie.

Produkowane obecnie sterowniki są zwykle urządzeniami mikroprocesorowymi,

pozwalającymi na realizację praktycznie dowolnych, zaprojektowanych przez inżyniera

background image

3

ruchu, algorytmów sterowania. Okresowa wymiana na skrzyżowaniach wyeksploatowanych
sterowników na nowe urządzenia daje możliwość powszechnego stosowania nowych
rozwiązań w zakresie sterowania ruchem drogowym.

Powyższe uwarunkowania spowodowały konieczność wzbogacenia wiadomości

teoretycznych przekazywanych studentom specjalności „Sterowanie ruchem drogowym” na
wykładach o zajęcia praktyczne poświęcone projektowaniu i weryfikacji algorytmów
sterowania adaptacyjnego.

Na zajęciach wykorzystywany jest pakiet programów firmy PTV, w którego skład

wchodzi:

• program Vissim odpowiadający za właściwe przemieszczanie pojazdów

(zgodnie z zaawansowanym modelem ruchu), wizualizację animacji oraz
zbieranie uzyskanych parametrów ruchu;

• moduł VAP – moduł umożliwiający realizację programu sterowania

adaptacyjnego w modelu Vissim;

• program VisVap – program umożliwiający zapis algorytmu sterowania w

postaci schematu blokowego.

Cel ćwiczenia

Celem ćwiczenia jest pogłębienie wiedzy z zakresu zasad tworzenia algorytmów

sterowania adaptacyjnego oraz (na bazie symulacji komputerowej) ich testowania i oceny
efektywności.

Analizowany przykład

W przykładzie rozważane jest skrzyżowanie (przejście dla pieszych) spełniające

następujące założenia:

a) przejście dla pieszych zlokalizowane jest na drodze o dwóch jezdniach rozdzielonych

pasem zieleni (dwa lub trzy pasy 3,5 metrowej szerokości, szerokość pasa
rozdzielającego – ok. 3m);

b) rozmieszczenie sygnalizatorów zgodnie z rys. 1. Na słupkach sygnalizatorów

zamontowane są przyciski wzbudzane przez pieszych;

c) zakłada się, że skrzyżowanie pracuje jako „izolowane”, tzn. odległości od sąsiednich

skrzyżowań jest duża, co eliminuje potrzebę koordynacji;

d) natężenie ruchu kołowego jest dosyć znaczne (np. ok. 1000 poj/h/pas), zaś ruch

pieszy odbywa się sporadycznie.

Na rys.1 przedstawiono szkic przykładowego skrzyżowania (przejścia dla pieszych) z

naniesionymi sygnalizatorami i przyciskami dla pieszych (P1...P4).

Rys. 1. Szkic przejścia dla pieszych z przykładu

background image

4


Dla opisanego wyżej przejścia dla pieszych przyjęto sterowanie zgodnie z pokazanym na

rys.2 grafem

przejść fazowych.

Rys. 2. Graf przejść dla sterowania 4-fazowego


W tab.1 przedstawiono zestawienie warunków przejść fazowych dla grafu z rys.2. Przyjęto

tu, że zgłoszenia pieszych są rejestrowane przez detektor jedynie w trakcie realizacji fazy 1.

Tab. 1. Zestawienie warunków przejść fazowych

Przejście

fazowe

Warunki

czasowe

Upłynął:

Warunki detektorowe

Zarejestrowane zostało zgłoszenie pieszego:

1 PF1,2 minimalny

czas realizacji
fazy 1

z detektora P1 i/lub P2 (przyciski zewnętrzny i/lub
wewnętrzny przy jezdni północnej (A))

2 PF1,3 minimalny

czas realizacji
fazy 1

z detektora P3 i/lub P4 (przyciski wewnętrzny
i/lub zewnętrzny przy jezdni południowej (B))

3 PF1,4 minimalny

czas realizacji
fazy 1

z detektora P1 i/lub P2 (przyciski zewnętrzny i/lub
wewnętrzny przy jezdni północnej (A))
oraz
z detektora P3 i/lub P4 (przyciski wewnętrzny
i/lub zewnętrzny przy jezdni południowej (B))

4 PF2,1 minimalny

czas realizacji
fazy 2

wyłącznie z detektora P2 (przycisk wewnętrzny
przy jezdni północnej (A))

5 PF2,3 minimalny

czas realizacji
fazy 2

z detektora P1 i/lub P2 (przyciski zewnętrzny i/lub
wewnętrzny przy jezdni północnej (A))

6 PF3,1 minimalny

czas realizacji
fazy 3

wyłącznie z detektora P3 (przycisk wewnętrzny
przy jezdni południowej (B))

background image

5

7 PF3,2 minimalny

czas realizacji
fazy 3

z detektora P4 i/lub P3 (przyciski zewnętrzny i/lub
wewnętrzny przy jezdni południowej (B))

8 PF4,1 minimalny

czas realizacji
fazy 4


Warto zwrócić uwagę na sposób działania sterowania. Przy braku zgłoszeń pieszych

realizowana jest przez cały czas faza 1 (ruch kołowy na obu jezdniach). Zapewniony jest
również minimalny (określony przez projektanta) czas realizacji tej fazy przy licznych
zgłoszeniach pieszych. Możliwe jest przechodzenie pieszych w tym samym czasie przez obie
jezdnie (faza 4), jeśli zostały zarejestrowanie zgłoszenia pieszych z przycisków np. po obu
stronach drogi. W przypadku, gdy zgłoszenie pieszego nastąpiło z jednej strony drogi (np.
zewnętrzny przycisk przy jezdni północnej), realizowana jest sekwencja faz 1-2-3-1
pozwalająca pieszemu na płynne przejście obu jezdni i redukująca czas wyświetlanych
sygnałów czerwonych dla pojazdów. Uwzględniona jest również możliwość przejścia
pieszego, który z różnych powodów (np. wolniej poruszająca się osoba niepełnosprawna) nie
zdążyła w przeznaczonym czasie przejść przez obie jezdnie i pozostała na pasie
rozdzielającym.

Modelowanie ruchu w programie VisSim

Uruchomienie programu powoduje ukazania się okna programu pokazanego na rys.3.

Rys.3. Okno programu VisSim (w trakcie symulacji 2D)

Centralną część stanowi obszar roboczy, w którym umieszczane są elementy modelu.
Podstawowymi elementami modelu są odcinki oraz łączniki (łączniki nie występują w

rozpatrywanym na ćwiczeniu przykładzie i nie będą omawiane).

background image

6

Odcinki reprezentują fragmenty dróg (ulic), po których przemieszczać się mogą

użytkownicy drogi.

Wstawianie odcinków polega na wybraniu odpowiedniej ikony na pasku narzędzi z lewej

strony okna i przeciągnięciu myszką w obszarze roboczym. Po wstawieniu odcinka należy
jeszcze wypełnić okno dialogowe (właściwości odcinka) pokazane na rys.4.

Rys.4. Okno dialogowe właściwości odcinka


Edycja właściwości odcinka możliwa jest zawsze – należy wybrać odpowiednią ikonę na

pasku narzędzi, wskazać odcinek poprzez kliknięcie i dwukrotnie na nim kliknąć, co
udostępni pokazane na rys.4. okno dialogowe.

Usuwanie odcinków odbywa się poprzez wybranie odpowiedniej ikony na pasku narzędzi,

wskazanie odcinka poprzez kliknięcie, usunięcie klawiszem DEL i potwierdzenie komunikatu
ostrzegającego o usuwaniu (UWAGA: usunięcie odcinka lub łącznika powoduje usunięcie
wszystkich związanych z nim elementów modelu).


Wstawianie innego elementu modelu (np. generatora ruchu, sygnalizatora, detektora itp.)

odbywa się poprzez wybranie odpowiedniej ikony na pasku narzędzi z lewej strony okna,
wskazanie odcinka lub łącznika, na którym ma być wstawiony element oraz wstawienie
elementu w odpowiednim miejscu odcinka poprzez klikniecie. Następnie należy ustawić w
oknie dialogowym właściwości wstawionego elementu sieci (wygląd okna zależny jest
oczywiście od typu elementu – tzn. np. detektor ma inne właściwości niż sygnalizator).

Edycja właściwości elementu odbywa się poprzez wybranie odpowiedniej ikony na pasku

narzędzi, wskazanie (kliknięcie) odcinka (łącznika), na którym znajduje się element
i kliknięcie na znaczniku elementu – udostępnione zostaje wówczas okno dialogowe
umożliwiające edycję właściwości elementu.

UWAGA: należy zwrócić uwagę, że jedną z właściwości elementów modelu

(sygnalizatorów, detektory itp.) jest ich numer systemowy. Odwołanie się (np. w algorytmie
sterowania) do konkretnego elementu (detektora, sygnalizatora) może zatem odbywać się
poprzez odwołanie do numeru systemowego elementu.

Usuwanie elementu odbywa się poprzez wybranie odpowiedniej ikony na pasku narzędzi,

wskazanie (kliknięcie) odcinka (łącznika) na którym znajduje się element i przeciągnięcie

background image

7

elementu poza obszar odcinka; należy również potwierdzić chęć usunięcia po ukazaniu się
komunikatu ostrzegającego o usuwaniu elementu.

W przykładzie wykorzystywane są następujące typy elementów:

a) generatory ruchu – powodują, że na odcinkach generowane są pojazdy. Natężenie

ruchu oraz struktura rodzajowa definiowane jest w oknie dialogowym elementu.

b) detektory ruchu – służą do wykrywania pojazdów (pieszych) w obszarze detekcji

określonym poprzez rozmiar modelu detektora. Właściwości detektora definiowane
są w jego oknie dialogowym. W trakcie symulacji można rozpoznać stan detektora
(np. jego zajętość, prędkość przejeżdżającego pojazdu itp.) wywołując odpowiednią
funkcję modułu VAP (wywołanie następuje z poziomu algorytmu sterowania
zapisanego w postaci schematu blokowego w programie VisVAP).

c) sygnalizatory – przekazują sygnały określonym uczestnikom ruchu (pojazdy,

autobusy, piesi). Każdy sygnalizator przyporządkowany jest do odpowiedniej grupy
sygnałowej określonego sterownika. Właściwości sygnalizatora definiowane są w
jego oknie dialogowym. UWAGA: modele sygnalizatorów umieszcza się na każdym
pasie ruchu w miejscu odpowiedniej linii zatrzymania.

Modelowanie sterowania zależnego do ruchu - podstawy

Realizację sterowania zależnego od ruchu umożliwia opcjonalnie dołączony do programu

VisSim moduł VAP. Udostępnia on użytkownikowi bogaty zestaw funkcji pozwalających np.
sprawdzić aktualny stan detektora, przełączyć fazę lub podać czas jej realizacji itp.

Modelowanie odbywa się w trzech etapach:

a) algorytm sterowania należy zapisać w postaci schematu blokowego wykorzystując

współpracującą z programem VisSim aplikację VisVAP (edytor schematu
blokowego algorytmu sterowania). Po skompilowaniu algorytmu poleceniem
Compile/Generale VAP File utworzony i zapisany zostanie plik nazwa.vap, do
którego ścieżkę dostępu należy podać w programie VisSim.

b) w pliku z rozszerzeniem „.pua” podać należy pozostałe, niezbędne do prawidłowego

funkcjonowania algorytmu informacje (np. przyporządkowanie grup sygnałowych
do fazy, fazę od której zaczynamy realizację itp.).

c) w programie VisSim poleceniem Sterowanie/Edycja sterowników/zakładka Sterownik

VAP należy przywołać okno dialogowe, w którym podamy ścieżkę dostępu do w/w
plików oraz dostarczonego przez producenta pliku vap216.dll. Ponadto należy na
zakładce Grupy sygnalizacyjne zdefiniować używane grupy sygnałowe (np. określić
długość sygnału żółtego w danej grupie itp.).


Ad a) Zapisywanie algorytmu sterowania w aplikacji VisVAP
Uruchomienie aplikacji VisVap powoduje zgłoszenie się okna o wyglądzie jak na rys.5.

background image

8

Rys.5. Okno aplikacji VisVap


Część centralna (robocza) podzielona jest na cztery podobszary:

z

CHART (schemat blokowy) – w tej części umieszczany jest schemat blokowy

algorytmu – opis jego tworzenia oraz interpretacji podany jest dalej.

z

ARRAYS – część ta umożliwia definiowanie dwuwymiarowych tablic.

z

CONSTANS (stałe) – w tej części zdefiniować można wartości stałych używanych w

algorytmie (w części CHART) lub w wyrażeniach (w części EXPRESSION). Jeśli w
tej części np. stałej TF1 nadamy wartość 15, to zawsze w wyrażeniu lub algorytmie
zapis TF1 zostanie zinterpretowany jako wartość 15.

z

EXPRESSIONS (wyrażenia) – zdefiniować można tu wyrażenia arytmetyczne i

logiczne. Do ich tworzenia wykorzystywać można podstawowe operatory (+, -, *, /,
OR, AND). Wyrażeniu można nadać nazwę. Aktualna wartość zdefiniowanego
wyrażenia jest obliczana w każdej sekundzie symulacji PRZED rozpoczęciem
wykonywania algorytmu i podstawiana pod jego nazwę. Tak więc odwołanie (w
algorytmie) do nazwy zdefiniowanego tu wyrażenia reprezentuje w algorytmie jego
aktualną wartość.

z

SUBROUTINES (procedury) – w części tej można zdefiniować ścieżki dostępu do

plików, zawierających wyodrębnione z algorytmu fragmenty, wykonywane w
przypadku ich wywołania z algorytmu (wywołanie zdefiniowanych procedur).
Wywołanie takie następuje przez podanie zdefiniowanej tu nazwy procedury. Uwaga:
wszystkie używane w algorytmie i procedurach zmienne są zmiennymi globalnymi
(tzn. zmiana wartości zmiennej w algorytmie (procedurze) pociąga automatycznie
zmianę wartości tej zmiennej w procedurze (algorytmie)).

background image

9

Zasady tworzenia schematu blokowego algorytmu w części CHART
Obszar ten podzielony jest na komórki (podobnie do arkusza kalkulacyjnego) – dlatego

wszystkie elementy algorytmu (bloki, łączniki) umieszczane są wewnątrz tych komórek. W
jednej komórce umieszczony może być co najwyżej jeden element (blok, fragment łącznika).
Możliwa jest dostosowanie do potrzeb wielkości czcionki zapisów wewnątrz bloków przy
wykorzystaniu odpowiednich ikon z górnego paska narzędzi (czcionka będzie zawsze taka
sama dla całego algorytmu).

Algorytm tworzony jest przy wykorzystaniu bloków (skrzynek):

* ograniczających - wyznaczających początek i koniec algorytmu; wewnątrz tych

skrzynek umieszcza się napisy np. BEGIN i END;

* wykonawczych – wewnątrz nich umieszcza się instrukcję bądź kilka instrukcji;

najczęściej będą to instrukcje podstawienia (nadania wartości zmiennej) lub
wywołania procedury. Instrukcje oddziela się znakiem” ; ”. Do tworzenia wyrażeń
używać można operatorów podanych wcześniej oraz stosować wywołania funkcji i
procedur charakterystycznych dla modułu VAP;

* warunkowych – wewnątrz tych skrzynek umieszcza się wyrażenie logiczne, którego

wartością będzie PRAWDA lub FAŁSZ. UWAGA: przyjęta jest tu zasada, że gałąź
wychodząca z tego bloku w prawo zawsze odpowiada wyjściu (wartości logicznej)
PRAWDA, zaś gałąź skierowana do dołu – wyjściu FAŁSZ.

* wywołania procedury – wewnątrz umieszcza się nazwę wywoływanej procedury;
* separator strony - skrzynka wyznaczająca podział schematu blokowego na strony w

przypadku jego drukowania.


Wstawianie skrzynek odbywa się poprzez wybranie odpowiedniego typu skrzynki na

pasku narzędzi, wskazaniu (kliknięciem) położenia skrzynki i po wybraniu z menu
podręcznego (prawy przycisk myszy) polecenia Wstaw. Wewnątrz umieszcza się odpowiedni
zapis – można tu wykorzystywać udostępnione przez moduł VAP funkcje i procedury.

Skrzynki łączy się gałęziami – należy wybrać odpowiednią ikonę na pasku narzędzi,

następnie podświetlić (kliknięciem) odpowiednią komórkę początkową i wskazać kliknięciem
prawym klawiszem komórkę końcową (uwaga: zaleca się rysować gałęzie kolejno metodą
„komórka po komórce”).


UWAGA: przyjęta jest w VisSim’ie zasada, że algorytm (od początkowej do końcowej

skrzynki ograniczającej) wykonywany jest na początku KAŻDEJ SEKUNDY SYMULACJI.


Po stworzeniu (i zapisaniu do pliku) algorytmu należy go skompilować poleceniem

Compile/Generale VAP File z menu głównego. Utworzony i zapisany zostanie wówczas plik
tekstowy o takiej samej nazwie z rozszerzenie *.vap zawierający opis zdefiniowanego
algorytmem sterowania w formie zrozumiałej dla programu VisSim.



Ad b) Informacje zapisywane w pliku *.pua
Pliki *.pua są plikami tekstowymi (a więc można je tworzyć i edytować dowolnym

edytorem np. Notatnik). Mają one budowę segmentową, gdzie poszczególne segmenty (bloki)
rozdzielane są nagłówkami. Ilość typów segmentów jest dosyć znaczna – poniżej opisany
będzie plik .pua odpowiedni dla realizowanego na ćwiczeniu przykładu.

Postać tego pliku to:
$SIGNAL_GROUPS---------
$-------
K1 1

W bloku $SIGNAL_GROUPS nadawane

są nazwy grupom sygnalizacyjnym. Np.
grupie sygnalizacyjnej o numerze

background image

10

K2 2
P3 3
P4 4
$STAGES---------
$-------
stage_1 K1,K2
stage_2 K2,P3
stage_3 K1,P4
stage_4 P3,P4
$STARTING_STAGE
$-----
stage_1
$INTERSTAGE1-----------
length :4
from stage :1
to stage

:2

$
K1 -127

0

P3 4 127
$INTERSTAGE2-----------
length :4
from stage :1
to stage

:3

$
K2 -127

0

P4 4 127
$INTERSTAGE3-----------
length :4
from stage :1
to stage

:4

$
K1 -127

0

K2 -127

0

P3 4 127
P4 4 127
$INTERSTAGE4-----------
length :8
from stage :2
to stage

:1

$
K1 6 127
P3 -127

0

$INTERSTAGE5-----------
length :8
from stage :2
to stage

:3

$
K1 6 127
K2 -127

0

P3 -127

0

systemowym (w VisSim’ie) 1 nadana została
nazwa K1.

W bloku $STAGES przyporządkowywane

są grupy sygnałowe do faz. Np. do fazy 1
należą grupy K1 i K2.


W bloku $STARTING_STAGE

określana jest faza początkowa, która będzie
realizowana po rozpoczęciu symulacji.

Bloków $INTERSTAGExx jest tyle, ile

możliwych przejść fazowych w algorytmie
(w przykładzie jest 8). Określają one długość
(length) przejścia fazowego w [s] z fazy
(from stage) i do fazy (to stage).

Zasady zapisu realizacji przejścia ilustrują

rys.6 i rys.7.

background image

11

P4 4 127
$INTERSTAGE6-----------
length :6
from stage :3
to stage

:1

$
K2 6 127
P4 -127

0

$INTERSTAGE7-----------
length :6
from stage :3
to stage

:2

$
K1 -127

0

K2 4 127
P3 4 127
P4 -127

0

$INTERSTAGE8-----------
length :6
from stage :4
to stage

:1

$
K1 6 127
K2 6 127
P3 -127

0

P4 -127

0

$END


background image

12

Rys.6. Następstwo sygnałów – sygnały zielony i czerwony rozdzielane są sygnałami zgodnie z

definicją danej grupy sygnałowej w programie Vissim

Rys.7. Definiowanie przejść międzyfazowych w plikach *.pua


Wyszukiwarka

Podobne podstrony:
1 INSTRUKCJA PRZYGOTOWANIA PRE Nieznany (2)
4 Aster Instrukcja przygotowcza v01
Zwykłe, higieniczne i chirurgiczne mycie rąk Przygotowanie do instrumentowania Przygotowanie stolika
Instrukcja VisSim cz II Modulacja
Instrukcja VisSim cz I
Instrukcja BHP dla ¶lusarzy, BHP i PPOŻ przygotowanie do szkoleń, Instrukcje BHP
roboty transportowe, BHP i PPOŻ przygotowanie do szkoleń, Instrukcje BHP
Instrukcja VisSim cz III BER
Instrukcja VisSim cz IV Kanaly
obsługa piły tarczowej do cięcia mięsa i kości, BHP i PPOŻ przygotowanie do szkoleń, Instrukcje BHP
Instrukcja BHPprzy kapowaniu pakietów, BHP i PPOŻ przygotowanie do szkoleń, Instrukcje BHP
Instrukcja odkurzacz warsztatowy, BHP i PPOŻ przygotowanie do szkoleń, Instrukcje BHP
PROGRAM INSTRUKTAŻU STANOWISKOWEGO biuro, BHP i PPOŻ przygotowanie do szkoleń, Szkolenia- BHP
INSTRUKCJA BHP PRZY OBSŁUDZE SEKRETARIATU, BHP i PPOŻ przygotowanie do szkoleń, Instrukcje BHP
PRZYGOTOWANIE PRBEK DO ANALIZY2, WIMiC, instrumentalne

więcej podobnych podstron