WinCC flex Variableninhalte summieren skript

roadrunner

Level-1
Beiträge
58
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
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.

Code:
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
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@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
 
@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


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
 
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.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
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):
Code:
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
 
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
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Vielen Dank.

Es funktioniert. Ich hatte falsche Variablen zusammengezählt.

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

Code:
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
 
so wie du jetzt möchtest nicht.
du kannst die variable aber als array definieren.

Code:
dim i, ergebnis
ergebnis = 0
  for i = 0 to 5
    ergebnis = ergebnis + var_array(i)
  next
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hab eine Lösung Gefunden.

Code:
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
 
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):
Code:
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?
Code:
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
 
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
 
Zurück
Oben