1
PRz – RSS – W4
STEROWANIE SORTOWANIEM
Wizualizacja. Drzewo projektu. Logika układu sterowania. Układ główny – sortowanie.
Ustawianie zastawek. Zliczanie elementów. Elementy obrazu. Przyciski. Kolory i
widoczność. Ruch dyskretny – zastawki. Ruch ciągły. Liczniki – wyświetlacze
alfanumeryczne. Sortowanie w ST.
Celem wykładu jest analiza funkcjonowania programu z zależnościami czasowymi, którego
kroki tworzą standardową sekwencję.
WIZUALIZACJA. DRZEWO PROJEKTU
1.
Układ sortowania elementów – WIZUALIZACJA
•
Obiekt laboratoryjny – sortownica białych i czarnych kulek (Bytronic Unit, GB)
Kulki znajdują się w pochyłym kanale u góry wspierając się na zastawce S4. Powinny
być skierowane do zasobnika lewego lub prawego, zależnie od koloru. Liczby kulek w
zasobnikach mają podawać liczniki (wyświetlacze alfanumeryczne).
•
Elementy sortownicy
– Czujnik koloru: biała, czarna
– Czujnik kulek:
spadła, brak
– Zastawki: S1, S2 – zawsze otwarte podczas sortowania
S3 – kierowanie kulki do zasobnika lewego lub prawego
S4 – podtrzymywanie
kulek,
chwilowe
otwarcie
w
celu
przepuszczenia jednej kulki.
2
Uwaga. Czujniki zrealizowane są na fototranzystorach z przerzutnikami RS, które
„zatrzaskują” informację. Przygotowanie czujnika do następnego pomiaru wymaga
impulsu resetującego.
•
Przyciski operatorskie (DigiVis)
1. START 2. Zeruj liczniki
2.
Drzewo projektu
3.
Zadanie Sortowanie (10ms)
•
Sort1(FBD) – program główny realizujący sortowanie, inkrementację liczników
oraz generujący zmienną dla ruchu.
•
Ster(FBD) – ustawianie zastawek.
4.
Zadanie Emulacja (10ms) – symulator sortownicy
•
Randomizer(FBD) – pseudolosowy generator liczb boolowskich dla określenia koloru
kulki
•
Emul1(FBD)
– emulator sortownicy zawierający: 1) generator kulki w kanale
górnym, 2) czujniki koloru i kulek z przerzutnikami RS, 3) układ
określania koloru dla obrazu SYMULACJA
•
Displayer(FBD) – określenie koloru spadającej kulki.
5.
Obrazy
•
Sort(FGR)
– WIZUALIZACJA
•
VisEmula(FGR)
– SYMULACJA
•
Minimalny cykl odświeżania obrazu (200ms), aby opadanie kulek wyglądało z grubsza
jak ruch ciągły.
Zaznaczyć os1(VIS), menu kontekstowe, Header, wpisać 200ms.
3
LOGIKA UKŁADU STEROWANIA
1.
Algorytm sortowania
•
Stan początkowy
– Otwarcie „na stałe” zastawek S1, S2 (0 – otwarte).
– Zamknięcie zastawki S4 (1 – zamknięte).
•
Sortowanie
1.
Impuls START – dwukrotne szybkie kliknięcie (0–1–0)
Impuls służy do resetowania przerzutników RS w czujnikach koloru CS (Color
Sensor) i kulek BS (Ball Sensor) za pomocą sygnału RES (sprzętowego). Przy pracy
cyklicznej jest on zastępowany impulsem sygnalizującym zakończenie operacji z
jedną kulką (pkt. 6). Powoduje to rozpoczęcie pracy z następną kulką.
2.
Oczekiwanie (700ms) na ustalenie się sygnału w czujniku koloru CS
„obserwującym” kulkę spoczywającą na zastawce S4.
3.
Zależnie od koloru CS, wygenerowanie sygnału do zastawki S3 otwierającej lub
zamykającej kanał do odpowiedniego zasobnika.
4.
Oczekiwanie (500ms), aż zastawka S3 przyjmie ustalone położenie.
5.
Chwilowe otwarcie zastawki S4 (70ms), aby tylko jedna kulka mogła spaść.
Następna kulka wesprze się na zastawce S4. Zbyt długie otwarcie spowoduje, że
spadną dwie kulki (lub więcej), a zbyt krótkie, że zastawka zakleszczy kulkę.
6.
Oczekiwanie (1s) na ustalenie się sygnału w czujniku BS wykrywającym przejście
kulki oraz zsunięcie się jej do zasobnika. Jeśli czujnik sygnalizuje, że kulka spadła,
to generowany jest implus analogiczny jak START (pkt. 1).
2.
Schemat ideowy
4
UKŁAD GŁÓWNY – SORTOWANIE
1.
Czasomierz TON (timer on–delay)
•
Ustawianie sygnału z opóźnieniem
Blocks → Binary → Timer, switch–on delay (TON)
•
Parametryzacja
•
Impuls po zadanym czasie – przerzutnik RS z timerem TON objęte sprzężeniem
zwrotnym.
5
2.
Uniwibrator MONO_F
•
Ustawienie sygnału na określony czas
Blocks > Binary > Monoflop (MONO_F)
3.
Układ główny – Sort1(FBD)
6
•
Bloki i parametry
Nr Typ
Nazwa Parametry
2
Flipflop FF
ST1
RS-flipflop
3
Timer, switch on delay TON T0
Delay time: T#700ms; Scale end: T#2s; Trigger on + edge
6
Monoflop MONO_F
WAIT
Pulse duration: T#500ms; Scale end: T#2s; Trigger on + edge
7
Monoflop MONO_F
T1
Pulse duration: T#70ms; Scale end: T#2s; Trigger on – edge
8
Flipflop FF
ST2
RS-flipflop
9
Timer, switch on delay TON T2
Delay time: T#1s; Scale end: T#5s; Trigger on + edge
4.
Zmienne
•
Wejścia
START – uruchomienie (impuls 0–1–0)
CS
– kolor: biała, czarna
BS
– kulka: spadła, brak
•
Wyjścia
RES
– resetowanie przerzutników w czujnikach CS, BS (i innych – impuls
początku cyklu)
R_S3, S_S3 – zamknięcie/otwarcie zastawki S3 (Reset/Set)
v_S4
– zastawka S4 w ruchu
R_S4
– otwarcie zastawki S4
pom
– zezwolenie na inkrementację licznika (zmienna pomocnicza – „była
kulka”).
5.
Uzupełnienie Sort1 o generację krótkiego impulsu startowego
7
USTAWIANIE ZASTAWEK
1.
Schemat ster (FBD)
2.
Przerzutniki RS na wyjściach sterujących zastawkami (typowe rozwiązanie)
•
S1, S2 otwarte „na stałe”:
R=1, S=0 (S1=0, S2=0)
•
S3 przełączany na zmianę: R=R_S3, S=S_S3 (priorytet R)
•
S4 otwierany na chwilę: R=R_S4, S=1
(normalnie zamknięte).
ZLICZANIE ELEMENTÓW
1.
Układ zliczający (c.d. Sort1)
8
•
Liczniki CTUD
Blocks > Binary > Up/down counter (CTUD)
•
Zmienne
clr_count – zerowanie licznika (clear counter),
lbi, lcz
– liczby białych i czarnych kulek – typ REAL (do wyświetlaczy
alfanumerycznych).
2.
Licznik CTUD
3.
Sygnał narastający (do wizualizacji ruchu)
•
Uniwibrator MONO_F – VIS_MONO
Pulse duration: T#1s500ms – czas narastania sygnału
•
Konwertery typów DI, RE – zamiana TIME na REAL
–
Blocks > Converter > Data type conversion > Data type to DINT (TO_DI)
lub Data type to REAL (TO_RE).
– Umieścić blok, wykonać połączenie.
–
Zaznaczyć blok, Edit > Change data type (lub menu kontekstowe), przyciskiem [<<]
lub [>>] ustawić typ wejścia DI na TIME (zatwierdzić OK); typ wejścia RE ustawić
na DINT (OK).
9
•
Zmienne
req – zmienna boolowska sygnalizująca, że trwa narastanie (podstawowe wyjście
MONO_F),
vpos – zmienna typu REAL do animacji ruchu ciągłego.
ELEMENTY OBRAZU
1.
Tło obrazu VisEmula
Menu/Change
→
Background color – np. Cyan 15
2.
Makieta – dwa duże identyczne prostokąty
•
Biały prostokąt
lub Draw
→
Rectangle
Menu/Change
→
Line attributes
→
Rounded corners
→
Small – zaokrąglenia na
rogach
•
Czarny prostokąt – ma sprawiać wrażenie trójwymiarowości
Zaznaczyć biały prostokąt, menu
→
Duplicate
Menu/Change
→
Area Attributes
→
Foreground
→
Color selection
→
Black
•
Czarny prostokąt ma być pod spodem
Zaznaczyć czarny prostokąt
Menu/Edit
→
Overlap
→
Background
•
Prostokąty jako jeden element – grupowanie
Zaznaczyć obydwa prostokąty (z Shift–em lub obwieźć myszą)
Menu/Edit
→
Group
3.
Trasa zygzakowata
Jest to zgrupowany zestaw wielokątów i wycinków koła.
Draw
→
Polygon, Draw
→
Circle segment
Kolory: Area i Line (brzeg) – MediumBlue
10
Powielanie wycinka koła: menu/Edit
→
Duplicate
Lustrzane odbicie zaznaczonego wycinka: menu/Edit
→
Mirror
→
Vertical – wokół
pionowej osi
Menu/Edit
→
Group
Uwagi. Trasę można również przygotować za pomocą zewnętrznego edytora jako
bitmapę i importować poprzez Draw
→
Bitmap
→
Import
→
Szukaj w: ...
Lustrzane odbicie można tworzyć dla dowolnego obiektu. Przerwanie trybu edycji
elementu w Toolboxie następuje przez Esc.
4.
Zasobniki i doprowadzenia
•
Pierwszy zasobnik – wielokąt
Draw
→
Polygon, kolory – j.w.
•
Drugi zasobnik
M/E
→
Duplicate, Mirror
→
Vertical
•
Kanały doprowadzające – wielokąty
Draw
→
Polygon, kolory – j.w.
•
Rozmieszczenie – połączenie trasy, zasobników i doprowadzeń.
5.
Uzwojenia elektromagnesów
Wielokąty lub dwa zgrupowane prostokąty z tekstami na wierzchu.
Draw
→
Polygon, M/E
→
Duplicate, Mirror
→
Vertical
Teksty: S1, ... , S4, rozmieścić elementy.
6.
Zastawki – wielokąty (lub dwa zgrupowane prostokąty)
Draw
→
Polygon, M/E
→
Duplicate, Mirror
→
Vertical, rozmieścić zastawki.
7.
Czujniki
•
Czujnik koloru – dwa zgrupowane prostokąty
Lewa część: Draw
→
Rectangle, M/E
→
Duplicate, przesunąć na prawą stronę.
Zaznaczyć obydwie części (Shift), M/E
→
Group.
•
Czujnik kulek
Zaznaczyć czujnik koloru, M/E
→
Duplicate, rozmieścić czujniki.
8.
Kulki
Draw
→
Elipse, M/E
→
Duplicate
Kolory:
przed czujnikiem koloru – biała (Grey93) lub czarna
poniżej czujnika koloru – jw.
przed zasobnikiem białych – biała
przed zasobnikiem czarnych – czarna (Grey18).
9.
Napis
New text: sortownica. Menu/Change
→
Text Attributes
11
PRZYCISKI
1.
Ustawianie zmiennych
•
Animate
→
Button, Action
→
Write variable
•
Zmienna
Napisy
START
clr_count
START, START
Zeruj liczniki, Zerowanie włączone
Uwaga. Zmianie położenia przycisku towarzyszą zmiany koloru tła lub napisu, np. tło
Flash10 dla włączonego zerowania.
2.
Okna konfiguracyjne
KOLORY I WIDOCZNOŚĆ
1.
Kolory uzwojeń elektromagnesów
•
Zmienna określająca kolor: S1, …, S4
Wykonać animację koloru uzwojenia.
•
Napisy S1, …, S4 na wierzchu.
Okno Parameter danego uzwojenia (2 kl.)
Zakładka General
Klawisz Objects in foreground
Draw
→
Text (lub Toolbox)
Zaznaczyć miejsce napisu.
W pojawiającym się okienku Change Text wpisać S1, …, S4. Akceptacja – Ok.
Ew. skorygować położenie tekstu (zmiana fontu przez Text attributes).
Zaznaczyć napis (jeśli nie zaznaczony)
Edit
→
Return to object (powrót do zakładki General).
Napis mógłby być ew. napisany wcześniej i tylko zaznaczony po Objects in foreground.
12
Uwaga. Dostęp do okien animacji uzyskuje się po 2–krotnym kliknięciu obiektu
(jak dotychczas) lub aktywacji Animate
→
Reedit i wyborze z pojawiającej się listy
animowanych obiektów tego, który jest potrzebny.
Domyślne nazwy nadawane obiektom przez Control Buildera, np. REC1, ELP2
itp., stają się mało przydatne przy większej liczbie animowanych obiektów. W
takiej sytuacji w oknie Parameter należy w polu Object name wpisać własną
nazwę, np. ELEKTR1, BALL3 itp., która bezpośrednio kojarzy się z obiektem.
2.
Widoczność i kolor kulek
•
Zmienne animujące kulki:
przed czujnikiem koloru: v_s4, CS (CS = 0 – biała, 1 – czarna)
poniżej czujnika koloru: v_s4, CS
przed zasobnikiem czarnych: BS, S3
przed zasobnikiem białych: BS, S3
•
Tabela kolorów
Kulka
(od góry)
Zmienne
Bit1, Bit2
Widoczność
Pierwsza
v_s4, CS
v_s4=0 – kolor jak CS
v_s4=1 – niewidoczna
CS = 0 – biała
CS = 1 – czarna
Druga
v_s4, CS
v_s4=1 – widoczna
v_s4=0 – niewidoczna
invisible – niewidoczna
Trzecia
(czarna)
BS, S3
BS=1, S3=0 – widoczna
inaczej – niewidoczna
Czwarta
(biała)
BS, S3
BS=1, S3=1 – widoczna
inaczej – niewidoczna
Uwaga. Wybór Original colors w tabeli kolorów oznacza, że wykorzysta się
pierwotne kolory wnętrza i obrzeża obiektu statycznego.
13
•
Kolory (gdy kulki widoczne)
Kulka
Border
Fill
Biała
Black
Grey93
Czarna
Black
Gray18
Zielona
Grey68
Green
Uwaga. Kolory kulek można określić, gdy kulki są jeszcze obiektami statycznymi.
Natomiast widoczność należy do trybu animacji (Animate
→
Graphic symbol) i
może być określona dopiero po wybraniu rodzaju ruchu Movement of GS (No,
Discrete, Continuous; zobacz dalej).
RUCH DYSKRETNY – ZASTAWKI
1.
Tryb animacji, ruch dyskretny
•
Animate/Toolbox
→
Graphic symbol
Movement of GS
→
Discrete
Wybór ruchu dyskretnego powoduje pojawienie się zakładki Positions w oknie
Parameter.
2.
Zmienna powodująca ruch zastawki
Okno Parameter, zakładka Bit allocation.
•
Bit1: nazwa zmiennej (F2) – w przypadku 4–ch położeń należy wypełnić Bit2, a w
przypadku 8–miu – Bit3.
Zastawka
Zmienna
– zmienna powodująca ruch i zmianę koloru (ew.).
S1, S2, S3
S1, S2, S3
S4
v_s4
Wyjaśnienie. Z głównego schematu Sort1(FBD) wynika, że zastawka S4 jest
otwierana tylko na 70 ms (MONO_F – T1). Ponieważ obserwacja tak szybkiego
ruchu nie byłaby możliwa, więc zamiast impulsu S4 (70 ms) do zmiany położenia
zastawki wykorzystano wcześniejszy dłuższy impuls v_s4 (500ms) z uniwibratora
MONO_F – WAIT. Podana na liście zmiennych nazwa v_s4 „ruch zastawki S4”
dotyczy wyłącznie wizualizacji, a nie sterowania. Na schemacie Sort1, zmienna
v_s4 reprezentuje faktycznie oczekiwanie na ustalenie się położenia zastawki S3.
Ze względu na szybki ruch zastawki S4 nie widać zmian koloru elektromagnesu,
który zależy od zmiennej S4.
14
3.
Wskazanie zastawki i kolory
•
Zakładka Display
Wskazanie zastawki na obrazie graficznym poprzez pola Object name i uzależnienie
kolorów od zmiennej (jak dotychczas).
4.
Pozycje
•
Zakładka Positions
Zaznaczyć przycisk All Positions i na pojawiającym się obrazie graficznym kliknąć w
dwu miejscach, w których ma się znaleźć lewy górny róg obiektu (dla zmiennej o
wartości 0 lub 1).
•
Obserwacja położeń w zakładce Display dla bitów 0 i 1, a jeśli nie są one jeszcze w
pełni zadowalające, to ponowna „ręczna” korekta w zakładce Positions.
•
„Ręczna” korekta współrzędnych X, Y na czerwonych polach w pojawiającej się tabeli
położeń (discrete), aby ruch był ściśle pionowy, poziomy itp. (po wpisaniu wartości
przywrócić czerwony kolor zmienianego pola przez kliknięcie gdzieś w tabelce).
Uwaga. Przycisk Single Position służy do określenia pozycji aktualnie zaznaczonej
(górnej lub dolnej w tabeli discrete). Można go także wykorzystać do
korygowania.
RUCH CIĄGŁY
Ruch ciągły kulek jest generowany przez zmienną vpos (REAL) ustawianą przez uniwibrator
VIS_MONO. Zmienia się ona w przedziale 0.0...1500.0 (do 1500 ms przed przetworzeniem
przez DI i RE). O trwającym narastaniu vpos informuje zmienna req (BOOL). Na obrazie
VisEmula kulkami ruchomymi są tylko dwie kulki zsuwające się do zasobników (w prawo i w
lewo).
1.
Tryb animacji, ruch ciągły
•
Animate/Toolbox
→
Graphic symbol
Movement of GS
→
Continuous
Wybór ruchu ciągłego powoduje pojawienie się zakładek Process Value, Scale i
Positions w oknie Parameter.
15
2.
Wskazanie kulki i widoczność
•
Zakładki Bit allocation i Display
Wskazanie kulki na obrazie graficznym poprzez pola Object name uzależniając
widoczność od zmiennych podanych poprzednio (zob. Kolory i widoczność).
3.
Zmienna powodująca ruch
•
Zakładka Process value
Display variable: vpos – zmienna (F2)
Wpisanie 0.0 zamiast ### w polu Display value (GED) powoduje, że po zatwierdzeniu
okna Parameter obiekt przyjmie pozycję odpowiadające vpos = 0.0. Wpisując inne
wartości zamiast 0.0 można dokonać weryfikacji kolejnych pozycji.
4.
Skalowanie
•
Zakładka Scale
Pole Scaling
Start: 0.0., End: 1500.0
Wartości te określają zakres zmiennej vpos, któremu odpowiadają skrajne pozycje
ruchomego obiektu.
5.
Skrajne pozycje
•
Zakładka Positions
Zaznaczyć przycisk Display i na pojawiającym się obrazie dwoma kliknięciami
wskazać skrajne pozycje lewego górnego rogu ruchomego obiektu. Różnica
współrzędnych tych pozycji pojawia się na czerwonych polach x, y w ramce continuous
(oś y jest skierowana ku dołowi). Ewentualnych korekt dokonuje się „ręcznie”.
6.
Kontrola położeń
•
W polu Display value (GED) zakładki Display wpisać 1500.0 i skontrolować położenie.
Ewentualna korekta w zakładce Positions.
16
LICZNIKI – WYŚWIETLACZE ALFANUMERYCZNE
Liczniki kulek są wyświetlaczami alfanumerycznymi wskazującymi wartości zmiennych lbi,
lcz (REAL) określanych przez liczniki CTUD (schemat Sort1).
1.
Definicja, rozmiar
•
Animate/Toolbox
→
Alphanumeric display
•
Rozmiar wyświetlacza – klik w miejscu lewego górnego i prawego dolnego rogu.
Pojawia się okno dialogowe Parameter.
•
W polu Object name można wpisać własną nazwę zamiast domyślnej, np. LIBI
(LIcznik BIałych).
2.
Wskazywana zmienna
•
Zakładka Process value
•
Display variable: lbi, lcz
– zmienna (F2)
•
Display value (GED): 0.0
– wartość pokazywana przez edytor graficzny (lub co
innego zamiast 0.0.)
3.
Ewentualna zmiana kolorów
•
Zakładka Bit allocation – tutaj nieużywana
17
4.
Kolor i format
•
Zakładka Display
•
Kolor: cyfry – Foreground, tło – Background
Uwaga. Zaletą tła invisible jest to, że jego rozmiar może być mniejszy niż wymagany
przez wielkość cyfr. W przypadku tła widocznego kolizja jest sygnalizowana żółtymi
strzałkami. Rozmiar cyfr określa się poprzez menu/Edit
→
Text Attributes.
•
Format: Fixed_point 5
Jest to format służący do wyświetlania liczb całkowitych. Przeglądu formatów
dokonuje się zaznaczając pole Format i naciskając F2.
•
Modyfikacje
Text attributes: font, size, direction, fix point …
SORTOWANIE W ST
1.
Sekwencja podstawowa
•
Stany
– oczekiwanie na impuls RES
– odmierzanie czasu przez timer T0 (700 ms)
Przy przechodzeniu do stanu 3 ustawienie wyjść R_S3 i S_S3.
– odmierzanie czasu przez generator impulsu WAIT (500 ms)
Wtedy wyjście v_s4 ustawione.
– odmierzanie czasu przez generator impulsu T1 (70 ms)
Wtedy wyjście R_S4 ustawione.
– odmierzanie czasu przez timer T2 (1s)
Przy powrocie do stanu 1 ustawienie wyjścia pom.
•
Graf sekwencji
T0:TON; WAIT:MONO_F; T1:MONO_F; T2:TON;
5
4
3
2
1
1
2
RES
T0_OUT
R_S3:=0
S_S3:=0
v_s4:=0
R_S4:=0
pom:=0
0,0
v_s4:=1
0,0
3
4
5
pom:=BS
0,0, 0
R_S4:=1
0
0,0,0
0,0
0,0,0
0,0
R_S3:=CS
S_S3:=NOT CS
NOT WAIT_OUT
WAIT
NOT T1_OUT
T2_OUT
0<=>FALSE
T0
T2
T1
18
•
Programy w drzewie projektu
jezykST[ST]
– graf sekwencji
ster[FBD]
– przerzutniki wyjściowe (bez zmiany)
licznikiST[ST] – liczniki i zmienna narastająca
•
Wartość początkowa stan =1 (Variable list)
•
Kod ST
19
2.
Liczniki i zmienna narastająca
•
FBD
•
ST