ILC 150 ETH Webserver

Zuviel Werbung?
-> Hier kostenlos registrieren
Also es kommt so rein:

in der function GetData(xhttp):
var responseText = xhttp.responseText;
responseText = ....Sonnenh?tstand: 12:57:03....

var responseText = encode_utf8(xhttp.responseText);
responseText = ....Sonnenhï¿¿tstand: 12:57:03....

var responseText = decode_utf8(xhttp.responseText);
responseText = ....Sonnenh?tand: 12:57:03....

Das originale 'xmlDoc = xhttp.responseXML;' geht gar nicht, denn 'xmlDoc.getElementsByTagName('n').length' ergibt 0.
Sollte aber 6 (da sechs Elemente) sein.
Es gibt einen Parse Error: "Im Textinhalt wurde ein ungültiges Zeichen gefunden.\r\n"
Errorcode: -1072896760
Er kommt genau so weit:
"<body><version>1.0</version><client>IMasterPhoenix5_14_05</client><client_ver>5.14.0501</client_ver><item_list_size>6</item_list_size><item_list><i><n>@GV.ONBOARD_OUTPUT_BIT0</n><v>0</v></i><i><n>Benachrichtigung.bGlobalMessageEnable</n><v>0</v></i><i><n>@GV.Local_Time_Formated</n><v>24.09.2012 20:38</v></i><i><n>@GV.Sun_Rise</n><v>Sonnenaufgang: 6:31:48</v></i><i><n>@GV.Sun_Midday</n><v>Sonnenh"
Also genau da wo dann das 'ö' kommen sollte.

Eigentlich sollte es 'Sonnenhöchststand: 12:57:03' heissen.
Ich komme aber nicht darauf was falsch ist.

Also einfach bei der ILC einen String mit Umlaut auf PDD setzen - dann geht es nicht mehr.
Ich habe auch noch andere Strings wo ein Grad Zeichen ('°')dabei ist, da ist es das gleiche.
In meinem Delphi Programm schicke ich einen UTF8 Encoded String zur ILC.
Mit dem Response Text vom Request mache ich auch wieder ein UTF8 Encode und dann passt es mit den Sonderzeichen und Umlauten.
Bei Javascript schaffe ich es aber nicht...


Ich habe das ganze noch um Strings erweitert, da ist es mir aufgefallen:

Im HTML:
<ul data-role="listview">
<li id="@GV.Sun_Rise" data-obfunc="sValues"></li>
<li id="@GV.Sun_Midday" data-obfunc="sValues"></li>
<li id="@GV.Sun_Set" data-obfunc="sValues"></li>
</ul>

In der GlobalFunctions bei der ldHTML Funktion das dazu:
// get all list items of html
var d = document.getElementsByTagName('li');
for (var i = 0; i < d.length; i++)
{
if (d.id != '')
objNames[objNames.length] = d.id;
}


Und in der GetData das dazu:
// Object String Value
case 'sValues':
jQuery(actObject).text(xmlDoc.getElementsByTagName('v').childNodes[0].nodeValue);
break;


Es sind einfach listen in der HTML die mit String Variabeln von der ILC gefüttert werden.

Das 'data-obfunc' Element definiert was das Script in der der GetData Funktion mit den Daten machen soll.
Licht, Jalousie und nun auch sValues machen etwas unterschiedliches.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

@Portisch: Ich werde das heute Abend auch mal ausprobieren und eine Variable mit Umlaut verwenden. Mal schauen, was bei mir passiert.
Vielen Dank für dein Beispiel für Listview´s, werde ich auch heute bzw. morgen mal ausprobieren.
Welches Programm verwendest du eigentlich so für die JavaScript Sachen?

@Mobi: Schaut ja schon ganz gut aus... :)

Schöne Grüße
Daniel
 
@Mobi: Ja, in Delphi habe ich es auch geschafft obwohl ich mich da auch etwas spielen musste. Delphi ist da nicht so einfach mit Ansi, Unicode, PWideChar, UTF8,.... So scheint es mit Javascript auch zu sein.
Vielleicht kannst du bei deinem Programm noch die String Codierung rausfinden?

@Vaninger: Ich mache das mit Ultraedit. Debuggen tu ich dann mit dem internen Debugger vom IE9 (einfach F12 drücken). Leider ist es etwas umständlich, da man immer die Datei lokal ändert und dann auf den FTP der Steuerung kopieren muss. Bei jeder kleinen Änderung ist das extrem Umständlich. Gibt es da einen Weg die Dateien direkt auf dem FTP der SPS zu öffnen und dort zu editieren?
 
Ich nutze die winhttp.dll. Die bekommt die Antwort als Binary, also Hexcode, quasi Raw. Und ich wandel mir das dann nur in einen String um in UTF8.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, danke!

Bin nun drauf gekommen, dass bereits das XMLHttpRequest Document einen Parse Error rausspuckt.
Also beim Empfangen von dem XML der ILC hauts schon nicht mehr hin.

Ich bin nun auf das noch gestossen:
http://api.jquery.com/jQuery.post/

Kann das mal jemand zusammenbauen mit den Richtigen Parameter?
Vielleicht geht's damit...
 
Umlaute

Guten Abend,

@Portisch:
Wollte gerade mal dein Umlaut Problem ausprobieren, in PCWorx lässt sich ja gar kein Umlaut als Variable verwenden, geschweige denn ein °-Zeichen...
Habe nach ein wenig Googeln ein paar Links gefunden, evtl. helfen dir diese weiter. Stichwort Encoding und Decoding!

http://www.fundstücke-im-netz.de/2012/03/28/umlaute-mit-ajax-verwenden/
http://www.unseenrevolution.com/jquery-ajax-post/
http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#encode_uri_component
http://www.jquery4u.com/ajax/key-differences-post/#.UGNGyVHP9f9
http://www.ajax-community.de/allgemein/8928-jquery-ajax-sonderzeichen-umlaute.html

Als Programm nutze ich derzeit Notepad++ bzw. PS Pad, allerdings weiß ich gar nicht, ob hier ein Compiler integriert ist...

Das Beispiel mit den Listviews muss ich auch noch ausprobieren, bin leider etwas erkältet und kam gestern auch noch nicht dazu.

@alle: Hat von euch zufällig jemand einen PCWorx Baustein, der zu einem bestimmten Zeitpunkt einen Impuls ausgibt. So eine Art Zeitschaltuhr, die an einem bestimmten Datum (nicht Wochentag) zu einer bestimmten Uhrzeit eine Aktion ausführt?

Danke und schöne Grüße
Daniel
 
Wollte gerade mal dein Umlaut Problem ausprobieren, in PCWorx lässt sich ja gar kein Umlaut als Variable verwenden, geschweige denn ein °-Zeichen...
Habe nach ein wenig Googeln ein paar Links gefunden, evtl. helfen dir diese weiter. Stichwort Encoding und Decoding!
Schon klar, nicht der Variable Name selber sondern der Variable Inhalt ist Gemeint!

Das mit dem Encoding habe ich schon 20-mal Probiert. Kein Erfolg!
Ich habe aber noch den Tipp erhalten den Response auf HTML zu setzen. Derzeit habe ich ihn auf XML, aber es wird ja kein XML Header im Response mitgeschickt -> HTML, nicht XML. Muss ich mal probieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe hier einmal eine Entry.html und eine eigene GlobalFunctions.js angehängt.
Einfach in der GlobalFunctions den Variabelnamen anpassen: @GV.Sun_Midday --> zu der eigenen
Diese Variable als String in der ILC anlegen und PDD aktivieren. Dann als Anfangswert z.B. 'Höhe' oder was auch immer zuweisen.
Bei mir kommt dann kein 'ö' an sondern nur Blödsinn. Komme auf keine Lösung...

Unbenannt.png
 

Anhänge

  • XMLRequest.zip
    1,4 KB · Aufrufe: 15
Ne, aber ich habe mir einmal den Rawstring in Delphi angesehen:
000000b4h: 68 F6 63 68 ; höch

Scheint also ISO-8859-1 zu sein!?
XMLHTTPRequest ist es zumindest beim IE9 egal was für ein Encoding ich einstelle...

Wenn ich ein UTF8 Encode fom responseText mache kommt das raus: ï¿¿
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Versuch mal in der .js
so
Code:
xhttp.setRequestHeader("Content-Type", "application/xml; charset=ISO-8859-1");
xhttp.setRequestHeader("Charset", "ISO-8859-1");
oder so
Code:
xhttp.setRequestHeader("Content-Type", "application/xml; charset=UTF-8");
xhttp.setRequestHeader("Charset", "UTF-8");
 
http://channel9.msdn.com/Forums/TechOff/260993-Override-XMLHTTPRequest-charset

Genau so ist es hier! Der XMLHTTPRequest bekommt keinen UTF-8 Response -> Sonderzeichen werden zu 0xFFFF -> unbrauchbar.
Wenn ich den responseText als Byte Array in der Console ausgebe ist das 0xFFFF beim 'ö' zu finden.

Lösung dafür: Keine Sonderzeichen verwenden!
Ich habe auch Spirdercontrol mal angeschrieben ob man den Webserver auf der ILC auf UTF-8 umstellen kann. Mal sehen ob da eine Antwort kommt.
 
umlaut

Hallo,
konnte es auch gerade testen, bei mir kommt folgende Meldung: var_not_found

Habe eine String Variable umlaut angelegt, als Startwert habe ich böse angegeben...

Mit der Original Datei von Portisch bekomme ich zwar das Ergebnis zurück, das ö von böse ist aber ein Viereck...
Getestet mit IE9 und Firefox...


Schöne Grüße
Daniel
 

Anhänge

  • Fehler.JPG
    Fehler.JPG
    58,1 KB · Aufrufe: 21
Zuletzt bearbeitet:
Variable umlaut wirds auch nicht geben. Wenn dann @GV.Umlaut oder Main.Umlaut oder so, je nachdem obs Global oder Lokal ist.


@Portisch: ne nix von dem. Ohne Browser. Mit meiner exe.
 
Wie ist das eigentlich bei euch? Bei mir dauert es, wenn ich lokal auf die ILC zugreife, ca. 60ms zwischen Anfrage und Antwort. Wenn ich extern (über DynDns), also über Internet zugreife, ca. 300ms.
 
Zurück
Oben