Sonstiges S7-1500 Bilder für Webserver

Arco

Level-1
Beiträge
30
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
wir wollen Bilder im Webserver der S7-1500 für Inbetriebnahmen nutzen. Es sollen z. B. die Zustände von Ein-/Ausgängen einzelner Karten dargestellt werden. Ein Inbetriebnehmer ohne S7-Kenntnisse soll sich die im Browser ansehen, um schon im Vorfeld Probleme zu erkennen und beheben zu können. Soweit ich jetzt in Erfahrung bringen konnte, muß man die Bilder aber in HTML oder Java programmieren, das ist nicht so meins.
Gibt es evtl. einfache vorgefertigte Lösungen, die man nutzen könnte, z. B. eine Darstellung von CPU und E/A-Karten, die man parametrieren und dann benutzen kann? Es soll ja keine tolle Visu werden, nur das darstellen, was man für einen E/A-Check braucht.
Kennt jemad sowas, bei Siemens habe ich nichts gefunden?
 
Was fertiges gibt es bei Siemens nicht. Das so universell zu gestalten, dass du eine vorgefertige Seite nur einbinden musst und alles ist fertig wird wohl nicht funktionieren, denn es muss zumindest deine aktuelle HW-Konfig irgendwo hinterlegt werden. Oder es muss in der SPS etwas programmiert werden, das die HW-Konfig ausliest und wie auch immer dem Webserver zur Verfügung stellt. Gibt es aber nicht fertig, und ob sich der Aufwand lohnt? Warum beobachtet der Elektriker nicht einfach die Status-LEDs an der Baugruppe?

Wenn du den Webserver aktivierst, gibt es aber per Voreinstellung so etwas wie eine Variablentabelle. D.h. kannst du dann z.B. IW0 eintragen, und es wird dir der Wert in einem einstellbaren Format (Bin, Dez, Hex, ...) angezeigt. Vielleicht reicht das ja schon aus.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit vorgefertigt meinte ich soetwas wie Bilder von E/A-Karten, bei denen die einzelnen Ein-/Ausgänge dargestellt sind, die man dann weiterverwenden kann. Ich kenne mich aber, wie gesagt, mit Webprogrammierung nicht so aus, und weiß nicht, ob man soetwas "vorfertigen" kann und wie aufwendig das ist.
Das mit den Status-LEDs geht natürlich, aber manchmal ist man ja ein Stück weg von den Karten, dann wäre es komfortabel, "nebenan" beobachten zu können.
 
Ich habe mal testweise eine parametrierbare web2plc-Lösung für so eine Anwendung erstellt. Könnte bei einer Inbetriebnahme durchaus nützlich sein wenn man alleine Signale prüfen muss, vorausgesetzt man hat WLAN in der Schaltanlage.

So sieht das später auf einem Tablet aus:
web2plc-ea-status-tablet.jpg

Ich habe das soweit möglich parametrierbar gemacht, sodass man sich nicht im Detail mit der Erstellung von web2plc Seiten befassen muss.
Zu dem Paket gehören zwei Dateien:
Die eigentliche Webseite "ea-status.html". An dieser muss nichts geändert werden.
Als zweites gibt es die Datei "ea-data.json". Dieses ist eine reine Textdatei in der der Rackaufbau angelegt werden muss. Der Eintrag für eine einzelne Karte sieht wie folgt aus:
Code:
{
  "slotnumber":     3,
  "cardtype":       "digital",
  "label":          "DI 32x24V DC",
  "ioprefix":       "DE",
  "channels":       32,
  "startaddress":   100,
  "variablename":   "MD100",
  "value":          :=MD100:
}
Die Karten werden der Reihe nach wie sie in dieser Datei vorkommen nebeneinander "zusammengebaut". Die Werte haben dabei folgende Bedeutung:
slotnumber: Beschriftungstext unten,
cardtype: digital oder analog. Es können z.Zt. nur 32 oder 16er digital, oder 8er analog eingesetzt werden
label: Beschriftungstext oben
ioprefix: Prefix für die Beschriftung eines Eingangs
channels: Anzahl der Kanäle dieser Karte, 16/32 digital, oder 8 analog
startaddress: Startaddresse (byte) des ersten Eingangs. Für Beschriftung relevant.
variablename: Ein eindeutiger Name für den Variablenwert dieser Karte
value: Der Kartenwert aus der SPS in AWP-Syntax (.=Variablenname:). Dieser wird bei Auslieferung vom Webserver der SPS durch den eigentlichen Variablenwert ersetzt.
Für eine 32er DI Karte z.B. ED10, für eine 16er DI z.B. EW16. Bei Analogkarten ist hier ein Array anzugeben (siehe Beispiel).

Eingangsbytes von DI Karten können auf jeden Fall so eingelesen werden. Mit PEWs habe ich das noch nicht probiert. Evtl. müssen diese im SPS-Programm auf einen anderen Speicherbereich (Merker oder Datenbausteine) umkopiert werden.

Bei den Einstellungen des Webservers muss .json als Datei mit dynamischem Inhalt ergänzt werden. Sonst ist keine Anpassung mehr notwendig.
 

Anhänge

  • web2plc-ea-status-2015-02-05.zip
    3,1 KB · Aufrufe: 153
Zuviel Werbung?
-> Hier kostenlos registrieren
Kannst ja mal durchgeben ob das mit PEW funktioniert. Bzw. EW sollte ja auf jeden Fall funktionieren wenn die Daten im Prozessabbild liegen.

Bei Analogeingängen könnte man auch noch den Eingangswert in den physikalischen Wert (Strom, Spannung, Widerstand) umgerechnet anzeigen, ist für den Elektriker zur Prüfung bestimmt einfacher zu verstehen. Dann müsste man aber auch die Konfiguration jedes Eingangs mit angeben.
 
Hab das so mal in meine SPS eingespielt. Allerdings erscheint bei mir auf der Seite nur der Titel, der Rest taucht nicht auf. Muss man da sonst noch was einstellen? .json hab ich als Datei mit dynamischen Inhalt eingetragen.

SPS ist eine 1513F
 
Eigentlich solltest du nur die Adressen/Variablen der EA-Kartenwerte in der ea-data.json anpassen müssen.
Ich habe es auch nur auf einer 1200 getestet, und von Arco kam keine Rückmeldung ob das bei ihm auf der 1500 funktioniert.

Hast du es schonmal mit einem anderen Browser probiert?
Es wird zuerst das Grundgerüst mit dem Titel geladen, dann gibt es nach dem Aufbau und später zyklisch einen xmlhttp Request mit dem die json Datei abgefragt wird, und mit den dort vorhanden Werten wird dann die Kartendarstellung gebaut. Ist in dieser Datei ein Fehler, oder es kommt keine vom Webserver, dann wird auch nichts gezeichnet.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich bin im Moment auch dabei eine HMI zu erstellen für eine S7-1200.

Müssen beide Dateien bei der S7 hinterlegt werden, also für beide DBs erstellen lassen oder nur die json?
Du hattest in diesem Post gesagt, dass die Kommunikation ziemlich langsam ist. Ist das immernoch der Fall?
 
Eine Erhöhung der "Zyklusbelastung durch Kommunikation" kann da ein wenig Abhilfe schaffen, sollange der Anwendungsfall das zulässt.

Wenn man ohne "https" auskommt geht es nochmals ein Stück schneller.
Wollte das erstmal ohne diese Funktion testen. Hab nämlich 12 Keyence Visionsensoren im Profinet.:roll:

HTTPS hab ich schon deaktiviert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Müssen beide Dateien bei der S7 hinterlegt werden, also für beide DBs erstellen lassen oder nur die json?

Es werden beide Dateien benötigt. Im Webserver musst du noch als Dateiendung für Dateien mit dynamischen Inhalt .json ergänzen, denn in der json-Datei werden die eigentlichen Werte der Karte eingetragen.

Meiner Erfahrung nach wird der Webserver umso langsamer, desto mehr Variablen auf einer Seite eingefügt werden müssen. Also ein String mit 200 Zeichen ist schneller als 200 Einzelvariablen mit je einem Byte.

Hat schon mal jemand probiert, in wie weit man bei der 1500er aus dem SPS-Programm heraus die HW-Konfig auslesen kann?
Wenn das möglich wäre, dann könnte man nämlich eine Funktion in der SPS programmieren, die in 1-2 Strings automatisch die Konfiguration und die Werte einträgt, und die Webseite baut dann automatisch daraus das Rack für die Anzeige zusammen. Dann bestünde das Anlegen der Seite im einfügen von zwei festen Dateien im Webserver, und aufrufen eines einzigen FBs im SPS-Programm.
 
Reicht es nicht nur die JSON-Datei auf den Webserver zu packen und die HTML lokal bei der HMI? Weil ich noch JQuery offline verwende. Im AJAX müsste man nur halt die IP und den Rest der URL angeben.
 
Reicht es nicht nur die JSON-Datei auf den Webserver zu packen und die HTML lokal bei der HMI? Weil ich noch JQuery offline verwende. Im AJAX müsste man nur halt die IP und den Rest der URL angeben.

Im Prinzip würde das reichen. Aber es gilt die Same-Origin-Policy, die es normalweise nicht erlaubt per Javascript und XMLHttpRequest-Daten von einer anderen Domain in die eigene Seite einzubinden. Irgendwie lässt sich das zwar umgehen, aber das habe ich selber noch nicht gemacht.
Du kannst aber in einer html-Seite auf dem Webserver von der S7 beispielsweise jquery von einer anderen Domain einbinden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Stimmt, auf die Idee bin ich noch garnicht gekommen, es quasi von der HMI einzubinden.

Das mit der Same-Origin-Policy hatte ich schon bei Phoenix. Da Firefox und Chrome u.a. das nicht mehr unterschützen, hab ich mir was anderes zusammengestellt.
Auf einem Einplatinencomputer (nicht RPi) läuft der Win 10 Webserver. Dort ist die HTML und ein PHP-Script, welches mit
file_get_contents() die Kommunikation macht. Also muss der Browser kein AJAX machen.
 
Hab es geschafft. JSON ist auf der S7. HTML, JS und PHP auf dem Webserver vom Panel-PC. Die JSON-Antwort von der S7 ist nicht rein JSON, vor der [ und nach der ] sind noch Buchstaben und Zahlen (warum auch immer). Musste also die Antwort noch "säubern", bevor es ans JS gegeben wird.
Code:
[COLOR=#808000]<?php[/COLOR] 
[COLOR=#5555ff]$url[/COLOR][COLOR=#c0c0c0] [/COLOR]=[COLOR=#c0c0c0] [/COLOR][COLOR=#008000]'http://192.168.0.1/awp/5812/iodata.json'[/COLOR][FONT=Courier];[/FONT] 
[COLOR=#5555ff]$stream_options[/COLOR][COLOR=#c0c0c0] [/COLOR]=[COLOR=#c0c0c0] [/COLOR]array[FONT=Courier]([/FONT] [COLOR=#c0c0c0]    [/COLOR][COLOR=#008000]'http'[/COLOR][COLOR=#c0c0c0] [/COLOR]=>[COLOR=#c0c0c0] [/COLOR]array[FONT=Courier]([/FONT] [COLOR=#c0c0c0]       [/COLOR][COLOR=#008000]'method'[/COLOR][COLOR=#c0c0c0]  [/COLOR]=>[COLOR=#c0c0c0] [/COLOR][COLOR=#008000]'GET'[/COLOR][FONT=Courier],[/FONT] [COLOR=#c0c0c0]       [/COLOR][COLOR=#008000]'header'[/COLOR][COLOR=#c0c0c0]  [/COLOR]=>[COLOR=#c0c0c0] [/COLOR][COLOR=#008000]'Content-Type:[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#008000]application/json;[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#008000]charset=utf-8\r\n'[/COLOR][FONT=Courier],[/FONT] [COLOR=#c0c0c0]    [/COLOR][FONT=Courier]),[/FONT] [FONT=Courier]);[/FONT] 
[COLOR=#5555ff]$context[/COLOR][COLOR=#c0c0c0]  [/COLOR]=[COLOR=#c0c0c0] [/COLOR]stream_context_create[FONT=Courier]([/FONT][COLOR=#5555ff]$stream_options[/COLOR][FONT=Courier]);[/FONT] [COLOR=#5555ff]$response[/COLOR][COLOR=#c0c0c0] [/COLOR]=[COLOR=#c0c0c0] [/COLOR]file_get_contents[FONT=Courier]([/FONT][COLOR=#5555ff]$url[/COLOR][FONT=Courier],[/FONT][COLOR=#c0c0c0] [/COLOR][COLOR=#808000]null[/COLOR][FONT=Courier],[/FONT][COLOR=#c0c0c0] [/COLOR][COLOR=#5555ff]$context[/COLOR][FONT=Courier]);[/FONT] 
[COLOR=#5555ff]$response[/COLOR][COLOR=#c0c0c0] [/COLOR]=[COLOR=#c0c0c0] [/COLOR]preg_replace[FONT=Courier]([/FONT][COLOR=#008000]'/^[^\[]+/'[/COLOR][FONT=Courier],[/FONT][COLOR=#c0c0c0] [/COLOR][COLOR=#008000]""[/COLOR][FONT=Courier],[/FONT][COLOR=#c0c0c0] [/COLOR][COLOR=#5555ff]$response[/COLOR][FONT=Courier]);[/FONT] [COLOR=#5555ff]$response[/COLOR][COLOR=#c0c0c0] [/COLOR]=[COLOR=#c0c0c0] [/COLOR]preg_replace[FONT=Courier]([/FONT][COLOR=#008000]'/[^\]]+$/'[/COLOR][FONT=Courier],[/FONT][COLOR=#c0c0c0] [/COLOR][COLOR=#008000]""[/COLOR][FONT=Courier],[/FONT][COLOR=#c0c0c0] [/COLOR][COLOR=#5555ff]$response[/COLOR][FONT=Courier]);[/FONT] 
print_r[FONT=Courier]([/FONT][COLOR=#5555ff]$response[/COLOR][FONT=Courier]);[/FONT] 
[COLOR=#808000]?>[/COLOR]
 
Zurück
Oben