![]() |
Problem mit SerialNG-Komponente
Hallo,
ich benutze die SERIALNG-Komponente zur Kommunikation mit einem RS485-V24-Konverter zur Steuerung einer Gefahrenmeldeanlage. Klappt soweit auch ganz gut. Allerdings habe ich ein Problem. Mit folgender Prozedur schalte ich die Kommunikation der COM1 ein+aus:
Delphi-Quellcode:
procedure TForm1.Kommunikation(status:integer);
begin if status = 0 then begin //Kommunikation ausschalten timer_send.enabled := false; serialportng1.Active := false; if Treeview1.Items.Count > 0 then Treeview1.items.clear; panel1.Caption := 'Kommunikation abgeschaltet.'; cooltrayicon1.IconIndex := 2; imconn.visible := false; imnotconn.visible := true; end; if status = 1 then begin //Kommunikation einschalten serialportng1.Active := true; serialportng1.CommPort := device; serialportng1.StopBits := 1; serialportng1.DataBits := 8; serialportng1.ParityType := 1; serialportng1.BaudRate := baudrate; sendesperre := false; sendezaehler := 0; imconn.visible := true; imnotconn.visible := false; timer_send.enabled := true; panel1.Caption := 'Kommunikation wird aufgebaut.'; end; end; Ich sende dann eine Abfrage an das angeschlossene Gerät mit
Delphi-Quellcode:
daraufhin schickt das angeschlsosene Gerät seinen Status zurück (anstehende Meldungen usw. als hex-kette).
....
sendstr := c; SendDataSize := Length(SendStr); SerialPortNG1.SendString(sendstr); if Befehl <> '01' then panel1.caption := 'Befehl gesendet um '+Timetostr(now) else panel1.caption := 'Abfrage gesendet um '+Timetostr(now); inc(sendezaehler); end else panel1.caption := 'Senden ist zur Zeit nicht möglich'; if sendezaehler > 5 then begin kommunikation(0); showmessage('Kommunikationsfehler!'+chr(13)+'Die EMZ antwortet nicht!'); end; das ganze klappt eigentlich wunderbar. Allerdings, wenn ich die Exe-Datei auf einen anderen Rechner kopiere und das Programm dort ausführe, sendet er "scheinbar" auch die Abfrage (erkenne ich an den LEDs zu TX/RX), allerdings antwortet das Gerät nicht. Wenn ich aber zunächst mit der SerialNGAdvDemo die gleichen Daten sende, erhalte ich eine Antwort. Und jetzt kommts: Beende ich nun das DEMO-Programm und starte mein Programm, funktioniert alles wunderbar. Daher kann ich auch eine Fehlfunktion des Devices ausschließen. Die Datenübertragung erfolgt bei 600Bd, 8Bit, 1 Stoppbit, odd Parity und ohne Handshake. Es wäre nun natürlich wirklich super, wenn das ganze auch ohne vorher die Demo auszuführen funktionieren würde :) Hat da jemand eine Idee, woran das liegen kann?? MfG Sebastian |
Re: Problem mit SerialNG-Komponente
Zitat:
Ich kenne allerdings die Komponente nicht, keine von den vielen, weil ich meine eigenen verwende bzw. die Win32 API benutze. Gruss Reinhard Ergänzung: Timeouts sind auch nicht gesetzt. |
Re: Problem mit SerialNG-Komponente
Zitat:
danke für Deine Hilfe. Das Handshake habe ich im Objektinspector eingestellt, habs aber jetzt auch in die "Startup"-Routine übernommen. Die Statussignale werden hardwareseitig nicht benötigt, da 3-Draht-Verbindung. Aber egal, ich habe den Fehler trotzdem gefunden und für alle andern User, die mal vor diesem Problem stehen, hier meine Lösung (total blöder Fehler *wegduck* :wall: ) Ich brauche Stoppbit = 1 und habe im Eifer des Gefechts serialportng1.stopbits := 1 gesetzt. Leider ist die Definition so: Anzahl Stopbits (0=1Stopbit, 1=1.5StopBits, 2=2Stopbits) :roll: Ich verstehe zwar nicht so ganz, wieso es dann manchmal trotzdem geklappt hat, aber ok..... nun läufts jedenfalls! Gruß Sebastian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 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