Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Daten abholen bei TCPClient (https://www.delphipraxis.net/216462-daten-abholen-bei-tcpclient.html)

hes 3. Jan 2025 08:46

AW: Daten abholen bei TCPClient
 
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.

gubbe 3. Jan 2025 09:42

AW: Daten abholen bei TCPClient
 
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.

Schuby 3. Jan 2025 11:32

AW: Daten abholen bei TCPClient
 
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 = 'ok1' then
        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

gubbe 3. Jan 2025 12:53

AW: Daten abholen bei TCPClient
 
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?

hes 3. Jan 2025 13:09

AW: Daten abholen bei TCPClient
 
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.

Schuby 3. Jan 2025 14:36

AW: Daten abholen bei TCPClient
 
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 = 'ok1' then
            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

gubbe 5. Jan 2025 15:42

AW: Daten abholen bei TCPClient
 
Jetzt ergibt auch auch der Screenshot mit dem Dateinamen "Ahleworscht.txt" einen Sinn. Und ich hielt es für einen beliebigen Testdateinamen :)

Dann weiterhin viel Erfolg beim Basteln und dem Reifen der Worscht. Da zeigt sich doch wieder, wie vielseitig Delphi ist.
Muss mich momentan auch oft mit C++ herumschlagen und weiß seitdem Delphi besonders zu schätzen...

Schuby 5. Jan 2025 16:57

AW: Daten abholen bei TCPClient
 
Hallo @gubbe
ja die Ahle Rote Worscht kommt aus Nord Hessen. :-)

Also der ESP32 bringt mich noch um, habe den SD Driver Installiert,
aber bekomme nur ab und zu Info ListDir.
Im ESP32 habe ich soweit alles hinbekommen.

1. Datum Zeit
2. DHT22
3. TFT ILI9341
4. micro SD funzt nur zum teil

Ich glaube ich lasse es mit dem ESP32
und C/C++ und haue mir einen AtXmega drauf und Programmiere den unter Pascal.
Pascal Programmiere ich schon seit Jahren.

Und der ESP wird nur das WLAN durch schleifen zum AtXmega.


mfg

hes 5. Jan 2025 20:44

AW: Daten abholen bei TCPClient
 
Zitat:

Zitat von Schuby (Beitrag 1544830)
4. micro SD funzt nur zum teil

Ich glaube ich lasse es mit dem ESP32
und C/C++ und haue mir einen AtXmega drauf und Programmiere den unter Pascal.
Pascal Programmiere ich schon seit Jahren.

Mal eine andere Karte versucht? Ich hatte mal bei einem Cardreader Probleme. Alle Karten gingen, nur ein Fabrikat nicht.

Rollo62 6. Jan 2025 06:20

AW: Daten abholen bei TCPClient
 
Zitat:

Zitat von Schuby (Beitrag 1544773)
Dazu habe ich Visual Studio Code Installiert (free), in VS dann PlatformIO

Das nutze ich auch so.
Allerdings habe ich auch parallel die ArduinoIDE installiert, weil die doch mehr Beispiele und diese übersichtlicher sortiert hat, das fehlt mir ein bischen in PlattformIO.
Den Code kann man dann in PlattformIO in der Regel 1:1 übernehmen und damit weiterarbeiten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 Uhr.
Seite 2 von 3     12 3      

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