AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Problem mit Kommunikation mit Comport über WinApi
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Kommunikation mit Comport über WinApi

Ein Thema von hlware · begonnen am 22. Jul 2010 · letzter Beitrag vom 5. Okt 2011
 
sneumann
(Gast)

n/a Beiträge
 
#10

AW: Problem mit Kommunikation mit Comport über WinApi

  Alt 5. Okt 2011, 10:43
Hallo,

Ich hab die Lösung für das Problem gefunden. Nach einigem Auslesen der DCB Felder vor und nach dem Setzen der Eigenschaften bin ich darauf gekommen.
Es fehlte einfach ein
SetCommState(ComHandle,DCB); Damit ist natürlich klar warum es nicht gehen konnte.


Zitat:
Es gibt nur eine saubere Lösung:
Du brauchst eine eigene Klasse oder Komponente, die sich nur um die Ansteuerung der seriellen Schnittstelle
kümmert.
Ich habe mir eine eigene Klasse geschrieben, die sich auf das für mich nötigste beschränkt und auch gut funktioniert. Den Codeschnipsel habe ich nur schnell zusammenkopiert, die Eisenbahnbefehle habe ich nur eingefügt, damit ich das Ergebnis überprüfen kann.

Eine Komponente benötige ich im Moment nicht, da mit meiner Klasse alles funktioniert was ich brauche, wenn ich halt das SetCommState nicht vergessen hätte.

Vielen Dank für die Hilfe,
Gruß

Hlware
Ich lese mir das mal kurz durch auf der Seite vielleicht kommt dann mehr Verständnis

Was bedeutet die Ausgabe?? 4294967295, -1, -1 das bekomme ich zurück : bei dem Code
ich brauche also nur Create, Read und Write für meine Aufgabe?

Code:
unit main;



interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, SetupAPI;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var Port : String;
befehl : Char;
ComHandle : THandle;
DCB : TDCB;
TimeOut : TCommTimeouts;
i1,i2 : integer;
begin
  SetCommState(ComHandle,DCB);
  Port := 'Com5';
  ComHandle := CreateFile(pChar(Port), GENERIC_READ OR GENERIC_WRITE,
                              0, nil, OPEN_EXISTING, 0, 0);

  //if ComHandle = INVALID_HANDLE_VALUE then begin ShowMessage('INVALID HANDLE VALUE '); end;
  if ComHandle <> INVALID_HANDLE_VALUE then begin
  //if ComHandle > 0 then begin

      DCB.DCBlength := SizeOf(DCB);
      DCB.ByteSize := 8;
      DCB.Parity := NoParity;
      DCB.StopBits := TWOSTOPBITS;
      DCB.BaudRate := 2400;
 
      GetCommTimeOuts(ComHandle, TimeOut);

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

      TimeOut.WriteTotalTimeoutMultiplier := 0;
      TimeOut.WriteTotalTimeoutConstant := 0;
      SetCommTimeouts(ComHandle, TimeOut);
 
  end;

  befehl := chr(97); // Befehl für globales Abschalten der Gleisspannung
  i1 := FileWrite(ComHandle, befehl, 1);
  sleep(2000); // Damit Meine langsamen Augen die Anzeige auf der Control Unit auch sehen
  befehl := chr(96); // Gleisspannung wieder freigeben
  i2 := FileWrite(ComHandle, befehl, 1);
  ShowMessage(IntToStr(ComHandle) + ', ' + IntToStr(i1) + ',' + IntTostr(i2)); // Nur zur Überprüfung

  FileClose(ComHandle);
  ComHandle := 0;
end;

end.

Geändert von sneumann ( 5. Okt 2011 um 10:46 Uhr)
  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 16:44 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