# S7-300 Webserver



## Hetzer (27 September 2013)

hallo zusammen, 
ich habe jetzt auf meiner cpu ein webserver erstellt. alles so gemacht wie es auf der siemens seite steht über s7-web2plc.   
aber mit der seite ansich komme ich nicht weiter... muss man die seite  alles in html schreiben oder gibs da eine andere möglichkeit? 


gruß hetzer 
danke im vorraus


----------



## StefanK (28 September 2013)

Hi,
vorgesehen ist das ganze für HTML.

Eine BigS-Seite...

oder...

...noch eine BigS- Seite...

Hier noch ein Tutorial (in Englisch):

Teil 1

Teil 2

Teil 3

Meiner Meinung nach, ist das ganze für "kleinere" Projekte ganz nett.

Gruß
Stefan


----------



## Hetzer (28 September 2013)

> Eine BigS-Seite...



das habe ich schon gemacht...



> oder...
> 
> ...noch eine BigS- Seite...



habe ich mir auch schon angesehen...

aber keines von den zeig wie man die html seite erstellt...  das ist das problem...

oder kann mir einer den code schreiben für z.b. wenn man ein button drückt das e0.4 angeht?

danke im vorraus


----------



## Gerhard Bäurle (28 September 2013)

Hetzer schrieb:


> das habe ich schon gemacht...
> 
> 
> 
> ...



Siemens sagt, sie setzen auf Standards HTML, CSS und 
Javascript und gehen davon aus, dass die Anwender diese 
Standards einfach beherrschen ... :lol:

Aber gnädigerweise gibt es auch Beispiele wie hier, die 
man "weiterentwickeln" kann:

http://support.automation.siemens.com/WW/view/de/44212999


----------



## Hetzer (28 September 2013)

ja das habe ich mir schon angeschaut...   das ist aber alles analog, ich brauche es ja einfach nur digital...


----------



## Thomas_v2.1 (29 September 2013)

Du kannst die Beispiele für die analogen Werte auch für deine digitalen übernehmen. Der einzige Unterschied ist, dass du bei den digitalen nur die Werte 1 und 0 verwenden kannst. Genauso kannst du über Schaltflächen auch analoge Werte schreiben.

Hier mal ein Beispiel für drei verschiedene Möglichkeiten (Schaltfläche, Checkbox, Eingabefeld) wie du Variablen schreiben kannst:


```
<!DOCTYPE html>
<html>
<head> 
<title>Testseite zum Schreiben von bool-Variablen</title> 
</head>	
<body>

<!-- AWP_In_Variable Name='MeineBoolVar' -->
 
<h1>Testseite zum Schreiben von bool-Variablen</h1> 
 
<h2>Wertanzeige</h2>
<p>Wert von MeineBoolVar: :=MeineBoolVar:</p>

<h2>Ein- und Ausschalten über separate Buttons</h2>

<form method="post">
<input type="submit" value='Einschalten' style="height: 30px; width: 200px">
<input type="hidden" name='MeineBoolVar' value="1">
</form>

<form method="post">
<input type="submit" value='Ausschalten' style="height: 30px; width: 200px">
<input type="hidden" name='MeineBoolVar' value="0">
</form>

<h2>Ein- und Ausschalten über Checkbox und absenden</h2>
<p>Bei gesetzter Checkbox wird der Wert auf 1, bei nicht gesetzter auf 0 geschrieben.</p>

<form method="post">
<input type="hidden" name='MeineBoolVar' value="0" />
<input type="checkbox" name='MeineBoolVar' value="1" />
<input type="submit" value="Wert absenden" style="height: 30px; width: 200px" />                  
</form>

<h2>Über ein Eingabefeld mit den Werten 0 und 1</h2>

<form method="post">
<p>Zu sendender Wert für MeineBoolVar: <input name='MeineBoolVar' type="text" />
</p>
</form>

</body>
</html>
```

Du musst an allen Stellen "MeineBoolVar" durch deinen eigenen Namen ersetzen. "MeineBoolVar" kann aber genauso gut eine Integer-Variable sein. Dann hätte diese immer nur die Werte 1 und 0.

Du kannst aber nicht auf Eingangsvariablen schreiben, bzw. werden die vom SPS Programm immer wieder überschrieben. Zum Testen würde ich darum erstmal mit einem Merkerbit probieren.


----------



## Hetzer (29 September 2013)

Danke Thomas  und wie sieht's mit Ausgängen aus? Kann man die schreiben?


----------



## Thomas_v2.1 (29 September 2013)

Hetzer schrieb:


> Danke Thomas  und wie sieht's mit Ausgängen aus? Kann man die schreiben?


Im Prinzip ja. Nur darf dann im SPS-Programm nicht mehr auf diesen Ausgang geschrieben werden, weil sonst an den Ausgängen immer der Befehl vom Programm aus das Sagen hat.

Ich weiß zwar nicht was du da vorhast, aber ich würde die ganzen Daten für die Webvisualisierung in einen separaten DB legen, und im SPS-Programm die Befehle von dort abarbeiten. Ein direktes Lesen/Schreiben von Ein- und Ausgängen finde ich in einer realen Anlage nicht gerade schön, da es schwer nachzuvollziehen ist, wenn von deiner Webvisu direkt Ausgänge geschaltet werden.


----------



## Hetzer (29 September 2013)

ich sag mal ganz einfach... will mir viele taster sparen und das eig alles über ein monitor machen... sehe ich das richtig das ich denn das über ein merker machen kann und denn damit den ausgang ansprechen kann?  

mit DB habe ich keine erfahrung des wegen trifft das für mich nicht zu...

danke nochmal


----------



## Thomas_v2.1 (29 September 2013)

Hetzer schrieb:


> ich sag mal ganz einfach... will mir viele taster sparen und das eig alles über ein monitor machen... sehe ich das richtig das ich denn das über ein merker machen kann und denn damit den ausgang ansprechen kann?



So würde ich es machen. Dann gibst du den Merkern entsprechende Namen, z.B. "Web_Schalter_x", "Web_Zustand_y" usw. Dann weiß man wenigstens woher die Bits gesetzt werden.
Im Programm schreibst du dann:
U "Web_Schalter_x"
= "Ausgang_y"



Hetzer schrieb:


> mit DB habe ich keine erfahrung des wegen trifft das für mich nicht zu...



Dann ist doch jetzt ein guter Zeitpunkt das zu lernen. Das macht vor allem wenns mal mehr Variablen werden vieles übersichtlicher.


----------



## Hetzer (29 September 2013)

ich habe es jetzt mal rauf gespielt habe meine daten eingegeben habe passiert nix in der online anschicht in step 7 ich musste bei <!-- AWP_In_Variable Name='MeineBoolVar' --> jetzt <!-- AWP_In_Variable Name='W1' --> doch das W1 musste ich in "" setzten weil web2plc rumgemeckt hat
hier noch mal der code


```
<!DOCTYPE html>
<html>
<head> 
<title>Testseite zum Schreiben von bool-Variablen</title> 
</head>    
<body>

<!-- AWP_In_Variable Name='"W1"' -->
 
<h1>Testseite zum Schreiben von bool-Variablen</h1> 
 
<h2>Wertanzeige</h2>
<p>Wert von MeineBoolVar: :="W1":</p>

<h2>Ein- und Ausschalten über separate Buttons</h2>

<form method="post">
<input type="submit" value='Einschalten' style="height: 30px; width: 200px">
<input type="hidden" name='W1' value="1">
</form>

<form method="post">
<input type="submit" value='Ausschalten' style="height: 30px; width: 200px">
<input type="hidden" name='W1' value="0">
</form>

<h2>Ein- und Ausschalten über Checkbox und absenden</h2>
<p>Bei gesetzter Checkbox wird der Wert auf 1, bei nicht gesetzter auf 0 geschrieben.</p>

<form method="post">
<input type="hidden" name='W1' value="0" />
<input type="checkbox" name='W1' value="1" />
<input type="submit" value="Wert absenden" style="height: 30px; width: 200px" />                  
</form>

<h2>Über ein Eingabefeld mit den Werten 0 und 1</h2>

<form method="post">
<p>Zu sendender Wert für MeineBoolVar: <input name='MeineBoolVar' type="text" />
</p>
</form>

</body>
</html>
```


hab jetzt nur den schalter und die checkbox gemacht...


----------



## Thomas_v2.1 (29 September 2013)

Hm, kann sein dass das Web2Plc der 300er das mit den Anführungszeichen anders handhabt. Ich hab hier eine 1200er.

Bist du denn am Webserver angemeldet? Variablen schreiben kann man nur angemeldet.


----------



## Hetzer (29 September 2013)

soooooo habe den fehler gefunden... endlich :!:
bei: <form method="post">
<input type="submit" value='Einschalten' style="height: 30px; width: 200px">
<input type="hidden" name='W1' value="1">
</form>

musste das W1 auch in ""

so viiiiieeelen dank nochmal


----------



## Hetzer (29 September 2013)

hätte da noch eine sache...  wie heißt denn der code für <p>Wert von MeineBoolVar: :="W1":</p> wenn da ne 0 kommt das denn Aus steht und wenn 1 denn Ein?


----------



## Thomas_v2.1 (29 September 2013)

Da gibt es mehrere Möglichkeiten. Um bei den AWP-Befehlen dafür zu bleiben, kann man eine Aufzählung AWP_Enum_Def verwenden.

Variante 1:
<!-- AWP_In_Variable Name='MeineBoolVar' -->
<!-- AWP_Enum_Def Name='eEinAusText' Values='0:"Aus",1:"Ein"' -->
<!-- AWP_Enum_Ref Name='MeineBoolVar' Enum='eEinAusText' -->

Dann werden an allen Stellen an denen MeineBoolVar vorkommt, für die Werte 0 -> Aus und für 1 -> Ein eingesetzt. Dann musst du zum Schreiben der Variable aber ebenfalls anstelle von 0 und 1 die Texte Aus und Ein schicken (in den Formularen value="Ein" und value="Aus).
Wenn man das nicht will kann man die nächste Variante nehmen.

Variante 2:
<!-- AWP_In_Variable Name='MeineBoolVar' -->

<!-- AWP_In_Variable Name='MeineBoolVar_Use' Use='MeineBoolVar'-->
<!-- AWP_Enum_Def Name='eEinAusText' Values='0:"Aus",1:"Ein"' -->
<!-- AWP_Enum_Ref Name='MeineBoolVar_Use' Enum='eEinAusText' -->

An der Stelle wo der Wert ausgeben wird, kann man sich damit beides anzeigen lassen:

<p>Wert von MeineBoolVar: :=MeineBoolVar:</p>
<p>Wert von MeineBoolVar_Use: :=MeineBoolVar_Use:</p>

Die erste Zeile zeigt wie gehabt 0 und 1 an, die zweite die Definitionen aus der Enumeration, also Aus und Ein.
Gleiches beim Schreiben: schreibst du auf MeineBoolVar musst du 0 oder 1 schreiben, schreibst du auf MeineBoolVar_Use musst du die Aufzählungswerte verwenden. In der SPS landen beide Versionen letztendlich auf der gleichen Variable.

Mit Javascript gibt es dann weitere Möglichkeiten.


----------



## Hetzer (29 September 2013)

> Variante 1:
> <!-- AWP_In_Variable Name='MeineBoolVar' -->
> <!-- AWP_Enum_Def Name='eEinAusText' Values='0:"Aus",1:"Ein"' -->
> <!-- AWP_Enum_Ref Name='MeineBoolVar' Enum='eEinAusText' -->
> ...



ich habe mich jetzt für checkbox entschieden würde das trotzdem gehen?


----------



## Thomas_v2.1 (29 September 2013)

Hetzer schrieb:


> ich habe mich jetzt für checkbox entschieden würde das trotzdem gehen?



Ja, bei Variante 1 musst du wie schon erläutert die Werte für value ebenfalls anpassen.

<form method="post">
<input type="hidden" name='MeineBoolVar' value="Aus" />
<input type="checkbox" name='MeineBoolVar' value="Ein" />
<input type="submit" value="Wert absenden" style="height: 30px; width: 200px" />                  
</form>


----------



## Hetzer (29 September 2013)

ok danke


----------



## Hetzer (29 September 2013)

> 'eEinAusText'


was trage ich hier rein?


----------



## Thomas_v2.1 (29 September 2013)

Hetzer schrieb:


> was trage ich hier rein?


Wo eintragen?

Eine Enum-Definition sagt aus, dass Werte durch etwas anderes ersetzt werden sollen. Den Namen dafür kannst du dir aussuchen.

<!-- AWP_Enum_Def Name='eEinAusText' Values='0:"Aus",1:"Ein"' -->

Sagt das dieses eine Liste ist, bei der 0 durch "Aus" und 1 durch "Ein" ersetzt werden soll.

Möchtest du z.B. mit einer bool-Variable irgendwas an- oder abwählen, kannst du eine weitere Liste anlegen:
<!-- AWP_Enum_Def Name='eNeinJaText' Values='0:"Nein",1:"Ja"' -->

Referenzierst du dann diese Liste mit:
<!-- AWP_Enum_Ref Name='MeineBoolVar' Enum='eNeinJaText' -->

dann wird überall wo du MeineBoolVar ausgibst für 0 "Nein" und für 1 "Ja" eingsetzt. Wenn du Werte schreiben willst dann musst du ebenfalls Nein bzw. Ja schreiben.

Das ist ganz praktisch wenn du Formulare mit Auswahllisten oder Radio-Buttons hast.

Ansonsten steht das weitestgehend auch in den Siemens Handbüchern beschrieben.


----------



## Hetzer (29 September 2013)

```
<!DOCTYPE html>
<html>
<head> 
<title>Home Steuerung</title> 
</head>	
<body>

<img src="SIEMENS_Logo.PNG" alt="SIEMENS" width="213" height="35" align="right">

<!-- AWP_In_Variable Name='"WS1"' -->
<!-- AWP_In_Variable Name='"WS2"' -->
<!-- AWP_In_Variable Name='"WS3"' -->
<!-- AWP_In_Variable Name='"WZ1"' -->
<!-- AWP_In_Variable Name='"WZ2"' -->
<!-- AWP_In_Variable Name='"WZ3"' -->
<!-- AWP_In_Variable Name='"WZ4"' -->
<!-- AWP_In_Variable Name='"WZ5"' -->
 
<h1>Home Steuerung</h1> 


<h2>Steuerungs- und Zustandstabelle</h2> 

<table style="text-align: left; width: 748px;" border="1"
 cellpadding="2" cellspacing="2">
  <tbody>
    <tr>
      <td style="width: 227px;"><h3>Gerät:</h3></td>
      <td style="width: 98px;"><h3>Zustand:</h3></td>
      <td style="width: 397px;"><h3>Steuern:</h3></td>
    </tr>
    <tr>
      <td style="width: 227px;">Licht Arbeitszimmer</td>
      <td style="width: 98px;"><!-- AWP_Enum_Def Name='"Alarm"' Values='0:"Aus",1:"Ein"' -->
<!-- AWP_Enum_Ref Name= '"WZ1"' Enum='"Alarm"' --></td>
      <td style="width: 397px;"><form method="post">
<input type="hidden" name='"WS1"' value="0" />
<input type="checkbox" name='"WS1"' value="1" />
<input type="submit" value="Wert absenden" style="height: 30px; width: 200px" />                  
</form></td>
    </tr>
    <tr>
      <td style="width: 227px;">Licht Schlafzimmer</td>
      <td style="width: 98px;">:="WZ2":</td>
      <td style="width: 397px;"><form method="post">
<input type="hidden" name='"WS2"' value="0" />
<input type="checkbox" name='"WS2"' value="1" />
<input type="submit" value="Wert absenden" style="height: 30px; width: 200px" />                  
</form></td>
    </tr>
    <tr>
      <td style="width: 227px;">Heizung</td>
      <td style="width: 98px;">:="WZ3":</td>
      <td style="width: 397px;"><form method="post">
<input type="hidden" name='"WS3"' value="0" />
<input type="checkbox" name='"WS3"' value="1" />
<input type="submit" value="Wert absenden" style="height: 30px; width: 200px" />                  
</form></td>
    </tr>
    <tr>
      <td style="width: 227px;">Computer</td>
      <td style="width: 98px;">:="WZ4":</td>
      <td style="width: 397px;"></td>
    </tr>
    <tr>
      <td style="width: 227px;">Monitore</td>
      <td style="width: 98px;">:="WZ5":</td>
      <td style="width: 397px;"></td>
    </tr>
   
  </tbody>
</table>

</body>
</html>
```

es geht irgendwie nicht   ich hab bestimmt irgendwo ein fehler...


----------



## Thomas_v2.1 (29 September 2013)

Du brauchst eine AWP_Enum_Def und eine AWP_Enum_Ref. Das brauchst du nur einmal am besten am Anfang des HTML-Dokuments zu definieren.
Verkürzt:

<!-- AWP_Enum_Def Name='eAusEinText' Values='0:"Aus",1:"Ein"' -->

<!-- AWP_In_Variable Name='"WS1"' -->
<!-- AWP_In_Variable Name='"WS2"' -->

<!-- AWP_Enum_Ref Name='"WS1"' Enum='eAusEinText' -->
<!-- AWP_Enum_Ref Name='"WS2"' Enum='eAusEinText' -->

Danach wird überall wo du den Wert von WS1, WS2 usw. ausgeben lässt, anstelle von 0/1 der Wert aus der Enum eingesetzt, also Aus/Ein.


----------



## Hetzer (29 September 2013)

ok funktioniert 
geht das wenn man z.b. WS1 ein 1 signal bekommt das dann eine mail an eine bestimmte adresse geschickt wird?


----------



## Thomas_v2.1 (29 September 2013)

Hetzer schrieb:


> geht das wenn man z.b. WS1 ein 1 signal bekommt das dann eine mail an eine bestimmte adresse geschickt wird?



Direkt von der SPS aus geht das nur wenn du dort einen entsprechenden CP (z.B. 343-1 Advanced IT) hast.
Ansonsten bräuchtest du einen anderen Rechner der immer mitläuft, Daten von der SPS abfragt und ggf. eine Email verschickt.


----------



## Hetzer (29 September 2013)

brauch man die extra cp oder kann es die CPU317-2PN/DP auch?


----------

