# Switch CASE Anweisung



## sweber (14 Dezember 2006)

Hallo,
wie kann man eine effiziente Case- Anweisung
in Step7 programmieren?
Habe 15 verschiedene Peripherieeingänge die man unterscheidet.
Bei jeder Peripherieeingang muss ein anderer Merker gesetzt werden
und zum Schluß der Funktion eine weiteren FC aufrufen.

MFG
sweber


----------



## Ralle (14 Dezember 2006)

in AWL SPL -  Sprungleiste (such mal danach im Forum)
(für deinen Falll wohl eher nicht)

oder SCL programmieren

Warum nicht einfach 

U E...
= M ...

15 mal

dann deine Funktion ?


----------



## sweber (14 Dezember 2006)

wie kann ich mich auf VKE bezihen?
Wenn VKE = 1 ,
dann setze Merker.


----------



## Ralle (14 Dezember 2006)

U E0.0
= M0.0

oder

U E0.0
S M0.0

mußt dann natürlich irgendwann den Merker 0.0 zurücksetzen (wenn er nicht mehr gebraucht wird.

Du kannst also folgendes machen

SET //VKE auf 1, falls du nicht weißt, was davor passierte
U E0.0
= M0.0

U E0.1
= M0.1

...

oder für 16 zusammenhängende Wertg ginge auch

L EW0
T MW0

dann sind alle Merker auf 1, deren Korrespondierender Eingang 1 ist.


----------



## sweber (14 Dezember 2006)

L     #IN1                // aktuelle Peripherieeingabeadresse in AKKU 1
      L     299                 // 299hex (Saugdruck)
      ==I                       // vergleicht, wenn == VKE = 1

wenn Saugdruckadresse,
dann 
L    MW 130       //ist der generierte Wert aus InTouch

und diesen Vorgang brauche ich 15 mal 
(15 verschidene Analogeingänge die simuliert werden)


----------



## RaiKa (14 Dezember 2006)

Möglich wäre:

L #IN
L 16#299
==I
SPBN M1
   L MW130
   T MWxyz
M1: NOP 0
L #IN
L 16#298
==I
SPBN M2
   L MW128
   T MWxyz
M2: NOP 0
....
usw.

oder dafür eine FC mit Parameterübergabe.

Gruß
raika


----------



## sweber (14 Dezember 2006)

Danke! Super Idee!


----------



## zotos (14 Dezember 2006)

Ich habe die Problemstellung nicht verstanden aber CASE geht so:


```
CASE hexPAdress OF

  16#298: bBla1 := TRUE; (* Adresse 298 Bladruck *)

  16#299: bBla3 := TRUE; (* Adresse 299 Saugdruck *)

ELSE
  (* Falsche Adresse! *)
  bBla1 := FALSE;    (* Tue was*)

END_CASE
```


----------

