Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TComport, probleme beim Lesen (https://www.delphipraxis.net/96911-tcomport-probleme-beim-lesen.html)

angos 1. Aug 2007 14:59


TComport, probleme beim Lesen
 
Hallo,

ich habe ein kleines Problem. Ich versuche auf einen Barcodescanner CS1504 per Comport zuzugreifen. Ich nutze die Komponente ComportLibrary.
Ich kann dort auch die Initialisierungsroutine rüberschicken, und der Scanner piept, also kommt etwas an. Nur kann ich mit der TComport - Komponente nun gar nichts vom Comport lesen.... Ist mein erstes Projekt mit Zugiff auf einen Comport und ich weis noch nicht so recht, worauf ich da vielleicht noch achten muss.
Ich habe:
- Die Baudrate passend eingestellt: 9600
- Stopbits passend auf OneStopBit eingestellt.
- Databits werden in 8Bits übergeben

Das habe ich laut folgendem Auszug aus der Handbuch so eingestellt:
Zitat:

6. COMMUNICATION CHARACTERISTICS
The character framing shall be 8 data bits, 1 stop bit, and odd parity. The default baud rate shall be 9600.
The maximum length of any command message shall be 70 bytes while the maximum length of any response
message shall be 6144 bytes (6 KB). Messages shall be transmitted starting with the command/status byte and ending
with the CRC. Each byte shall be transmitted from LSB to MSB.
Jemand eine Idee worauf ich vielleicht noch achten muss?

Folgender Code wird genutzt um die Daten zum Comport zu senden und vom Comport zu lesen:

Delphi-Quellcode:
procedure ResetBuffer(var aBuff: Array of Char);
var
  i: Integer;
begin
  for i := 1 to Length(aBuff) do
    aBuff[i] := CHR($00);
end;

procedure TForm1.btnClick(Sender: TObject);
var
  aBuff: Array[0..50] of Char;
begin
  ComPort.Open;
  ResetBuffer(aBuff);
  aBuff[0] := CHR($01);
  aBuff[1] := CHR($02);
  aBuff[2] := CHR($00);
  aBuff[3] := CHR($9F);
  aBuff[4] := CHR($DE);
  ComPort.Write(aBuff, 5);
  ComPort.Read(aBuff, 1);
end;
Danke

oki 1. Aug 2007 15:16

Re: TComport, probleme beim Lesen
 
Du mußt die Parität noch auf ungerade (odd) setzen.

Gruß oki

angos 1. Aug 2007 15:22

Re: TComport, probleme beim Lesen
 
hi,

hab ich vergessen oben zu erwähnen, Parity=odd ist gesetzt.

oki 1. Aug 2007 15:29

Re: TComport, probleme beim Lesen
 
Hi,

es macht mehr Sinn das Ereignis für den Empfang von Daten der komponente zu benutzen. Leider kenne ich diese Kompo nicht. Das Prinzip ist aber eigentlich immer das gleiche. Im Ereignis die daten auslesen.

gruß oki

angos 1. Aug 2007 15:57

Re: TComport, probleme beim Lesen
 
Hallo,

Leider komm ich so immer noch nicht an die Dtaen. Da das aber mit einem Drittprogramm geht und ich mit einem Portmonitor geprüft habe, dass die gleiche Zeichenfolge auf den COM geschrieben wird, gehe ich noch von einem Einstellungsproblem des TComport aus.
vielleicht hier nochmal eine Zusatzinfo. Folgende Ereignisse des TComport werden in der gegebenen Reihenfolge ausgeführt.

Zitat:

ComPortBeforeOpen
ComPortAfterOpen
ComPortCTSChange
ComPortDSRChange
ComPortRLSDChange
ComPortTxEmpty
ComPortCTSChange
ComPortDSRChange
ComPortRLSDChange
ComPortBeforeClose
ComPortAfterClose
Grüße

shmia 1. Aug 2007 16:21

Re: TComport, probleme beim Lesen
 
Hast du schon mal das Programm Hyperterminal (Programme->Zubehör->Kommunikation) oder ein anderes Terminalprogramm benützt, um festzustellen, ob der Scanner überhaupt Daten sendet ???
Falls nicht: unbedingt ausprobieren, vorher brauchst du gar nicht weiterprogrammieren.

Reinhard Kern 1. Aug 2007 16:34

Re: TComport, probleme beim Lesen
 
Zitat:

Zitat von angos
Hallo,

Messages shall be transmitted starting with the command/status byte and ending
with the CRC.

Hallo,

nach dieser Aussage wird ein Sicherungsprotokoll verwendet mit Command - Status - Data - CRC.
Ein solches Protokoll muss zusätzlich zum Zugriff über eine serielle Komponente selbst programmiert werden,
z.B. mit einer Zustandsmaschine. Dazu braucht man natürlich eine exakte Protokoll-Definition.

Gruss Reinhard

oki 1. Aug 2007 16:46

Re: TComport, probleme beim Lesen
 
Hallo angos,

ich hab mir mal schnell die Kompo runter geladen. Dort sind auch einige Beispiele dabei. Die Kompo implementiert z.B. das Ereignis RxChar.

Dieses kann laut Demo wie folgt benutzt werden:
Delphi-Quellcode:
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
  Str: String;
begin
  ComPort.ReadStr(Str, Count);
  Memo.Text := Memo.Text + Str;
end;
Damit müsste für den Empfang der Daten auf dem Port alles klar sein.

Wie du aus den empfangenen Zeichen dann die Scannerdaten decodierst sagt dir die Doku des Scanners.

Gruß oki

[edit] Noch mal ein bischen Rechtschreibung korrigiert. [/edit]

angos 2. Aug 2007 07:19

Re: TComport, probleme beim Lesen
 
Hi oki,

das Prinzip an sich ist mir schon klar, nur er springt halt gar nicht in die Routine ComPortRxChar. Deswegen gehe ich ja nach wie vor von einem Konfigurationsproblem des TCoomport aus ;)

Hatte ja in dem Thread oben die Events gezeigt, welche nacheinander durchlaufen.

Klick auf den Button zum Verbinden/Datenauslesen
Zitat:

ComPortBeforeOpen
ComPortAfterOpen
ComPortCTSChange
ComPortDSRChange
ComPortRLSDChange
ComPortTxEmpty

Klick auf den Disconnect-Btn:
Zitat:

ComPortCTSChange
ComPortDSRChange
ComPortRLSDChange
ComPortBeforeClose
ComPortAfterClose
naja, deswegen komm ich halt nicht weiter...


Gruß

angos 2. Aug 2007 07:42

Re: TComport, probleme beim Lesen
 
Habs rausgefunden :hello:

Es war tatsächlich eine Einstellung am TComport. Die Einstellung ControlDtr muss in meinem Fall auf dtrHandshake stehen.


trotzdem danke für die Hilfen oki :) :dp:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:40 Uhr.
Seite 1 von 2  1 2      

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