AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Daten abholen bei TCPClient
Thema durchsuchen
Ansicht
Themen-Optionen

Daten abholen bei TCPClient

Ein Thema von Schuby · begonnen am 2. Jan 2025 · letzter Beitrag vom 3. Jan 2025
Antwort Antwort
Seite 2 von 2     12   
hes

Registriert seit: 21. Apr 2024
Ort: Baden Württemberg
15 Beiträge
 
Delphi 12 Athens
 
#11

AW: Daten abholen bei TCPClient

  Alt 3. Jan 2025, 09:46
Hallo Schuby,

also wenn ich dich richtig verstehe sendest du mit Form1.TCPClient.IOHandler.Writeln('D' +#12); deinen Befehl damit dein ESP32 die Daten senden soll. Ich hab mal meine 22 Jahre alte Routine genommen wo ich in einer CNC-Maschine Daten abfrage. Das Gegenstück ist dort ein von mir erstelltes Delphi-Servermodul. Bei meinem Client hole ich es so ab:
Delphi-Quellcode:
var
  AStream: TMemoryStream;
  SimulationsPfad, ctdata, LInString: string;
begin

... hier müsstest du noch SimulationsPfad, ctdata mit deinem Zielpfad ersetzen


    if(IdTCPClient.Connected = FALSE) then IdTCPClient.Connect;
    try
      StatusBar.Panels.Items[0].Text := 'Werkzeugdaten online aus Maschine abfragen...';

      IdTCPClient.IOHandler.WriteLn('D' +#12); // Hier war mein Befehl
      AStream := TMemoryStream.Create;

      //OutputDebugString('Readstream...');
      IdTCPClient.IOHandler.ReadStream(AStream, -1, FALSE);
      //ShowMessage(IntToStr(AStream.Position));

      AStream.Position := 0;
      AStream.SaveToFile(SimulationsPfad + ctdata);
      OutputDebugString(pchar('Stream gelesen und gesichert in ' + SimulationsPfad + ctdata));

      FreeAndNil(AStream);
      LInString := IdTCPClient.IOHandler.ReadLn; // Kann sein das brauchst du nicht
    finally
      StatusBar.Panels.Items[0].Text := '';
      IdTCPClient.Disconnect;
    end;
Hab mal meinen Befehl mit deinem ersetzt. Statusbar etc. kannst, raus werfen vielleicht funktioniert es mit deinem ESP32.
Rainer

Geändert von hes ( 3. Jan 2025 um 09:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von gubbe
gubbe

Registriert seit: 8. Okt 2005
Ort: Schleswig-Holstein
143 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Daten abholen bei TCPClient

  Alt 3. Jan 2025, 10:42
Das war ja noch so eine unklare Geschichte: Wann ist die Übertragung beendet? Schließt die Gegenstelle die Verbindung, wenn alles übertragen wurde? Oder sendet sie ein bestimmtes Zeichen?

Wird denn der Thread beendet, wenn die Übertragung abgeschlossen ist? Du könntest dann entweder nach der Schleife im Thread mit Synchronize die Funktion aufrufen (Proc_Fat16_Dir_anzeigen), um die Daten in der Listbox auszugeben oder Du verwendest das OnTerminate-Ereignis des Threads, das Dich informiert, wenn der Thread beendet wurde.

Wird der Thread nicht beendet und wartet ewig auf weitere Daten des ESP32, müsstest Du eine Abbruchbedingung haben. Das müsste ja aus der Dokumentation hervorgehen. Wird evtl. auch ein Zeichen #12 gesendet, wie Du es beim Senden von Daten verwendest?
Dann könntest Du evtl. mit ReadLn(#12) arbeiten, das dann in einem Rutsch die Daten bis zu diesem Zeichen zurückgibt. Oder mit WaitFor(#12) auf das Zeichen warten und dann den Buffer auslesen.
  Mit Zitat antworten Zitat
Schuby

Registriert seit: 25. Dez 2018
100 Beiträge
 
#13

AW: Daten abholen bei TCPClient

  Alt 3. Jan 2025, 12:32
Es ist geschafft.! So gehts und ich bin zufrieden.
ok ok das ok1 mit LF könnte ich noch anders machen.
Na mal sehen


Delphi-Quellcode:
procedure TMyThread.Execute;
var i : integer;
Begin
  while bool = true do
  begin
    if Form1.TCPClient.Connected = true then
    begin
      if not Form1.TCPClient.IOHandler.InputBufferIsEmpty then
      begin
        rec_str:= Form1.TCPClient.IOHandler.ReadLn();
        // rec_str:= Form1.TCPClient.IOHandler.InputBufferAsString;
        if rec_str = 'ok1then
        begin
          Form1.Proc_Fat16_Dir_anzeigen;
          rec_str:= '';
        end;
      Synchronize(
          procedure
          begin
            Dir_List_str:= Dir_List_str +rec_str;
            Form1.Memo1.Lines.Add(rec_str);
          end);
      end;
    end;
  end;
End;
Ich Danke allen das ihr einen alten Mann (fast 70zig) geholfen habt.



mfg
  Mit Zitat antworten Zitat
Benutzerbild von gubbe
gubbe

Registriert seit: 8. Okt 2005
Ort: Schleswig-Holstein
143 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Daten abholen bei TCPClient

  Alt 3. Jan 2025, 13:53
Prima, dass es jetzt klappt.

Eine kleine Anmerkung noch: Das "Form1.Proc_Fat16_Dir_anzeigen;" müsste auch in ein Synchronize eingeschlossen werden, da vom Thread aus auf Komponenten der Benutzeroberfläche zugegriffen wird.

Wo kommt denn das "Ok1" jetzt her? Schreibst Du auch das Programm auf der Gegenstelle, dem ESP32, selbst?
  Mit Zitat antworten Zitat
hes

Registriert seit: 21. Apr 2024
Ort: Baden Württemberg
15 Beiträge
 
Delphi 12 Athens
 
#15

AW: Daten abholen bei TCPClient

  Alt 3. Jan 2025, 14:09
Ja das würde mich auch interessieren mit dem ok1, aber auch diesem ESP32 kannte ich nicht und scheint ein interessantes Teil zu sein vor allem recht günstig, jetzt braucht man nur noch ein paar Ideen wo man es einsetzt.
Rainer
  Mit Zitat antworten Zitat
Schuby

Registriert seit: 25. Dez 2018
100 Beiträge
 
#16

AW: Daten abholen bei TCPClient

  Alt 3. Jan 2025, 15:36
Hallo zusammen, ja den ESP32 Programmiere ich selber mit C/C++ *wüürrg*
Dazu habe ich Visual Studio Code Installiert (free), in VS dann PlatformIO
Es gibt viele Youtube Videos wie man das macht.
Der ESP32 kann 240Mhz TFT Display / microSD / DHD22 angeschlossen
Soll eine Steuerung für meinen Reifeschrank für Salami geben



Ich hoffe so ist es richtig weil damit habe ich keine Probleme.
Delphi-Quellcode:
procedure TMyThread.Execute;
var i : integer;
Begin
  while bool = true do
  begin
    if Form1.TCPClient.Connected = true then
    begin
      if not Form1.TCPClient.IOHandler.InputBufferIsEmpty then
      begin
        rec_str:= Form1.TCPClient.IOHandler.ReadLn();

      Synchronize(
          Procedure
          Begin
            if rec_str = 'ok1then
            begin
              Form1.Proc_Fat16_Dir_anzeigen;
              rec_str:= '';
            end;

            Dir_List_str:= Dir_List_str +rec_str;
            Form1.Memo1.Lines.Add(rec_str);
          end);
      end;
    end;
  end;
End;



mfg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 08:35 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