Einzelnen Beitrag anzeigen

hlware

Registriert seit: 1. Jul 2010
Ort: Würzburg
5 Beiträge
 
Turbo Delphi für Win32
 
#1

Problem mit Kommunikation mit Comport über WinApi

  Alt 22. Jul 2010, 18:48
Hallo,

ich habe folgendes Problem:
Ich möchte ein Märklin-Interface über einen Comport mittels Win-Api ansteuern. Das funktioniert soweit einwandfrei, aber nur, wenn ich zuvor einmal eine Verbindung mit einem alten C++ Programm hergestellt und wieder geschlossen habe. Bis zu einem Windows-Neustart gibt es dann keine Probleme mehr.

Hier mal der Code für ein kleines Testprogramm. (Der Code ist aus dem eigentlichen Programm herauskopiert, es besteht aber dasselbe Problem)

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Port : String;
befehl : Char;
ComHandle : THandle;
DCB : TDCB;
TimeOut : TCommTimeouts;
i1,i2 : integer;
begin
  Port := 'Com2';
  ComHandle := CreateFile(pChar(Port), GENERIC_READ OR GENERIC_WRITE,
                              0, nil, OPEN_EXISTING, 0, 0);
  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;
Die Werte von DCB und TimeOut sind identisch mit denen des C++ Programmes.
Woran kann das liegen?

Gruß
Hlware
  Mit Zitat antworten Zitat