AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Steuerung jedes Pines des Parallelports mit Win95 bis WinXP
Tutorial durchsuchen
Ansicht
Themen-Optionen

Steuerung jedes Pines des Parallelports mit Win95 bis WinXP

Ein Tutorial von pmc · begonnen am 11. Sep 2003 · letzter Beitrag vom 6. Mär 2009
Antwort Antwort
Seite 8 von 9   « Erste     678 9      
pmc
Registriert seit: 9. Sep 2003
1. Aufbau der Schnittstelle :

Der Parallelport ist in drei Register engeteilt,
Datenregister(output), Kontrollregister(Input/Output) und
StatusRegister(Input).

Datenregister :
Das Datenregister stellt 8 leitungen zur verfügung,
worüber die zu druckenden Daten an den Drucker geleitet werden.
  • D0 bis D7 -> Pin 2 bis Pin 9 am PC-Stecker.
Kontrollregister :
Das Kontrollregister stellt 4 leitungen zur verfügung,
worüber der Drucker gesteuert wird.
  • Strobe -> Pin 1 am PC-Stecker.
    AutoLF -> Pin 14 am PC-Stecker.
    Init -> Pin 16 am PC-Stecker.
    Select -> Pin 17 am PC-Stecker.
Statusregister :
Das Statusregister stellt 5 Leitungen zur Verfügung,
worüber der Drucker seinen Status an den Pc übermittelt.
  1. Error -> Pin 15 am PC-Stecker.
    Online -> Pin 13 am PC-Stecker.
    Paper -> Pin 12 am PC-Stecker.
    Busy -> Pin 11 am PC-Stecker.
    ACK -> Pin 10 am PC-Stecker.

2. Verwendung :

Wichtig : Die Unit habe ich nur unter Win2K getestet, aber unter winXP
müsste es auch funktionieren!!!


Die Unit ParaPrcs stellt folgende Funktionen und Prozeduren zur Verfügung :

Function ReadCtrlLines : TCLines; ---> Liest die Leitungen des Kontroll-Registers der Parallelen Schnittstelle (Select - Init - AutoLF - Strobe)
Function ReadStateLines : TSLines; ---> Liest die Leitungen des Status-Registers der Parallelen Schnittstelle (Busy - ACK - Paper - Online - Error)

Procedure WriteDataLines(bits : TDBits); ---> Schreibt die Leitungen des Daten-Registers der Parallelen Schnittstelle (D0 bis D7)
Procedure WriteCtrlLines(cl : TCLines); ---> Schreibt die Leitungen des Kontroll-Registers der Parallelen Schnittstelle (Select - Init - AutoLF - Strobe)

Function PortReset : Boolean; ---> Setzt alle Leitungen auf LOW - Gibt True zurück wenn der Treiber geladen ist.


Hinweis zu den verwendeten Variablen-Typen :
  1. TSLines = record
    Busy : boolean;
    Ack : boolean;
    Paper : boolean;
    Online : boolean;
    Error : boolean;
    end;

    TCLines = record
    Select : boolean;
    Init : boolean;
    AutoLF : boolean;
    Strobe : boolean;
    end;

    TDBits = array[0..7] of boolean;

Was man nun damit ansteuern will ist einem selbst überlassen.
Bei Fragen, Eamil an mich.

MFG PMC

[edit=sakura] Archiv als ZIP beigefügt. Mfg, sakura[/edit]
Angehängte Dateien
Dateityp: exe port_access.exe (235,1 KB, 897x aufgerufen)
Dateityp: zip archiv.zip (214,2 KB, 738x aufgerufen)
Woher soll ich wissen was ich denke,
wenn ich noch nicht gehört habe was ich sage?
 
Assarbad
 
#71
  Alt 11. Okt 2004, 23:25
Hat denn mal irgendjemand versucht mit DeviceIoControl() und diesen IOCTLs den Parallelport anzusteuern? Ich seh ständig Versionen die generischen Portzugriff durchreichen und damit mehr Lücken aufreissen als mancher zu glauben scheint. Oder geht das nur aus dem Kernelmode? Habe es selber noch nicht probiert, aber dazu sind IOCTLs doch gut, Interface zu einem Treiber aus dem Usermode, aber eben angepaßt an ein bestimmtes Gerät.

Code:
IOCTL_PAR_QUERY_INFORMATION
IOCTL_PAR_SET_INFORMATION      
IOCTL_PAR_QUERY_DEVICE_ID      
IOCTL_PAR_QUERY_DEVICE_ID_SIZE
IOCTL_IEEE1284_GET_MODE        
IOCTL_IEEE1284_NEGOTIATE      
IOCTL_PAR_SET_WRITE_ADDRESS    
IOCTL_PAR_SET_READ_ADDRESS    
IOCTL_PAR_GET_DEVICE_CAPS      
IOCTL_PAR_GET_DEFAULT_MODES    
IOCTL_PAR_PING                
IOCTL_PAR_QUERY_RAW_DEVICE_ID  
IOCTL_PAR_ECP_HOST_RECOVERY    
IOCTL_PAR_GET_READ_ADDRESS    
IOCTL_PAR_GET_WRITE_ADDRESS    
IOCTL_PAR_TEST                
IOCTL_PAR_IS_PORT_FREE
Quelle: ntddpar.h
  Mit Zitat antworten Zitat
Assarbad
 
#72
  Alt 11. Okt 2004, 23:40
So, um meine eigene Frage zu beantworten. Eine kurze Suche nach einem der IOCTLs ergab folgendes:

http://bcb.net.ru/article/hard/index001.html
http://www.zsk.ict.pwr.wroc.pl/Dydak...ryf/Materialy/
http://www.ntcompatible.com/thread25771-1.html
http://msdn.microsoft.com/library/de...c1789a.xml.asp

So, damit wäre bewiesen, daß es unter WXP (und sehr wahrscheinlich auch unter NT4 und W2K!) sehr wohl auf sichere Art und Weise geht, nämlich mit DeviceIoControl() ohne gleich generischen Portzugriff zu erlauben!

Nachtrag: Bitte benutzt keine solche Frickellösung mit extra Treiber für den Produktiveinsatz!!!! Um zu verdeutlichen was ich meine (und das ist wahrlich nicht als Angriff gemeint!) bedenke man doch bitte mal, wozu die Usermode/Kernelmode-Barriere in modernen Protected-Mode OS existiert?! Nämlich dazu um direkten Hardwarezugriff zu vermeiden. Ich bin ja geradezu schon angetan davon, daß der Treiber über die HAL-Funktionen die Portzugriffe realisiert und nicht noch über stupides IN/OUT auf CPU-Ebene - dennoch - generischer Portzugriff ist gefährlich. Bisher konnte ich in dem oben angebotenen Treiber keinerlei Barriere für bestimmte Portadressen finden (was in Minimum an Sicherheit sein sollte) - ich werde es mir aber weiter anschauen.

Es gibt sicher Bereiche in denen auch ein generisches Durchreichen von Portzugriffen seine Berechtigung hat, hier jedoch ist es einfach leichtsinnig.
Ansonsten würde ich empfehlen wir machen einen anderen Thread auf, wo alle, die Produkte mit einem solchen generischen Porttreiber benutzen (oder schlimmer: schreiben), ihre Produktnamen posten, damit sich der Benutzer wenigstens aussuchen kann, welche gefährlichen Produkte er nicht benutzt!
  Mit Zitat antworten Zitat
runger
 
#73
  Alt 23. Apr 2005, 08:33
Hallo,

vielen Dank für deine Mühe.
Aber leider fehlt mir etwas ganz wesentliches:
Warum gibts die Procedure Readdata nicht?
Die Schnittstelle ist Bidirektional.
Das wäre interessant.

Rainer
  Mit Zitat antworten Zitat
ThorvdA
 
#74
  Alt 25. Apr 2006, 19:08
Hallo zusammen,
ich habe Delphi 7.
Wo könnte ich denn diese dcu für meine version herbekommen?
  Mit Zitat antworten Zitat
Geist
 
#75
  Alt 21. Jun 2006, 23:05


Hallo,

ich bin auf der Suche nach der LPT1-Steuerung in diesem Forum gelandet und war beim Lesen der ersten Postings total begeistert.
Da ich aber auch mit Delphi7 arbeite kam ich bald auf den Boden der Tatsachen zurück. Wie meinen Vorgängern auf dieser Seite, fehlt mir einfach die Lösung für diese Version.
Eigentlich schade, wenn man betrachtet was aus diesem Thema gewachsen ist.
Vieleicht findet sich ja doch noch mal jemand der den Anfängern bei diesem Problem Unterstützung bieten kann.
Ich bedanke mich schon mal bei jedem der seine Zeit opfert um sein Wissen weiter zu geben.

MfG
  Mit Zitat antworten Zitat
omata

 
Delphi 7 Enterprise
 
#76
  Alt 21. Jun 2006, 23:15
Hallo Geist,

was spricht gegen diese Lösung hier?
  Mit Zitat antworten Zitat
Benutzerbild von new_berlin
new_berlin
 
#77
  Alt 23. Dez 2006, 14:35
Ich habe mal eine Frage:

Wie bekome ich das hin, Daten über die LPT-Schnittstelle einzulesen??

Das Status-Register ist ja dazu da, Daten einzulesen.
Meine Überlegung war jetzt: Wenn ich 5V an einen Eingang vom Status-Register anlege,
müsste dieser ja auch high, bzw true springen.

Doch das funzt nicht. (oder ich stell mich zu blöde an!)

Ich wäre für Vorschläge sehr dankbar.
  Mit Zitat antworten Zitat
CharlY_rockt_wat_weg

 
Delphi 6 Personal
 
#78
  Alt 11. Okt 2007, 10:59
Hey Leute ich ahb mich vor kurzem hier angemeldet!!!
hab da mal ne frage....
Ich mache jetzt in meiner ausbildung ein projekt mit 2 lichtschranken und eine leterplatte mit 2 dioden (rot und grün) na jedefalls will ich die lichtschranken über den lpt port steuern. Ich benötige ein Programm mit dem ich die signale die die lichtschranken abgeben einlesen kann und dann wenn ich sie verglichen hab an die dioden abgeben kann und somit bestimmen kan ob sie an oder aus sein sollen!!!
Ich hoffe ihr könnt mir helfen....
  Mit Zitat antworten Zitat
I love Delphi
 
#79
  Alt 1. Mär 2009, 17:01
Hallo,
Kennt den keiner einer Möglichkeit wie man das Ganze unter Delphi 7 oder Delphi 3 zum laufen bringen kann?

Danke schonmal,
I love Delphi!
  Mit Zitat antworten Zitat
I love Delphi
 
#80
  Alt 2. Mär 2009, 19:55
so,
hier mit hat bei mir geklappt!

http://www.franksteinberg.de/win32bit.htm
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 8 von 9   « Erste     678 9      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz