12-04_artykul1p.pdf

(672 KB) Pobierz
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
Pomiary Automatyka Robotyka 12/2004
Kompaktowy sterownik programowalny
Wszystkie firmy, liczące się na rynku sterowników, mają w swojej ofercie
przynajmniej jednego typu niewielki sterownik kompaktowy, zwykle wypo−
sażony we własny interfejs użytkownika umożliwiający programowanie bez
konieczności korzystania z komputera osobistego. W artykule omówiono
projekt takiego urządzenia.
Chmiel Mirosław
Hrynkiewicz Edward
Stefański Łukasz*
O d chwili pojawienia się pierwszych tego typu
przechowywanie do 50 programów użytkownika. Prio-
rytetem było także lepsze rozwiązanie metod progra-
mowania sterownika, tak aby był on bardziej przyjazny
użytkownikowi, co jest szczególnie trudne przy niewiel-
kich rozmiarach wyświetlacza oraz kilkuklawiszowej
klawiaturze.
urządzeń w Instytucie Elektroniki Politechni-
ki Śląskiej rozpoczęto również prace mające na
celu opracowanie takiego sterownika. W ich wyniku
powstał projekt oparty na mikrokontrolerze 8-bitowym
z rodziny MCS '51, programowalny za pomocą języka
LD ( Ladder Diagram ) z niewielkiej klawiatury na pły-
cie czołowej [9, 14]. Ze względu na prekursorski charak-
ter prac mających na celu sprawdzenie ogólnych kon-
cepcji, sterownik ten miał jedynie wejścia i wyjścia
dyskretne, a w skład zaimplementowanego języka wcho-
dziły tylko najprostsze funkcje logiczne. Kolejnym kro-
kiem miało być zaprojektowanie sterownika kompakto-
wego wyposażonego w mikrokontroler 16-bitowy oraz
wejścia i wyjścia analogowe. Niniejszy artykuł dotyczy
projektu takiego urządzenia [15]. W powstałym sterow-
niku wykorzystano część koncepcji opracowanych przy
okazji projektu pierwszego ze wspomnianych wyżej
urządzeń. Jest więc on również programowany za po-
mocą języka LD przy wykorzystaniu 6-przyciskowej kla-
wiatury i wyświetlacza LCD. Skanowanie schematu dra-
binkowego odbywa się kolumnami, przy czym
procedura analizująca nie dokonuje kompilacji progra-
mu (głównie ze względu na ograniczoną pamięć RAM
oraz fakt, iż w wersji skompilowanej program użytkow-
nika zajmowałby dużo większy obszar niż w przyjętym
rozwiązaniu), a jedynie pewnego rodzaju interpretację
umożliwiającą jego szybsze wykonanie. Autorzy posta-
wili sobie za cel stworzenie sterownika szybszego od
pierwowzoru. W tym celu zastosowano 16-bitowy mi-
krokontroler z rodziny MCS '196 oraz starano się jak naj-
bardziej zoptymalizować przyjęty sposób wykonywa-
nia programu użytkownika. Założeniem było także
zwiększenie zakresu zastosowań sterownika poprzez
wyposażenie go w wejścia i wyjścia analogowe, zwięk-
szenie liczby dostępnych elementów języka oraz obsza-
ru pamięci przeznaczonego na schemat drabinkowy.
Ponadto zdecydowano się na dalsze zwiększenie auto-
nomii urządzenia, czego wynikiem było dodanie wy-
miennego modułu pamięciowego umożliwiającego
Wybór sposobu analizy schematu
drabinkowego
Sterowniki PLC wykonują program aplikacyjny w spo-
sób szeregowo-cykliczny. Metoda ta polega na ciągłym
wykonywaniu zespołu określonych czynności tworzą-
cych cykl programowy ( Program Sweep ). Podstawowy-
mi etapami tego cyklu są: odczyt stanów wejść do odpo-
wiadającego im obszaru w pamięci danych sterownika
zwanego obszarem odwzorowania wejść (PII — Process
Image Input ); realizacja programu użytkownika i zapis
wyników jego wykonania do obszaru odwzorowania
wyjść (PIQ — Process Image Output ) oraz wysłanie da-
nych wyjściowych z obszaru odwzorowania do wyjść fi-
zycznych [11, 12, 13]. Sposób wykonania programu za-
leży od rodzaju języka, w którym napisano program
aplikacyjny. Języki graficzne wykorzystują ideę przepły-
wu odpowiedniej wielkości przez kolejne obwody re-
prezentujące pewną strategię postępowania. W języku
LD stany elementów łączących oznaczanych jako ON
lub OFF — odpowiednio do wartości logicznych 1 i 0 —
są analogią do przepływu prądu w systemach sterowa-
nia opartych na przekaźnikach elektromechanicznych.
Ponieważ struktura elementów graficznych tworzących
schemat drabinkowy jest rozbudowywana zarówno
w kierunku poziomym jak i pionowym obszaru edycji,
konieczne jest opracowanie sposobu jego przegląda-
nia i realizowania ( Scanning ). Analizując materiały udo-
stępniane przez producentów sterowników PLC, moż-
na zauważyć, że praktycznie przyjęły się dwie metody:
skanowanie wierszami [2, 5] oraz skanowanie kolumna-
mi [3, 12]. Pierwsza z nich polega na przeglądaniu sche-
matu w kierunku poziomym — od lewej listwy prądowej
w prawo, aż do ostatniego elementu w wierszu. W ten
sposób są przeglądane kolejno wszystkie wiersze sche-
matu. W drugiej metodzie stan wszystkich elementów
schematu jest sprawdzany od elementu położonego naj-
wyżej po położony najniżej w skrajnej lewej kolumnie,
* dr inż. Mirosław Chmiel, dr inż. hab. Edward
Hrynkiewicz, prof. Politechniki. Śląskiej,
mgr inż. Łukasz Stefański - Politechnika Śląska
w Gliwicach, Instytut Elektroniki
5
842786213.404.png 842786213.415.png 842786213.426.png
Pomiary Automatyka Robotyka 12/2004
by w kolejnym kroku przesuwając się w prawo, powta-
rzać czynność przeglądania od góry ku dołowi. Oby-
dwie metody są przedstawione na rys. 1 na przykłado-
wym fragmencie schematu drabinkowego. Porównując
zaznaczoną w obu przypadkach kolejność skanowania
poszczególnych elementów schematu, można zauwa-
żyć, że przy analizie poziomej algorytm „nawigacji” ma
nieco bardziej skomplikowaną formę. Wynika to z te-
go, że oprócz połączeń poziomych (a więc zgodnych
z kierunkiem skanowania) schemat zawiera także połą-
czenia pionowe. Ponieważ połączenie takie spełnia funk-
cję sumy logicznej stanów wszystkich gałęzi podłączo-
nych do niego z lewej strony, konieczne jest ich
wyznaczenie przed obsługą połączenia pionowego. Po-
nadto, można się spodziewać, że dłuższe połączenia pio-
nowe (łączące więcej niż dwa szczeble schematu drabin-
kowego), a także łączące szczeble niepodłączone
bezpośrednio do listwy prądowej, spowodują dalsze od-
stępstwa od poziomego kierunku skanowania i skom-
plikowanie programu analizy [8, 10].
Przedstawiony problem obsługi połączeń pionowych
nie występuje przy skanowaniu kolumnami. Jest to spo-
wodowane tym, że stany wszystkich gałęzi znajdujących
się po lewej stronie połączenia pionowego są wyzna-
czane podczas analizy poprzedniej kolumny. Niewąt-
pliwą zaletą analizy poziomej jest natomiast to, że teo-
retycznie wystarcza jedna zmienna do zapamiętywania
stanów analizowanych wierszy schematu (lub nawet je-
den znacznik bitowy, jeżeli mikrokontroler ma obszary
adresowane bitowo), ponieważ przed rozpoczęciem
skanowania kolejnego wiersza stan wiersza poprzed-
niego jest przekazywany zmiennej skojarzonej z cew-
ką znajdującą się na jego końcu. Oczywiście przy omó-
wionych powyżej odstępstwach od poziomego
kierunku skanowania konieczne są dodatkowe zmien-
ne umożliwiające zapamiętanie stanów wierszy, któ-
rych analiza została przerwana. Nie ulega jednak wątpli-
wości, że liczba wykorzystywanych zmiennych będzie
dużo mniejsza niż przy skanowaniu kolumnami, ponie-
waż wówczas z każdym wierszem musi być skojarzona
odrębna zmienna określająca jego status. Za wadę ana-
lizy w kierunku pionowym można uważać także efekt
kolumnowy polegający na tym, że cewka znajdująca się
w kolumnie położonej bliżej lewej szyny prądowej zo-
stanie obsłużona wcześniej niż cewka znajdująca się
w kolumnie położonej bardziej na prawo, nawet jeżeli
szczebel schematu z pierwszą cewką znajduje się poni-
żej szczebla z cewką drugą (w przedstawionym przy-
kładzie z rys. 1 cewka położona w ostatnim wierszu zo-
stanie obsłużona przed pozostałymi cewkami).
Biorąc pod uwagę wady i zalety
przedstawionych metod skanowa-
nia schematu drabinkowego, zdecy-
dowano się ostatecznie na zastoso-
wanie w projektowanym sterowniku
analizy kolumnami. Uznano, że tech-
nika ta umożliwia realizację algoryt-
mu analizy, który będzie dużo prost-
szy (a więc prawdopodobnie także
i szybszy) niż przy skanowaniu w kie-
1)
2)
Rys. 1. Sposoby analizy schematu drabinkowego: 1) wierszami,
2) kolumnami
runku poziomym, a jednocześnie będzie umożliwiał
większą wszechstronność w budowaniu struktury po-
łączeń schematu drabinkowego. Wszechstronność ta
jest wynikiem dużo większej dowolności wstawiania
połączeń pionowych — stosunkowo łatwa jest analiza
i obsługa połączeń pionowych występujących w struk-
turach takich jak przedstawione na rys. 2. (przedsta-
wione fragmenty schematu drabinkowego nie zostały-
by poprawnie obsłużone w większości sterowników
dokonujących analizy wierszami).
Ze względu na charakterystykę projektowanego ste-
rownika i zastosowanie tego typu urządzeń, pamięć
przeznaczona na program użytkownika nie będzie mia-
ła dużych rozmiarów, a więc wada wybranego sposo-
bu analizy związana z koniecznością stosowania dużej
liczby zmiennych statusowych wierszy nie będzie stano-
wić dużego utrudnienia. Z kolei efektu kolumnowego
można uniknąć, jeżeli użytkownik wprowadza schemat
ze świadomością sposobu jego późniejszej analizy oraz
możliwości wystąpienia takiego zjawiska.
Stosując przyjętą koncepcję skanowania schematu
drabinkowego, opracowano algorytm umożliwiający
wykonanie programu użytkownika. Jest to rodzaj inter-
pretacji polegający na rozpoznawaniu kolejnych ele-
mentów schematu (zgodnie z przyjętym kierunkiem
Rys. 2. Przykłady struktur obsługiwanych poprawnie przy kolumnowej analizie sche-
matu drabinkowego
6
842786213.437.png 842786213.001.png 842786213.012.png 842786213.023.png 842786213.034.png 842786213.044.png 842786213.055.png 842786213.066.png 842786213.077.png 842786213.088.png 842786213.099.png 842786213.110.png 842786213.121.png 842786213.132.png 842786213.143.png 842786213.154.png 842786213.165.png 842786213.176.png 842786213.187.png 842786213.198.png 842786213.209.png 842786213.220.png 842786213.231.png 842786213.242.png 842786213.253.png 842786213.264.png 842786213.275.png 842786213.285.png 842786213.296.png 842786213.307.png 842786213.318.png 842786213.329.png
 
Pomiary Automatyka Robotyka 12/2004
do listwy prądowej, można go pominąć w procesie
analizy. Podział na segmenty ma również na celu uła-
twienie obsługi sterownika, ponieważ — dzięki reali-
zacji trybu umożliwiającego przeskok o segment — po-
zwoli na szybkie poruszanie się po schemacie. Na rys.
4 przedstawiono cykl pracy sterownika wraz z zazna-
czonym sposobem skanowania schematu drabinko-
wego.
Wprowadzanie i przechowywanie
programu użytkownika
Program użytkownika w postaci schematu drabinkowe-
go jest wprowadzany interfejsem złożonym z wyświe-
tlacza alfanumerycznego o rozmiarze 4x20 oraz klawia-
tury, w skład której wchodzi: 6 przycisków, 4 klawisze
kursorów, klawisz akceptacji — OK oraz rezygnacji —
ESC. Ekran jest zorganizowany w taki sposób, że dwie
skrajne kolumny z lewej zajmują numery poszczegól-
nych wierszy, następnie znajduje się obszar wprowadza-
nia schematu złożony z 10 kolumn oraz listwy prądo-
wej, natomiast pozostałe kolumny z prawej strony są
używane do wprowadzania i późniejszego wyświetla-
nia parametrów elementów schematu. Obszar użytecz-
ny został podzielony na segmenty ułatwiające progra-
mowanie i poruszanie się po ekranie.
Do przechowywania programu
użytkownika stworzono dwie tabli-
ce o nazwach user_program oraz
parameters . Pierwsza z tych tablic
zawiera kody znaków wyświetla-
nych na ekranie tworzących sche-
mat drabinkowy (tablica zmiennych
typu char), a jej indeksy mają zakres
identyczny ze zmiennymi określa-
jącymi położenie kursora w polu
edycji schematu (numer segmentu,
wiersza oraz kolumny). Druga tabli-
ca jest zorganizowana w sposób
identyczny, z tym że jej zawartość
stanowią wartości typu integer bę-
dące parametrami elementów sche-
matu. Element tablicy parameters
może mieć jedną z trzech postaci,
w zależności od tego jaki rodzaj pa-
rametru jest w nim przechowywa-
ny. Rodzaje elementów tej tablicy
i znaczenie poszczególnych pól
przedstawia rys. 5.
Dwa najstarsze bity stanowią kod
oznaczający czy parametr zawiera
stałą, czy numer skojarzonej z ele-
mentem schematu zmiennej logicz-
nej lub numer rejestru. Ponadto
w komórce zawierającej adres aku-
mulatora (numer rejestru wybrane-
go na akumulator) dla timera znaj-
duje się dodatkowa informacja
o podstawie czasu.
Rys. 3. Ilustracja zmian wartości zmiennych odpowiadających
za stan wierszy podczas analizy schematu drabinkowego
analizy) i wywoływaniu procedur
obsługi tych elementów. Procedu-
ra tego typu, odpowiednio do
funkcji wykonywanej przez kon-
kretny element, modyfikuje zmien-
ną statusową wiersza, w którym się
on znajduje. Zmienne statusowe
wierszy są ustawiane na początku
każdego cyklu, co oznacza podpię-
cie do listwy prądowej elementów
umieszczonych w pierwszej ko-
lumnie. Rys. 3 ilustruje zmiany
zmiennych statusowych wierszy
schematu przy analizie pokazane-
go fragmentu schematu drabinko-
wego. Wykresy czasowe opraco-
wano, dokonując pewnego
uproszczenia polegającego na za-
łożeniu, że czasy obsługi poszcze-
gólnych kolumn przedstawionego
fragmentu schematu są równe.
Przedstawione oznaczenia
zmiennych statusowych wierszy
schematu drabinkowego wynika-
ją z tego, że będą one umieszczo-
ne w tablicy o indeksie odpowia-
dającym numerowi wiersza. Aby
skrócić proces analizy, zdecydowa-
no się na podział programu użyt-
kownika na segmenty. Wówczas,
jeżeli dany segment jest pusty lub
żaden ze znajdujących się w nim
elementów nie jest podłączony
Rys. 4. Cykl pracy sterownika
7
842786213.350.png 842786213.361.png 842786213.372.png 842786213.383.png 842786213.390.png 842786213.391.png 842786213.392.png 842786213.393.png 842786213.394.png 842786213.395.png 842786213.396.png 842786213.397.png 842786213.398.png 842786213.399.png 842786213.400.png 842786213.401.png 842786213.402.png 842786213.403.png 842786213.405.png 842786213.406.png 842786213.407.png 842786213.408.png 842786213.409.png 842786213.410.png 842786213.411.png 842786213.412.png 842786213.413.png 842786213.414.png 842786213.416.png 842786213.417.png 842786213.418.png 842786213.419.png 842786213.420.png 842786213.421.png 842786213.422.png 842786213.423.png 842786213.424.png 842786213.425.png 842786213.427.png 842786213.428.png 842786213.429.png 842786213.430.png 842786213.431.png 842786213.432.png 842786213.433.png 842786213.434.png 842786213.435.png 842786213.436.png 842786213.438.png 842786213.439.png 842786213.440.png 842786213.441.png 842786213.442.png 842786213.443.png 842786213.444.png 842786213.445.png 842786213.446.png 842786213.447.png 842786213.002.png 842786213.003.png 842786213.004.png 842786213.005.png 842786213.006.png 842786213.007.png 842786213.008.png 842786213.009.png 842786213.010.png 842786213.011.png 842786213.013.png 842786213.014.png 842786213.015.png 842786213.016.png 842786213.017.png 842786213.018.png 842786213.019.png 842786213.020.png 842786213.021.png 842786213.022.png 842786213.024.png 842786213.025.png 842786213.026.png 842786213.027.png 842786213.028.png 842786213.029.png 842786213.030.png 842786213.031.png 842786213.032.png 842786213.033.png 842786213.035.png 842786213.036.png
 
Pomiary Automatyka Robotyka 12/2004
Procedura obsługująca ruch kur-
sora na ekranie wyświetlacza odczy-
tuje zmienną, do której wczytywany
jest stan klawiatury, a następnie,
w zależności od rodzaju naciśnięte-
go klawisza, inkrementuje lub dekre-
mentuje zmienne odpowiedzialne
za położenie kursora będące jedno-
cześnie indeksami tablic user_pro-
gram i parameters . Każdemu z pól
wyświetlacza przypisuje się po jednej
komórce tych tablic. Elementy sche-
matu drabinkowego w opisywanym
sterowniku zajmują różną liczbę pól
wyświetlacza (od 1 do 4) w zależno-
ści od rodzaju elementu. Cecha ta
sprawia, że przypisanie jednemu po-
lu tylko po jednej komórce tablic za-
wierających program użytkownika
jest wystarczające. Na przykład ele-
ment realizujący dodawanie arytme-
tyczne zajmuje na ekranie wyświe-
tlacza trzy pola: dwa nawiasy
kwadratowe i znak plus ([+]), a więc
dla opisu tego elementu mamy do
dyspozycji po trzy komórki każdej
z tablic. Tablica user_program bę-
dzie zawierać wszystkie wyżej wy-
mienione znaki ('[', '+' oraz ']') w po-
staci kodów ASCII natomiast tablica
parameters dwa argumenty doda-
wania oraz miejsce przeznaczenia
wyniku, przy czym argumenty mogą
mieć każdą z trzech opisywanych
wyżej postaci komórek tablicy para-
meters (mogą mieć postać stałych
lub być przekazane przez rejestr).
Rys. 6 przedstawia przykładowy
fragment programu oraz jego repre-
zentacje w tablicach user_program
i parameters . Jak można zauważyć
na znajdującej się po prawej stronie
ilustracji, reprezentującej wygląd
przedstawionego fragmentu progra-
mu na ekranie sterownika, przy po-
szczególnych elementach schematu
drabinkowego nie ma opisów okre-
ślających rodzaj i numer zmiennych
skojarzonych z danym elementem
oraz innych parametrów, takich jak
numery rejestrów czy wartości sta-
łych. Wszystkie te dane pojawiają się
w menu bocznym w chwili ustawie-
nia kursora na elemencie, który one
opisują. Napis 'AI 2' w bloku opera-
tora relacji oznacza drugie wejście
analogowe sterownika (źródło dru-
giego argumentu).
Rys. 5. Rodzaje elementów tablicy parameters
[0,3,0]
[0,3,1]
[0,3,2]
[0,3,3]
[0,3,4]
[0,3,5]
[0,3,6]
[0,3,7]
[0,3,8]
[0,3,9]
[0,3,10]
[0,4,0]
[0,4,1]
[0,4,2]
[0,4,3]
[0,4,4]
[0,4,5]
[0,4,6]
[0,4,7]
[0,4,8]
[0,4,9]
[0,4,10]
Rys. 6. Przykładowy fragment programu oraz jego reprezentacje w tablicach
user_program i parameters
8
842786213.037.png 842786213.038.png 842786213.039.png 842786213.040.png 842786213.041.png 842786213.042.png 842786213.043.png 842786213.045.png 842786213.046.png 842786213.047.png 842786213.048.png 842786213.049.png 842786213.050.png 842786213.051.png 842786213.052.png 842786213.053.png 842786213.054.png 842786213.056.png 842786213.057.png 842786213.058.png 842786213.059.png 842786213.060.png 842786213.061.png 842786213.062.png 842786213.063.png 842786213.064.png 842786213.065.png 842786213.067.png 842786213.068.png 842786213.069.png 842786213.070.png 842786213.071.png 842786213.072.png 842786213.073.png 842786213.074.png 842786213.075.png 842786213.076.png 842786213.078.png 842786213.079.png 842786213.080.png 842786213.081.png 842786213.082.png 842786213.083.png 842786213.084.png 842786213.085.png 842786213.086.png 842786213.087.png 842786213.089.png 842786213.090.png 842786213.091.png 842786213.092.png 842786213.093.png 842786213.094.png 842786213.095.png 842786213.096.png 842786213.097.png 842786213.098.png 842786213.100.png 842786213.101.png 842786213.102.png 842786213.103.png 842786213.104.png 842786213.105.png 842786213.106.png 842786213.107.png 842786213.108.png 842786213.109.png 842786213.111.png 842786213.112.png 842786213.113.png 842786213.114.png 842786213.115.png 842786213.116.png 842786213.117.png 842786213.118.png 842786213.119.png 842786213.120.png 842786213.122.png 842786213.123.png 842786213.124.png 842786213.125.png 842786213.126.png 842786213.127.png 842786213.128.png 842786213.129.png 842786213.130.png 842786213.131.png 842786213.133.png 842786213.134.png 842786213.135.png 842786213.136.png 842786213.137.png 842786213.138.png 842786213.139.png 842786213.140.png 842786213.141.png 842786213.142.png 842786213.144.png 842786213.145.png 842786213.146.png 842786213.147.png 842786213.148.png 842786213.149.png 842786213.150.png 842786213.151.png 842786213.152.png 842786213.153.png 842786213.155.png 842786213.156.png 842786213.157.png 842786213.158.png 842786213.159.png 842786213.160.png 842786213.161.png 842786213.162.png 842786213.163.png 842786213.164.png 842786213.166.png 842786213.167.png 842786213.168.png 842786213.169.png 842786213.170.png 842786213.171.png 842786213.172.png 842786213.173.png 842786213.174.png 842786213.175.png 842786213.177.png 842786213.178.png 842786213.179.png 842786213.180.png 842786213.181.png 842786213.182.png 842786213.183.png 842786213.184.png 842786213.185.png 842786213.186.png 842786213.188.png 842786213.189.png 842786213.190.png 842786213.191.png 842786213.192.png 842786213.193.png 842786213.194.png 842786213.195.png 842786213.196.png 842786213.197.png 842786213.199.png 842786213.200.png 842786213.201.png 842786213.202.png 842786213.203.png 842786213.204.png 842786213.205.png 842786213.206.png 842786213.207.png 842786213.208.png 842786213.210.png 842786213.211.png 842786213.212.png 842786213.213.png 842786213.214.png 842786213.215.png 842786213.216.png 842786213.217.png 842786213.218.png 842786213.219.png 842786213.221.png 842786213.222.png 842786213.223.png 842786213.224.png 842786213.225.png 842786213.226.png 842786213.227.png 842786213.228.png 842786213.229.png 842786213.230.png 842786213.232.png 842786213.233.png 842786213.234.png 842786213.235.png 842786213.236.png 842786213.237.png 842786213.238.png 842786213.239.png 842786213.240.png 842786213.241.png 842786213.243.png 842786213.244.png 842786213.245.png 842786213.246.png 842786213.247.png 842786213.248.png 842786213.249.png 842786213.250.png 842786213.251.png 842786213.252.png 842786213.254.png 842786213.255.png 842786213.256.png 842786213.257.png 842786213.258.png 842786213.259.png 842786213.260.png 842786213.261.png 842786213.262.png 842786213.263.png 842786213.265.png 842786213.266.png 842786213.267.png 842786213.268.png 842786213.269.png 842786213.270.png 842786213.271.png 842786213.272.png 842786213.273.png 842786213.274.png
 
Pomiary Automatyka Robotyka 12/2004
Wykonywanie programu
wo połączenia poziome, których obsługa nie jest ko-
nieczna (ale tylko dla trybu bez wizualizacji stanu połą-
czeń, gdyż dla trybu z wizualizacją konieczne jest umiesz-
czenie w tablicach odwzorowania miejsca położenia
symbolu połączenia poziomego na ekranie), gdyż nie
zmieniają one stanu zmiennych określających stan wier-
szy schematu. Podobnie jest w przypadku większości
pól pustych. Zadaniem pola pustego na schemacie dra-
binkowym jest wyzerowanie zmiennej statusowej rzę-
du, w którym to pole się znajduje. Wyzerowanie tej
zmiennej ma jednak sens tylko wtedy, gdy jakikolwiek in-
ny element schematu znajduje się w tym rzędzie, na pra-
wo od pola pustego. W przeciwnym wypadku jest to
operacja niepotrzebna i powodująca wydłużenie czasu
cyklu, gdyż żaden element nie będzie sprawdzał stanu wy-
zerowanej zmiennej statusowej rzędu, a więc jej stan
jest obojętny. Ponadto nie ma sensu wielokrotne zerowa-
nie zmiennej opisującej stan danego wiersza, gdy kilka
pól pustych następuje po sobie. Po natrafieniu na pole
puste wystarczy sprawdzać, czy kolejny element w wier-
szu jest elementem innym niż pole puste i tylko w ta-
kim wypadku dokonywać odwzorowania. Kolejnym
czynnikiem umożliwiającym przyspieszenie wykonywa-
nia programu jest możliwość umieszczenia w tablicy
program16_array adresów kolejno wykonywanych pro-
cedur obsługi poszczególnych elementów, ponieważ
proces rozpoznawania elementu poprzez jego porówny-
wanie z wszystkimi możliwymi kodami jest dokonywa-
ny w procedurze odwzorowującej. Ma to szczególne zna-
czenie w przypadku symboli elementów zajmujących
kilka pól wyświetlacza, ponieważ proces ich rozpozna-
wania trwa dłużej. Zawartość tablic odwzorowania sche-
matu dla przedstawionego w poprzednim punkcie przy-
kładu jest przedstawiona na rys. 7 (dla trybu pracy bez
wizualizacji).
W przypadku odwzorowania dla trybu z wizualizacją
stanu gałęzi powyższe tablice zawierałyby dodatkowo
informacje o położeniu wszystkich symboli wchodzą-
cych w skład gałęzi schematu drabinkowego (zarówno
poziomych jak i pionowych). Tryb ten jest nieco wol-
Sterownik wykonuje program użytkownika w sposób
szeregowo-cykliczny. Początkowo do obszaru odwzoro-
wania wejść są odczytywane stany wejść dyskretnych,
następnie są realizowane funkcje zapisane za pomocą
schematu drabinkowego przez użytkownika, a ich wyni-
ki zapisywane w obszarze odwzorowania wyjść, z które-
go są przepisywane do wyjść dyskretnych pod koniec
cyklu programowego. Nieco inaczej są obsługiwane wej-
ścia i wyjścia analogowe, które nie mają obszarów od-
wzorowań w pamięci sterownika. Odczyt wejścia analo-
gowego następuje bezpośrednio w trakcie obsługi
elementu realizującego ten odczyt. Podobnie wygląda
sytuacja przy zapisie do wyjścia analogowego, który na-
stępuje bezpośrednio, bez oczekiwania na koniec cyklu
programowego. Taki sposób obsługi we/wy analogo-
wych był podyktowany głównie stosunkowo długim cza-
sem konwersji przetworników, o który wydłużony był-
by każdy cykl pracy, nawet jeżeli program nie korzysta
z we/wy analogowych lub w danym cyklu nie są one ob-
sługiwane.
Sposób wykonywania programu użytkownika przez
sterownik polega na modyfikacji wartości zmiennych
przydzielonych do każdego wiersza schematu drabin-
kowego w zależności od wyników funkcji realizowanych
przez poszczególne elementy wchodzące w skład pro-
gramu. Zmienne statusowe wierszy są ustawiane na po-
czątku każdego cyklu programowego.
Sterownik wyposażono w dwa tryby wykonywania
programu użytkownika: z podglądaniem stanu gałęzi
lub bez (docelowy). Obydwa tryby pracy sterownika ko-
rzystają z tych samych procedur obsługi poszczególnych
elementów schematu drabinkowego. Procedury korzy-
stają z kolei z danych zawartych w dwóch specjalnie
utworzonych do tego celu jednoindeksowych tablicach:
program8_array (o wartościach typu char ) i pro-
gram16_array (o wartościach typu integer ), w których
zostają one, po odpowiednich przekształceniach i upo-
rządkowaniu, umieszczane z tablic user_program i pa-
rameters . Ten proces odwzorowania ma miejsce przy
wejściu do każdego z trybów pracy sterownika. W wy-
niku przeprowadzenia takiego przekształcenia uzysku-
je się znaczne zwiększenie szybkości pracy sterownika
z kilku powodów. Po pierwsze, korzystanie z tablic,
w których znajdują się dane jednoindeksowe znacznie
przyspiesza pracę w porównaniu do korzystania z ta-
blic user_program i parameters , do których odwołanie
odbywa się poprzez trzy indeksy i podczas pobierania
danych do procesu każdorazowo mikrokontroler oblicza
sumę trzech indeksów. Po drugie, w procesie przekształ-
cania jest możliwe dokonanie pewnych obliczeń, które
mogą zostać wykonane jednorazowo, a przy korzysta-
niu z tablic user_program i parameters musiałyby być
wykonywane wielokrotnie (na przykład obliczenie ad-
resu rejestru czy uzyskanie z odpowiedniej komórki ta-
blicy parameters podstawy czasu dla licznika). Wyko-
nując proces przekształcenia, można także wykluczyć
z procesu obsługi niektóre z rozpoznanych symboli wid-
niejących na ekranie. Takimi symbolami są przykłado-
program8_array
program8_array
adres rejestru zmiennej
skojarzonej ze stykiem
maska na rejestr zmiennej
skojarzonej ze stykiem
adres zmiennej statusowej
wiersza schematu
program16_array
program16_array
adres procedury obsługi
styku normalnie otwartego
adres procedury
obsługi pola pustego
adres zmiennej statusowej
wiersza schematu
adres zmiennej statusowej
wiersza schematu
stała określająca liczbę symboli
tworzących połączenie pionowe
adres procedury obsługi
połączenia pionowego
adres procedury obsługi
styku normalnie zamknietego
adres rejestru zmiennej
skojarzonej ze stykiem
maska na rejestr zmiennej
skojarzonej ze stykiem
adres zmiennej statusowej
wiersza schematu
adres procedury
obsługi elementu
pierwszy argument lub
jego adres
adres zmiennej statusowej
wiersza schematu
drugi argument lub
jego adres
adres rejestru zmiennej
skojarzonej z cewką
maska na rejestr zmiennej
skojarzonej z cewką
adres zmiennej statusowej
wiersza schematu
adres rejestru zmiennej
skojarzonej z cewką
maska na rejestr zmiennej
skojarzonej z cewką
adres zmiennej statusowej
wiersza schematu
adres procedury
obsługi cewki
adres procedury
obsługi cewki
Rys. 7. Zawartość tablic odwzorowania dla przykładowego
programu z rys. 6
9
842786213.276.png 842786213.277.png 842786213.278.png 842786213.279.png 842786213.280.png 842786213.281.png 842786213.282.png 842786213.283.png 842786213.284.png 842786213.286.png 842786213.287.png 842786213.288.png 842786213.289.png 842786213.290.png 842786213.291.png 842786213.292.png 842786213.293.png 842786213.294.png 842786213.295.png 842786213.297.png 842786213.298.png 842786213.299.png 842786213.300.png 842786213.301.png 842786213.302.png 842786213.303.png 842786213.304.png 842786213.305.png 842786213.306.png 842786213.308.png 842786213.309.png 842786213.310.png 842786213.311.png 842786213.312.png 842786213.313.png 842786213.314.png 842786213.315.png 842786213.316.png 842786213.317.png 842786213.319.png 842786213.320.png 842786213.321.png 842786213.322.png 842786213.323.png 842786213.324.png 842786213.325.png 842786213.326.png 842786213.327.png 842786213.328.png 842786213.330.png 842786213.331.png 842786213.332.png 842786213.333.png 842786213.334.png 842786213.335.png 842786213.336.png 842786213.337.png 842786213.338.png 842786213.339.png 842786213.340.png 842786213.341.png 842786213.342.png 842786213.343.png 842786213.344.png 842786213.345.png 842786213.346.png 842786213.347.png 842786213.348.png 842786213.349.png 842786213.351.png 842786213.352.png 842786213.353.png 842786213.354.png 842786213.355.png 842786213.356.png 842786213.357.png 842786213.358.png 842786213.359.png 842786213.360.png 842786213.362.png 842786213.363.png 842786213.364.png 842786213.365.png 842786213.366.png 842786213.367.png 842786213.368.png 842786213.369.png 842786213.370.png 842786213.371.png 842786213.373.png 842786213.374.png 842786213.375.png 842786213.376.png 842786213.377.png 842786213.378.png 842786213.379.png 842786213.380.png 842786213.381.png 842786213.382.png 842786213.384.png 842786213.385.png 842786213.386.png 842786213.387.png 842786213.388.png 842786213.389.png
 
Zgłoś jeśli naruszono regulamin