Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Serielle Schnittstelle - wie kann man Daten mitlesen? (https://www.delphipraxis.net/16558-serielle-schnittstelle-wie-kann-man-daten-mitlesen.html)

Andy 19. Feb 2004 07:43


Serielle Schnittstelle - wie kann man Daten mitlesen?
 
Hallo,

ein Barcode Scanner sendet verschiedene Daten (gelesener Barcode, Status, Anzahl der 'Good-Reads' usw. ) an den COM Port eines Rechners. Ein dazugehöriges Programm wertet die empfangenen Strings aus und stellt diese dar. Leider nicht alle, weil dies der Hersteller der Scanner Software nicht vorgesehen hat.
Ich suche nun nach einer Möglichkeit den Datenverkehr auf der (bereits geöffneten) Schnittstelle mit einem Programm mitzulesen und somit alle empfangenen Daten zu erhalten. Eine Hardwarelösung mittels eines Y- Kabels (COM1 und COM2 parallel schalten und dann von COM2 lesen) funktioniert ohne Probleme. Eine Software Lösung wäre mir aber lieber.

Weiß da jemand was?

Schöne Grüße
Andy

hm988 18. Apr 2004 10:58

Re: Serielle Schnittstelle - wie kann man Daten mitlesen?
 
hallo,

habe zu deiner Hardwarelösung eine Frage, hast du dazu ein Programm ??

oder benutzt du Hyperterminal ?? will nämlich so ein Programm in naher Zukunft
erstellen, brauche aber auch die Empfagszeiten in ms

Danke für eine Antwort

Andy 19. Apr 2004 05:41

Re: Serielle Schnittstelle - wie kann man Daten mitlesen?
 
Guten Morgen,

nein, ich hab dazu kein spezielles Programm sondern zu Testzwecken auch nur Hyperterminal verwendet.
Ich denke aber, dass es einiges an Share- oder Freeware dazu gibt. Oder selber programmieren z.B. mit der TComPort Komponente von Dejan Crnila (findest Du unter http://www.vclcomponents.com) .

Leider hab ich zu meiner eigentlichen Anfrage noch keine Antwort. Deshalb nochmal meine Frage: Wer hat Erfahrungen beim Zugriff auf eine geöffnete serielle Schnittstelle?

Schöne Grüsse
Andy

shmia 19. Apr 2004 09:21

Re: Serielle Schnittstelle - wie kann man Daten mitlesen?
 
schau dir mal PortMon for Windows an. :stupid:

Ugums 26. Apr 2004 08:45

Re: Serielle Schnittstelle - wie kann man Daten mitlesen?
 
Ein interessantes Programm dafür fand ich hier:
http://www.docklight.de/
RS232 Terminal / RS232 Monitor - Version 1.3
Docklight is a test, analysis and simulation tool for serial communication protocols (RS232, RS485/422 and others). It allows you to monitor the communication between two serial devices or to test the serial communication of a single device. Docklight is easy to use and runs on almost any standard PC using MS Windows 98/NT 4/2000/XP operating system.


Und jetzt mein Problemchen
:wall:
Ich hätte zu allen eine Frage: woran kann es liegen, dass ich mit einer Komponente (TComm) auf einmal nur die ersten 8 Bytes aus dem Com1-Port kriege? Der Rest kommt nur nach einer Pause (20-50 ms).
:gruebel:

Andy 27. Apr 2004 04:57

Re: Serielle Schnittstelle - wie kann man Daten mitlesen?
 
Guten Morgen,

bei der oben erwähnten TComPort Komponente mach ich's so:

procedure TForm1.ComPort1RxChar(Sender: TObject; Count: Integer);
var
myRecString : string;
begin
Form1.ComPort1.ReadStr( myRecString, Count );
end;


Grüsse
Andy

AirJordan 26. Dez 2005 19:34

Re: Serielle Schnittstelle - wie kann man Daten mitlesen?
 
Hallo,

interessant wird es ja, wenn man nicht genau weiss, was überhaupt erst einen Datenfluss auslöst. Ich
such schon seit einiger Zeit nach einer Möglichkeit, von meinem, am Com-Port angeschlossenen BZ Messgerät
die Daten auszulesen. Ich schaffe es aber nicht, das BZ Messgerät dazu zu überreden, Daten zu senden...
:cry:

Kann jemand das Protokoll von PortMon interpretieren und mir sagen, was ich an den Com-Port senden muss,
damit das Gerät zb über TComPort oder TMS AsyncCom antwortet!?!?

So kommuniziert das Gerät mit einer anderen Software:
.................................................. ...

Zitat:

IOCTL_SERIAL_SET_BAUD_RATE Serial0 SUCCESS Rate: 9600
IOCTL_SERIAL_SET_RTS Serial0 SUCCESS
IOCTL_SERIAL_SET_DTR Serial0 SUCCESS
IOCTL_SERIAL_SET_LINE_CONTROL Serial0 SUCCESS StopBits: 1 Parity: NONE WordLength: 8
IOCTL_SERIAL_SET_CHAR Serial0 SUCCESS EOF:0 ERR:0 BRK:0 EVT:0 XON:11 XOFF:13
IOCTL_SERIAL_SET_HANDFLOW Serial0 SUCCESS Shake:1 Replace:40 XonLimit:2048 XoffLimit:512
IOCTL_SERIAL_SET_DTR Serial0 SUCCESS
IOCTL_SERIAL_SET_RTS Serial0 SUCCESS
IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR CTS DSR RLSD BRK ERR RING
IOCTL_SERIAL_SET_TIMEOUTS Serial0 SUCCESS RI:-1 RM:0 RC:0 WM:0 WC:0
Hier kommt der Teil, wo Daten gesendet werden und wo Daten empfangen werden. Wo muss man nun
genau lesen, um zu verstehen, was man selber in dem eigenen Programm senden muss???
.................................................. ....

Zitat:

IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: RXABORT RXCLEAR
IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: TXABORT TXCLEAR
IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
IRP_MJ_WRITE Serial0 SUCCESS Length 1: .
IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
IRP_MJ_READ Serial0 SUCCESS Length 1: .
Solche Werte werden ebenfalls mehrmals an das Gerät gesendet. Es scheint mir so, als ob vorher
irgendwas eingestellt wird.

Zitat:

IRP_MJ_WRITE Serial0 SUCCESS Length 1: C
IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
IRP_MJ_READ Serial0 SUCCESS Length 1: C
IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: RXABORT RXCLEAR
IOCTL_SERIAL_PURGE Serial0 SUCCESS Purge: TXABORT TXCLEAR
Ganz zum Schluss werden dann wahrscheinlich die einzelnen Datensätze aus dem Gerät ausgelesen.
Sie müssten eigentlich Datum, Uhrzeit und ein num.Wert enthalten.

Zitat:

IRP_MJ_WRITE Serial0 SUCCESS Length 1: .
IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
IRP_MJ_READ Serial0 SUCCESS Length 8: .1001631
IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
IRP_MJ_READ Serial0 SUCCESS Length 8: 72325120
IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
IRP_MJ_READ Serial0 SUCCESS Length 6: 5006C.
IOCTL_SERIAL_GET_COMMSTATUS Serial0 SUCCESS
IOCTL_SERIAL_WAIT_ON_MASK Serial0 SUCCESS
Wer hat einen Tipp für mich, wie man die Daten "lesen" muss um sie richtig umzusetzen? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz