AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Portzugriff auf serielle Schnittstelle funzt nicht unter XP
Thema durchsuchen
Ansicht
Themen-Optionen

Portzugriff auf serielle Schnittstelle funzt nicht unter XP

Ein Thema von devidespe · begonnen am 18. Okt 2007 · letzter Beitrag vom 18. Okt 2007
Antwort Antwort
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
434 Beiträge
 
Delphi 10.4 Sydney
 
#1

Portzugriff auf serielle Schnittstelle funzt nicht unter XP

  Alt 18. Okt 2007, 17:58
Hallo,

ich muss die serielle Schnittstelle direkt ansprechen und wollte daher - wie damals unter DOS üblich - direkt auf die entsprechenden Register zugreifen. Hierzu gehören bspw. das Basisregister (bei COM1 z.B. auf 3F8h), das Line-Control-Register (Basisadresse+3) und das Line-Status-Register (Basisadresse+5). Technische Wege zum direkten Portzugriff existieren (mit einem Treiber sowie Administartorrechten), nur habe ich das Problem, dass jedweder Lesevorgang dieser Register ein $FF zurückliefert. Und genau da stecke ich fest, denn beim portbasierten Zugriff auf die parallele Schnittstelle klappt wieder alles.

Hier im Forum ist ja oft von Komponentensammlungen die Rede, und ich glaube, mit der Windows API gibts auch noch diverse Möglichkeiten. Ich muss die Ports aber direkt ansprechen, weil eine DOS-Lösung zu Windows portiert werden muss. Und ich habe angenommen, dass der DOS-Quellcode direkt in Windows übernommen werden kann (mit entsprechenden Anpassungen bspw. beim Portzugriff).

Kennt vielleicht jemand das gleiche Problem oder existiert da eine Sperre in XP, die einen direkten seriellen Portzugriff verhindert ? Parallel funktioniert wie gesagt. Bin über jeden Vorschlag dankbar...

Grüße,

Devid
Devid
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Portzugriff auf serielle Schnittstelle funzt nicht unter

  Alt 18. Okt 2007, 18:10
Nö, eigentlich nicht. Die Frage ist nur - warum überhaupt noch direkt drauf zugreifen, wo doch die WinAPI alles liefert? Vor allem bei dem COM Port sehe ich keinen Grund den Quellcode nicht auf die WinAPI zu portieren, schliesslich soll der DOS Code ja in der Windowswelt ankommen.
  Mit Zitat antworten Zitat
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
434 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Portzugriff auf serielle Schnittstelle funzt nicht unter

  Alt 18. Okt 2007, 18:27
Der direkte Zugriff sollte deswegen verwendet werden, weil die Routinen bereits in DOS vorliegen und dort auch funktionieren. Der schnellste Weg (ohne sich erst mit der Windows API befassen zu müssen) ist die direkte Portierung, und für den parallelen Anschluss hat das auch geklappt.

Nun liefert jeder Leseversuch eines seriellen Ports den Wert $FF zurück, und mich beschleicht der Verdacht, dass Windows hier etwas blockt.

Hätte ja sein können, dass dieses Problem nur bei mir auftritt, oder jemand anderes das gleiche Problem hatte.
Devid
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Portzugriff auf serielle Schnittstelle funzt nicht unter

  Alt 18. Okt 2007, 19:23
Hallo devidespe,

ich kann Muetze1 nur zustimmen.
Unter DOS konnte man den Datentransfer nur synchron ausführen. Das bedeutet z.B. ein Aufruf zum Lesen blockiert das Programm bis die Daten gelesen waren. Unter Windows ist es möglich das lesen von Daten in einem Thread zu erledigen, währende das Programm schon weitere Aktionen ausführen kann. Windows ist in der Lage einen asynchronen Datentransfer hinzubekommen. Es ist Ereignisgesteuert das bedeutet, dass das Lesen im Hintergrund erfolgt und nach Abschluss des Lesevorgangs das Programm benachrichtigt wird das der Befehl abgeschlossen ist. Ich habe dafür die Komponente MSCOMM32.OCX-Control aus Visual Studio 6.0 benutzt.

Aber wenn es unbedingt wie unter DOS sein soll.

Es können folgende Fehler auftreten:
1. Je nach alter des Rechners kann COM 1 schon durch die Maus belegt sein. Ich habe früher immer COM 2 dafür benutzt. Das währe glaube ich die Portadresse 03E8. Kann das aber jetzt nicht überprüfen, weil auf dem Laptop keine serielle Schnittstelle vorhanden ist.
2. Es könnte sein das der Interrupt von der Schnittstelle noch richtig eingestellt werden muss.
3. Die Schnittstelle muss noch unter Windows eingestellt werden. (in Win 2000 unter Gerätemanager) unter XP ?

Um nur einige zu nennen.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
434 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Portzugriff auf serielle Schnittstelle funzt nicht unter

  Alt 18. Okt 2007, 19:43
Hallo Chemiker,

danke für die Antwort.

Mir sind die Vorteile der Windows API oder externen Komponenten durchaus bewusst, und es sieht mittlerweile so aus, dass ich daran nicht vorbeikommen werde.

Deine Vorschläge und insbesondere die Gerätemanager-Einstellungen habe ich überprüft, aber kein Problem gefunden.

Mir als langjähriger hardwarenaher Entwickler erschien es nur sehr merkwürdig, dass $FF bei jedem Lesezugriff zurückgeliefert wird. Das geschieht normalerweise nur dann, wenn ein Fehler vorliegt (was ich ausschließen kann) oder etwas von Windows geblockt wird (was ich vermute).

Trotzdem danke für die Hilfe.
Devid
  Mit Zitat antworten Zitat
Benutzerbild von OldGrumpy
OldGrumpy

Registriert seit: 28. Sep 2006
Ort: Sandhausen
941 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Portzugriff auf serielle Schnittstelle funzt nicht unter

  Alt 18. Okt 2007, 21:21
*Eigentlich* sind auf NT-basierten Windowssystemen sämtliche Portzugriffe (also auf Adressen unter 0x0400) tabu, da man nie sicher sein kann, dass Windows nicht selber auch auf die Ports will. Übliche Verdächtige wie z.B. ActiveSync belegen auch mal gerne Com-Ports mit Beschlag ohne den User darüber zu informieren... Innerhalb der NTVDM werden Portzugriffe übrigens direkt abgewürgt (und ggf. irgendwoanders hin umgeleitet, vgl. Mapping von LPT-Ports auf Netzwerkdrucker mittels NET USE). Für direkte Portzugriffe unter Windows NT und höher gibts z.B. Frickellösungen wie ZLPortIO was aus einem Kernelmode-Treiber und einer Userspace-API besteht. Der Treiber greift auf die Ports vom Kernel aus zu und bietet nach aussen (also ins Userland) hin eine Kommunikation über ein symbolisches Device an.
"Tja ja, das Ausrufezeichen... Der virtuelle Spoiler des 21. Jahrhunderts, der Breitreifen für die Datenautobahn, die k3wle Sonnenbrille fürs Usenet. " (Henning Richter)
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:05 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