ILC 150 ETH Webserver

Ich wollte nur damit sagen, dass es somit nicht an den Webserver liegt.
Naja, stimmt nicht ganz.

1. Ist UTF-8 eigentlich heutzutage schon Standard
2. Schickt der Server beim Response keine Encoding Info mit. Somit kann der Client nicht Automatisch das Encoding einstellen

Aber egal: mit Javascript und XMLHTTPReuest sind keine Sonderzeichen möglich!!

@Jens: Auf jeden Fall vielen Dank für die Basic mit jQuery Mobile!! :cool:

Ich habe nun alles zusammen bearbeitet und einsatzbereit. Alle jQuery Pages sind nun in der entry.html.
Bei jedem Öffnen einer Page werden die aktuellen IOs und Strings von nur dieser Page ausgelesen.
Das bedeutet, mann kann Variabeln von der ILC auch mehrmals auf unterschiedlichen jQuery Pages verwenden (siehe @GV.Local_Time_Formated).

Zusätzlich habe ich noch die Verarbeitung von Checkboxen hinzugefügt (Benachrichtigung.bGlobalMessageEnable).

Standard ist, dass die Listview Items (Strings) nur einmal beim Öffnen der jQuery Page eingelesen werden.
IOs wie 'button', 'select' und 'checkbox' werden im Sekundenintervall von der ILC gelesen.
Will man bestimmte Listview Items trotzdem jede Sekunde einlesen so muss man einfach das 'data-auto' Attribute hinzufügen.

EDIT:
Habe noch einen kleinen Fehler wegen FireFox usw ausgebügelt.
Der IE liefert bei getElementsByName immer ein Ergebnis, egal ob 'id' oder 'name'.
Andere Browser sind da nicht so großzügig...
Deswegen die neue Funktion getElementsByAttribute

EDIT 2:
Jetzt hat sich doch noch ein FireFox Fehler eingeschlichen!
Habe den Anhang neu hochgeladen!
 

Anhänge

  • jQuery_ILC_02.zip
    4,9 KB · Aufrufe: 18
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielleicht nun das letzte Update von meiner Seite!

Habe das Script noch etwas für den Mobilen Zugriff abgeändert.
Vorher wurde ein Auto Update Timer mit z.B. 1000ms gesetzt.

Wenn die Internetverbindung aber nicht schnell genug ist, haben sich die Updates überschlagen.
Nun wird der Timer bei jeder Abfrage deaktiviert und nachdem alles abgeschlossen ist wieder aktiviert.

Nun geht's auch mit meinem Blackberry bei Edge Verbindung :cool:
 

Anhänge

  • jQuery_ILC_03.zip
    4,8 KB · Aufrufe: 35
Vielen Dank!

Hallo Portisch,
wollte mich nochmal für das Bereitstellen deiner Dateien bedanken...
Habe deine Dateien jetzt gerade mal ausprobiert, scheint alles gut zu funktionieren. War jetzt eine Woche im Urlaub, sonst hätte ich mich schon früher bei dir für deine Mühen bedankt...

Schöne Grüße
Daniel
 
Ich habe den Source aber noch um einiges bearbeitet und mehr abgesichert.
Es konnte vorkommen, dass man die ganze SPS in den Stop Betrieb stellen konnte.
Das ist natürlich nicht so super :-(

Wenn ich etwas zusammen habe stelle ich die GlobalFunctions.js neu ein.
 
Habe heute noch mal einige Funktionen getestet, bis jetzt läuft alles einwandfrei... Das Einzige was nicht geht, ist das Testen der Html, wenn sie nicht auf der ILC liegt. Dann kommt lediglich eine schwarze Seite mit dem Aktualisieren Zeichen...

Schöne Grüße
Daniel

Gesendet von meinem GT-I9300 mit Tapatalk 2
 
Erstens ist ein Object im Source verwendet für Setzen und Abfragen.
Dann war es auch noch möglich wenn ein Fehler im HTML war, dass die Variable 'null' gesetzt wurde.
Auch wenn der Value auf '' war wurde es gesetzt.

Seit ich das auch abfange hat die SPS zumindest nicht mehr gestoppt.

Das das HTML nur auf der SPS geht ist klar! Es ist ja keine Adresse in der GlobalFunctions.js eingetragen.
Wenn man es extern auf der SPS testen will muss man die IP hinzufügen und einen Browser verwenden, der Cross-Domain-Request zulässt.
Z.b. der Internet Explorer. FireFox kann es z.b. nicht!
 
Zuletzt bearbeitet:
Hallo Portisch,
Das schaut extrem super aus. Hast du das alles mit Java Script programmiert?

Gesendet von meinem GT-I9300 mit Tapatalk 2
 
Das ist jQuery Mobile + das GlobalFunctions.js.

Jedoch gibt es mit dem Webserver der ILC einige Probleme. Bei Images egal ob PNG oder GIF werden nicht immer alle übertragen.
Ich habe aber eine Info das Phoenix Contact den Webserver erweitern wird. Mal sehen ob es dann besser wird wenn wirklich was kommen sollte...

Derzeit ist es am besten einen Extra Webserver zu verwenden der richtig funktioniert!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Fragen zu JQuery

Hallo Portisch,
vielen dank für die Antwort. Habe mir schon gedacht, dass du das mit jQuery gemacht hast. Habe jetzt auch ein wenig damit gespielt und zumindest schon mal die einfachen Sachen hinbekommen wie z. B. eine Navbar im footer und dergleichen.

Hätte noch drei kleine Fragen an dich:

1) Wie hast du das Icon im Header erzeugt? Habe jetzt schon verschiedene Varianten durchprobiert, leider nicht mit dem gewünschten Ergebnis.
2) Hast du bei deiner Übersicht "Stockwerk" die Icons selber auf Grundlage des Planes deines Hauses erstellt? Mit welchem Programm funktioniert das?
3) Wenn ich die Dateien auf einem extra Webserver ablege, dann muss ich in der GlobalFunctions.js den Pfad in der function fhttprequest und in der function SetValueToPLC mit der IP der Steuerung ergänzen, oder?
z. B. "var command="http://192.168.3.3/cgi-bin/writeVal.exe?" + sVariable + "+" + sValue;"

Ich habe aber eine Info das Phoenix Contact den Webserver erweitern wird. Mal sehen ob es dann besser wird wenn wirklich was kommen sollte...

Wird der Webserver dann über ein Update oder dergleichen erweitert oder benötigt man hierzu eine neue Steuerung?

Danke für deine Antwort.

Schöne Grüße
Daniel

PS. Hier noch ein schöner Link zu einem jQuery Tutorial
http://de.slideshare.net/plobacher/jquery-mobile-kompakt-das-kompendium
 
Wie hast du das Icon im Header erzeugt? Habe jetzt schon verschiedene Varianten durchprobiert, leider nicht mit dem gewünschten Ergebnis.

Code:
 <div data-role="header" data-position="fixed" >
  <img src="homeact.png" style="margin-top: 3px; margin-left: 5px;" ></img>
  <span id="@GV.Local_Time_Formated" data-obfunc="String" data-auto="Update" style="display: inline; position: absolute; top: 11px;" ><span></span></span>  
 </div><!-- /header -->

Hast du bei deiner Übersicht "Stockwerk" die Icons selber auf Grundlage des Planes deines Hauses erstellt? Mit welchem Programm funktioniert das?
Sweet Home 3D

Wenn ich die Dateien auf einem extra Webserver ablege, dann muss ich in der GlobalFunctions.js den Pfad in der function fhttprequest und in der function SetValueToPLC mit der IP der Steuerung ergänzen, oder?
Ist richtig. Jedoch weis ich noch nicht wie und ob das funktioniert wenn das ganze auf einem anderen Webserver liegt und man dann über das Internet zugänglich macht...

Wird der Webserver dann über ein Update oder dergleichen erweitert oder benötigt man hierzu eine neue Steuerung?
Sollte per Firmwareupdate gehen. Zumindest war bei der neueren Firmware auch schon Update des Webservers dabei. Ob hier jedoch mal etwas kommt weis ich nicht.

Ich spekuliere eher damit mir auf dem Router mit DD-WRT Firmware mir einen eigenen Webserver einzurichten.
 
Webserver

Hallo Portisch,
danke für deine schnelle Antwort.
Habe den Header von dir angepasst, funktioniert einwandfrei. Ich habe vorher immer mit Buttons herum experimentiert dabei geht es mit einem image natürlich bedeutend schneller und einfacher...

Das Programm Sweet Home 3D werde ich mir mal anschauen, schaut schon mal sehr vielversprechend aus.

Deine Idee auf einen Router mit dd-wrt einen Webserver zu installieren finde ich gut, habe zur Zeit selber zwei WRT54-GL von Linksys als Access Point im Einsatz, auf denen bereits dd-wrt installiert ist. Als Alternative könnte ich auch meine Synology Diskstation als Webserver einrichten und auf dieser die Dateien ablegen. Mal schauen, wie das technisch umsetzbar ist.

Nun denn, schöne Grüße
Daniel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Noch ein kleiner Tipp nebenbei:

Mann kann auch bei Variabeln die eine Struktur haben oder bei Array das PDD aktivieren.

z.B. habe ich diese Struktur:
Code:
TYPE
T_T_SENSOR_DATA : STRUCT
 Name : STRING;
 Actual_T : STRING;
 Actual_V : STRING;
 Actual_H : STRING;
 Actual_P : STRING; 
 Serial : STRING;
 Last : STRING;
 Last_Logging : INT;
 SensorTyp : INT;
END_STRUCT;
END_TYPE
(**)
TYPE
T_SENSOR_DATA_L : ARRAY[0..9] OF T_T_SENSOR_DATA;
END_TYPE

Nun habe ich in einem Funktionsblock eine Variable MyData : T_SENSOR_DATA_L.
Bei 'MyData' kann das PDD gesetzt werden.

Extern mit HTTP Request kann man dann auf den ganzen Inhalt der Variable, jedoch einzeln zugreifen:
MyData[0].Name, MyData[1].Name, MyData[5].Last, ....

Man muss die Daten einzeln abgreifen. Ein abfragen der 'MyData' Variable direkt geht nicht.
 
Interessant

Hallo Portisch,

klingt sehr interessant, werde ich mal ausprobieren.
Das von dir angesprochene Problem mit der Darstellung von Bildern bzw. Icons habe ich auch, wenn die entry.html auf dem Webserver der Steuerung liegt. Habe die letzten Tage probiert, ob ich einen Request von der entry.html, die auf meiner NAS (Synology Diskstation mit Apache Webserver) liegt, zur ILC bekomme. Leider ohne Erfolg. Als Fehler taucht immer "access denied" auf.

Wenn ich die entry.html sowie die GlobalFunctions.js (Pfad in Datei um IP der ILC ergänzt) auf meinem Desktop ablege und dann einen Request sende, bekomme ich ebenfalls keine Antwort von der ILC.

Funktioniert das eigentlich bei dir? Oder taucht hier wieder das Cross domain Problem auf?

Schöne Grüße
Daniel
 
Habe gerade das gleiche Problem. Es liegt wieder einmal bei dem Thema 'Cross Domain Requests'!

Ich habe nun lighttpd auf meinem Router laufen und wenn ich die Option in der Sicherheitseinstellungen des IE9 aktiviere geht es.
Per Default ist sie aber deaktivert und deswegen geht es nicht. Mit FireFox oder Chrom braucht man gar nicht erst damit anfangen.
Stehe momentan etwas auf dem Schlauch.

Ansonsten ist lighttpd gegenüber dem Webserver der ILC ein riesiger Vortschritt! Bilder gehen und die Geschwindigkeit ist auch um einiges mehr!
Werde noch andere Webserver wie apache usw probieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe nun eine Lösung für das Cross Domain Problem!
:grin:

Meine SPS hat die IP 192.168.0.20
Mein Webserver hat die IP 192.168.0.1
Mein Dummy DNS Name damit der Webserver vom Internet verfügbar ist: myServer.portisch.com

Ich habe auf dem Router DD-WRT mit der IP 192.168.0.1. Dort habe ich den DD-WRT-WebGui Port von 80 auf 81 abgeändert.
Dann auf dem USB-Stick am Router OptWare installiert.
Dann lighttpd aus dem OptWare Package.

In der lighttpd config habe ich den Proxy aktiviert und diese Config eingestellt:
Code:
$HTTP["host"] =~ "(myServer.portisch.com )" {
$HTTP["url"] =~ "^/cgi-bin/ILRReadValues(.*)$" {
proxy.server = ("" => (
("host" => "192.168.0.20", "port" => 80)
))
}
}
$HTTP["host"] =~ "192.168.0.1" {
$HTTP["url"] =~ "^/cgi-bin/ILRReadValues(.*)$" {
proxy.server = ("" => (
("host" => "192.168.0.20", "port" => 80)
))
}
}

Das bedeutet, die Aufrufe die '/cgi-bin/ILRReadValues' beinhalten werden auf die IP 192.168.0.20, Port 80 umgeleitet.
Somit braucht man beim XMLHTTPRequest keine IP mehr eingeben und es kommt zu keinem Cross Domain Fehler:

Alt:
Code:
xhttp.open("POST",InetAddress + "/cgi-bin/ILRReadValues.exe",false);
Neu:
Code:
xhttp.open("POST", "/cgi-bin/ILRReadValues.exe",false);
 
Wahnsinn!

Hallo Portisch,

ich habe mir auch das ganze Wochenende schon verschiedene Internetseiten zum Thema Cross Domain angeschaut, alles sehr interessant, nur leider half mir das nicht weiter...
Welchen Router und welche Firmware verwendest du jetzt?
Hab mir den Lighttpd Web Server auch schon angeschaut, muss ich mir aber wohl mal etwas genauer anschauen... Muss dir übrigens ein großes Kompliment machen, finde echt klasse, wie du dich mit den verschiedensten Dingen auskennst und immer wieder tolle Lösungen hier im Forum präsentierst!!!

Verwendest du jetzt dd-wrt oder OpenWrt, da wäre ja schon ein Webserver dabei, wenn ich das richtig verstanden habe. Die Lösung mit dem Router ist auf jeden Fall die beste Möglichkeit, da dieser ja sowieso immer laufen muss und dadurch ein weiterer Server nicht notwendig ist.

Werde mal versuchen, deine Lösung nachzubauen und mir hierzu einen neuen Router zulegen...

Deine Hilfe wäre dann natürlich wieder gerne willkommen.

Schöne Grüße
Daniel
 
Danke!

Ich habe den WNR3500L mit DD-WRT.

http://www.dd-wrt.com/wiki/index.php/Optware,_the_Right_Way
http://www.dd-wrt.com/wiki/index.php/WEB_server

Der hat einen USB Port wo ich einen HUB dran habe.

Es ist ja auch noch ein USB Drucker und ein Mobile Stick und ein 16GB USB-Stick als JFFS mit dran.
Gleichzeitig hat man damit ein NAS und auch einen FTP Server.

Ich speichere ja auch gleich die SPS Sensordaten auf dem FTP über die Oscat Bibliothek ab.

EDIT:
Die Proxyumleitung muss man für die WriteVal.exe natürlich auch noch machen.
 
Zuletzt bearbeitet:
Zurück
Oben