![]() |
COM-Port ansteuern (Bsp: Modelleisenbahn)
s.h.a.r.k hat
![]() Globale Variable für das Ansprechen des Com-Ports:
Delphi-Quellcode:
Globale Konstante unter dem var-Teil:
var
ComHandle : THandle;
Delphi-Quellcode:
Um eine Verbindung zum COM-Port zu trennen nutzt man diesen Befehl:
const
{ Einstellungen für die Weichenstellung } rund = 34; gerade = 33; { Pausen für verschiedene Impulse, da es manschmal länger dauern muss dass es funktioniert - v.a. bei den Weichen } befehlspause = 100; weichenimpulse = 200;
Delphi-Quellcode:
Die Verbindungsprocedure kann wie folgt aussehen (inkl Disconnect):
FileClose(ComHandle);
ComHandle := 0;
Delphi-Quellcode:
Mit dieser Funktion schickt man Daten an den COM-Port:
procedure ConnectToCOMPort(Disconnect: Boolean);
var DCB : TDCB; TimeOut : TCommTimeouts; i : Integer; begin { Wenn die Verbindung wieder getrennt werden soll } if (Disconnect) then begin FileClose(ComHandle); ComHandle := 0; exit; end; { Die Verbindung zum COM-Port wird hergestellt - wenn dies nicht funktioniert wird es bis zu zehn Mal probiert } i := 0; while (ComHandle <= 0) and (i < 10) do begin ComHandle := CreateFile(pchar(COMCB.Text), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0); inc(i); end; { Einstellungen zum COM-Port zuweisen, wenn die Verbindung aktiv ist } if (ComHandle > 0) then begin DCB.DCBlength := SizeOf(DCB); DCB.ByteSize := 8; DCB.Parity := NoParity; DCB.StopBits := TWOSTOPBITS; DCB.BaudRate := 2400; 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(ComHandle, DCB); GetCommTimeOuts(ComHandle, TimeOut); TimeOut.ReadIntervalTimeOut := 100; TimeOut.ReadTotalTimeoutMultiplier := 0; TimeOut.ReadTotalTimeoutConstant := 250; TimeOut.WriteTotalTimeoutMultiplier := 0; TimeOut.WriteTotalTimeoutConstant := 200; SetCommTimeouts(ComHandle, TimeOut); end; end;
Delphi-Quellcode:
Jetzt mal ne kleine Auflistung an Befehlen:
function WriteDataToCOMPort(Text: String): Boolean;
var i : Integer; begin { Senden der Daten an den COM-Port - mit Ausgabe ob der Befehl erfolgreich war } i := FileWrite(ComHandle, Text[1], Length(Text)); if (i <> Length(Text)) then Result := False else Result := True; end; Befehle: WriteDataToComPort(chr(96)): Starten des Interface -> Entspricht "GO"-Taste WriteDataToComPort(chr(97)): Nothalt -> Entspricht "Stop"-Taste WriteDataToCOMPort(chr(Speed)+chr(LokAddr)): Einstellungen an der Lok (Wenn die Sonderfunktion aktiviert werden soll, dann muss die Speed + 16 genommen werden) WriteDataToCOMPort(chr(Direction)+chr(Addr)): Schalten einer Weiche - Direction ist hier rund oder gerade (siehe Konstanten) allerdings sollte danach folgender Code stehen
Delphi-Quellcode:
sleep(weichenimpulse);
WriteDataToCOMPort(chr(32)); sleep(befehlspause); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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