AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Com Port Programmierung
Thema durchsuchen
Ansicht
Themen-Optionen

Com Port Programmierung

Ein Thema von J Kadison · begonnen am 10. Okt 2009 · letzter Beitrag vom 23. Nov 2009
 
J Kadison

Registriert seit: 8. Sep 2007
Ort: Ebertsheim
96 Beiträge
 
Delphi 7 Personal
 
#1

Com Port Programmierung

  Alt 10. Okt 2009, 12:16
Hallo!

Ich weiß, es ist ein sehr viel diskutiertes Thema aber jetzt nach 3 stunden internetrecherche hab ich langsam keinen Nerv mehr und ich weiß auch nichtmehr wonach ich genau suchen soll, damit ich endlich das richtige finde.

Und zwar:

Ich habe ein Gerät (Intellibox) an meinen Comport angeschlossen und richte ihn über folgenden QC ein:

Delphi-Quellcode:
  V_ComHandle := CreateFile(PCHAR(aComPort), GENERIC_READ or GENERIC_WRITE,
                        0, nil, OPEN_EXISTING, 0, 0);

  if V_ComHandle <> 0 then
  begin
    { Einstellungen zum COM-Port zuweisen, wenn die Verbindung aktiv ist }
    DCB.DCBlength := SizeOf(DCB);
    DCB.ByteSize := 8;
    DCB.Parity := NoParity;
    DCB.StopBits := TWOSTOPBITS;
    DCB.BaudRate := V_BaudRate;
    DCB.Flags := 5123; { Wenn 2 Pins belegt sind }
    DCB.EofChar := #0;
    DCB.ErrorChar := #0;
    DCB.EvtChar := #0;
    DCB.XoffChar := #0;
    DCB.XoffLim := 0;
    DCB.XonChar := #0;
    DCB.XonLim := 0;
    SetCommState(V_ComHandle, DCB);
    GetCommTimeOuts(V_ComHandle, TimeOut);

    TimeOut.ReadIntervalTimeOut := 100;
    TimeOut.ReadTotalTimeoutMultiplier := 0;
    TimeOut.ReadTotalTimeoutConstant := 250;

    TimeOut.WriteTotalTimeoutMultiplier := 0;
    TimeOut.WriteTotalTimeoutConstant := 200;
    SetCommTimeouts(V_ComHandle, TimeOut);
Bis Dahin ist noch alles Super!

Auch das Senden funktioniert noch.

Delphi-Quellcode:
function TIntellibox.SendData(Text: String): Boolean;
var
  i : Integer;
begin
  { Senden der Daten an den COM-Port - mit Ausgabe ob der Befehl erfolgreich war }
  if V_ComHandle <> 0 then
  begin
    i := FileWrite(V_ComHandle, Text[1], Length(Text));
    if (i <> Length(Text)) then Result := False else Result := True;
  end
  else result := false;
end;

Allerdings weiß ich jetzt nicht, ob der Befehl auch angekommen ist und ob er ausgeführt wurde.
So weit ich die Dokumentation des Gerätes verstanden habe, sollte ich auch Daten zurück bekommen.

Meine Überlegung war, einen Thread einzurichten, welcher auf ankommende Nachrichten wartet, oder geht soetwas noch einfacher?

Ich weiß es gibt schon viele Komponenten hierzu aber nicht als thread sondern alles nur um selbst die nachrichten abzufragen.
(oder ich bin einfach zu blöd zum googeln)


Hat jemand eine passende lösung um einfach sobald eine NAchricht vom gerät kommt diese abzufangen und auszuwerten?


habe hier gerade noch eine readprozedur gefunden:
habe sie mal für mein verstaändniss kommentiert, bei fehlern bitte melden

Delphi-Quellcode:
function ReadText: string;
var
  d: array[1..80] of Char;
  s: string;
  BytesRead, i: Integer;
begin
  // Result initialisierung
  Result := '';
  // Hier wird vom ComHandle gelesen (gegenteil von oben writefile) und in d geschrieben
  if ReadFile(ComFile, d, SizeOf(d), BytesRead, nil) then
  begin
    // s wird initialisiert
    s := '';
    // hier wird in s einfach das array of char geschrieben, also prinzipiell s := d
    for i := 1 to BytesRead do s := s + d[I];
    // das ergebnis ist dann ein string mit den verschiedenen bytes als chars
    Result := s;
  end
  else
    // Hier könnte ich jetzt fehler abfangen
end;
muss ich jetzt hier einen threat machen, der immerwieder readtext ausführt oder geht das schöner?
MFG
Joshi
  Mit Zitat antworten Zitat
 


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 00:33 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 by Thomas Breitkreuz