AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Daten vom Com4 lesen

Ein Thema von SirThornberry · begonnen am 14. Jul 2004 · letzter Beitrag vom 15. Jul 2004
Antwort Antwort
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#1

Daten vom Com4 lesen

  Alt 14. Jul 2004, 11:19
Hallo,

ich benutze die "SynaSer Serial Port Library v.5.0 "-Komponente um daten an COM4 zu schicken und auch zu lesen.
Ich öffne das Port per
  SynaSerCompo.Connect(ACom, 19200,8,'N',1,false,false); und lese die Daten per
  SynaSerCompo.RecvBufferEx(@LBuffer, 200, ATimeout); Das Problem ist jetzt dass, das lesen nur fehlerfrei funktioniert wenn ich vorher mit "ZOC" diesen anschluss einmal öffne und schließe. Danach kann ich "ZOC" beenden und mein programm funktioniert ohne fehler bis zum nächsten Rechnerneustart. Führe ich "ZOC" nicht aus bekomme ich falsche Werte beim Lesen von COM4. Das gleiche Problem hatte ich auch schon als ich einen Barcodescanner über COM1 ansprechen wollte. Auch dies hat erst funktioniert nach dem ich das dazugehörige Programm einmal ausgeführt hab.

Muss man den COM-Port erst irgendwie initialisieren damit die Daten im richtigen Format gelesen werden?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: Daten vom Com4 lesen

  Alt 14. Jul 2004, 11:44
Klingt verdaechtig danach als ob du die Kommunikationsparameter nicht setzt (Bits, Baudrate etc).
Wahrscheinlich wollen die Geraete mit Parametern arbeiten, die nicht Default sind fuer den entsprechenden COM Port.
  Mit Zitat antworten Zitat
Udo

Registriert seit: 19. Jan 2003
54 Beiträge
 
Delphi 8 Architect
 
#3

Re: Daten vom Com4 lesen

  Alt 14. Jul 2004, 12:48
Scheint ja ne ziemlich schrottige Componente zu sein. *hier müsste der Kotz-Smiley rein*
Du könntest vor dem Connect das Port öffnen, die Parameter setzen und wieder schließen:
Delphi-Quellcode:
procedure TMC4000.Open(PortNr: byte);
var
  DCB: TDCB;
  ComName: string;
  ComHandle: THandle;
begin
  ComName := 'COM' + IntToStr(PortNr);
  ComHandle := CreateFile(PChar(ComName), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0);
  if ComHandle <> INVALID_HANDLE_VALUE then
  begin
    GetCommState(ComHandle, DCB);
    // Werte anpassen
    DCB.BaudRate := CBR_19200;
    DCB.Flags := $2005;
    DCB.Parity := NOPARITY;
    DCB.StopBits := 2;
    DCB.ByteSize := 8;
    DCB.XonLim := 50;
    if not SetCommState(ComHandle, DCB) then
      raise ECommError.Create('Could not configure communication device COM'
        + IntToStr(PortNr));
  end
  else
      raise ECommError.Create('Could not open Port COM' + IntToStr(PortNr));
  CloseFile(ComHandle);
end;
Alternative: Selber machen und in einen Thread packen. (ClearCommError, ReadFile)
Wenn Daten da sind nen Event auslösen.


Udo
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Daten vom Com4 lesen

  Alt 14. Jul 2004, 15:59
Die Connectmethode macht genau das.
GetCommState liefert auch das gleiche unabhängig davon ob das Terminalprogramm vorher aktiv war oder nicht, also scheint es mit irgendwas anderem zusammen zu hängen

@Robert Marquard: Doch, die Bitrage etc. wird ja der Connectmethode mitgegeben und diese setzt diese auch mit SetCommState.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#5

Re: Daten vom Com4 lesen

  Alt 14. Jul 2004, 19:16
War vor kurzem auch auf der Suche nach einer passenden Komponente, um mit COM-Ports zu kommunizieren. Hatte ein paar probiert gehabt, jedoch bin ich bei "TurboPower Async Professional" (http://sourceforge.net/projects/tpapro/) geblieben.

Also wie schon erwähnt wurde: Falls es irgendwie paradox streikt, probier mal eine andere Komponente, bei mir hats jedenfalls Abhilfe geschafft.

Grüße,
Mario
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Daten vom Com4 lesen

  Alt 15. Jul 2004, 12:16
Ich hab den Fehler gefunden.
Nach dem Rechnerneustart (bzw. nach dem das gerät neu erkannt wurde) muss mindestens einmal "SetCommState" mit Stopbits = 0 aufgerufen werden. Danach kann man so oft man will Stopbits = 1 verwenden....
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  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 20:32 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