# WinCC flex Variableninhalte summieren skript



## roadrunner (4 März 2010)

Hallo,

ich würde gerne in WinCC flexible jeweils 8 Variablen (Typ Int)
zusammenrechnen und die Summe in einer "internen Variable" ablegen.
Diese soll dann im RT angezeigt werden.

Es dabei um Tagesstückzähler
Die Variablen hierzu sind in "Ordner" mit dem Tag bezeichnet abgelgt.

Je nach eingestelltem Tag der angezeigt wird sollen auch entsprechend 
diese Stückzahlen zusammengezählt werden.

Könnte man die Variablen auch indirekt adressieren??

wie z.B.

Bei Tag = 1

Sollen die Variablen aus dem Ordner "Stueck_Tage\Stueck_Tag1" verwendet werden.

Leider sind meine Skript Kenntnisse nicht besonders gut.

Habe es mit folgendem Code versucht, aber leider nicht funktioniert. 


```
If SmartTags("Intern\stueck_Tag_aus") = 1 Then
SmartTags("hilfs_skript\Variable_1")=SmartTags("Stueck_Tage\Stueck_Tag1\22-23")+SmartTags("Stueck_Tage\Stueck_Tag1\23-0")
SmartTags("hilfs_skript\Variable_2")=SmartTags("hilfs_skript\Variable_1")+SmartTags("Stueck_Tage\Stueck_Tag1\0-1")
SmartTags("hilfs_skript\Variable_3")=SmartTags("hilfs_skript\Variable_2")+SmartTags("Stueck_Tage\Stueck_Tag1\1-2")
SmartTags("hilfs_skript\Variable_4")=SmartTags("hilfs_skript\Variable_3")+SmartTags("Stueck_Tage\Stueck_Tag1\2-3")
SmartTags("hilfs_skript\Variable_5")=SmartTags("hilfs_skript\Variable_4")+SmartTags("Stueck_Tage\Stueck_Tag1\3-4")
SmartTags("hilfs_skript\Variable_6")=SmartTags("hilfs_skript\Variable_5")+SmartTags("Stueck_Tage\Stueck_Tag1\4-5")
SmartTags("Intern\stueck_ges_NS")=SmartTags("hilfs_skript\Variable_6")+SmartTags("Stueck_Tage\Stueck_Tag1\5-6")
End If
```
 
Vielen Dank
im Vorraus.

Gruß
roadrunner


----------



## PN/DP (4 März 2010)

*Berechnung auf Panel nicht zuverlässig*

Hallo roadrunner,

ich habe mal versucht, 6 INT-Werte der PLC im Panel zu addieren und die Summe im Panel anzuzeigen.
Die INT-Werte konnten am Panel auch geändert werden (Ein/Ausgabefeld).

Ich habe es aufgegeben, weil es immer wieder vorkam, daß die vom Panel "errechnete" Summe nicht stimmt.
Ich lasse nun die PLC die Summen-Berechnung durchführen.

Gruß
Harald


----------



## Larry Laffer (4 März 2010)

@Harald:
die Erfahrung kann ich nicht unbedingt teilen ... Wenn die Aktualisierungsrate der Einzel-Variablen passt und die kommunikation nicht überfordert ist, dann sollte das klappen.
Das ist aber (glaube ich) nicht das Problem von Roadrunner.

@Roadrunner:
Ist "hilfs_skript\Variable_1" (z.B.) wirklich der name deiner Variablen in Flex ?

Gruß
LL


----------



## roadrunner (4 März 2010)

Larry Laffer schrieb:


> @Harald:
> die Erfahrung kann ich nicht unbedingt teilen ... Wenn die Aktualisierungsrate der Einzel-Variablen passt und die kommunikation nicht überfordert ist, dann sollte das klappen.
> Das ist aber (glaube ich) nicht das Problem von Roadrunner.
> 
> ...


 

Ja die Variable heißt so.
Ich hab einen Ordner mit dem Namen "hilfs_skript" erstellt, und darin sind dann die Variablen_1 bis 8.
Zur besseren Übersichtlichkeit.

Zuerst habe ich versucht die Variablen einfach hintereinander mit + zusammenzuzählen, was aber auch nicht funktionierte.

Also einfach SmartTags(Summe)= Var1 + Var2 + Var3 + Var4 .....

Ich hatte Anfangs auch überlegt die Summe in der PLC zu bilden.

Da ich die aber nur im RT Anzeigen will, dachte ich mir ich könnte Zykluszeit sparen, und das in der Visu mit einem Skript lösen.

Gruß
roadrunner


----------



## rostiger Nagel (4 März 2010)

So ein paar zahlen werden besser in der Steuerung summiert,
da macht eigendlich keine CPU schlapp. Im Gegenteil, kann
es dazu kommen das das script mal nicht sauber abgearbeitet
wird wenn das Ereigniss das das Script aufruft zu schnell hinter-
einander kommt, oder gerade andere scripte aktiv sind.


----------



## PN/DP (4 März 2010)

Das Problem ist nicht das Script zum Summieren, sondern die Ereignisse, die das Script aufrufen sollen.
Da hat mir damals das MP277 10" Touch unter WCCf2007 zu unzuverlässig gearbeitet und manchmal Ereignisse 
unterschlagen bzw. das Script einfach nicht aufgerufen.

Ich will jetzt roadrunner nicht unbedingt von dem Script abhalten, weil er ja dabei eine Menge lernen kann.
Ich empfehle ihm aber, seine Anwendung ausgiebig und akribisch zu testen.

Gruß
Harald


----------



## PN/DP (4 März 2010)

*Details erforderlich*

@roadrunner

Wenn Du noch an der Scriptlösung interessiert bist, dann solltest Du uns mal mitteilen, was genau bei 
Deinen bisherigen Versuchen "nicht funktioniert" hat. Gab es Compiler- oder Runtime-Fehlermeldungen?
Wie lauteten die genau? Wie sind Deine Variablen "Stueck_Tage\Stueck_Tag1\xxx" in WCCflex angelegt?
Welches Panel willst Du einsetzen & kann das überhaupt Scripte?

Ich kann mir nicht vorstellen, was an diesem Script "nicht funktionieren" sollte (habe es jetzt aber auch 
nicht getestet):

```
SmartTags("Intern\stueck_ges_NS") = SmartTags("Stueck_Tage\Stueck_Tag1\22-23") _
                                  + SmartTags("Stueck_Tage\Stueck_Tag1\23-0") _
                                  + SmartTags("Stueck_Tage\Stueck_Tag1\0-1") _
                                  + SmartTags("Stueck_Tage\Stueck_Tag1\1-2") _
                                  + SmartTags("Stueck_Tage\Stueck_Tag1\2-3") _
                                  + SmartTags("Stueck_Tage\Stueck_Tag1\3-4") _
                                  + SmartTags("Stueck_Tage\Stueck_Tag1\4-5") _
                                  + SmartTags("Stueck_Tage\Stueck_Tag1\5-6")
```
Noch ein Tip: 
Für Zwischenergebnisse gibt es im VBS-Script lokale temporäre Variablen. Stichwort: "Dim"

Gruß
Harald


----------



## roadrunner (4 März 2010)

Die Variablen werden in einem Bild angezeigt und über einen Button starte ich das Skript das dann die Summe berechnen soll und das Ergebnis in einer internen Variable ablegt die im Bild dann untern als Summe angezeigt wird.


Die Variablen die ich Zusammenzählen möchte haben im schnitt Werte von ca. 2000 
Es sind 8 Variablen (1 Schicht mit 8 Stunden ) also müsste ungefähr 16000 als Summe da stehen.

Hatte da aber nur 2705 als Summe stehen.

Das ganze läuft auf einer PC-RT flex 08

Muss ich im Skript mit Zwischenergebnissen rechnen oder kann ich gleich alles mit + zusammenzählen.

Wie kann ich da einen "Zeilensprung" machen damit nicht alles in einer Zeiler steht?


Gruß
roadrunner


----------



## PN/DP (4 März 2010)

roadrunner schrieb:


> Muss ich im Skript mit Zwischenergebnissen rechnen oder kann ich gleich alles mit + zusammenzählen.
> 
> Wie kann ich da einen "Zeilensprung" machen damit nicht alles in einer Zeiler steht?


1. Nein, Du mußt keine Zwischenergebnisse machen, Du kannst gleich alle 8 Werte addieren.
2. Wenn eine lange Anweisung in der nächsten Zeile fortgesetzt werden soll, dann schreibe am Zeilenende einen Unterstrich "_".
Das alles siehe mein Scriptbeispiel in #7.

OK, wenn Du einen extra Button zum Aufruf des Scriptes machst, dann funktioniert das Summieren auf dem Panel. Du und der Bediener wissen ja, 
daß die Summe nicht automatisch berechnet wird, sondern erst auf Knopfdruck. Da gibt es dann auch keine Probleme mit fehlenden Ereignissen.

Gruß
Harald


----------



## roadrunner (22 März 2010)

Vielen Dank.

Es funktioniert. Ich hatte falsche Variablen zusammengezählt.

Eines würde mich noch interessieren.
Ist es möglich die Variablen indirekt anzusprechen?


```
Dim tag
Select Case SmartTags("Intern\stueck_Tag_aus")
 Case "0"
  tag = "Stueck_Tag1"
 Case "1"
  tag = "Stueck_Tag2"
 Case "2"
  tag = "Stueck_Tag3"
 Case "3"
  tag = "Stueck_Tag4"
 Case "4"
  tag = "Stueck_Tag5"
 Case "5"
  tag = "Stueck_Tag6"
 Case "6"
  tag = "Stueck_Tag7"
End Select
 
SmartTags("Intern\stueck_ges_NS") = SmartTags("Stueck_Tage\[COLOR=red]Stueck_Tag1[/COLOR]\22-23") _
                                  + SmartTags("Stueck_Tage\[COLOR=red]Stueck_Tag1[/COLOR]\23-0") _
                                  + SmartTags("Stueck_Tage\[COLOR=red]Stueck_Tag1[/COLOR]\0-1") _
                                  + SmartTags("Stueck_Tage\[COLOR=red]Stueck_Tag1[/COLOR]\1-2") _
                                  + SmartTags("Stueck_Tage\[COLOR=red]Stueck_Tag1[/COLOR]\2-3") _
                                  + SmartTags("Stueck_Tage\[COLOR=red]Stueck_Tag1[/COLOR]\3-4") _
                                  + SmartTags("Stueck_Tage\[COLOR=red]Stueck_Tag1[/COLOR]\4-5") _
                                  + SmartTags("Stueck_Tage\[COLOR=red]Stueck_Tag1[/COLOR]\5-6")
```
 
Statt dem Stueck_Tag1 -> Stueck_Tag2
Wie setzte ich die interne Variable "Tag" da ein?

Gruß
roadrunner


----------



## volker (22 März 2010)

so wie du jetzt möchtest nicht.
du kannst die variable aber als array definieren.


```
dim i, ergebnis
ergebnis = 0
  for i = 0 to 5
    ergebnis = ergebnis + var_array(i)
  next
```


----------



## roadrunner (22 März 2010)

Ich hab eine Lösung Gefunden.


```
Dim stueck_tag
Dim NS_22_23, NS_23_0, NS_0_1, NS_1_2, NS_2_3, NS_3_4, NS_4_5, NS_5_6
Dim FS_6_7, FS_7_8, FS_8_9, FS_9_10, FS_10_11, FS_11_12, FS_12_13, FS_13_14
Dim SS_14_15, SS_15_16, SS_16_17, SS_17_18, SS_18_19, SS_19_20, SS_20_21, SS_21_22
 
' Tagauswahl
Select Case SmartTags("Intern\stueck_Tag_aus")
 Case "0"
  stueck_tag = "stueck_tag1"
 Case "1"
  stueck_tag = "stueck_tag2" 
 Case "2"
  stueck_tag = "stueck_tag3"
 Case "3"
  stueck_tag = "stueck_tag4"
 Case "4"
  stueck_tag = "stueck_tag5"
 Case "5"
  stueck_tag = "stueck_tag6"
 Case "6"
   stueck_tag = "stueck_tag7"
End Select
 
 
NS_22_23 = SmartTags("stueck_tage\"&stueck_tag&"\22-23")
NS_23_0 =  SmartTags("stueck_tage\"&stueck_tag&"\23-0")
NS_0_1 = SmartTags("stueck_tage\"&stueck_tag&"\0-1")
NS_1_2 = SmartTags("stueck_tage\"&stueck_tag&"\1-2")
NS_2_3 = SmartTags("stueck_tage\"&stueck_tag&"\2-3")
NS_3_4 = SmartTags("stueck_tage\"&stueck_tag&"\3-4")
NS_4_5 = SmartTags("stueck_tage\"&stueck_tag&"\4-5")
NS_5_6 = SmartTags("stueck_tage\"&stueck_tag&"\5-6")
 
FS_6_7 = SmartTags("stueck_tage\"&stueck_tag&"\6-7")
FS_7_8 = SmartTags("stueck_tage\"&stueck_tag&"\7-8")
FS_8_9 = SmartTags("stueck_tage\"&stueck_tag&"\8-9")
FS_9_10 = SmartTags("stueck_tage\"&stueck_tag&"\9-10")
FS_10_11 = SmartTags("stueck_tage\"&stueck_tag&"\10-11")
FS_11_12 = SmartTags("stueck_tage\"&stueck_tag&"\11-12")
FS_12_13 = SmartTags("stueck_tage\"&stueck_tag&"\12-13")
FS_13_14 = SmartTags("stueck_tage\"&stueck_tag&"\13-14")
 
SS_14_15 = SmartTags("stueck_tage\"&stueck_tag&"\14-15")
SS_15_16 = SmartTags("stueck_tage\"&stueck_tag&"\15-16")
SS_16_17 = SmartTags("stueck_tage\"&stueck_tag&"\16-17")
SS_17_18 = SmartTags("stueck_tage\"&stueck_tag&"\17-18")
SS_18_19 = SmartTags("stueck_tage\"&stueck_tag&"\18-19")
SS_19_20 = SmartTags("stueck_tage\"&stueck_tag&"\19-20")
SS_20_21 = SmartTags("stueck_tage\"&stueck_tag&"\20-21")
SS_21_22 = SmartTags("stueck_tage\"&stueck_tag&"\21-22")
 
SmartTags("Intern\stueck_ges_NS")= NS_22_23 + NS_23_0 + NS_0_1 + NS_1_2 + NS_2_3 + NS_3_4 + NS_4_5 + NS_5_6
SmartTags("Intern\stueck_ges_FS")= FS_6_7 + FS_7_8 + FS_8_9 + FS_9_10 + FS_10_11 + FS_11_12 + FS_12_13 + FS_13_14
SmartTags("Intern\stueck_ges_SS")= SS_14_15 + SS_15_16 + SS_16_17 + SS_17_18 + SS_18_19 + SS_19_20 + SS_20_21 + SS_21_22
```


----------



## PN/DP (22 März 2010)

Im Script kann man den Tagname aus Strings zusammensetzen, allerdings mag SmartTags() das manchmal nicht innerhalb der Klammer
(da hatte ich jedenfalls schon mal Probleme).

Wenn Du Glück hast, funktioniert das hier (habe ich jetzt nicht getestet):

```
Dim tag
Select Case SmartTags("Intern\stueck_Tag_aus")
 Case "0"
  tag = "Stueck_Tag1"
 Case "1"
  tag = "Stueck_Tag2"
 Case "2"
  tag = "Stueck_Tag3"
 Case "3"
  tag = "Stueck_Tag4"
 Case "4"
  tag = "Stueck_Tag5"
 Case "5"
  tag = "Stueck_Tag6"
 Case "6"
  tag = "Stueck_Tag7"
End Select

SmartTags("Intern\stueck_ges_NS") = SmartTags("Stueck_Tage\" & tag & "\22-23") _
                                  + SmartTags("Stueck_Tage\" & tag & "\23-0") _
                                  + SmartTags("Stueck_Tage\" & tag & "\0-1") _
                                  + SmartTags("Stueck_Tage\" & tag & "\1-2") _
                                  + SmartTags("Stueck_Tage\" & tag & "\2-3") _
                                  + SmartTags("Stueck_Tage\" & tag & "\3-4") _
                                  + SmartTags("Stueck_Tage\" & tag & "\4-5") _
                                  + SmartTags("Stueck_Tage\" & tag & "\5-6")
```

Wenn obiges nicht funktioniert, dann wird es aufwendiger.
Weil Deine Tagnamen 2 veränderliche Teile haben und der letzte Teilname Schleifen-ungünstig gewählt ist, müsstest Du vor dem 
Summieren 8 Tagnamen zusammenbauen. Aber ob das den Aufwand gerechtfertigt?

```
Dim tag, tag1, tag2, tag3, tag4, tag5, tag6, tag7, tag8
Select Case SmartTags("Intern\stueck_Tag_aus")
 Case "0"
  tag = "Stueck_Tag1"
 Case "1"
  tag = "Stueck_Tag2"
 Case "2"
  tag = "Stueck_Tag3"
 Case "3"
  tag = "Stueck_Tag4"
 Case "4"
  tag = "Stueck_Tag5"
 Case "5"
  tag = "Stueck_Tag6"
 Case "6"
  tag = "Stueck_Tag7"
End Select

tag1 = "Stueck_Tage\" & tag & "\22-23"
tag2 = "Stueck_Tage\" & tag & "\23-0"
tag3 = "Stueck_Tage\" & tag & "\0-1"
tag4 = "Stueck_Tage\" & tag & "\1-2"
tag5 = "Stueck_Tage\" & tag & "\2-3"
tag6 = "Stueck_Tage\" & tag & "\3-4"
tag7 = "Stueck_Tage\" & tag & "\4-5"
tag8 = "Stueck_Tage\" & tag & "\5-6"

SmartTags("Intern\stueck_ges_NS") = SmartTags(tag1) _
                                  + SmartTags(tag2) _
                                  + SmartTags(tag3) _
                                  + SmartTags(tag4) _
                                  + SmartTags(tag5) _
                                  + SmartTags(tag6) _
                                  + SmartTags(tag7) _
                                  + SmartTags(tag8)
```
[EDIT]
Ich sehe gerade, daß Du auch was gefunden hast - ich stelle meinen Vorschlag trotzdem mal rein.
[/EDIT]

Gruß
Harald


----------



## roadrunner (22 März 2010)

Hallo,

danke für deine Antwort.

Ich habe es jetzt so gelöst wie du im unteren Beispiel, und habe es erfolgreich getestet.

Gruß
roadrunner


----------

