TIA S7-1200 Webserver: Eigene HTML-Seite

Marc_Quark

Level-1
Beiträge
62
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Morgen Forengemeinde,

ich bin gerade etwas am rumexperementieren mit dem Webserver einer 1200er.
Ich habe zum testen eine kleine HTML-Seite mit Javascript erstellt, welche Variablen aus der SPS liest und schreibt, was auch soweit ganz gut funktioniert.
Nun zum Problem: Ich bekomme es leider nicht hin Daten von einer Checkbox in die SPS zu schreiben, also wenn
Haken gesetzt, Bit=1 und umgekehrt.
Hier mal der Codeausschnitt dazu:

Code:
<!-- AWP_In_Variable Name='"HMI".Element.Active' -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
       <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
        <title>Gorilla Konfiguration</title>
        <!-- Via "<link...>" a CSS file is referenced which contains all information on the optical design of the web -->
        <link rel="stylesheet" type="text/css" href="S7Web.css">
    </head>

   <body onload="loginCheck()">  <!-- check login with each refresh of the website -->
      <form method="post" action="" onsubmit="">
         <input type="checkbox" id="Element_active" value='"HMI".Element.active'>
         <input type="submit" value="übernehmen" style="width: 100px"></td>                      
      </form>
       <!-- BEGIN Login Area -->
        <!-- use 'src="../../Portal/Portal.mwsl"' if you 'Generate blocks' with 'Application name' and use 'src="../Portal/Portal.mwsl"' if you 'Generate blocks' without 'Application name'-->
        <iframe id="WebserverIFrame" name="WebserverIFrameName" src="../../Portal/Portal.mwsl" style="display:none"></iframe>
         
        <!-- area for login -->
        <div id="logForm" class="Login_Area" style="width: 300px;height: 150px"></div>

         
        <!-- function for check login -->
        <script type="text/javascript">
function loginCheck()
        {               
                var iFrameElement = document.getElementById('WebserverIFrame');
                var loginForm = iFrameElement.contentWindow.document.getElementById('Login_Area_Form');
                if(loginForm)
                {
                        //alert("Not logged in");
                document.getElementById('logForm').innerHTML = loginForm.parentNode.innerHTML;
                }
                var logoutForm = iFrameElement.contentWindow.document.getElementById('logout_form');
                if(logoutForm)
                {
                        //alert("admin is logged in");
                document.getElementById('logForm').innerHTML = logoutForm.parentNode.innerHTML;
                // delete '/Applicationname' in next line, if you 'Generate blocks' without 'Application name'
                document.getElementsByName("Redirection")[0]["value"] = "../awp/Applicationname/Main_Webpage.html"; //fit Applicationname and HTML-page name to your settings
                }
               if( ':="HMI".Element.Active:' == 1)
                    document.getElementById("Element_active").checked = "checked";
}

        </script>
        <!-- END Login Area -->

    </body>
    
</html>

Danke schonmal für Eure Hilfe:rolleyes:
 
Also eine Radiobox mit den Optionen ein/aus wäre sinnvoller, und auch einfacher umzusetzen.

Eine Checkbox schickt nämlich wenn nicht checked beim Absenden keinen Wert, da muss man mit versteckten Feldern und ggf. etwas Javascript tricksen.

Nur auf 1 setzen müsste so gehen:
Code:
<form method="post" action="">
<input type="checkbox" id="Element_active" name='"HMI".Element.active' value="1" />
<input type="submit" value="übernehmen" style="width: 100px" />                  
</form>
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke, hab das auch schon probiert macht aber wenig Sinn wenn man's nicht wider auf Null setzen kann :/
Hab es jetzt mit einer Auswahlbox(Gleiche Funktion wie die Radiobox) realisiert

Code:
     <form method="post" action="">
                <select id="Element_visible" name='"HMI".Element.Visible' size="1">
                <option value=1>Ja</option>
                <option value=0>Nein</option>               
                </select>  
     <input type="submit" value="übernehmen" style="width: 100px" />

Schade das man nicht die möglichkeit hat in JS Variablen zu schreiben,
dann gäbe es Ddutzende Möglichkeiten.
 
Schade das man nicht die möglichkeit hat in JS Variablen zu schreiben,
dann gäbe es Ddutzende Möglichkeiten.

Sicher hast du die Möglichkeit auch über Javascript in die SPS zu schreiben. Einfach einen XMLHttpRequest vom Typ POST und mit den entsprechenden Daten absenden.
Ich habe das mal mit dem jquery Framework gemacht, das ist aber für die 1200 etwas zu aufgeblasen. Zumindest wenn man die jquery Dateien auf der SPS ablegt lädt die Seite das erste mal schon sehr langsam. Aber wenn die Bibliothek erstmal geladen ist, kann man, wenn man es geschickt programmiert, alle Daten kontinuierlich per ajax Request aktualisieren und die Seite wird wieder schneller, weil nicht immer der ganze html code sondern nur die eigentlichen Daten angefragt werden.
 
Hab ich mir auch überlegt, hatte schonmal mit SignalR und C# was geschrieben... allerdings für nen richtigen Webserver.
Für die 1200 finde ich so 'ne Lösung auch etwas übertrieben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Marc,

mich würde interessieren, wie man das jQuery Framwork auf die S7-1200 laden kann? Die Datei ist ca. 250kB groß und ist größer als die maximale Dateigröße von 64 kB pro Datei.
 
Wie kommst du auf die 64 kByte. Meinst du weil das die maximale Größe für einen Datenbaustein in der 1200er ist? Das ist kein Problem, die Dateien werden dann beim Erzeugen eben auf mehrere Fragmente (also mehrere Datenbausteine) aufgeteilt.

Es gibt auch noch eine abgespeckte jquery Datei bei der alle Leerzeichen entfernt und Variablennamen eingekürzt sind. Die ist dann etwas über 90 kB groß.
 
Hallo Marc,

mich würde interessieren, wie man das jQuery Framwork auf die S7-1200 laden kann? Die Datei ist ca. 250kB groß und ist größer als die maximale Dateigröße von 64 kB pro Datei.

Hi Go4,

Thomas hat schon recht, google mal nach Jquery compressed. Die Datei müsste dann die Endung ..-min.js haben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe es gerade noch einmal getestet. Im TIA Portal V11 können die DBs größer als 64 kB sein. Versuche ich die gleichen Dateien mit dem S7-Manager V5.5 in DBs umzuwandeln, egal ob HTML, JS oder CSS Dateien, dürfen sie nicht größer als 64KB sein, sonst bekommt man folgende Mitteilung:
S7_Manager_V55.png
 
Hallo Zusammen,

in der V12 bekomme ich folgende Meldung wenn ich das aktuelle jQuery (compressed) laden will:
Code:
WebInt: Dateien für Webapplikation konnten nicht gelesen werden: WebInt: Dateigröße 66493 zu groß - Datei C:\test\jquery-1.10.1.min.js wird ignoriert.,19.06.2013,13:08:50

Hab leider keine V11 zum testen da, war das Verhalten bei Dateien größer 64k anders?

Viele Grüße
Jonny
 
Morgen Jonny,

die V12 habe ich noch nicht getestet, aber wie es scheint, ist in der V12 genau wie im S7-Manager V5.5 ein Limit für die Bausteingröße von 65536 Bytes gesetzt. In der V11 konnte man Bausteine größer als 64 kB erzeugen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hoi,

danke für die Rückmeldung.
Habe mal bei Siemens nachgefragt. Laut Aussage Support sollte in der V12 eine Dateigröße größer 64kb möglich sein. Die Daten werden in mehrere DBs gesplitet.
Aber denke hier ist ein Bug (zumindest in meinem Projekt).
Zusätzlich sind keine "]]" in dynamischen Dateien erlaubt. Laut Online Doku wurde der Fehler in V12 behoben --> ist nicht der Fall
 
Hallo,

ihr könnt einfach in der JQuery-Bibliothek die Zeichenkette "]]" mit "] ]" ersetzt (Leerzeichen zwischen den Klammern einfügen).

Wenn ihr das Problem habt das die Datei zu groß ist, könnt ihr einfach das AWP-Kommando <!-- AWP_Start_Fragment Name="<Name>" --> etwa in der Mitte der Datei eingefügen, damit trennt ihr die Datei manuell. Dies hat keine Auswirkungen auf die Funktionsfähigkeit.

Gruß Jannes
 
Zurück
Oben