Step 7 AWP Programmierung

student12

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

zur Zeit versuche ich Daten aus einer SPS in eine My-Sql Datenbank zu speichern. Dabei habe ich einen Datenbaustein angelegt, indem ich über mein HMI einen String definiere. Diesen will ich jetzt über ein HTML-Script an ein PHP-Script übergeben, welches dann die Variable in eine My-Sql Datenbank speichert. Das html skript lade ich über den "www" Baustein in die CPU.

Meine Frage wäre, wie schaffe ich es den String als Variable (mit AWP) zu definieren bzw. an das PHP-Skript zu übergeben?

Mit der Methode post kann ich die Variablen übergeben, das hab ich schon gemacht. Außerdem kann ich die Variablen ausgeben. Es wäre gut wenn ich die anderen Variablen auch über die Post Methode übergeben kann.


Ich hoffe jemand kann mir weiterhelfen.

Mfg
 

Anhänge

  • html#.png
    html#.png
    17,2 KB · Aufrufe: 181
Wo ist das Formular hinterlegt, auf dem Webserver der SPS oder auf dem Rechner wo die Datenbank läuft?

Du könntest über ein php-Skript eine Webseite auf dem SPS-Webserver abfragen auf der ausschließlich der String vorhanden ist. Das muss erst mal nicht unbedingt gültiges html sein, also eine Daten namens "vorname.html" mit Inhalt: :="DB_1".vorname: wäre erlaubt. Als Content kommt dann der aktuelle Wert von DB1.vorname zurück.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thomas_v2.1,

es läuft über den Webserver der CPU ---> Anwenderseiten.

Erst einmal danke für die Hilfe, aber leider kapiere ich nicht genau was du meinst. Ein PHP Script kann ich leider nicht laden, da die CPU PHP nicht unterstützt :(

Könntest du mir da vll. ein Programmbeispiel geben ?

Mfg
 
Ich habe noch nicht ganz verstanden was du vorhast.

Du hast eine Siemens-SPS auf der du den Webserver aktiviert hast, ok.
Und du hast vermutlich auf einem anderen PC eine MySQL-Datenbank laufen, ok.

Und jetzt sollen Daten von der SPS in die Datenbank transferiert werden. Wer soll diese Aktion anstoßen, und von wo?
 
Ich persönlich kann auch noch nicht verstehen, was du vor hast.

Wäre es nicht möglicherweise einfacher OPC UA, Node Red oder eine TCP/IP Socket Verbindung zum Datenbankserver zu nutzen, um die Daten von der S7 auf den MySQL Server zu übertragen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Thomas,
ja das ist soweit richtig. Auf der SPS ist der Webserver aktiviert und auf einem anderen Computer ist die MY-SQL Datenbank. Mittels der Programmierten Website will ich die Daten aus der SPS auslesen und in der Datenbank einspeichern. Die Aktion soll über die Webseite mit einem Bestätigungsbutton erfolgen. Das soll heißen, wenn ich diesen betätige, soll er die Daten an das PHP-Script übertragen und dieses Script wiederum soll sie in die Datenbank speichern. Mein Problem ist nun, wie ich die Prozessdaten usw. als Variable deklariere und an das PHP-Script zum weiterverarbeiten schicke. :confused:


@Robotic Beet,
es wäre bestimmt einfacher so, jedoch soll ich eine andere Möglichkeit ohne Zusatzpacket aufzeigen.
 
Nur mit ein paar AWP-Anweisungen ist das nicht lösbar.

Es gibt min. zwei Varianten:

a) Eingabe über Formular auf dem SPS-Webserver.
Bei Bestätigung (Absenden) wird ein Bit in der SPS gesetzt, im SPS Programm baust du eine TCP-Verbindung zum PC mit dem Webserver/php/sql auf, und schickst eingepackt als http-post die Daten, die in der SPS ja eh schon vorliegen. Der Webserver nimmt die Daten an, dein php-Skript verarbeitet diese und speichert sie in der Datenbank.

b) Eingabe über Formular auf dem php/sql-Webserver.
Bei Aufruf der Webseite mit dem Formular holt dein php-Skript die Daten vom Webserver der SPS (z.B. mit Curl) und bindet die Daten von dort in seine Webseite in das Formular ein. Der Benutzer bestätigt den Eintrag, dein php-Skript nimmt das entgegen und speichert es in der Datenbank. Wenn sich währenddessen die Daten in der SPS ändern können, dann bekommt das die Seite leider nicht mit, bzw. müsste dann zwischendurch immer mal wieder abgefragt werden.

Client-Seitig z.B. über Javascript ist das normalerweise nicht erlaubt (Same origin policy), z.B. Daten von zwei Webservern einzubinden und diese Daten zu verarbeiten.
 
Die zweite Methode würde für mein Projekt mehr Sinn machen, jedoch hab ich keinerlei Erfahrung mit cURL und wie ich damit eine Verbindung zu meinem Webserver bzw der Datenbank aufbaue.

Gibt's da irgendwo ein Beispiel?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du legst auf dem Webserver eine Daten z.B. daten.html an mit dem Inhalt:
Code:
{
    "vorname": ":="DB_1".vorname:",
    "nachname": ":="DB_1".nachname:",
    "anmerkung": ":="DB_1".anmerkung:"
}
Das ist zwar kein html, aber ein json Objekt.

Curl ist eine Möglichkeit, evtl. auch mit file_get_contents() bei dem du auch aktivieren musst dass es urls öffnen darf. Also so ungefähr:
Code:
ini_set("allow_url_fopen", 1);

$url = 'http://1.2.3.4/awp/daten.html';
$json = file_get_contents($url);
$obj = json_decode($json);

echo "Vorname: " . $obj->{'vorname'};

Der Webserver meiner rel. alten 1200er hat einen kleinen Bug bei bestimmten http-header Optionen die manche nicht-Webbrowser ausgeben. Aber du siehst ja was in $json später enthalten ist bzw. ob json_decode funktioniert.
 
Hallo Thomas,

ich hab es jetzt ausprobiert, jedoch hat es nicht hingehauen und ich bekomme folgenden Fehler
fehler.png

hab beide scripte einfach kopiert und einfügt, aber weiß nicht was falsch ist :confused:
hab verschiedene Schreibweisen mit Hochkomma und Anführungsstrichen probiert, leider nichts gebracht
html.pngphp.png
 
Bei der IP Adresse musst du natürlich die deiner SPS eintragen, 0.0.0.1 ist keine gültige Adresse.

Wenn es dann immer noch nicht funktioniert, dann lass dir mal den Inhalt der Variable $json ausgeben, vielleicht hat deine 1200er immer noch den alten Bug und fügt ein oder mehrere Zeichen vor der ersten geöffneten geschweiften Klammer ein.
 
Zurück
Oben