Beispiel
Einführung
Im Folgenden wird ein Beispiel gezeigt, wie zwischen TwinCAT und Flash Daten ausgetauscht werden können.
Voraussetzungen
Software
Microsoft Windows 2000/XP/2003/CE
TwinCAT PLC (ab Version 2.10)
Macromedia (Adobe) Flash (ab Version 8)
ggf. Microsoft Visual Studio (ab Version 7.1 (".NET 2003"))
Kenntnisse
Programmierung mit dem TwinCAT PLC-Control
Kommunikation per ADS
Erstellung von Flash-Animationen
Programmierung mit ASP und/oder .NET
Einrichtung einer ASP- und ASP.NET-Anwendung im IIS (Internet Information Service) (ab Version 5) und/oder einer ASP-Anwendung unter Windows CE (ab Version 4.2)
Testen der ASP(X)-Seite
Bitte beachten Sie, dass es nicht möglich ist, direkt auf einem CX1000-System mit Windows CE Flash-Seiten im Internet Explorer zu betrachten. Diese Systeme können nur als Server für diese Seiten dienen. |
Für einen einfachen Test können Sie das beigefügte Testprogramm oder die Flash-Test-Animation benutzen.
Mit dem Testprogramm oder der Flash-Test-Animation können entsprechende HTTP-Requests aufgerufen werden. Durch den Dialog werden die notwendigen Parameter beim Aufruf mit übergeben. Tritt ein Fehler auf, so wird dieses in der Statuszeile angezeigt. Eine gültige Antwort wird in dem Feld unter 'HTTP-Response' ausgegeben.
Funktionsweise
Die ASP(X)-Seiten sind in der Lage ADS-Befehle auszuführen. Per HTTP-POST-Methode werden dieseASP- bzw. ASPX-Seite aufgerufen. Diesen Seiten werden verschiedene Parameter übergeben, die festlegen, welcher ADS-Befehl mit welchen Werten aufgerufen wird. Es wird keine HTML-Seite zurückgegeben, sondern nur einen String, in dem die Werte oder eine Fehlermeldung enthalten sind.
Hinweis:
Ein ähnlicher Lösungsansatz wäre die Verwendung des TwinCAT Ads-WebServices. Zu dem Zeitpunkt als dieses Dokument entstand war in der WebService Implementierung von Flash ein Fehler in der Speicherverwaltung. Dieser Fehler hatte zur Folge, dass nach mehrtägigem Betrieb die Kommunikation abgebrochen wurde. Des Weiteren ist die hier vorgestellte Art und Weise des Datenaustausches deutlich schneller als per SOAP, da die Protokollstruktur einfacher ist. Dieses macht sich besonders bei einfachen, nicht so leistungsfähigen Clients (z.B. PDA's) bemerkbar.
Die folgenden Beispiele lesen und schreiben Werte mit dem Flash-Animations-Beispiel. Dabei wird die auf einem Beckhoff CX1000-System (mit Microsoft Windows CE) liegende ASP-Seite angesprochen. Die SPS befindet sich ebenfalls auf diesem System.
Beispiel 1 (Lesen eines INT16-Wertes):
HTTP-Request
POST /TcAdsHTTPWrapper/TcAdsHTTPWrapper.asp HTTP/1.1
Accept: */*
x-flash-version: 8,0,22,0
Content-Type: application/x-www-form-urlencoded
Content-Length: 81
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: (...)
Host: (...)
Connection: Keep-Alive
Cache-Control: no-cache
IndexOffset=30&IndexGroup=16416&Port=801&AmsNetId=5%2E0%2E226%2E138%2E1%2E1&Cmd=3
Die ASP-Seite wird mit den folgenden Parametern aufgerufen:
"IndexGroup" & "IndexOffset" : Geben an, ab welcher Speicheradresse gelesen werden soll (in diesem Fall ab Merkerbyte 30)
"AmsNetId" & "Port" : Bezeichnen die zu verwendene SPS und ihr Laufzeit-System [es können sowohl Punkte (".") als auch "%2E" verwendet werden]
"Cmd" : Steht für die Nummer der auszuführenden Funktion (in diesem Fall entspricht 3 dem Lesen eines INT16-Wertes)
HTTP-Response
HTTP/1.0 200 OK
Date: (...)
Server: Microsoft-WinCE/5.0
Expires: (...)
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Content-Length: 16
&data=198&eof=1&
Wie weiter oben bereits erwähnt, wird kein HTML zurückgeliefert, sondern nur ein Antwort-String. Dieser ist so formatiert, dass er der Flash-Syntax entspricht, wodurch es leichter zu parsen ist.
"&" : Trennzeichen
"eof=1" : Terminierungszeichen
"data" : Beschreibt bei Lese-Befehlen die Antwortdaten
Beispiel 2 (Schreiben eines INT16-Wertes):
HTTP-Request
POST /TcAdsHTTPWrapper/TcAdsHTTPWrapper.asp HTTP/1.1
Accept: */*
x-flash-version: 8,0,22,0
Content-Type: application/x-www-form-urlencoded
Content-Length: 90
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: (...)
Host: (...)
Connection: Keep-Alive
Cache-Control: no-cache
Data=123&IndexOffset=30&IndexGroup=16416&Port=801&AmsNetId=5%2E0%2E226%2E138%2E1%2E1&Cmd=7
"Data" : Bezeichnet bei Schreib-Befehlen den zu setzenden Wert
HTTP-Response
HTTP/1.0 200 OK
Date: (...)
Server: Microsoft-WinCE/5.0
Expires: (...)
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Content-Length: 7
&eof=1&
Beispiel 3 (Lesen eines BOOL-Arrays):
HTTP-Request
POST /TcAdsHTTPWrapper/TcAdsHTTPWrapper.asp HTTP/1.1
Accept: */*
x-flash-version: 8,0,22,0
Content-Type: application/x-www-form-urlencoded
Content-Length: 89
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: (...)
Host: (...)
Connection: Keep-Alive
Cache-Control: no-cache
Count=3&IndexOffset=30&IndexGroup=16416&Port=801&AmsNetId=5%2E0%2E226%2E138%2E1%2E1&Cmd=2
"Count" : Bezeichnet bei Array-Befehlen die Anzahl der zu bearbeitenden Elemente
HTTP-Response
HTTP/1.0 200 OK
Date: (...)
Server: Microsoft-WinCE/5.0
Expires: (...)
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
Content-Length: 19
&data=1|0|1|&eof=1&
"|" : Trennzeichen zwischen den einzelnen Array-Werten
Einbinden in Flash
Beispiel 1 lässt sich mit Hilfe des folgenden ActionScripts realisieren:
Zuerst müssen die Initialisierungsvariablen angelegt werden:
var URL : String = "";
var HTTPCommand : String = "";
var Cmd : Number = 0;
var AmsNetId : String = "";
var Port : Number = 0;
var IndexGroup : Number = 0;
var IndexOffset : Number = 0;
var Data : Number = 0;
var HTTPResponseData : String = "";
var Request : LoadVars = new LoadVars();
var Response : LoadVars = new LoadVars();
var submitListener : Object = new Object();
Mit Hilfe der folgenden Operationen wird das zurückgelieferte Ergebnis aufbereitet:
Response.onData = function(raw)
{
if (raw == undefined)
{
HTTPResponseData = "Error";
}
else
{
HTTPResponseData = unescape(raw);
}
}
Nun müssen die entsprechenden Werte gesetzt werden:
URL = "http://(...)/TcAdsHTTPWrapper/TcAdsHTTPWrapper.asp";
HTTPCommand = "POST";
Durch Setzen der folgenden Werte werden diese als Parameter beim HTTP-Request übergeben:
Request.Cmd = 3;
Request.AmsNetId = "5.0.226.138.1.1";
Request.Port = 801
Request.IndexGroup = 16416
Request.IndexOffset = 30
Mit dem folgenden Methodenaufruf wird die Kommmunikation gestartet:
Request.sendAndLoad(URL,Response,HTTPCommand);
Das Ergebnis befindet sich nun in der Variablen "HTTPResponseData".
Projektdateien
Es werden hier zwei verschiedene Lösungen vorgestellt.
Zum einen eine ASP.NET-Anwendung. Diese ist für Server geeignet, die ASPX-Anwendungen unterstützen.
Sie müssen diese erst noch kompilieren und entsprechend in den IIS einbinden.
Zum anderen eine ASP-Seite, die auch bei Servern eingesetzt werden kann, bei denen kein ASPX zur Verfügung steht (.NET Compact Framework V1.1).
Diese können Sie direkt in das entsprechende Webverzeichnis (beim CX1000 mit Windows CE "\hard disk\www") kopieren.
Projekttyp | Projektdateien |
---|---|
ASP-Anwendung | |
ASP.NET-Anwendung | |
C#-Testprogramm | |
Flash-Test-Animation | |
Licht-Demo |