edw 2003 02 s20


Wykorzystanie PC-ta w praktyce
elektronika-automatyka
Czasem potrzeba czegoś więcej niż uni-
b4 - 13
wersalnego generatora funkcji, nawet
b5 - 12
bardzo wysokiej klasy. Powiedzmy, że
b6 - 10
dla przetestowania jakiegoś układu by-
b7 - 11
łoby bardzo wskazane wytworzyć co 21
Adres bazowy + 2 - jeszcze 4 linie wyjściowe:
sekund serie impulsów o przypadko-
b0 - nóżka 1
wym czasie trwania, zawartym między
0,2ms a 345ms, a liczba tych impulsów b1 - 14
powinna być równa liczbie dziesiątek b2 - 16
sekund aktualnego czasu zegarowego,
b3 - 17
ale tylko wtedy, gdy liczba ta jest aku-
Jeśli więc chcemy wysłać na nóżkę 5. złą-
rat nieparzysta... Dla parzystych dzie-
cza stan wysoki, piszemy
siątek sekund liczba impulsów wynosić
out &H378,8
powinna zawsze 14. A jeśli na wejściu
Jeszcze lepiej jest napisać:
pojawi się sygnał podczas trwania siód-
out &H378,&B00001000
mego lub trzynastego z kolei impulsu,
ponieważ wtedy od razu widzimy, na której
trzeba zatrzymać proces!
Rys. 1 linii wyjściowej pojawi się jedynka. Po pro-
stu ósemka lub 23 napisana jest tu w postaci
I co teraz? binarnej, czyli takiej, jaka jest wysyłana
bas=&H378:C=0:B=0
W praktyce elektronika-automatyka zacho- wprost do portu. Po prawej stronie liczby
poczatek:
dzi często potrzeba wygenerowania jakiegoś &B00001000 mamy najmniej znaczący bit,
out bas,0:delay 2
specyficznego sygnału, na przykład serii im- out bas,1
czyli mówiąc w skrócie - 2. nóżkę złącza,
for X=1 to 10000:next X
pulsów prostokątnych o określonych para- a po lewej - najstarszy bit - nóżka 9.
metrach. Przydałaby się też możliwość zba- if (inp(bas+1) and &B00001000)=0 then Aż do czasu wysłania na ten port następ-
incr C
dania reakcji układu na te sygnały. Wtedy są nej, innej liczby wartości jego bitów (i stany
else
dwie możliwości: kupić lub skonstruować ja- incr B
logiczne na nóżkach złącza) nie zmienią się.
end if
kiś specjalizowany generator/tester tego ro- Przedstawiony na początku przykładowy
dzaju układów albo... napisać kilka linijek program działa następująco:
do
if inkey$<>  then
programu i mniej więcej po czasie wypicia Na początku zmienna bas uzyskuje war-
goto poczatek
jednej kawy mieć gotowy przyrząd. Oczywi- tość &H378; jest to adres podstawowy portu
else
ście trzeba jeszcze mieć w pobliżu jakiegoś goto wyniki WE/WY zapisany w postaci heksadecymal-
loop
PC-ta, ale ten warunek elektronicy spełniają nej. Dobrze jest tak to zapisać, ponieważ
w 99% przypadków, bo może to być pecet pózniej będziemy korzystać z adresów o 1
wyniki:
? Liczba prawidłowych cykli: ;C
nawet baaardzo stary. i o2 większych, a zatem aby nie używać bez-
? Liczba nieprawidlowych cykli: ;B
względnych wartości przy adresowaniu, wy-
Przykład 1 Zostawiamy to wszystko włączone na noc godniej będzie napisać bas+1 (wiadomo, że
Wyobrazmy sobie, że trafia w nasze ręce ma- a rano już wszystko wiadomo: siłownik wy- chodzi tu o wejścia komputera) i bas+2 (dal-
szyna do produkcji sznurowadeł z podejrze- konał 8536 prawidłowych cykli, a 121 było sze wyjścia). A pod adresem bas jest po pro-
niem zacinania się siłownika do przeciągania zbyt długich. stu 8 wyjść.
sznurka o zadaną długość. Stwierdzamy, że do- Teraz garść objaśnień: B jest liczbą błędnie wykonanych cykli,
pływ powietrza do siłownika sterowany jest Na 25-stykowym gniezdzie drukarkowym a C liczbą prawidłowych cykli; na początku
jednym elektrozaworem, a osiągnięcie położe- (Centronix) mamy 12 wyjść i 5 wejść, które zerujemy te zmienne.
nia końcowego badane jest czujnikiem induk- można wykorzystać w każdej chwili. Oto Pętla główna rozpoczyna się etykietą
cyjnym. Okazuje się, że podejrzany siłownik przyporządkowanie poszczególnych bitów poczatek. Następnie wysyłamy na wyjście
czasami nie osiąga końcowego położenia w za- numerom wyprowadzeń portu: b0 portu o adresie bas stan niski, na czas 2
danym czasie, co psuje całą resztę cyklu i po- Adres bazowy (&H378) - cały bajt wyjściowy: sekund. W tym czasie siłownik ma zająć po-
woduje konieczność dłuższego postoju i inter- b0 - nóżka 2 łożenie spoczynkowe. Wtedy wysyłamy
wencji serwisu. Na domiar złego zdarza się to b1 - 3 stan wysoki, który powoduje załączenie
dość rzadko i nie sposób zauważyć przyczyny b2 - 4 elektrozaworu i powoduje ruch roboczy si-
podczas normalnej pracy. Przydałoby się zatem b3 - 5 łownika. W tym momencie rozpoczyna się
zbadać sam układ siłownik-czujnik położenia. b4 - 6 odliczanie czasu na dojście siłownika do po-
Zależałoby nam na określeniu, czy i jak b5 - 7 łożenia końcowego. Załatwia to w tym
często siłownik nie osiąga końcowego poło- b6 - 8 przypadku 10000 przejść pętli for - next ze
żenia w założonym czasie. b7 - 9 zmienną X.
Podłączamy więc do zaworu i czujnika Adres bazowy + 1 - to 5 linii wejściowych: Po tym czasie badamy warunek:
komputer (rysunek 1) i piszemy tak: b3 - nóżka 15 if (inp(bas+1) and &B00001000)=0
Elektronika dla Wszystkich
20
Forum Czytelników
Ponieważ instrukcja inp(bas+1) daje nam Można też wykorzystać zmienną timer. można poświęcić mu jeszcze trochę czasu
wartość całego bajtu o adresie bas+1, a my Program może wyglądać następująco: i doprowadzić go do lepszego stanu. W koń-
chcemy znać tylko wartość jednego bitu tego cu nie maluje się trzonka siekiery przed jej
bas=&H378:input podaj okres ;T
A:
bajtu, zastosowałem maskę &B00001000, użyciem. Ważne, żeby ją w ogóle znalezć...
out bas,3:delay .1:out bas,1:delay 1.9:out
która wraz z operatorem AND powoduje wy- Chciałem na tych przykładach pokazać,
bas,0
zerowanie wszystkich bitów odczytanego x=timer jak prosto można rozwiązać dość zawiły pro-
do
z portu bajtu - oprócz tego jednego, na blem - braku odpowiedniego generatora.
if (inp(bas+1) and &B00001000)=0 then stop
którym nam zależy, czyli tego o wadze 23. Je- loop until timer-x>=T-2
goto A
śli w momencie odczytu bajtu 15. nóżka złą- Przykład 3
cza była zwarta do masy (tranzystorem wyj- Jest to wersja minimalna programu, bez Zróbmy to jako uzupełnienie przykładu 2.
ściowym czujnika indukcyjnego na rysunku żadnych udogodnień i zabezpieczeń, ale Załóżmy, że zależy nam na tym, aby impulsy
1), warunek powyższy będzie spełniony; bit w praktyce to najczęściej wystarcza, bo po- na nóżce 2. nie miały stałego czasu, ale żeby
b3 był równy zeru. Wtedy zwiększa się o je- trzebujemy takiego programu np. na godzinę były coraz dłuższe.
den wartość zmiennej B. Jeśli czujnik nie był i chodzi głównie o to, aby potrafić go szybko A zatem jeszcze raz:
wyzwolony, bit ten miał wartość jeden napisać i uruchomić czy zmodyfikować.
bas=&H378:input podaj okres ;T
A:
i zwiększy się o jeden wartość zmiennej C. Na początku oczywiście ustalenie adresu
out bas,3:delay .1:out bas,1
Po rozpatrzeniu tego warunku program prze- podstawowego - bas=&H378. Potem żąda-
chodzi do pętli nie podania okresu generowanego przebiegu. do tej pory - w zasadzie bez zmian, lecz teraz
Od etykiety A: rozpoczyna się nasz przebieg zamiast stałego opóznienia 1,9s trzeba wsta-
do
if inkey$<>  then - wysyłamy na port liczbę 3, czyli w zapisie wić wartość, która będzie się co okres zwięk-
goto poczatek
dwójkowym &B00000011. Widać od razu, że szać. I to nie w nieskończoność, tylko ma-
else
na nóżkach 2 i 3 pojawią się jedynki. ksymalnie do długości okresu pomniejszonej
goto wyniki
end if
Trwać to będzie tylko przez 0,1 sekundy, o jakąś niewielką wartość. Jako kolejne
loop
ponieważ po komendzie delay .1 następuje  ćwiczenie zastąpimy teraz skok bezwarun-
aby sprawdzić, czy nie jest wciśnięty klawisz wysłanie na port nowej liczby, tym razem kowy z końca pętli do etykiety A: pętlą do -
spacji (wyjście z pętli głównej i wyświetlenie &B00000001. Znaczy to tyle, że znika je- loop.
wyników). Jeśli nie jest wciśnięty, wykony- dynka z nóżki 3. ale pozostaje jedynka na
bas=&H378:input podaj okres ;T
wany jest skok do etykiety poczatek: i kolej- nóżce 2. To był koniec tego krótkiego impul- a=.4
ny cykl ruchu siłownika. su, który miał się pojawiać na początku każ-
do
dego impulsu naszego podstawowego prze- incr a,.1
 [ lub a=a+.1 ]
Przykład 2 biegu. Teraz czas na resztę okresu, czyli
if a>=T-.5 then a=.5
Załóżmy teraz, że chcemy generować impul- trzeba odliczyć czas T pomniejszony o 2 se-
out bas,3:delay .1:out bas,1:
sy o czasie trwania 2s i okresie 10s z możli- kundy, które już minęły. Można byłoby użyć
delay (a-.1):out bas,0
wością zmiany okresu. Żeby było trochę tru- komendy delay (T-2), ale mamy jeszcze do
x=timer
dniej, chcemy aby była możliwość, powiedz- realizacji ostatnie zadanie - możliwość wyłą-
do
my, zatrzymania tego generatora przyciskiem czania generatora podczas trwania stanu ni-
if (inp(bas+1) and &B00001000)=0
na 15. nóżce złącza, ale tylko w trakcie prze- skiego.
then stop
loop until timer-x>=T-a
rwy między impulsami. I jeszcze coś takiego: Można w tym celu zapamiętać jako x war-
loop
na początku każdego impulsu chcielibyśmy tość zmiennej TIMER, która jest niczym in-
mieć na oddzielnym wyjściu krótki impuls nym jak liczbą sekund, które upłynęły od Zmienna a jest tu czasem trwania impul-
do synchronizacji jakiegoś innego urządze- ostatniego włączenia komputera. Wartość ta su, a zatem czas przerwy musi wynosić T-a.
nia. Czy to nie nazbyt wygórowane żądania? zmienia się co 50ms, czyli dość często jak na
Wcale nie. Wyjście podstawowe zrobimy, nasze wymagania. Nie żądamy przecież su- Ciąg dalszy na stronie 30.
powiedzmy, na nóżce 2., a dodatkowe impul- perdokładności i rozdzielczości regulacji
sy - na nóżce 3 (rysunek 2). wwiększości praktycznych przypadków. Pę-
Mamy do dyspozycji kilka możliwości tla kończy się, gdy od jej rozpoczęcia upłynie
odliczania czasu. Jeśli nie zależy nam na du- czas T-2 sekundy.
żej rozdzielczości nastawianych wartości, Należałoby w zasadzie uniemożliwić
można użyć po prostu funkcji delay t, gdzie wpisanie okresu mniejszego niż 2s, ale nie
t jest czasem opóznienia w sekundach. Moż- o to przecież chodzi... Wystarczy o tym tyl-
na to zrobić również w pustej pętli for - next, ko pamiętać.
do - loop albo while - wend. Aby w tej części okresu mieć wpływ na
działanie programu, musimy umieścić wpętli
Rys. 2 służącej do odmierzania czasu również frag-
ment, gdzie cyklicznie będzie badany stan
nóżki 15. Warunek skonstruowany jest
podobnie jak w poprzednim przykładzie, czy-
li badamy tylko stan bitu b3 słowa wejścio-
wego odczytywanego instrukcją inp(bas+1).
I znów - należałoby może zrobić jakieś
bardziej eleganckie wyjście z programu, ale
z praktyki wiadomo, że jeśli tylko komputer
nie zawiesza się, to już sobie damy ze wszy-
stkim radę. Chyba że taki program nie ma
być używany tylko sporadycznie; wtedy
Elektronika dla Wszystkich
21


Wyszukiwarka

Podobne podstrony:
edw 03 s20
edw 03 s20
edw 03 s20
edw 03 s20
edw 03 s20
edw 03 s56
edw 03 s61
edw 03 s56
edw 03 s12
edw 03 s13
edw 03 s51
edw 03 s55
edw 03 s54
edw 03 s68
edw 03 s61

więcej podobnych podstron