Oprogramowanie LPT w DELPHI - Pomocy

Rozmowy dotyczące oprogramowania sterującego maszynami CNC i sterowników CNC obrabiarek numerycznych

Autor tematu
MarcinK
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 2
Posty: 2
Rejestracja: 09 wrz 2005, 09:26
Lokalizacja: Katowice-Cz?stochowa

Oprogramowanie LPT w DELPHI - Pomocy

#1

Post napisał: MarcinK » 09 wrz 2005, 09:30

Hej! Czy ktoś mógłby zamieścić listing procedury oprogramowującej wyjście LPT w DELPHI? W Pascalu była to instrukcja PORT. Niestety nie ma jej w DELPHI.
Być może to banalne pytanie, ale dzięki za pomoc



Tagi:


prokopcio
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 2
Posty: 1138
Rejestracja: 11 sty 2005, 13:03
Lokalizacja: Grodków
Kontakt:

#2

Post napisał: prokopcio » 09 wrz 2005, 09:48

poszukaj fo forum delphi - widziałem gdzieś odpowiednik komendy "port" ale to była napewno wstawka krótka w assemblerze (5 linijek) albo poszukaj gotowego komponentu.


Autor tematu
MarcinK
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 2
Posty: 2
Rejestracja: 09 wrz 2005, 09:26
Lokalizacja: Katowice-Cz?stochowa

#3

Post napisał: MarcinK » 09 wrz 2005, 10:08

Hej
znalazlem tą wstawkę w asemblerze, ale ona również nie działa. Jeżeli mozna spytać, a Ty co wykorzystałeś (jaki komponent) do oprogramowa LPT?

Pozdrowienia

Awatar użytkownika

ottop
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 1
Posty: 346
Rejestracja: 07 cze 2004, 13:11
Lokalizacja: Bielsko-Biała
Kontakt:

#4

Post napisał: ottop » 09 wrz 2005, 10:10



prokopcio
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 2
Posty: 1138
Rejestracja: 11 sty 2005, 13:03
Lokalizacja: Grodków
Kontakt:

#5

Post napisał: prokopcio » 09 wrz 2005, 10:19

ja używam coma a nie LPT


lodek123
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 1
Posty: 13
Rejestracja: 24 lip 2005, 10:56
Lokalizacja: Opole

#6

Post napisał: lodek123 » 09 wrz 2005, 15:44

Jak Ci to pomoże to proszę:

Jako adresy przy wywołaniu procedur podaj
dla LPT1 - $0378
LPT2 - $0278
dla danych
a dla linii sterujących $0379 i $0279
w/g opisu portu LPT

Pocedury może niezbyt optymalnie napisane, ale działają napewno.

Żeby nie było nieporozumień, tą metodą całość działa tylko pod wcześniejszymi windowsami
95,98,Me
jeżeli potrzebujesz tego pod Win2000, NT lub XP
szukaj biblioteki "io.dll" dla Delphi (i innych)
niestety nie pamiętam linka...

Kod: Zaznacz cały

// funkcja odczytu danej z portu
function odczytaj_z_portu(adres:word):byte; 
var odczyt:byte; 
begin
  asm
    mov DX,adres
    in AL,DX
    mov odczyt,AL
  end; 
 odczytaj_z_portu:=odczyt; 
end; 


// procedura zapisu danych do portu
procedure wpisz_do_portu(adres:word;dana:byte); 
begin
    asm
       mov DX,adres
       mov AL,dana
       out DX,AL
    end; 
end; 


procedure wylacz_bit(adres:word;numer:byte); 
  begin
    case numer of
      0:asm
         mov dx,adres
         in al,dx
         and al,11111110b
         out dx,al
        end; 
      1:asm
         mov dx,adres
         in al,dx
         and al,11111101b
         out dx,al
        end; 
      2:asm
         mov dx,adres
         in al,dx
         and al,11111011b
         out dx,al
        end; 
      3:asm
         mov dx,adres
         in al,dx
         and al,11110111b
         out dx,al
        end; 
      4:asm
         mov dx,adres
         in al,dx
         and al,11101111b
         out dx,al
        end; 
      5:asm
         mov dx,adres
         in al,dx
         and al,11011111b
         out dx,al
        end; 
      6:asm
         mov dx,adres
         in al,dx
         and al,10111111b
         out dx,al
        end; 
      7:asm
         mov dx,adres
         in al,dx
         and al,01111111b
         out dx,al
        end; 
    end; 
  end; 



procedure wlacz_bit(adres:word;numer:byte); 
  begin
    case numer of
      0:asm
         mov dx,adres
         in al,dx
         or al,00000001b
         out dx,al
        end; 
      1:asm
         mov dx,adres
         in al,dx
         or al,00000010b
         out dx,al
        end; 
      2:asm
         mov dx,adres
         in al,dx
         or al,00000100b
         out dx,al
        end; 
      3:asm
         mov dx,adres
         in al,dx
         or al,00001000b
         out dx,al
        end; 
      4:asm
         mov dx,adres
         in al,dx
         or al,00010000b
         out dx,al
        end; 
      5:asm
         mov dx,adres
         in al,dx
         or al,00100000b
         out dx,al
        end; 
      6:asm
         mov dx,adres
         in al,dx
         or al,01000000b
         out dx,al
        end; 
      7:asm
         mov dx,adres
         in al,dx
         or al,10000000b
         out dx,al
        end; 
    end; 
  end;

Awatar użytkownika

ludas
Sympatyk forum poziom 2 (min. 50)
Sympatyk forum poziom 2 (min. 50)
Posty w temacie: 1
Posty: 58
Rejestracja: 22 lis 2004, 21:27
Lokalizacja: okolice Poznania

#7

Post napisał: ludas » 09 wrz 2005, 20:07

Wstawki asm są fajne, ale z pewnych przyczyn nie działają pod winXP. Proponuję bibliotekę (+komponent) dlportIO, można tego używać również pod linuxem.

To jest freeware, więc daję w załączniku.
Załączniki
dlportio.zip
(1.32 MiB) Pobrany 616 razy


vegelus
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 2
Posty: 125
Rejestracja: 19 sty 2005, 10:38
Lokalizacja: Olsztyn

#8

Post napisał: vegelus » 09 wrz 2005, 20:25

Pod Delphi przetestowalem i biblioteke IOPort jak i inne ale z czystego lenistwa i niecheci do WIN XP napisalem w pracy magisterskiej ze wymaganym systemem jest win98 i sterowanie zrobilem na wstawkach ASM :-)

Kod: Zaznacz cały

function PortWe(Adres : Word) : Byte; 
Asm
  mov DX,AX {ustawienie danych we właściwym miejscu} 
  in AL,DX {odczyt portu, w AL pojawi sie czytany bajt} 
End; 

procedure PortWy( Dane : Byte; Adres : Word); 
//procedura wysyla na port o adresie ADRES dane zawarte w zmiennej DANE
Asm
  out DX,AL
End; 
jest to krotsza wersja :-)
a samo obracanie silnikami w moim programie wygladalo tak :-)

Kod: Zaznacz cały


procedure Obracanie(kierunek_1 : Byte; kierunek_2 : Byte); 
Var
   DaneSilnik1, DaneSilnik2 : Word; 
begin
   DaneSilnik1 := 0;//sekwencja z pierwszego silnika
   DaneSilnik2 := 0;//sekwencja z drugiego silnika
   Dane := 0;//suma sekwencji wysylane na lpt
   Silnik_1[1]:=1; 
   Silnik_1[2]:=3; 
   Silnik_1[3]:=2; 
   Silnik_1[4]:=6; 
   Silnik_1[5]:=4; 
   Silnik_1[6]:=12; 
   Silnik_1[7]:=8; 
   Silnik_1[8]:=9; 
   Silnik_2[1]:=16; 
   Silnik_2[2]:=48; 
   Silnik_2[3]:=32; 
   Silnik_2[4]:=96; 
   Silnik_2[5]:=64; 
   Silnik_2[6]:=192; 
   Silnik_2[7]:=128; 
   Silnik_2[8]:=144; 
   Case kierunek_1 of
      0: Begin //zatrzymuje
            DaneSilnik1 := 0; 
         End; 
      1: Begin //kreci w prawo
            I_s1 := I_s1 + 1; 
            If (I_s1 > 8) then I_s1 := 1; 
            DaneSilnik1 := Silnik_1[I_s1]; 
         End; 
      2: Begin //kreci w lewo
            I_s1 := I_s1 - 1; 
            If (I_s1 < 1) then I_s1 := 8; 
            DaneSilnik1 := Silnik_1[I_s1]; 
         End; 
   End; 
   Case kierunek_2 of
      0: Begin //zatrzymuje
            DaneSilnik2 := 0; 
         End; 
      1: Begin //kreci w prawo
            I_s2 := I_s2 + 1; 
            If (I_s2 > 8) then I_s2 := 1; 
            DaneSilnik2 := Silnik_2[I_s2]; 
         End; 
      2: Begin //kreci w lewo
            I_s2 := I_s2 - 1; 
            If (I_s2 < 1) then I_s2 := 8; 
            DaneSilnik2 := Silnik_2[I_s2]; 
         End; 
   End; 
   Dane := DaneSilnik1 + DaneSilnik2; 
   PortWy(Dane,888); 
   Delay(30); 
end; 
Prace nad programikiem jednak ustaly po otrzymaniu zadawalajacej oceny z obrony :-) a teraz czekam az ruszy Open Sorsowy projekt :-)


woznk
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 1
Posty: 8
Rejestracja: 31 sty 2006, 17:33
Lokalizacja: Otwock

#9

Post napisał: woznk » 01 lut 2006, 21:47

Wlasnie w Delphi oprogramowalem port lpt pod XP - uzylem ActiveX ze strony http://www.logix4u.net - dziala elegancko :D


vegelus
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 2
Posty: 125
Rejestracja: 19 sty 2005, 10:38
Lokalizacja: Olsztyn

#10

Post napisał: vegelus » 01 lut 2006, 23:03

są różne darmowe komponenty do obsługi LPT z pod wszystkich WIN ale pomyślałem, że jak praca naukowa to niech będzie naukowo ;)

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „Ogólne Dyskusje na Temat Systemów Sterowania CNC”