Sonstiges S7-1200 Webserver - AJAX

Moach

Level-1
Beiträge
5
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Forum!
Kann mir jemand AJAX mit S7-1200 zeigen?
Ich hab darüber nicht wirklich viel gefunden.

Eine einfache Datenabfrage (z.B. eine Variable) würde mir weiterhelfen ums an der S7 zu testen.
Ich würde gerne z.B. Ein- und Ausgänge abfragen wollen. Zur Zeit mach ich nur einen Refresh der Seite. Hab diese schon in iFrames unterteilt - was auch ganz gut funktioniert - mit AJAX solls ja noch besser gehen?
Kann mir hier jemand den Code posten?
Vielen Dank im vorhinein!
Grüße
 
Ob das besser funktioniert hängt davon ab wie du deine Webseite zusammenbaust. Der Webserver der 1200 ist einfach schnarchlangsam, vor allem wenn viele AWP Variablen gelesen werden sollen. Man kann die Performance ein ganzes Stück erhöhen, wenn man im SPS Programm die zu lesenden Variablen in einen String schreibt (z.B. Komma getrennt) und dann nur per AWP diese eine (oder ggf. mehrere) Stringvariable einliest. Per Javascript zerlegt man diesen String wieder in die Einzelwerte. Das bringt richtig was.

Und nun das Beispiel:
Es gibt dazu zwei Seiten: ajax-basis.html und ajax-daten.html
In ajax-basis wird per XML-HTTP Request die Seite ajax-daten geladen, und in das div-Element geschrieben.
ajax-daten.html enthält in diesem Beispiel eine HTML-Tabelle mit den Werten aus der SPS.
Wie ich oben geschrieben habe, kann man sich theoretisch das HTML komplett sparen und nur die Werte übertragen, evtl. sogar passend in JSON Notation, oder eben einfach Komma getrennt. In JS ist sowas ja fix zerlegt.

ajax-basis.html
Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
	<head>
		<title>Testseite zur Datenaktualisierung mittels XML-HTTP Request</title>	
		
<script type="text/javascript">
function showDataTable()
{
	if (window.XMLHttpRequest) {
		// code fuer IE7+, Firefox, Chrome, Opera, Safari
		xmlhttp = new XMLHttpRequest();
	} else {
		// code fuer IE6, IE5
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}

	xmlhttp.open("GET", "ajax-daten.html", true);

	xmlhttp.onreadystatechange = function()
	{
		if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
		{
			document.getElementById("OutputArea").innerHTML = xmlhttp.responseText;
			// Refresh Timeout zum Neuladen der Daten setzen
			setTimeout("refreshOutputArea()", 3000);
		}
	}
	xmlhttp.send(null);
}

function refreshOutputArea()
{
	showDataTable();
}

window.onload = function()
{
	refreshOutputArea();
}

</script>	
	</head>
<body>

<h2>Testseite zur Datenaktualisierung mittels XML-HTTP Request</h2>
<p>Aktualisierung der Seitendaten alls 3 s.</p>
<div id="OutputArea"></div>
</body>
</html>

ajax-daten.html
Code:
<!-- AWP_In_Variable Name='"DB_HMI"' -->

<!-- AWP_In_Variable Name='"DB_HMI".boolVar1' -->
<!-- AWP_In_Variable Name='"DB_HMI".boolVar2' -->
<!-- AWP_In_Variable Name='"DB_HMI".intVar1' -->
<!-- AWP_In_Variable Name='"DB_HMI".intVar2' -->

<!-- AWP_Enum_Def Name="EnumEinAus" Values='0:"Aus",1:"Ein"' -->

<!-- AWP_Enum_Ref Name='"DB_HMI".boolVar1' Enum="EnumEinAus" -->
<!-- AWP_Enum_Ref Name='"DB_HMI".boolVar2' Enum="EnumEinAus" -->

<table>
 <tr>
  <td>Variable intVar1: :="DB_HMI".intVar1:</td>
 </tr>
 <tr>
  <td>Variable intVar2: :="DB_HMI".intVar2:</td>
 </tr>
 <tr>
  <td>Variable boolVar1: :="DB_HMI".boolVar1:</td>
 </tr>
 <tr>
  <td>Variable boolVar2: :="DB_HMI".boolVar2:</td>
 </tr>
</table>


Auf meiner SPS benötigt der Webserver für die 4 Variablen fast 3 Sekunden zum laden. Darum lassen sich nicht wesentlich schnellere Aktualisierungszeiten realisieren.
Die Ladezeiten lassen sich z.B. im Firefox mit den Entwicklertools beobachten.

Man sollte noch prüfen ob kein Request mehr läuft bevor man einen neuen absendet, das habe ich hier der Einfachheit halber weggelassen.
 
Zurück
Oben