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: 

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

algorytmu – opis jego tworzenia oraz interpretacji podany jest dalej. 

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

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. 

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ść. 

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 

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

:3 


K2 -127 

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

:4 


K1 -127 

K2 -127 

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

:1 


K1 6 127 
P3 -127 

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

:3 


K1 6 127 
K2 -127 

P3 -127 

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 

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

:2 


K1 -127 

K2 4 127 
P3 4 127 
P4 -127 

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

:1 


K1 6 127 
K2 6 127 
P3 -127 

P4 -127 

$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