TIA Wincc flexibel VB-Skript Case bereich

zotos

User des Jahres 2007
Beiträge
4.504
Reaktionspunkte
1.201
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie kann ich denn bei TIA WinCC flexibel Skripten einen Bereich abdecken?
Code:
Select Case myVar
 Case 1
  'statementblock_1 
 Case [B][COLOR=#ff0000]2 To 6[/COLOR][/B] 'geht nicht, ist aber so von Microsoft beschrieben
  'statementblock_2
 Case 7, 8, 9, 10 'geht ist aber umständlich
  'statementblock_n
End Select

Mit .. und - habe ich auch schon experimentiert und bin kurz davor es mit IF ELSIF zu basteln.
 
Aus dem Handbuch von WinCC V13 rauskopiert für TIA

CASE "Tag_Value" OF
0 :
"Tag_1" := 1;
1,3,5 :
"Tag_2" :=1;
6..10 :
"Tag_3" := 1;
16,17,20..25 :
"Tag_4" := 1;
ELSE "Tag_5" := 1;
END_CASE;
 
Nee geht auch nicht, ich habe aber in der hilfe von WinCC flexibel (also nicht TIA) folgenden Hinweis gefunden:

Code:
 [TABLE="width: 87%"]
[TR]
[TD][SIZE=2]Select Case[/SIZE]
[/TD]
[TD][SIZE=2]Ausdrücke, die das [B]Is[/B]-Schlüsselwort oder einen oder mehrere Vergleichsoperatoren enthalten.
Ausdrücke, die einen bestimmten Wertebereich unter Verwendung des [B]To[/B]-Schlüsselworts enthalten.[/SIZE]
[/TD]
[/TR]
[/TABLE]

Zufinden unter "Nicht in VBScript enthaltene Visual Basic für Applikationen-Funktionen".
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
 Case [B][COLOR=#ff0000]2 To 6[/COLOR][/B] 'geht nicht, ist aber so von Microsoft beschrieben
  'statementblock_2
 Case 7, 8, 9, 10 'geht ist aber umständlich
Ich meine, das VBScript kann nur die mit Komma getrennte Ausdruckliste. Ein Bereich mit "To" geht nur im "richtigen" Visual Basic.
Das ist auch so in der VBScript-Beschreibung in der WinCC flexible Hilfe dokumentiert. Was sagt die TIA-Hilfe?

VBScript: Select Case Statement
Visual Basic: Select...Case Statement

Harald
 
Anstatt SELECT CASE, dann eine Reihe von IF THEN ELSEIF Statements.

Code:
IF MyVar = 1 THEN
  'Statements for 1
ELSEIF (MyVar >= 2) AND (MyVar <=6) THEN
  'Statements for 2..6
ELSE
  'Alle andere Fälle
ENDIF
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich meine das nach jeden Case kann nur ein Integerzahl sein.
Das kann auch ein String sein. siehe z.B. das zweite Skript SetSysVar

Die SELECT-Testexpression kann aber nur einmal angegeben werden, in den einzelnen Case können dann nur konstante Ergebnisse der Testexpression aufgeführt werden, aber keine neue condition welche erst zur Laufzeit berechnet wird wie die Idee von faust.

Harald
 
Zuletzt bearbeitet:
neh das funktioniert auch nicht, hatte ich vorhin auch mal eingetippt, flex meckert da.

Was wird denn genau bemeckert? Ich habe dieses Konstrukt schon mehrfach in verschiedensten Konstellationen verwendet, sogar mit Case-Statements, die fast völlig unterschiedlich waren. Habe es meist der Übersichtlichkeit wegen getan...


Gruß, Fred


Edit:
Gerade mit WinCC Comfort V13 (entspricht im Wesentlichen dem Flex) kurz erzeugt:

Select Case True
Case (optionMessage_messageDialogResult = 1)
'nop
Case (pageCtrl_currentPageNo >= 1000 And pageCtrl_currentPageNo <= 2000)
'nop
End Select


Der Compiler meckert nicht.
 
Zuletzt bearbeitet:
Was wird denn genau bemeckert? Ich habe dieses Konstrukt schon mehrfach in verschiedensten Konstellationen verwendet, sogar mit Case-Statements, die fast völlig unterschiedlich waren. Habe es meist der Übersichtlichkeit wegen getan...


Gruß, Fred


Edit:
Gerade mit WinCC Comfort V13 (entspricht im Wesentlichen dem Flex) kurz erzeugt:

Select Case True
Case (optionMessage_messageDialogResult = 1)
'nop
Case (pageCtrl_currentPageNo >= 1000 And pageCtrl_currentPageNo <= 2000)
'nop
End Select


Der Compiler meckert nicht.

Hi Fred,
neh das Funktioniert doch, ich hatte es gestern so versucht.
Code:
Case (myVar >2 And <6)

so wie du es gemacht hast funktioniert es

Code:
Case (myVar >=2 And myVar <=6)

gruß RN
 
Zurück
Oben