TIA Baustein aus Bibliothek für HTTP-Kommunikation (LHTTP) anschließen

Beiträge
110
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Ich möchte das meine Sps daten mit einem Webserver via lhttp austauscht. Ich habe die Bibliothek von https://support.industry.siemens.co...für-http-kommunikation-(lhttp)?dti=0&lc=de-DE
runtergeladen und in mein Tia Portal V16 integriert. Nun gehe ich nach der Anleitung voran und habe den ersten Baustein LHTTP_Get eingefügt um Daten abzuholen. Jetzt weiß ich nicht wie ich den anschließen soll. Zum Beispiel beim ersten Input execute. Muss ich da PLC-Variablen anlegen, damit ich eine Variable hab die ich anschließen kann?

Ich bin für Tipps sehr dankbar, schönen Abend wünsche ich noch
1623609586105.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
in der Anleitung in dem Link was ich am Anfang geschickt hab, steht schon drin, wie ich die Http-Bausteine in mein Projekt integriere. Also ich konnte es anschließen.

Aber ich habe tatsächlich ein paar Verständnis Probleme. Zum Beispiel kann ich mit zwei Mehtoden Daten von der Sps abfragen und auf dem Webserver anzeigen lassen. Entweder mit einem Webserver mit den Lhttp-Bausteinen oder mit dem eigenen vom Siemens integriertem Webserver wie zum Beispiel auf dieser Webseite https://www.dmcinfo.com/latest-thin...m-getting-started-to-html5-user-defined-pages

Woran liegt denn der Unterschied?

Danke
 
Der Unterschied ist, dass beim http-get von der SPS aus, die SPS die Verbindung zu einem Webserver aufbaut, eine Anfrage stellt und eine Antwort bekommt. Beim Webserver in der SPS ist eben der Webserver in der SPS aktiv, dort kann eine andere Anwendung wie z.B. ein Webbrowser oder eine andere S7 mittels http-get Daten abfragen.
 
Also meine Aufgabe besteht darin, mit Python einen Webserver zu erstellen der dann mit der Sps mittels des Lhttp-Bibliotheks kommuniziert. Kannst du mir Tipps geben wie ich am besten in diese Thematik einsteigen kann, da es dazu im Internet keine Dokumente gibt?

Danke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Also meine Aufgabe besteht darin, mit Python einen Webserver zu erstellen der dann mit der Sps mittels des Lhttp-Bibliotheks kommuniziert. Kannst du mir Tipps geben wie ich am besten in diese Thematik einsteigen kann, da es dazu im Internet keine Dokumente gibt?

In welche Richtungen willst du denn kommunizieren? Wenn die SPS nur Daten vom Webserver lesen können soll, dann benötigst du nur den http-get. Der Webserver liefert dir dann entsprechende Daten die du dann in der SPS weiter verarbeiten musst. Anbieten würde sich hier das json-Format. Wobei das in der SPS etwas aufwändig so verarbeiten ist, für den Anfang könntest du auch Werte einfach als CSV übermitteln, also Werte mit einem Trennzeichen hintereinander (123;456;789), das lässt sich dann in der SPS relativ einfach in die Werte zerlegen.

Wenn du von der SPS auch Werte an den Weberserver schicken können willst, dann würde ich http-post dafür verwenden. Mit http-get lassen sich in der URL auch Werte übertragen, aber das ist nicht ganz so schön.

Also im Grunde genommen musst du nur wissen wie http-get und http-post funktionieren. Du kannst auch alles erst ohne SPS in einem normalen Webbrowser testen, da hast du bessere Diagnosemöglichkeiten welche Werte zurückkommen. Wenn du weißt, dein Webserver funktioniert wie gewünscht, dann programmierst du die SPS als Client.
 
Also Vielen Dank für deine Tipps, die haben mir sehr weitergeholfen. Http-Post und Http-Get hab ich schon an einem normalen Webbrowser ausprobiert und das funktioniert.
Nur ich habe ein Problem beim Porgramm vom TiaPortal. Ich kriege zum Beispiel an einem Ausgang von meinem Programm ein paar Werte. Jetzt ist meine Frage wie ich den Ausgang des Bausteins wo ich die Werte kriege mit dem Lhttp-Post Baustein verbinde?

Mal angenommen habe ich hier ein Baustein welches mir am ende Werte für die Drehzahl gibt.
1624279927289.png
Jetzt muss ich diese Werte irgendwie in den Lhttp get-post Baustein bekommen. Muss ich das einfach in den Eingang "data" reinschreiben?
1624280094562.png

Für Tipps wäre ich dankbar
mfg
 
Ich vermute mal du musst den Wert in einen String konvertieren, den du dann mit data verschickst. Da müsstest du mal in die Hilfe schauen ob du die Post Daten selber passend formatieren musst, oder ob er das für dich übernimmt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das hat gepasst ich konnte die werte formatieren und zum Lhhtp-Post Baustein hinzufügen. Danke für den Tipp.

Nun muss ich am Lhttp-Post Baustein den Url meines Webservers eingeben, aber es taucht ein Fehler auf, nämlich das der Operand nicht definiert wurde.
1624372898251.png

Wisst ihr wie man diesen Fehler beheben kann?

Für Tipps wäre ich dankbar
mfg
 
Du wirst eine String-Variable z.B. in einem Datenbaustein benötigen, die du mit dem Wert beschreibst, und die du an den Parameter übergibst. An konstante Strings hat beim TIA-Portal noch niemand gedacht, ist ja auch was ganz exotisches.
 
Nicht ganz, Strings werden mit einem ' statt " deklariert.
Auf beiden Seiten tauschen und auch die Konstante funktioniert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die Antworten,

@Thomas Also meintest du, dass ich eine neue String Variable in einem Datenbaustein definieren und dort dann die Adresse reinschreiben müsse?
Das hab ich gemacht, aber ich kriege wieder eine Fehlermeldung.
1624374523626.png
Hallo @bcp ich habe nicht ganz verstanden was du meintest. Was ist "statt" und wie kann ich das auf beiden Seiten tauschen?
 
Ja so hat es geklappt denke ich. Das Ergebnis sieht folgendermaßen aus.
1624386473168.png
Mein Webserver läuft lokal an meinem Browser und die Sps mit dem Programm steht irgendwo anders in Deutschland. Jetzt stellt sich mir die Frage, wie sich dieser Baustein mit meinem erstellten Webserver verbinden soll. Ich habe nur die Adresse des Webservers in den Eingang "Url" eingegeben und ich kann mir nicht vorstellen dass das schon ausreichend ist. Habt ihr Tipps wie ich für diese Verbindung weiter vorgehen kann?

Danke und mfg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In welche Richtungen willst du denn kommunizieren? Wenn die SPS nur Daten vom Webserver lesen können soll, dann benötigst du nur den http-get. Der Webserver liefert dir dann entsprechende Daten die du dann in der SPS weiter verarbeiten musst. Anbieten würde sich hier das json-Format. Wobei das in der SPS etwas aufwändig so verarbeiten ist, für den Anfang könntest du auch Werte einfach als CSV übermitteln, also Werte mit einem Trennzeichen hintereinander (123;456;789), das lässt sich dann in der SPS relativ einfach in die Werte zerlegen.

Wenn du von der SPS auch Werte an den Weberserver schicken können willst, dann würde ich http-post dafür verwenden. Mit http-get lassen sich in der URL auch Werte übertragen, aber das ist nicht ganz so schön.

Also im Grunde genommen musst du nur wissen wie http-get und http-post funktionieren. Du kannst auch alles erst ohne SPS in einem normalen Webbrowser testen, da hast du bessere Diagnosemöglichkeiten welche Werte zurückkommen. Wenn du weißt, dein Webserver funktioniert wie gewünscht, dann programmierst du die SPS als Client.
Hallo Thomas, Mein Webserver funktoiniert ungefähr aber jetzt muss ich meinen Webserver mit dem PLC kommunizieren lassen. Muss ich dazu, wie du am Ende gesagt hast die SPS als Client programmieren? Ich habe daszu nichts im Internet gefunden, wie genau kann man das Programmieren?
Danke und mfg
 
Hallo Thomas, Mein Webserver funktoiniert ungefähr aber jetzt muss ich meinen Webserver mit dem PLC kommunizieren lassen. Muss ich dazu, wie du am Ende gesagt hast die SPS als Client programmieren? Ich habe daszu nichts im Internet gefunden, wie genau kann man das Programmieren?
Danke und mfg
Was du in deinen letzten Posts mit http-get und http-post in der SPS programmiert hast ist doch der Client.

Wenn du die Webseite vom SPS Forum mit deinem Webbrowser aufrufst, dann ist der Browser der Client der http-get Anfragen an den Webserver von sps-forum stellt. Das könnte deine SPS eben auch mit den http-get Anweisungen vom Programm aus machen.
 
Was du in deinen letzten Posts mit http-get und http-post in der SPS programmiert hast ist doch der Client.

Wenn du die Webseite vom SPS Forum mit deinem Webbrowser aufrufst, dann ist der Browser der Client der http-get Anfragen an den Webserver von sps-forum stellt. Das könnte deine SPS eben auch mit den http-get Anweisungen vom Programm aus machen.
Hallo Thomas,

Danke für die Antwort. Jetzt verstehe ich was Client bedeutet. Aber als ich die Kommunikation des Webservers und des Python Programms mit einem Webbrowser getestet habe, konnte ich die http Adresse des Webbrowsers in mein Python Programm eingeben und ich konnte dadurch Informationen Webbrowser auf meiner Konsole anzeigen lassen. Nun weiß ich nicht, wie ich den Sps-Client mit dem Webserver verbinden kann, da ich keine Adresse vom SPS-Client habe, die ich in das Python Programm eingeben kann.

Wenn du dafür Tipps hast, wäre ich dankbar wenn du dich nochmal meldest.
Viele Grüße Trainer
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was für eine Konsole? Die Debug-Konsole die einige Webbrowser eingebaut haben, oder die Konsolen-Ausgaben deines Python Programms?

Dein Webserver aka Python Programm besitzt entweder eine feste IP oder einen per DNS auflösbaren Hostnamen. Diese IP/Hostnamen gibst du bei deinem http-get in der url an, und dann geht die Anfrage an den entsprechenden Webserver raus. Den Pythonprogramm schickt die Antwort dann an die IP-Adresse der Anfrage, das ist Standard TCP/IP und da musst du eigentlich nichts besonderes für machen.

Ich würde das Ganze ja erst einmal im LAN mit festen IP-Adressen testen wenn das bei dir möglich ist. Wenn du weißt, dass der Datenaustausch grundsätzlich funktioniert dann auf Namensauflösung, Routing usw. erweitern.
 
Ja ich meinte die Konsole von Python.
Der Datenaustausch im LAN funktioniert grundsätzlich. Aber ich weiß nicht wie ich mit einem Webserver Datenaustausche, welches über mein Netzwerk hinausgeht. Woher weiß ich ob mein Webserver eine feste IP oder einen per DNS auflösbaren Hostnamen hat? Momentan sieht die Adresse zum Beispiel nur so aus http://localhost:8002.
 
Das sollte der Netzwerkadministrator des Netzwerks wissen, wo du das Ganze einrichten willst. Für eine Namensauflösung muss man die entsprechende Domäne registrieren, das geht nicht von selber. Wenn dort eine feste IP und keine dynamische vorhanden ist, dann könntest du auch diese IP-Adresse bei dir fest eintragen. Das würde also mit IP oder Hostname funktionieren, genauso wie du hier fürs SPS-Forum.de auch die IP 85.13.166.62 eingeben könntest. Wenn sich dann warum auch immer die Adresse beim Webserver ändert, müsstest du dein Programm anpassen. Darum wäre ein Hostname ggf. sinnvoller, oder du gestaltest den Hostnamen/IP über einen Parameter im SPS-Programm einstellbar.

Du solltest auch bedenken, dass wenn dein Webserver über das Internet so einfach erreichbar ist, diese Seite auch jeder aufrufen und ggf. auch Werte schreiben kann.
 
Zurück
Oben