61_63.pdf

(222 KB) Pobierz
Robot, część 3 - AVT-821
P R O J E K T Y
Robot, część 3
Oprogramowanie
AVT−821
W†trzeciej, ostatniej czÍúci
artyku³u przedstawiamy opis
oprogramowania steruj¹cego
ìrÍk¹î robota. Opis procedur
przygotowanych przez autora
u³atwi Czytelnikom
przygotowanie oprogramowania
spe³niaj¹cego ich indywidualne
wymagania.
Informacje ogÛlne
Program Raabot jest dostarcza-
ny z kitem AVT-821. S³uøy do
edytowania, zapisywania i†odtwa-
rzania kolejnych po³oøeÒ serwo-
mechanizmÛw stanowi¹cych ele-
menty wykonawcze robota. Pro-
gram przeznaczony jest do pracy
w systemie operacyjnym Win-
dows 95 lub 98. Nie bÍdzie
dzia³a³ prawid³owo z wczeúniej-
szymi wersjami Windows i†z†Win-
dows NT. Zosta³ napisany za
pomoc¹ Delphi 3, z†wykorzysta-
niem funkcji API32. Niemoøliwia
jest wiÍc jego wspÛ³praca ze
starszymi, 16-bitowymi wersjami
Windows. Nie pomoøe nawet za-
instalowanie Win32 do Windows
wersji 3.1 i†3.11. Poniewaø pro-
gram odwo³uje siÍ bezpoúrednio
do portÛw za pomoc¹ wstawek
asemblerowych, co jest niedozwo-
lonym rozwi¹zaniem w†systemie
Windows NT, moøe dzia³aÊ nie-
poprawnie rÛwnieø w tym syste-
mie.
Porty, adresy
Program Raabot steruje uk³a-
dem z†kitu AVT-821 za poúrednic-
twem ³¹cza rÛwnoleg³ego. W†pro-
gramie przewidziana jest wspÛ³-
praca ze standardowymi portami
LPT1 (adres 378h) i†LPT2 (adres
278h). Zmiany portu moøna do-
konaÊ wybieraj¹c odpowiedni¹ po-
zycjÍ w†menu Konfiguracja.
W†programie nie przewidziano
wspÛ³pracy z†portami ustawiony-
mi niestandardowo.
Instalowanie
i†odinstalowywanie
Aby zainstalowaÊ to oprogra-
mowanie naleøy uruchomiÊ pro-
gram setup.exe z dyskietki insta-
lacyjnej. Program instalacyjny sko-
piuje pliki oprogramowania na
dysk twardy i†utworzy grupÍ pro-
gramu Raabot w†Menu Start. Pro-
gram zapisuje w†systemie dane
konfiguracyjne w†pliku rejestrÛw.
Dlatego, aby program odinstalo-
waÊ ca³kowicie, naleøy skorzystaÊ
z†polecenia Dodaj/UsuÒ Programy
z†Panelu Sterowania lub z†progra-
mu UsuÒ Raabota , znajduj¹cego
siÍ w†grupie programu Raabot .
Nie zaleca siÍ rÍcznego usuwania
programu. Nie stanowi to øadnego
niebezpieczeÒstwa dla systemu,
a†nawet nie zaúmieca go w†istot-
Rys. 5. Otwarte okno nowej aplikacji w Delphi.
Elektronika Praktyczna 9/99
61
Robot
30563946.004.png 30563946.005.png
Robot
rzanie ca³ej sekwencji w†pÍtli.
Szybka edycja po³oøeÒ serwo-
mechanizmÛw w†kolejnych pozy-
cjach moøliwa jest przy wykorzys-
taniu klawisza TAB i†kursorÛw.
Ca³¹ utworzon¹ sekwencjÍ ru-
chÛw moøna zapisaÊ w†pliku
w†sposÛb standardowy dla syste-
mu Windows 95/98.
Rys. 6. Sposób lokalizowania suwaka.
Jak dzia³a program
Delphi jest wyj¹tkowo wdziÍcz-
nym narzÍdziem programistycz-
nym. Stanowi bardzo inteligentne
i†intuicyjne po³¹czenie starego, po-
wszechnie lubianego Pascala, úro-
dowiska graficznego i†obiektowych
technik programowania. Progra-
mowanie w†nim jest bardzo pros-
te, nawet jeøeli ktoú od Delphi
zaczyna programowanie pod Win-
dows.
Serce aplikacji Raabot stanowi
krÛciutka, standardowa procedur-
ka zapisuj¹ca do portu o†podanym
adresie wartoúÊ podan¹ jako pa-
rametr:
nym stopniu. Jest to po prostu
nieeleganckie.
Programy instalacyjny i†odins-
talowywuj¹cy s¹ ca³kowicie zgod-
ne ze standardami obowi¹zuj¹cy-
mi w†systemach Windows 95 i†98.
liwoúÊ zapisania do 10000 kolej-
nych po³oøeÒ kaødego z†serwome-
chanizmÛw. Po³oøenie kaødego
z†suwakÛw odpowiada aktualnemu
po³oøeniu odpowiedniego serwo-
mechanizmu. Aby zapamiÍtaÊ bie-
ø¹ce po³oøenia serwomechaniz-
mÛw i†przejúÊ do kolejnej pozycji
naciúnij NastÍpny . Przyciski: Po-
przedni , Pierwszy i † Ostatni umoø-
liwiaj¹ zmianÍ aktualnej pozycji.
Przyciski Wstaw i† UsuÒ umoøli-
wiaj¹ dodawanie i†usuwanie po-
zycji.
Pola znajduj¹ce siÍ po lewej
stronie suwakÛw steruj¹cych ser-
wami pozwalaj¹ na wpisanie w³as-
nej nazwy danego serwomecha-
nizmu. W†konkretnym modelu po-
zwala to nadawaÊ nazwy poszcze-
gÛlnym serwom, np. szczypce czy
obrÛt przedramienia. Umoøliwia
to ³atw¹ identyfikacjÍ aktualnie
edytowanego stopnia swobody Ra-
abota. Pola znajduj¹ce siÍ po
prawej stronie suwakÛw wskazuj¹
aktualne po³oøenie serwa w†prze-
dziale od 0†do 255.
Dla kaødej pozycji moøna in-
dywidualnie ustawiÊ prÍdkoúÊ po-
ruszania siÍ serwomechanizmÛw
za pomoc¹ wskaünikÛw wyboru
(radio button), znajduj¹cych siÍ po
prawej stronie w†grupie PrÍdkoúÊ.
Przewidziano trzy rÛøne prÍdkoúci.
W³¹czenie odtwarzania ca³ej
sekwencji po³oøeÒ moøna doko-
naÊ klikaj¹c na prze³¹cznik On/
Off . Przewidziano rÛwnieø odtwa-
procedure Wpisz(PortValue, DataValue:
word);
begin
DataValue := (DataValue * 256) + Da-
taValue;
asm
Uwagi dla uøytkownikÛw
Program s³uøy do ustawiania,
modyfikacji, zapisywania i†odtwa-
rzania kolejnych po³oøeÒ kaødego
z†oúmiu serwomechanizmÛw od-
dzielnie. Przewidziana jest moø-
Mov ax,DataValue
Mov dx,PortValue
Out dx,ax
end;
end;
To co znajduje siÍ pomiÍdzy
s³owami kluczowymi asm i†end,
to w³aúnie wspomniana wczeúniej
wstawka asemblerowa zapisuj¹ca
do portu o†adresie PortValue war-
toúÊ DataValue . Jednak, aby poin-
formowaÊ urz¹dzenie AVT-821
o†po³oøeniu kolejnego serwa, na-
leøy do portu zapisaÊ ca³y ci¹g
informacji.
Rys. 7. Okno definiujące
parametry suwaka.
function DoPortu(P: Pointer): integer;
var
i: integer;
begin
repeat
for i := 1 to 8 do
// dla każdego serwa
begin
Wpisz(nrportu, a[i]);
// podaj położenie
Wpisz(nrportu + 2, 7 + i);
// wraz z informacją o którym
// serwie mowa
62
Elektronika Praktyczna 9/99
 
30563946.006.png 30563946.001.png
Robot
ciwoúci naszego
paska. W³aúci-
woúÊ Max od-
powiedzialn¹ za
to, jak¹ maksy-
maln¹ wartoúÊ
zwraca pasek,
zmieniamy
z†domyúlnej
wartoúci 100 na
255 ( rys. 7 ).
Trzecie ok-
no, jakie mamy
do dyspozycji,
to edytor kodu
ürÛd³owego. Za-
wiera on w†tej
chwili jedynie
generowany au-
tomatycznie kod, ktÛry musimy
teraz uzupe³niÊ o†napisane przez
nas procedury.
Pod s³owem kluczowym imple-
mentation wpiszmy nasz¹ proce-
durkÍ Wpisz( PortValue, DataVa-
lue: word ) podan¹ wyøej.
Potem kliknijmy dwukrotnie
na pasku ScrollBar1 . Pojawi siÍ
kod ürÛd³owy tworzonej aplikacji
z†gotowym szkieletem procedury,
ktÛra bÍdzie wywo³ywana za kaø-
dym razem, gdy przesuniesz pa-
sek ScrollBar1 , czyli procedurÍ
TForm1.ScrollBar1Change(Sender:
TObject) . PomiÍdzy s³owa kluczo-
we begin i† end wpiszmy:
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
Rys. 8. Okno edytora tekstu z programem obsługi
suwaka.
procedure Wpisz(PortValue, DataValue:
word);
begin
DataValue := (DataValue * 256) +
DataValue;
asm
Mov ax,DataValue
Mov dx,PortValue
Out dx,ax
end;
end;
Wpisz(nrportu + 2, 4);
// koniec przekazu :-)
end;
until blad=true;
end;
W†macierzy a[8] s¹ zapisane
aktualne po³oøenia wszystkich oú-
miu serw.
procedure TForm1.ScrollBar1Chan-
ge(Sender: TObject);
begin
Wpisz($378, ScrollBar1.Position);
Wpisz($378 + 2, 8);
Wpisz($378 + 2, 4);
Label1.Caption:=IntToStr(Scrol-
lBar1.Position);
end;
end.
I†to wszystko!
Tym, ktÛrzy chcieliby siÍ prze-
konaÊ, jak proste jest dziú pro-
gramowanie pod Windows propo-
nujÍ nastÍpuj¹cy eksperyment:
sprÛbujcie napisaÊ w³asny pro-
gram do sterowania Raabotem
w†10 minut! Najpierw powinniú-
cie rozejrzeÊ siÍ za darmow¹
wersj¹ Delphi. Na przyk³ad Del-
phi 2 by³o wielokrotnie publiko-
wane na kr¹økach do³¹czanych do
czasopism o tematyce "kompute-
rowej".
Po otwarciu nowego projektu
aplikacji (Menu File| New Appli-
cation) powinniúmy zobaczyÊ na
ekranie komputera sytuacjÍ jak na
rys. 5 .
Okno zatytu³owane Form1, to
nasza aplikacja. Powinniúmy do-
daÊ do niego jakieú elementy. Na
przyk³ad suwak (ScrollBar) i†opis
tekstowy (Label). W†tym celu po-
winniúmy na pasku narzÍdzi zna-
leüÊ potrzebne nam elementy i†do-
daÊ je do naszego projektu po-
przez dwukrotne klikniÍcie. Ele-
menty te moøemy na naszym
oknie dowolnie przesuwaÊ za po-
moc¹ myszy. Ustawmy je mniej
wiÍcej tak, jak to widaÊ na rys.
6 .
I†to wszystko! Pozosta³o nam
nacisn¹Ê F9, czyli skompilowaÊ
projekt i†cieszyÊ siÍ z†w³asnego
programu, ktÛry na ruch suwacz-
ka reaguje ruchem pierwszego
serwa naszego Raabota. To na-
prawdÍ proste. ZachÍcam do eks-
perymentowania. Jeøeli jesteúcie
zainteresowani t¹ tematyk¹ na-
piszcie do nas.
ByÊ moøe przygotujemy publi-
kacjÍ wyjaúniaj¹c¹ sposoby zapi-
sywania i†odczytywania portÛw
z†poziomu Delphi.
Adam Dębowski, AVT
Wpisz($378, ScrollBar1.Position);
Wpisz($378 + 2, 8);
Wpisz($378 + 2, 4);
Label1.Caption:=IntToStr
(ScrollBar1.Position);
Ca³oúÊ, wraz z†kodem genero-
wanym automatycznie, powinna
wygl¹daÊ nastÍpuj¹co:
unit Unit1;
interface
uses
Windows, Messages, SysUtils,
Classes, Graphics, Controls, Forms,
Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
ScrollBar1: TScrollBar;
Label1: TLabel;
procedure ScrollBar1Change(Sen-
der: TObject);
private
W†oknie Object Inspector mu-
simy teraz zmieniÊ jedn¹ z†w³aú-
Rys. 9. Okno działającego
programu.
Elektronika Praktyczna 9/99
63
 
30563946.002.png 30563946.003.png
Zgłoś jeśli naruszono regulamin