Autor |
Nachricht |
Tixi-Support
|
Verfasst: Mi Sep 02, 2009 1:19 pm |
|
Registriert: Mo Jul 11, 2005 5:50 pm Beiträge: 1351 Wohnort: Berlin
|
HIT_PJ hat geschrieben: Tixi-Support hat geschrieben: Ein weiterer Vorteil der Lösung: Der Anwender bekommt vom Refresh nichts mit, da in der Statuszeile kein Ladevorgang angezeigt wird.
Ob das immer ein Vorteil ist? Ich habe schon Signale einbauen müssen, damit der Nutzer erkennt wann der Wert aktualisiert wurde bzw. das "Alter" des Wertes sollte gezeigt werden. Dazu nutzen wir i.d.R. eine Referenz auf die Uhrzeit des Tixi. Solange sich diese regelmäßig ändert, funktioniert auch das Refresh. Zudem hat er dann auch eine genaue zeitliche Zuordnung, von wann diese Daten sind. HIT_PJ hat geschrieben: Zu Ajax: Sicher für Profis das Mittel, Seiten ohne komplettes Neuladen zu aktualisieren. Der Preis ist aber ein höherer Aufwand bei der Erstellung (das obige Beispiel deutet das schon an) und der Test sollte mit allen gängigen Browsern erfolgen.
Getestet ist diese Lösung auf IE und FF, sowie auf einigen Touchpads/Palms mit Opera. Bzgl. AJAX mache ich mir da eher weniger Gedanken bzgl. der Kompatibilität, da ja mittlerweile fast alle Webseiten damit arbeiten.
Ich finde den Aufwand nicht wirklich größer, denn Sie müssen in dem Beispiel nur an zwei Stellen Code anpassen:
- Im HTML an der gewünschten Position die div-Container erzeugen
- Für jede Variable eine xmlhttp.responseXML Zuordnung angeben.
Der Rest des Codes kann 1:1 übernommen werden.
Ich denke beide Varianten haben definitiv eine Daseinsberechtigung. Ist halt Geschmackssache....
Als "Profi" kann man das Ganze dann noch wunderbar mit XML-Transformationen verknüpfen, und die komplette Webseite dynamisch aus dem System-Property-Zweig erstellen lassen. Funktioniert prima, und wird so wohl auch in die Zukünftige TILA-WEB einfließen
_________________ Tixi Support Team
E-Mail-Support, Mo-Fr, 9:00 - 17:00: Tixi-Support@tixi.com
techn. Hotline, Mo-Fr, 9:00 - 12:00 und 13:00 - 17:00: 0900-100 90 11 für 2€/min
|
|
|
|
|
HIT_PJ
|
Verfasst: Mi Sep 02, 2009 12:51 pm |
|
Registriert: Mo Jul 25, 2005 11:18 am Beiträge: 25 Wohnort: Berlin
|
Tixi-Support hat geschrieben: Ein weiterer Vorteil der Lösung: Der Anwender bekommt vom Refresh nichts mit, da in der Statuszeile kein Ladevorgang angezeigt wird.
Ob das immer ein Vorteil ist?
Ich habe schon Signale einbauen müssen, damit der Nutzer erkennt wann der Wert aktualisiert wurde bzw. das "Alter" des Wertes sollte gezeigt werden.
Zum Caching:
Eigenartigerweise hab ich bei dynamisch erzeugten Javascript mit dem Caching bisher noch keine Probleme gehabt, sonst ist mein Eindruck machen die Browser mit dem Caching was sie wollen.
Zu Ajax:
Sicher für Profis das Mittel, Seiten ohne komplettes Neuladen zu aktualisieren. Der Preis ist aber ein höherer Aufwand bei der
Erstellung (das obige Beispiel deutet das schon an) und der Test sollte mit allen gängigen Browsern erfolgen.
|
|
|
|
|
Tixi-Support
|
Verfasst: Mi Sep 02, 2009 10:22 am |
|
Registriert: Mo Jul 11, 2005 5:50 pm Beiträge: 1351 Wohnort: Berlin
|
In den vergangenen Monaten haben sich noch einige andere Möglichkeiten gezeigt, die mehr in Richtung AJAX gehen, und das Erzeugen von iframes und mehreren html-Dateien überflüssig machen, da sie direkt über xmlhttp auf den System-Properties-Zweig zugreifen.
Ein weiterer Vorteil der Lösung: Der Anwender bekommt vom Refresh nichts mit, da in der Statuszeile kein Ladevorgang angezeigt wird.
Hier ein kurzes Beispiel, das die Variablen
/Process/Bus1/Device_0/DeviceState und
/Process/Bus1/Device_0/Variable_0
in einem div-Container aktualisiert:
Code: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>xmlhttp Demo</title> <script type="text/javascript">
//xmlhttp initialisierung var xmlhttp /*@cc_on @*/ /*@if (@_jscript_version >= 5) try { xmlhttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp=false; } } @else xmlhttp=false @end @*/ if (!xmlhttp && typeof XMLHttpRequest!='undefined') { try { xmlhttp = new XMLHttpRequest(); } catch (e) { xmlhttp=false; } } if (!xmlhttp && window.createRequest) { try { xmlhttp = window.createRequest(); } catch (e) { xmlhttp=false; } }
//Abruf des System-Properties-Process Zweiges (I/Os und SPS) im 5s Intervall und Zuweisung zu DIV-Container function refresh() { if (xmlhttp) { url="/System/Properties/Process/" xmlhttp.open("GET",url,true); xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4) { document.getElementById('DS').innerHTML= 'DeviceState ' + xmlhttp.responseXML.getElementsByTagName('Bus1')[0].getElementsByTagName('Device_0')[0].getElementsByTagName('DeviceState')[0].attributes[0].nodeValue; document.getElementById('V0').innerHTML= 'Counter ' + xmlhttp.responseXML.getElementsByTagName('Bus1')[0].getElementsByTagName('Device_0')[0].getElementsByTagName('Variable_0')[0].attributes[0].nodeValue; setTimeout('refresh()',5000) } } } xmlhttp.send(null) } </script> </head>
<!--Webseite mit DIV-Containern--> <body onload="refresh()"> <div id="DS"></div> <div id="V0"></div> </body> </html>
Quelle: http://www.jibbering.com/2002/4/httprequest.html
_________________ Tixi Support Team
E-Mail-Support, Mo-Fr, 9:00 - 17:00: Tixi-Support@tixi.com
techn. Hotline, Mo-Fr, 9:00 - 12:00 und 13:00 - 17:00: 0900-100 90 11 für 2€/min
|
|
|
|
|
Tixi-Support
|
Verfasst: Mi Sep 02, 2009 9:54 am |
|
Registriert: Mo Jul 11, 2005 5:50 pm Beiträge: 1351 Wohnort: Berlin
|
Zitat: Danke für die Ergänzung. Haben Sie mal ausprobiert, wie sich das mit dem Caching verträgt? Wird das Skript immer wieder neu geladen, d.h. die Referenzen neu aufgelöst?
Ich hab den Anfang des Posting nicht mehr im Kopf gehabt. Natürlich refreshen Sie die Datei wie gehabt über den iframe, dann hat sich meine Anmerkung natürlich erledigt
Das mit den FileTypes dürfte aber trotzdem für einige interessant sein (geht aber nur in FW 3.x)...
_________________ Tixi Support Team
E-Mail-Support, Mo-Fr, 9:00 - 17:00: Tixi-Support@tixi.com
techn. Hotline, Mo-Fr, 9:00 - 12:00 und 13:00 - 17:00: 0900-100 90 11 für 2€/min
|
|
|
|
|
Tixi-Support
|
Verfasst: Mi Sep 02, 2009 9:51 am |
|
Registriert: Mo Jul 11, 2005 5:50 pm Beiträge: 1351 Wohnort: Berlin
|
HIT_PJ hat geschrieben: Der Informationsaustausch kann auch per Javascript-Variablen anstelle von innerHTML realisiert werden, da javascript im Tixi auch geparst wird wenn sich der script in einer html-Datei befindet.
Danke für die Ergänzung. Haben Sie mal ausprobiert, wie sich das mit dem Caching verträgt? Wird das Skript immer wieder neu geladen, d.h. die Referenzen neu aufgelöst?
Statt das Skript ein eine hmtl-Datei zu packen, kann man es natürlich auch wie üblich in eine .js Datei auslagen. Somit könnte man auch für diesen Dateityp explizit das Caching in der WebServer Datenbank deaktivieren (und nebenbei auch noch andere MIME-Typen hinzufügen, siehe http://de.selfhtml.org/diverses/mimetypen.htm):
Code: [<SetConfig _="ISP" ver="y"> <WebServer> <FileTypes> <FileType desc="js" File="*.js" MIME="text/javascript" Processing="resolve"/> </FileTypes>
<ActiveSite _="Site1"/> <Port _="80"/> <Site1> <Archive1 _="WebSrc.bin"/> </Site1>
</WebServer> </SetConfig>]
Mögliche Angaben beim Processing:
cache: File darf gecacht werden
resolve: Variablenauflösung aktiviert (®)
parse: Erlaubt SSI zzgl. "resolve"
Folgende Filetypen sind vordefiniert (können aber überschrieben werden):
*.jpg" "image/jpeg" cache
*.jpeg" "image/jpeg" cache
*.gif" "image/gif" cache
*.png" "image/png" cache
*.txt" "text/plain" nichts
*.req" "text/plain" nichts
*.htm" "text/html" resolve
*.html" "text/html" resolve
*.xml" "text/xml" xml
_________________ Tixi Support Team
E-Mail-Support, Mo-Fr, 9:00 - 17:00: Tixi-Support@tixi.com
techn. Hotline, Mo-Fr, 9:00 - 12:00 und 13:00 - 17:00: 0900-100 90 11 für 2€/min
|
|
|
|
|
HIT_PJ
|
Verfasst: Mi Sep 02, 2009 9:04 am |
|
Registriert: Mo Jul 25, 2005 11:18 am Beiträge: 25 Wohnort: Berlin
|
Der Informationsaustausch kann auch per Javascript-Variablen anstelle von innerHTML realisiert werden,
da javascript im Tixi auch geparst wird wenn sich der script in einer html-Datei befindet.
Der Zugriff wird kürzer und verständlicher.
Die neue Seite mfmvar.html:
Code: <html> <head> <title>mfmvar</title> <script type="text/javascript"> <!-- var v1="®/TIMES/TIME;"; //weitere Zuweisungen... //--> </script> </head> <body> </body> </html>
Der Zugriff vereinfacht sich wie folgt: Code: element = frames['result'].v1;
Die im ersten Beitrag verwendete Kurzform funktioniert auch bei neueren FF-Versionen,
die vom Tixi-Support vorgeschlagene Variante mit getElementById gilt jedoch als sicherer.
|
|
|
|
|
Tixi-Support
|
Verfasst: Fr Aug 22, 2008 2:15 pm |
|
Registriert: Mo Jul 11, 2005 5:50 pm Beiträge: 1351 Wohnort: Berlin
|
HIT_PJ hat geschrieben: function varshow() { dyn1.innerHTML = result.dyn1.innerHTML; //weitere Zuweisungen... }
Diese Zuweisung funktioniert nur im Internet Explorer (ab Version 6).
Besser wäre diese Zuweisung, die z.B. auch im FireFox funktioniert:
Code: function varshow() { document.getElementById("dyn1").innerHTML = frames['result'].document.getElementById("dyn1").innerHTML; //weitere Zuweisungen... } Wenn man einen ganzen Haufen Variablen hat, wäre ggf. auch eine Schleife angebracht, z.B. für 10 Variablen: Code: function varshow() { for (var i = 1; i <= 10; i++) { document.getElementById("dyn" + i).innerHTML = frames['result'].document.getElementById("dyn" + i).innerHTML; } }
_________________ Tixi Support Team
E-Mail-Support, Mo-Fr, 9:00 - 17:00: Tixi-Support@tixi.com
techn. Hotline, Mo-Fr, 9:00 - 12:00 und 13:00 - 17:00: 0900-100 90 11 für 2€/min
|
|
|
|
|
Tixi-Support
|
Verfasst: Mo Dez 03, 2007 3:04 pm |
|
Registriert: Mo Jul 11, 2005 5:50 pm Beiträge: 1351 Wohnort: Berlin
|
RoeTeam hat geschrieben: Hallo, irgendwie klappt das alles nicht so wie ich das gerne hätte... Nach der ersten Aktualisierung ist die LED weg, und es steht nur noch 1 oder 0 da, jenachdem wie der aktuelle Status ist. In Ihrem Code fehlt der iframe "result", auf das sich Ihr JavaScript verweist ! RoeTeam hat geschrieben: Gibt es eine Möglichkeit evtl. aktuelle Grafiken nachladen zu lassen (beim wechsel)?
Funktioniert genause wie mit der LED, Sie können damit ja ganze span/div Container inkl. Grafiken, StyleSheets usw. austauschen.
Hier mal Auszüge aus dem Beispiel mit der LED, wie es bei unseren Demoprojekten eingesetzt wird:
JavaScripts:
function LED (Stat) {
var s=(Stat) ? "#00FF00" : "#C0C0C0";
document.write('<span style="font-family:Marlett;border:solid #000000 1px; color:' + s + '">n</span>');
}
var aktiv = window.setInterval("values.location.reload(true)", 10000);
function dyn_var()
{
v1.innerHTML = values.v1.innerHTML;
}
index.html:
<iframe width="0" height="0" name="values" src="values.html" onload="dyn_var()"></iframe>
<span id="v1"><script language="JavaScript">LED(®/Process/Bus1/Device_0/Variable_0;);</script></span>
values.html:
<span id="v1"><script language="JavaScript">LED(®/Process/Bus1/Device_0/Variable_0;);</script></span>
Ich hoffe Sie kommen damit weiter...
_________________ Tixi Support Team
E-Mail-Support, Mo-Fr, 9:00 - 17:00: Tixi-Support@tixi.com
techn. Hotline, Mo-Fr, 9:00 - 12:00 und 13:00 - 17:00: 0900-100 90 11 für 2€/min
|
|
|
|
|
RoeTeam
|
Verfasst: Mo Nov 26, 2007 1:51 pm |
|
Registriert: Mo Aug 15, 2005 8:53 am Beiträge: 38
|
Hallo,
irgendwie klappt das alles nicht so wie ich das gerne hätte...
Folgende Zeilen habe ich eingetippt...
<html>
<head>
<script language="JavaScript">
<!--
var aktiv = window.setInterval("result.location.reload(true)", 10000);
function varshow()
{
dyn12.innerHTML = result.dyn12.innerHTML;
}
function LED (Stat,Msk)
{
var s=(Stat & Msk) ? "#00FF00" : "#FF0000";
document.write('<span style="font-family:Marlett;border:solid #A0A0A0 1px; color:' + s + '">n</span>');
}
//-->
</script></head>
<body>
<p align="center">
<span id="dyn12"> <script language="JavaScript"> LED("®/V20;",1);</script></span>
</p>
</body>
</html>
Nach der ersten Aktualisierung ist die LED weg, und es steht nur noch 1 oder 0 da, jenachdem wie der aktuelle Status ist.
Der Vorschlag mit dem Grafikwechsel klappt auch nur wenn die Webseite lokal abgespeichert wird, wie ist es denn wenn ich diese immer komplett laden muss?
Gibt es eine Möglichkeit evtl. aktuelle Grafiken nachladen zu lassen (beim wechsel)?
Vielen Dank im voraus..
|
|
|
|
|
Tixi-Support
|
Verfasst: Do Nov 22, 2007 10:12 am |
|
Registriert: Mo Jul 11, 2005 5:50 pm Beiträge: 1351 Wohnort: Berlin
|
RoeTeam hat geschrieben: Gibt es eigentlich auch eine Möglichkeit geladene gif's entsprechend der aktuellen Daten zu wechseln? Aus 1Pumpe.gif wird 0Pumpe.gif ?
Sie meinen mit der oben angegebenen dynamischen Variante ?
Klar, das geht. Tragen Sie einfach die zu aktualiserenden Grafiken, Links usw. in den <span>-Abschnitt mit ein.
z.B.
LED-Anzeige (Script siehe hier):
<span id="v1"><script language="JavaScript">LED(®/Process/MB/PollButton,;);</script></span>
Grafik-Anzeige (0.gif, 1.gif, siehe webtemplates.zip):
<span id="v2"><<img src="®/Process/MB/IO/I/P0;.gif"></span>
usw.
_________________ Tixi Support Team
E-Mail-Support, Mo-Fr, 9:00 - 17:00: Tixi-Support@tixi.com
techn. Hotline, Mo-Fr, 9:00 - 12:00 und 13:00 - 17:00: 0900-100 90 11 für 2€/min
|
|
|
|
|
RoeTeam
|
Verfasst: Do Nov 22, 2007 10:05 am |
|
Registriert: Mo Aug 15, 2005 8:53 am Beiträge: 38
|
Gibt es eigentlich auch eine Möglichkeit geladene gif's entsprechend der aktuellen Daten zu wechseln?
Aus 1Pumpe.gif wird 0Pumpe.gif ?
|
|
|
|
|
Tixi-Support
|
Verfasst: Do Nov 22, 2007 9:06 am |
|
Registriert: Mo Jul 11, 2005 5:50 pm Beiträge: 1351 Wohnort: Berlin
|
RoeTeam hat geschrieben: Ich habe das Problem gelöst. Mit Web-Aliases Funktioniert es nicht! Nur Direktverweisung funktioniert!
Das kann so eigentlich nicht stimmen, denn wenn die Aliase in der Webseite funktionieren, müssen sie auch in Ihrer varvisio.html funktionieren ! Für das Modem ist das kein Unterschied....
Unsere Live-Demo nutzt z.B. auch Aliase mit dynamischer Aktualisierung:
<html>
<body>
<span class="style4" id="dyn1">®Counter1;</span>
<span class="style4" id="dyn2">®Merker3;</span>
<span class="style4" id="dyn3">®Merker4;</span>
<span class="style4" id="dyn4">®Merker5;</span>
<span class="style4" id="dyn5">®Merker6;</span>
</body>
</html>
_________________ Tixi Support Team
E-Mail-Support, Mo-Fr, 9:00 - 17:00: Tixi-Support@tixi.com
techn. Hotline, Mo-Fr, 9:00 - 12:00 und 13:00 - 17:00: 0900-100 90 11 für 2€/min
|
|
|
|
|
RoeTeam
|
Verfasst: Do Nov 22, 2007 8:25 am |
|
Registriert: Mo Aug 15, 2005 8:53 am Beiträge: 38
|
Ich habe das Problem gelöst. Mit Web-Aliases Funktioniert es nicht!
Nur Direktverweisung funktioniert!
|
|
|
|
|
Tixi-Support
|
Verfasst: Mi Nov 21, 2007 2:34 pm |
|
Registriert: Mo Jul 11, 2005 5:50 pm Beiträge: 1351 Wohnort: Berlin
|
RoeTeam hat geschrieben: <span id="dyn1">®/®V9; </span>
Hier dürfte eigentlich keiner der Werte funktionieren, da die Entitäten falsch geschrieben sind.
Korrekt wäre:
<span id="dyn1">®V9; </span>
V9 muss dabei als Web-Alias definiert sein....
_________________ Tixi Support Team
E-Mail-Support, Mo-Fr, 9:00 - 17:00: Tixi-Support@tixi.com
techn. Hotline, Mo-Fr, 9:00 - 12:00 und 13:00 - 17:00: 0900-100 90 11 für 2€/min
|
|
|
|
|
Tixi-Support
|
Verfasst: Mi Nov 21, 2007 2:31 pm |
|
Registriert: Mo Jul 11, 2005 5:50 pm Beiträge: 1351 Wohnort: Berlin
|
{undef} gibt das Alarm Modem immer dann aus, wenn eine Variablenreferenz nicht aufgelöst werden kann. Sie müssen also die Referenzen (Pfad) prüfen.
Was bekommen Sie denn als Antwort, wenn Sie auf den Pfad ein TiXML-Get machen ?
_________________ Tixi Support Team
E-Mail-Support, Mo-Fr, 9:00 - 17:00: Tixi-Support@tixi.com
techn. Hotline, Mo-Fr, 9:00 - 12:00 und 13:00 - 17:00: 0900-100 90 11 für 2€/min
|
|
|
|
|
|