Step 7 S7 -1200 HTML Array of Struct lesen mit JavaScript

Zuviel Werbung?
-> Hier kostenlos registrieren
Problematisch wird es wenn du auf die Werte auch schreiben willst. Wobei man da evtl. auch eine Mischung aus String für die Ausgabe und AWP für das Schreiben einsetzen kann. Damit das Schreiben möglich ist, müssen die entsprechenden Bereiche ja nur entsprechend definiert werden. Und die echten Variablennamen müssen in den Feldern auch bekannt sein.
 
Beim Schreiben bin ich persönlich noch nicht an die Grenzen gestoßen.
Meistens verwende ich es zB so, das immer nur einzelne Felder geändert werden, aber auch das Zusammenfassen als Strings, oder was immer das auch aus der Webseite heraus ist, funktioniert gut. Und das geht für ein ganzes Projket über eine einzige AWP (String?). Hier verwende ich die ersten zwei Werte des Zusammenbaus als Definition, die dann in der SPS zugeordnet und ausgewertet werden, und dann kommen die Daten. Damit gibt es in der SPS theoretisch (hab bei mir nicht alles nachgezogen, wie ich auf die Methode gekommen bin) nur einen Empfangsbereich, der nur wenn was kommt aktiv ist, und in dem Empfangsbereich passiert dann die entgültige Aufteilung und Zuordnung der Variablen.

P.S.: Wenn die Zyklusbelastung für die SPS beim Senden von Daten zu groß wird, kann man die verschiedenen Sende Strings und deren Zusammenbau auf mehrere Zyklen aufteilen. Bei meinem Projekt splitte ich mittlerweile auf 13 Zyklen nacheinander, wo jeweils mehrere Strings pro Zyklus gebildet werden.
 
Was genau möchtest Du sehen?

SPS - Senden - String zusammenbau? Wstring in DB definieren
Webseite - Javascript empfangen - Zerlegen? Was Zerlegen? Bitmuster oder mehrstellige Werte?
SPS Daten - Empfangen?
Webseite - Javascript senden an SPS?

Ist recht umfangreich...


P.S.
Hab viel von Thomas_v2.1 gelernt (und anderen hier), wie ich gerade beim durchschauen meiner eigenen Fragen, auf der Suche nach Beispielen, gesehen habe.
 
Da habe ich mich wohl nicht richtig ausgedrückt.
Wollte einfach allgemein ein kleines Beispiel sehen, wie du alles umgesetzt hast. Aber das es so umfangreich ist, habe ich nicht gerechnet.

Vielleicht hilft es dir, wie es bei mir aktuell aussieht.
Ich kann Werte mit JavaScript lesen und bereite (Format) diese für die HTML Seite vor.
Schreiben tu ich direkt auf der HTML Seite. Habe das noch nicht herausgefunden, wie man das per JavaScript umsetzt.
Und wie du bestimmt schon vermutest, frage ich jede einzelne Variable ab. Sind inzwischen bestimmt so ca. 30 Stück.
Damit ich Änderungen auf der Website mitbekommen, lasse ich im Hintergrund eine weitere Website aktualisieren, die dann eine Funktion auslöst. Habe das von den Siemens Beispielen übernommen. Wieso man da eine weitere Webseite braucht, bin ich aber noch nicht dahinter gekommen. Zumindest funktioniert es.
Nun merke ich aber, dass es allmählich langsamer wird, da es inzwischen ja auch einige Variablen sind.
Und das mit den Strings bzw mit dem Json hört sich für mich so an, wäre eine gute Lösung.


Du hast wohl mit den Strings schon vorab bestimmt wie lange eine Variable lang sein kann, damit du das später richtig ausliest oder? Oder hast du dafür auch eine Variable, die das übergibt, wie lange der auszulesende String ist?

Und wie schon erwähnt, wollte ich einfach nur ganz kurz Beispiele wie du das im Tia gebaut hast und JavaScript seitig.
So wie ich das verstehe finde ich all diese Antworten in diesem Forum? Weil du selbst diese Fragen schon gestellt hast?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok, ich stelle Dir am Abend ein Beispiel ein.
Was genau überträgst Du bis jetzt?
Einzelne Bits, Zahlen oder ein wirkliches Datum (gemeint ist nicht die Einzahl von Daten sondern zB 19.02.2021).
Sind jeweils verschiedene zusammenbau und zerlege Beispiele.

Edit: und ich glaub nicht das es schon alle Beispiele gibt, weil ich vorher geschaut hab, allerdings nicht genau.
 
Ich versuche es einmal mit der einfachsten Seite die ich habe. Hier wird ein String zur Webseite übertragen. Da kann man alle Arten von Daten einfügen.

Seite sieht so aus.

Warmwasser.png


Der Code für den Datenbau in der SPS:

Code:
//-----------------
// WWW Daten senden
//-----------------
REGION WWW_Ausgang
    
    // Umlaufpumpe dynamischer String
    IF "DB_Time".Zyklus_Counter = 11 THEN
          
        "DB_Küche_WW".WWW.Senden.strG := CONCAT(IN1 := INT_TO_STRING("DB_Küche_WW".Diff_Temp),
                                                IN2 := '/',
                                                IN3 := INT_TO_STRING(REAL_TO_INT("DB_Sensoren".Temp_Wasser_EG_Küche.RND1 * 10)),
                                                IN4 := '/',
                                                IN5 := INT_TO_STRING(REAL_TO_INT("DB_Sensoren".Temp_Boiler_oben.RND1 * 10)),
                                                IN6 := '/',
                                                IN7 := INT_TO_STRING(BOOL_TO_INT("DB_Küche_WW".Status.Automatik_Aktiv)),
                                                IN8 := '/',
                                                IN9 := INT_TO_STRING(BOOL_TO_INT("DB_Küche_WW".Ausgang.Ein)),
                                                IN10 := '/',
                                                IN11 := "DB_Küche_WW".Zeiten.Startzeit_1_Anzeige,
                                                IN12 := '/',
                                                IN13 := "DB_Küche_WW".Zeiten.Startzeit_2_Anzeige,
                                                IN14 := '/',
                                                IN15 := "DB_Küche_WW".Zeiten.Startzeit_3_Anzeige);
    END_IF;
    
END_REGION

Bei jedem 11 Zyklus wird der String gebaut.
Der String besteht aus verschiedensten Variablen.

In der Übertragungs Seite "Read/Kueche_WW.htm" steht das drinnen: :="DB_Küche_WW".WWW.Senden.strG: (liegt im Unterordner Read, wegen der Übersicht)


So schaut der String aus, wenn man ihn in direkt mit dem Browser anschaut: '+8/+198/+512/+0/+0/+8:+0/+17:+0/+0:+0' (Beispiel)


Der Code fürs Zerlegen in der Webseite in javascript
Code:
$(document).ready(function(){
	$.ajaxSetup({ cache: false });
	setInterval(function() {       		
		$.get("Read/Kueche_WW.htm", function(result){
			var Word = result.split("/");
			$('#Diff_Temp').html(Word[0].replace(/('|+)/g, "")).Diff();
			$('#Kueche_Temp_WW').html(Word[1].replace(/('|+)/g, "")/10).WW();
			$('#Boiler_T_oben').html(Word[2].replace(/('|+)/g, "")/10).Boiler();						
			$('#Automatik_Aktiv').html(Word[3].replace(/('|+)/g, "")).Aktiviert();
			$('#Ausgang_Ein').html(Word[4].replace(/('|+)/g, "")).Status();
			$('#Startzeit1').html(Word[5].replace(/('|+)/g, "")).Startzeit('#Startzeit1');
			$('#Startzeit2').html(Word[6].replace(/('|+)/g, "")).Startzeit('#Startzeit2');
			$('#Startzeit3').html(Word[7].replace(/('|+)/g, "")).Startzeit('#Startzeit3');
		});
	},1000);
});


Codebeispiel für den HTML Teil in der Webseite von Startzeit1

Code:
		<tr>
			<td class="L_SW_rechts" id="Startzeit10">Startzeit 1</td>
			<td></td>
			<td class="Knopfi" style="width:50px" onclick="Zeit_Eingabe('2','Startzeit 1','#Startzeit1')"><label id="Startzeit1">00:00</td>
		</tr>

Um Startzeit1 richtig anzuzeigen ist noch ein zusätzlches Gsetzal javascript erforderlich, welches durch den hinteren Teil ".Startzeit('#Startzeit1')" aufgerufen wird.
Auch für die anderen Anzeigen werden noch zusätzliche javascript Gsetzaln aufgerufen, die jetzt aber nicht dabei sind.

Code:
// Zeit Anzeige
jQuery.fn.Startzeit = function (Wert) {
	Zeit_Anzeige = ($(this).html());
	Zeit_Anzeige = Zeit_Anzeige.toString();			
	//Aufspaltung der Zeit
	Zeit_Anzeige = Zeit_Anzeige.split(':');
	//Entfernung der fuehrenden Nullen
	Zeit_Anzeige[0] = parseInt(Zeit_Anzeige[0], 10); //Stunde
	Zeit_Anzeige[1] = parseInt(Zeit_Anzeige[1], 10); //Minute
	//eventuell fehlende 0er ergänzen
	if (Zeit_Anzeige[0] < 10) {Zeit_Anzeige[0] = '0'.concat(Zeit_Anzeige[0]);}
	if (Zeit_Anzeige[1] < 10) {Zeit_Anzeige[1] = '0'.concat(Zeit_Anzeige[1]);}
	//Anzeige String bauen
	Anzeige_Zeit = Zeit_Anzeige[0] + ':' + Zeit_Anzeige[1];
	//schauen ob ein - dann Dunkelgrau färben - sonst hellgrau
	if (($('#Automatik_Aktiv').html() == 'Aus') || (Anzeige_Zeit == '00:00')) {
		var color = "#c0c0c0";// Hellgrau
		var color1 = "#c0c0c0";
	} else {
		var color = "#333333";// Dunkelgrau
		var color1 = "#000000";// Schwarz
	}
	// Schreiben
	$(Wert + '0').css({"color": color1});
	$(this).html(Anzeige_Zeit).css({"color": color, "font-weight": "bold"});
	return ($(this));
}



----------------------------------------------------------------------

Wenn Du Seiten mit reinen Bool Werten hast, gibt es noch eine andere Methode.
Mit Gather lassen sich einfach bis zu 52 Bool Werte zu einem Word, DWord oder LWord für den Transfer zusammenfassen.
Fürs zerlegen muß man halt ein bisschen rechnen.
Das LWord funktioniert beim zerlegen mit JavaScript nur von Bit 0-51.
Der Rest darüber wird als Exponent und bit 63 als Vorzeichen interpretiert. Aber auch die Übertragung von 2 LWords geht perfekt.

Code:
        // Lichter Status zusammenfassen
        REGION Licht_Status_Bool
            
            "DB_Licht_WWW".Senden.Array[1] := "DB_Licht_EG".Wz_Südfenster.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[2] := "DB_Licht_EG".Wz_Gehbereich.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[3] := "DB_Licht_EG".Wz_Jo.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[4] := "DB_Licht_EG".Wz_Ba.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[5] := "DB_Licht_EG".Wz_TV.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[6] := 0; //"DB_Licht_EG".Wz_Ap.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[7] := "DB_Licht_EG".Wz_Glasscheibe.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[8] := "DB_Licht_EG".Wz_Hauptlicht.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[9] := "DB_Schuko_EG".Wz_TV.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[10] := "DB_Schuko_EG".Wz.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[11] := "DB_Licht_EG".Küche_Spots.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[12] := "DB_Licht_EG".Küche_Arbeitsplatte.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[13] := "DB_Licht_EG".Küche_Tisch.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[14] := "DB_Licht_EG".Küche_Tisch.Ausgang.ein_unten;
            "DB_Licht_WWW".Senden.Array[15] := "DB_Licht_EG".Vz.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[16] := "DB_Licht_EG".Oz.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[17] := "DB_Licht_EG".Sr.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[18] := "DB_Licht_EG".Bad_Decke.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[19] := "DB_Licht_EG".Bad_Alibert.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[20] := "DB_Licht_EG".WC.Ausgang.Licht_ein;
            "DB_Licht_WWW".Senden.Array[21] := "DB_Licht_EG".Speis.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[22] := "DB_Licht_EG".Sz.Ausgang.ein_HL;
            "DB_Licht_WWW".Senden.Array[23] := "DB_Licht_EG".Sz.Ausgang.ein_Sk_Jo;
            "DB_Licht_WWW".Senden.Array[24] := "DB_Licht_EG".Sz.Ausgang.ein_Sk_Ba;
            "DB_Licht_WWW".Senden.Array[25] := "DB_Schuko_EG".Sz.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[26] := "DB_Licht_Aussen".Nord.Ausgang.Ein_links;
            "DB_Licht_WWW".Senden.Array[27] := "DB_Licht_Aussen".Ost.Ausgang.Ein;
            "DB_Licht_WWW".Senden.Array[28] := "DB_Licht_Aussen".Süd.Ausgang.Ein;
            "DB_Licht_WWW".Senden.Array[29] := "DB_Licht_Aussen".West.Ausgang.Ein;
            "DB_Licht_WWW".Senden.Array[30] := "DB_Licht_EG".Wz_Ap.Ausgang.Licht_1;
            "DB_Licht_WWW".Senden.Array[31] := "DB_Licht_EG".Wz_Ap.Ausgang.Licht_2;
            "DB_Licht_WWW".Senden.Array[32] := "DB_Licht_EG".Wz_Ap.Ausgang.Licht_3;
            "DB_Licht_WWW".Senden.Array[33] := "DB_Licht_KG".Ar_Mitte.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[34] := "DB_Licht_KG".Lr.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[35] := "DB_Licht_KG".Bad_Decke.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[36] := "DB_Licht_KG".Bad_Alibert.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[37] := "R063_Licht_KG_Vz";
            "DB_Licht_WWW".Senden.Array[38] := "DB_Licht_KG".Ar_Werkbank.Ausgang.ein;
            "DB_Licht_WWW".Senden.Array[39] := "DB_Licht_KG".Wz.Ausgang.Licht_1_ein;
            "DB_Licht_WWW".Senden.Array[40] := "DB_Licht_KG".Wz.Ausgang.Licht_2_ein;
            "DB_Licht_WWW".Senden.Array[41] := "DB_Licht_KG".Wz.Ausgang.Licht_3_ein;
            "DB_Licht_WWW".Senden.Array[42] := "DB_Licht_KG".Speis.Ausgang.ein;
            
            //Digitalwerte der Lichter in einer String Variablen zusammenfassen (Auswertung im Browser)
            GATHER(IN := "DB_Licht_WWW".Senden.Array,
                   OUT => "DB_Licht_WWW".Senden.Array_Bool);

        END_REGION


Der gesendete Wert schau im Browser so zb aus: 536871775
:="DB_Licht_WWW".Senden.Array_Bool:

In der Übertragungs Seite "Read/Licht.htm" - :="DB_Licht_WWW".Senden.Array_Bool: - steht das drinnen


Da schaut das Zerlegen des einenTeils schaut dann so aus:

Code:
	 $(document).ready(function(){
		$.ajaxSetup({ cache: false }); 
		setInterval(function() { // Abfrage Interval 1000msec
			$.get("Read/Licht.htm", function(result){ // 64Bit Wert lesen aus "LichtRead1.htm"
				var Word = result.split("|");
				var DWord = Word[0];
				for (var teiler = 2199023255552, idnr = 42; teiler >= 1; teiler /= 2, idnr--) {
					if (DWord / teiler >= 1) {
						$(".Lamp" + idnr).css({"visibility": "visible"});
						DWord -= teiler;
					} else {
						$(".Lamp" + idnr).css({"visibility": "hidden"});
					}
				};
				});
		},1000);
	 });


Bitte beachte, ich bin kein Programmierer und versuche einfach so lange bis es lauft. Das heißt es kann wesentlich einfacher oder anders funktionieren, aber so geht es.
Und leider hat er mich während dem eingeben abgemeldet, deswegen sind die Sonderzeichen jetzt falsch.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke für die ausführliche Erklärung!

Was ich allerdings noch nicht verstanden habe, wie bekomme ich die Daten auf der Seite angezeigt?

Code:
[COLOR=#333333][FONT=Courier]$('#Diff_Temp').html(Word[0].replace(/('|+)/g, "")).Diff();[/FONT][/COLOR]
Hier rufst du ja noch die Funktion Diff auf. Wahrscheinlich um den Wert in einen lesbaren Wert umzuwandeln, oder?
Wenn ich diese Funktion weglasse, müsste es mir doch auf der HTML Seite unter der ID Diff Temp, den Wert anzeigen?

Ich hab das ganze mal ausprobiert aber leider zeigt es bei mir nichts an.
Code:
[COLOR=#9CDCFE][FONT=Consolas]$[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas].[/FONT][/COLOR][COLOR=#DCDCAA][FONT=Consolas]get[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]'read.htm'[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas], [/FONT][/COLOR][COLOR=#569CD6][FONT=Consolas]function[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]result[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]){[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]      [COLOR=#569cd6]var[/COLOR] [COLOR=#9cdcfe]Word[/COLOR] = [COLOR=#9cdcfe]result[/COLOR].[COLOR=#dcdcaa]split[/COLOR]([COLOR=#ce9178]"/"[/COLOR]);
[/FONT][/COLOR]
[COLOR=#D4D4D4][FONT=Consolas]      [/FONT][/COLOR][COLOR=#DCDCAA][FONT=Consolas]$[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]'#age'[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]).[/FONT][/COLOR][COLOR=#DCDCAA][FONT=Consolas]html[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]Word[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas][[/FONT][/COLOR][COLOR=#B5CEA8][FONT=Consolas]0[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]].[/FONT][/COLOR][COLOR=#DCDCAA][FONT=Consolas]replace[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#D16969][FONT=Consolas]/[/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]([/FONT][/COLOR][COLOR=#D16969][FONT=Consolas]'[/FONT][/COLOR][COLOR=#DCDCAA][FONT=Consolas]|[/FONT][/COLOR][COLOR=#D16969][FONT=Consolas]+[/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas])[/FONT][/COLOR][COLOR=#D16969][FONT=Consolas]/[/FONT][/COLOR][COLOR=#569CD6][FONT=Consolas]g[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas], [/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]""[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]));[/FONT][/COLOR]
Hab auch schon beides probiert mit Funktionsaufruf und auch ohne

Funktion sieht so aus:
Code:
[COLOR=#9CDCFE][FONT=Consolas]jQuery[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas].[/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]fn[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas].[/FONT][/COLOR][COLOR=#DCDCAA][FONT=Consolas]age[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas] = [/FONT][/COLOR][COLOR=#569CD6][FONT=Consolas]function[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas] () {[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]  [COLOR=#dcdcaa]$[/COLOR]([COLOR=#ce9178]'#age'[/COLOR]).[COLOR=#dcdcaa]text[/COLOR]();
[/FONT][/COLOR]
[COLOR=#D4D4D4][FONT=Consolas]}[/FONT][/COLOR]

Die Htm Seite habe ich so angelegt:
Code:
[COLOR=#808080][FONT=Consolas]<![/FONT][/COLOR][COLOR=#569CD6][FONT=Consolas]DOCTYPE[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas] [/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]HTML[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas] [/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]PUBLIC[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas] [/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]"-//W3C//DTD HTML 4.01 Transitional//EN"[/FONT][/COLOR][COLOR=#808080][FONT=Consolas]>[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas][COLOR=#808080]<[/COLOR][COLOR=#569cd6]html[/COLOR][COLOR=#808080]>[/COLOR]
[COLOR=#808080]<[/COLOR][COLOR=#569cd6]head[/COLOR][COLOR=#808080]>[/COLOR]
[COLOR=#808080]<[/COLOR][COLOR=#569cd6]meta[/COLOR] [COLOR=#9cdcfe]http-equiv[/COLOR]=[COLOR=#ce9178]"Content-Type"[/COLOR] [COLOR=#9cdcfe]content[/COLOR]=[COLOR=#ce9178]"text/html; charset=utf-8"[/COLOR] [COLOR=#808080]>[/COLOR]
[COLOR=#808080]</[/COLOR][COLOR=#569cd6]head[/COLOR][COLOR=#808080]>[/COLOR]
[COLOR=#808080]<[/COLOR][COLOR=#569cd6]body[/COLOR][COLOR=#808080]>[/COLOR]
   :="Plc2Web".testString:
[COLOR=#808080]</[/COLOR][COLOR=#569cd6]body[/COLOR][COLOR=#808080]>[/COLOR]
[/FONT][/COLOR]
[COLOR=#808080][FONT=Consolas]</[/FONT][/COLOR][COLOR=#569CD6][FONT=Consolas]html[/FONT][/COLOR][COLOR=#808080][FONT=Consolas]>[/FONT][/COLOR]


Wenn ich diese Aufrufe, zeigt es mir auch den String an.
Auf der richtigen HTML Seite rufe ich einmal den String auf und habe mir die ID angelegt:
Code:
[COLOR=#D4D4D4][FONT=Consolas]:="Plc2Web".testString:
[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]  [/FONT][/COLOR][COLOR=#808080][FONT=Consolas]<[/FONT][/COLOR][COLOR=#569CD6][FONT=Consolas]td[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas] [/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]id[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]=[/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]"age"[/FONT][/COLOR][COLOR=#808080][FONT=Consolas]></[/FONT][/COLOR][COLOR=#569CD6][FONT=Consolas]td[/FONT][/COLOR][COLOR=#808080][FONT=Consolas]>[/FONT][/COLOR]

Wenn ich die Seite aufrufe, zeigt es mir nur den ganzen String an.
 
Wenn ich diese Aufrufe, zeigt es mir auch den String an.
Auf der richtigen HTML Seite rufe ich einmal den String auf und habe mir die ID angelegt:
Wenn ich die Seite aufrufe, zeigt es mir nur den ganzen String an.

Der String selbst hat in der Anzeige Seite im HTML Code nichts mehr verloren.
das allein reicht:

<td id="age"></td>
<td id="age1"></td>

Der String steht in der "read.htm" (ich hoffe Deine Seite heißt so!) und wird mit dem javascript Teil der "Anzeige Seite!" im 1000ms Takt von der read.htm abgefragt.

Dieser Code steht in der Anzeige Seite.
Code:
<script type = "text/javascript">

$(document).ready(function(){
	$.ajaxSetup({ cache: false });
	setInterval(function() {       		
		$.get("read.htm", function(result){
			var Word = result.split("/");
			$('#age').html(Word[0].replace(/('|+)/g, ""));
			$('#age1').html(Word[1].replace(/('|+)/g, ""));
		});
	},1000);
});

</script>
</html>

Wenn Du nur einen Wert drinnen hast, brauchst Du auch nicht splitten - result.split("/"); - ! Ich hab das Beispiel jetzt mit zwei Werten gemacht, die schon in der SPS beim String bauen mit "/" getrennt sein müssen, damit sie in der Webseite wieder gesplittet werden können. Sonst ist schon das "Word" das "result".
Wenn Du es nicht hinbekommst, bitte allen Code von der SPS vom String bauen und die Datei Bezeichnungen der Webseite einstellen.
Hast Du mit Web Programmierung und javascript Erfahrung? Sonst dauerts möglicherweise ein bisschen wie bei mir..:p

Ich habe gefunden, wo ich einen Teil Großteil vom javascript Zeugs erfragt habe wie ich angefangen habe mehrere Werte zu übertragen.
Ohne die Hilfe dort, wäre ich mit der javascript Syntax verzweifelt. Vielleicht steht dort auch noch was, was Dir weiterhilft.
https://www.html.de/threads/mehrere-datenwerte-von-sps-gleichzeitig-abfragen.57816/

Möglicherweise kannst Du da auch noch was rauslesen, wenns dann weiter mit der Darstellung geht.
 
Den String habe ich bewusst nochmal in die Hauptseite eingebaut um nachzuverfolgen, ob Daten ankommen. Damit ich das ausschließen kann.

Code:
[COLOR=#D4D4D4][FONT=Consolas][COLOR=#4fc1ff]$[/COLOR]([COLOR=#9cdcfe]document[/COLOR]).[COLOR=#dcdcaa]ready[/COLOR]([COLOR=#569cd6]function[/COLOR](){
        [COLOR=#4fc1ff]$[/COLOR].[COLOR=#dcdcaa]ajaxSetup[/COLOR]({ [COLOR=#9cdcfe]cache:[/COLOR] [COLOR=#569cd6]false[/COLOR] });
        [COLOR=#dcdcaa]setInterval[/COLOR]([COLOR=#569cd6]function[/COLOR]() {          
          [COLOR=#4fc1ff]$[/COLOR].[COLOR=#dcdcaa]get[/COLOR]([COLOR=#ce9178]"read.htm"[/COLOR], [COLOR=#569cd6]function[/COLOR]([COLOR=#9cdcfe]result[/COLOR]){
            [COLOR=#569cd6]var[/COLOR] [COLOR=#9cdcfe]Word[/COLOR] = [COLOR=#9cdcfe]result[/COLOR].[COLOR=#dcdcaa]split[/COLOR]([COLOR=#ce9178]"/"[/COLOR]);
            [COLOR=#4fc1ff]$[/COLOR]([COLOR=#ce9178]'#age'[/COLOR]).[COLOR=#dcdcaa]html[/COLOR]([COLOR=#9cdcfe]Word[/COLOR][[COLOR=#b5cea8]0[/COLOR]].[COLOR=#dcdcaa]replace[/COLOR]([COLOR=#d16969]/[/COLOR][COLOR=#ce9178]([/COLOR][COLOR=#d16969]'[/COLOR][COLOR=#dcdcaa]|[/COLOR][COLOR=#d7ba7d]+[/COLOR][COLOR=#ce9178])[/COLOR][COLOR=#d16969]/[/COLOR][COLOR=#569cd6]g[/COLOR], [COLOR=#ce9178]""[/COLOR]));
            [COLOR=#4fc1ff]$[/COLOR]([COLOR=#ce9178]'#ligthBarrier'[/COLOR]).[COLOR=#dcdcaa]html[/COLOR]([COLOR=#9cdcfe]Word[/COLOR][[COLOR=#b5cea8]1[/COLOR]].[COLOR=#dcdcaa]replace[/COLOR]([COLOR=#d16969]/[/COLOR][COLOR=#ce9178]([/COLOR][COLOR=#d16969]'[/COLOR][COLOR=#dcdcaa]|[/COLOR][COLOR=#d7ba7d]+[/COLOR][COLOR=#ce9178])[/COLOR][COLOR=#d16969]/[/COLOR][COLOR=#569cd6]g[/COLOR], [COLOR=#ce9178]""[/COLOR]));
          });
        },[COLOR=#b5cea8]1000[/COLOR]);
      });
[/FONT][/COLOR]
Ich habe nun in der Hauptseite das unten reingepackt. Oben fängt es mit Zeile 486 an und hört mit 495 auf.

Dann kommt folgende Fehlermeldung:

Code:
4index.html:491 Uncaught SyntaxError: Invalid regular expression: /('|+)/: Nothing to repeat    at Object.success (index.html:491)
    at fire (jquery-3.5.1.js:3496)
    at Object.fireWith [as resolveWith] (jquery-3.5.1.js:3626)
    at done (jquery-3.5.1.js:9786)
    at XMLHttpRequest.<anonymous> (jquery-3.5.1.js:10047)
EDIT: Fehler ist behoben, wenn ich |+ aus dem Code entferne. Allerdings zeigt er mir immer noch nichts auf der Hauptseite an.
Habe ich vielleicht die Falsche jquery Bib?

Die read.htm Seite sieht momentan so aus:

Code:
[COLOR=#808080][FONT=Consolas]<![/FONT][/COLOR][COLOR=#569CD6][FONT=Consolas]DOCTYPE[/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]HTML[/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]PUBLIC[/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]"-//W3C//DTD HTML 4.01 Transitional//EN"[/FONT][/COLOR][COLOR=#808080][FONT=Consolas]>[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas][COLOR=#808080]<[/COLOR][COLOR=#569cd6]html[/COLOR][COLOR=#808080]>[/COLOR]
[COLOR=#808080]<[/COLOR][COLOR=#569cd6]head[/COLOR][COLOR=#808080]>[/COLOR]
[COLOR=#808080]<[/COLOR][COLOR=#569cd6]meta[/COLOR] [COLOR=#9cdcfe]http-equiv[/COLOR]=[COLOR=#ce9178]"Content-Type"[/COLOR] [COLOR=#9cdcfe]content[/COLOR]=[COLOR=#ce9178]"text/html; charset=utf-8"[/COLOR] [COLOR=#808080]>[/COLOR]
[COLOR=#808080]</[/COLOR][COLOR=#569cd6]head[/COLOR][COLOR=#808080]>[/COLOR]
[COLOR=#808080]<[/COLOR][COLOR=#569cd6]body[/COLOR][COLOR=#808080]>[/COLOR]
   :="Plc2Web".testString:
[COLOR=#808080]</[/COLOR][COLOR=#569cd6]body[/COLOR][COLOR=#808080]>[/COLOR]

[COLOR=#808080]<[/COLOR][COLOR=#569cd6]script[/COLOR] [COLOR=#9cdcfe]src[/COLOR]=[COLOR=#ce9178]"https://code.jquery.com/jquery-3.5.1.js"[/COLOR] [COLOR=#9cdcfe]integrity[/COLOR]=[COLOR=#ce9178]"sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc="[/COLOR] [COLOR=#9cdcfe]crossorigin[/COLOR]=[COLOR=#ce9178]"anonymous"[/COLOR][COLOR=#808080]></[/COLOR][COLOR=#569cd6]script[/COLOR][COLOR=#808080]>[/COLOR]
[COLOR=#808080]<[/COLOR][COLOR=#569cd6]script[/COLOR] [COLOR=#9cdcfe]type[/COLOR]=[COLOR=#ce9178]"text/javascript"[/COLOR] [COLOR=#9cdcfe]src[/COLOR]=[COLOR=#ce9178]"./page-js.js"[/COLOR][COLOR=#808080]></[/COLOR][COLOR=#569cd6]script[/COLOR][COLOR=#808080]>[/COLOR]
[/FONT][/COLOR]
[COLOR=#808080][FONT=Consolas]</[/FONT][/COLOR][COLOR=#569CD6][FONT=Consolas]html[/FONT][/COLOR][COLOR=#808080][FONT=Consolas]>[/FONT][/COLOR]


Erfahrung in JavaScript etwas, da ich mich viel mit ioBroker beschäftige. Bei Web Programmierung, bekomme ich einfache Seiten hin. Habe allerdings noch nie etwas mit der Bib jQuery zu tun.
 
Zuletzt bearbeitet:
Der Fehler ist weg - siehe oben (Rot)
Wie meinst du das auf der SPS? ich habe das als

Code:
[COLOR=#808080][FONT=Consolas]<[/FONT][/COLOR][COLOR=#569CD6][FONT=Consolas]script[/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]src[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]=[/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]"https://code.jquery.com/jquery-3.5.1.js"[/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]integrity[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]=[/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]"sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc="[/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]crossorigin[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]=[/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]"anonymous"[/FONT][/COLOR][COLOR=#808080][FONT=Consolas]></[/FONT][/COLOR][COLOR=#569CD6][FONT=Consolas]script[/FONT][/COLOR][COLOR=#808080][FONT=Consolas]>[/FONT][/COLOR]

unter beiden Seiten stehen.


UPDATE:

Habe nun in der read.html nur den String drin stehen. Und ein console.log in die Funktion eingebaut.
Code:
[COLOR=#9CDCFE][FONT=Consolas]console[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas].[/FONT][/COLOR][COLOR=#DCDCAA][FONT=Consolas]log[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]'word'[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas] + [/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]Word[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas][[/FONT][/COLOR][COLOR=#B5CEA8][FONT=Consolas]0[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]]);[/FONT][/COLOR]
Nun steht im Log, die Variable von age. Verändere ich sie auf der SPS, verändert sich auch sofort die Zahl.

Leider wird sie immer noch nicht auf der Website angezeigt.
 
Zuletzt bearbeitet:
Leider meldet mich die Seite manchmal nach dem schreiben ab, und verdreht dann beim Anmelden diverse Sonderzeichen, bzw. war das "+" was anders.

Generell würde ich die aktuelle Version der "jquery-3.4.1.min.js" (bei mir ist halt noch die alte drinnen) auf die SPS geben, da du sonst ja einen Internetzugang zum abarbeiten des Codes brauchst.
Eingebunden wird sie dann so: (in dem Fall im Unterordner jquery)
<script type="text/jscript" src = "jquery/jquery-3.4.1.min.js" ></script>

Rest folgt

Nochmal die Zeile:
Code:
$('#age').html(Word[0].replace(/('|+)/g, ""));

Beide Zeilen so korrigieren.

Rest folgt

Bau in die Anzeige Seite das console.log mit age und den zweiten wert ein.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe nun eine Datei für die query Bib erstellt, nur wenn ich diese einbinden möchte, kommt die folgende Fehlermeldung:

WebInt: Die Zeichenfolge "]]" ist nicht erlaubt in Dateien mit dynamischem Inhalt. Die Datei wird ignoriert. in Datei: C:\Users\Documents\sps\jquery-3.5.1.js Zeile: 620 Spalte: 25,23.02.2021,11:51:48

- jquery-3.5.1

Die Zeilen sind korrigiert und console log war vorher schon auf der Hauptseite. Habe das zu schlecht kommuniziert.

Ebenfalls habe ich inzwischen mehrere Varianten durch:
Ich habe das replace mal wegelassen, falls dass das Problem ist.

Code:
[COLOR=#DCDCAA][FONT=Consolas]$[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]'#age'[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]).[/FONT][/COLOR][FONT=Consolas][COLOR=#dcdcaa]html[/COLOR][/FONT][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]Word[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas][[/FONT][/COLOR][COLOR=#B5CEA8][FONT=Consolas]0[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]]);[/FONT][/COLOR]
Code:
[COLOR=#DCDCAA][FONT=Consolas]$[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]'#age'[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]).[/FONT][/COLOR][COLOR=#DCDCAA][FONT=Consolas]text[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]Word[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas][[/FONT][/COLOR][COLOR=#B5CEA8][FONT=Consolas]0[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]]);[/FONT][/COLOR]
Code:
[COLOR=#DCDCAA][FONT=Consolas]$[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]'#age'[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]).[/FONT][/COLOR][FONT=Consolas][COLOR=#dcdcaa]var[/COLOR][/FONT][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]Word[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas][[/FONT][/COLOR][COLOR=#B5CEA8][FONT=Consolas]0[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]]);[/FONT][/COLOR]

nirgends zeigt er mir was sinnvolles an.

Code:
[COLOR=#9CDCFE][FONT=Consolas]console[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas].[/FONT][/COLOR][COLOR=#DCDCAA][FONT=Consolas]log[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]'#age '[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas] + [/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]Word[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas][[/FONT][/COLOR][COLOR=#B5CEA8][FONT=Consolas]0[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]]);[/FONT][/COLOR]
Nur da zeigt es mir den Wert der Variable an.
 
Es gibt eine jquery und eine jquery.min ("jquery-3.4.1.min.js"). Würde die min allein wegen der Größe empfehlen.

Wenn er im console.log schon den richtigen Wert anzeigt, fehlt ja nur mehr die Anzeige auf der Webseite, oder?

Hast Du für beide Variable eine richtige Anzeige im console.log?
 
Code:
[COLOR=#DCDCAA][FONT=Consolas]$[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]'#age'[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]).[/FONT][/COLOR][COLOR=#DCDCAA][FONT=Consolas]html[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]Word[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas][[/FONT][/COLOR][FONT=Consolas][COLOR=#b5cea8]0[/COLOR][/FONT][COLOR=#D4D4D4][FONT=Consolas]]);[/FONT][/COLOR]

Code:
[COLOR=#9CDCFE][FONT=Consolas]console[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas].[/FONT][/COLOR][COLOR=#DCDCAA][FONT=Consolas]log[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]'#age text '[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas] + [/FONT][/COLOR][COLOR=#DCDCAA][FONT=Consolas]$[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]"#age"[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]).[/FONT][/COLOR][COLOR=#DCDCAA][FONT=Consolas]html[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]());[/FONT][/COLOR]

Hier zeigt er mir das hier an:
page-js.js:12 #age text undefined

es kann wohl nicht den Wert Word[0] in #age schreiben.

Bei
Code:
[COLOR=#9CDCFE][FONT=Consolas]console[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas].[/FONT][/COLOR][COLOR=#DCDCAA][FONT=Consolas]log[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]([/FONT][/COLOR][COLOR=#CE9178][FONT=Consolas]'#age '[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas] + [/FONT][/COLOR][COLOR=#9CDCFE][FONT=Consolas]Word[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas][[/FONT][/COLOR][COLOR=#B5CEA8][FONT=Consolas]0[/FONT][/COLOR][COLOR=#D4D4D4][FONT=Consolas]]);[/FONT][/COLOR]

Bekomme ich den richtigen Wert von Word[0].
 
Ich habe gemeint, ob das zerlegen funktioniert. Du kannst ja nicht zwei variable gleich bezeichen.
In deinem Beispiel oben

Code:
 $('#age').html(Word[0].replace(/('|+)/g, ""));
            $('#ligthBarrier').html(Word[1].replace(/('|+)/g, ""));

sind ja zwei werte.
 
ok, jetzt verstehe ich. Du bekommst es nicht ins age. Wobei ich die Syntax von console nicht kenne. ist das sicher so richtig? Weil text ist was anderes als html.
 
Zurück
Oben