TIA Dateien per HTTP auf S7-1500 übertragen

DiStra

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

zunächst mal hoffe ich, dass ich a) hier richtig bin (wenn nicht, bitte ich um entsprechenden Hinweis) und b) keine FAQ stelle ;) ... aber zumindest die Suche hat mir leider keine Ergebnisse gebracht.

Die aktuelle Aufgabenstellung:


  • CSV-Dateien via Internet (also Web-Zugriff) auf einer S7-1500 ablegen
  • damit sie dann da weiterverarbeitet werden können und
  • später wieder welche abholen.

FTP ist leider keine Alternative, da der dafür wohl benötigte CP nicht im Budget liegt. :cry:

Mein erster Ansatz war per curl, aber das funktioniert nicht so recht, vermutlich weil ich kein zulässiges Zielverzeichnis habe - hat da jemand einen Tipp?

Zweiter Ansatz war per HTTP POST, aber ohne form ... denn das Ablegen und Abholen soll per Script erfolgen; Maskeneingaben sind also keine Alternative.
Nun kann man das ja auch per PHP (auf der S7-1500 leider auch nicht vorhanden), Java (ginge das?) und vielleicht auch per JavaScript machen?
Dafür muss allerdings wohl auf der S7 ein Server-Script platzieren, das die Anforderungen verarbeitet ...

Hat sowas schon mal jemand gemacht und kann mir einen Anstoss in die richtige Richtung geben?
Ich stochere da gerade ein wenig im Nebel und komm nicht weiter ... :sad:

Ich wäre für jeden Tipp dankbar!

Gruss, DiStra
 
Das sollte sich mit etwas Javascript erledigen lassen.

Angenommen die eine CSV Datei hat folgenden Aufbau:

Variablenname,Wert
Sollwert1,123
Sollwert2,456

Dann nimmst du dir den Codeschnipsel von dieser Seite hier:
http://rohitrox.github.io/js_csv/

und anstelle der Ausgabe des Dateiinhalts auf der Webseite, stellst du mit Javascript ein HTTP-Post Request zusammen der die Werte an die entsprechenden Variablennamen schreibt.
Z.B. Sollwert1=123&Sollwert2=456
Ich würde die Daten aus der CSV vielleicht aufgrund der benutzerfreundlichkeit erst in eine HTML-Tabelle laden, damit der Bediener sieht was für Werte in seiner Datei vorhanden sind. Und das Hochladen in die SPS dann mit einer weiteren Bestätigungsschaltfläche starten.
Wenn die Variablen in der SPS anders heißen sollen als in der CSV-Datei, brauchst du ein entsprechendes Übersetzungsschema.

Das Herunterladen aus der SPS in Form einer CSV-Datei würde ähnlich funktionieren. In der SPS legst du die Daten in einem Datenbaustein ab, und mit etwas Javascript erzeugst du aus den Daten eine CSV-Datei.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guter Hinweis - aber leider keine Lösung

Hallo Thomas_v2.1

danke für den Tipp - aber leider ist das nicht unser Problem.
Das unsrige liegt noch eine Stufe davor: Wir kriegen die CSV-Datei gar nicht erst auf die Speicherkarte.

Die einzige Methode, die bisher funktioniert, ist die per "Filebrowser", sprich von Hand auswählen und per Upload-Button hochladen.
Dieses Hochladen soll aber automatisch erfolgen, ohne manuelle Aktionen: die bewusste CSV-Datei - die Steuerdaten enthält - wird extern erstellt,
und soll dann per Web auf die Speicherkarte der S7-1500 übertragen werden.

Dann erst liest die S7 sie ein (z. B. über das empfohlene JS), um ihrerseits dann eine neue CSV mit Messdaten zu erstellen,
die dann von der externen Stelle wieder abgeholt wird.

Wir brauchen also etwas für das Schreiben auf und Lesen von der Speicherkarte von extern ... ohne Formulareingaben ...

Gruss, DiStra
 
Hallo Thomas_v2.1

danke für den Tipp - aber leider ist das nicht unser Problem.
Das unsrige liegt noch eine Stufe davor: Wir kriegen die CSV-Datei gar nicht erst auf die Speicherkarte.

Die einzige Methode, die bisher funktioniert, ist die per "Filebrowser", sprich von Hand auswählen und per Upload-Button hochladen.
Dieses Hochladen soll aber automatisch erfolgen, ohne manuelle Aktionen: die bewusste CSV-Datei - die Steuerdaten enthält - wird extern erstellt,
und soll dann per Web auf die Speicherkarte der S7-1500 übertragen werden.

Dann erst liest die S7 sie ein (z. B. über das empfohlene JS), um ihrerseits dann eine neue CSV mit Messdaten zu erstellen,
die dann von der externen Stelle wieder abgeholt wird.

Wir brauchen also etwas für das Schreiben auf und Lesen von der Speicherkarte von extern ... ohne Formulareingaben ...

Gruss, DiStra
 
Wie stellst du dir denn das Schreiben auf eine Speicherkarte vor? Was kann das System das diese Dateien schreiben soll?

Dir schwebt wohl soetwas vor, wie die SPS als USB-Laufwerk in Windows mit einem eigenen Laufwerksbuchstaben einzubinden. Das wird nicht funktionieren.
Einen extra CP mit FTP willst du ja nicht, denn das könnte die Lösung darstellen ;-)

Du kannst dir auch mal die Funktionen für Rezepte bei der 1500 ansehen (RecipeImport und RecipeExport). Mit diesen lassen sich (laut Handbuch) Rezeptdateien in Form von CSV-Dateien von der Memory Card einlesen und beschreiben. Zugriff auf die Memory Card gibt es bei der 1500 ebenfalls über den integrierten Webserver.
Über Skripte mit wget/curl oder was auch immer ließe sich das bestimmt automatisieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Windows Laufwerk wär natürlich auch schick. Am besten per WEBDAV oder so. :cool: Nein, daran habe ich nicht wirklich geglaubt. ;)

Das System, das schreiben soll, ist ein normaler (Windows)Server im Internet, steht in einem Rechenzentrum.
Optimal (weil allgemein akzeptiert) wäre natürlich FTP, aber da die S7-1500 das nicht kann, irgendwas über HTTP, gern per curl. wget hab ich noch nicht probiert.

Mit curl habe ich auch schon experimentiert - es kommt auch eine Verbindung zustande, aber die S7-1500 nimmt nix an, curl bricht ganz profan mit "HTTP-Error" ab.
Ich vermute mal, weil das Zielverzeichnis nicht stimmt, denn bzgl. des Verzeichnisses stochere ich aktuell im Nebel. Leider ohne die korrekte Notation für curl zu finden. :(
 
Alternativ könnte man auch von dem Zugriff über HTTP weggehen und das ganz anders lösen.
Dazu müsste auf dem Rechner wo die CSV Dateien abgelegt werden ein kleines Programm geschrieben werden. Dieses guckt zyklisch in einen definierten Ordner auf dem PC, ob dort eine CSV-Datei abgelegt wurde. Ist das der Fall, wird diese eingelesen und die dort enthaltenen Daten über S7-Kommunikation mit z.B. libnodave Funktionen in einen Datenbaustein in der SPS geschrieben. Auf "nicht-optimierte" DBs ist das auch weiterhin bei der 1500er möglich.
Sind alle Daten in die SPS geschrieben, wird noch ein Status-Bit gesetzt um der SPS zu signalisieren dass dort ein neuer Auftrag eingegangen ist.

In der Gegenrichtung dann genauso: Hat die SPS ein Protokollsatz (oder was auch immer) erstellt, signalisiert es der Anwendung durch ein Status-Bit dass Daten abholbereit sind. Das Programm guckt auf dieses Bit, und holt dann die Daten ab und schreibt diese in eine CSV-Datei auf dem lokalen Rechner.
 
über S7-Kommunikation mit z.B. libnodave Funktionen in einen Datenbaustein in der SPS geschrieben.
libnodave wäre natürlich auch eine nette Alternative (so man sie über's Internet wirklich zuverlässig nutzen kann - probiert habe ich das noch nicht), aber dem steht die Forderung des Rechenzentrums entgegen, nur mit "Standardkommunikationsformen" zu arbeiten. Problem ist, dass die effektive Kommunikation mit der S7 bzw. dem Netzwerk, in dem sie sich befindet, nicht von dem (einen) Server im Rechenzentrum direkt durchgeführt, sondern an einen nahezu beliebigen Kommunikations-Client delegiert wird - davon gibt es aktuell schon ein starkes Dutzend, Tendenz steigend. Jedwedes Abweichen von der Norm bedeutet erheblichen administrativen Aufwand. Von daher wären selbst curl und wget schon grenzwertig, aber noch toleriert, weil oftmals eh schon in den (Linux-)Distributionen enthalten.

Nichtsdesdotrotz werde ich mir die libnodave in der Hinsicht noch mal ansehen. Aber ein "standardisierterer" Weg (sprich z. B. ein funktionierendes curl zum Übertragen einer CSV-Datei) wäre auf jeden Fall besser ...

Cheers, Magpie
 
Zurück
Oben