B&R enum für switch case

godi

Level-1
Beiträge
1.460
Reaktionspunkte
185
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich arbeite mich gerade ein wenig in die B&R Steuerungen ein.
(Automation Studio V3.0.9; CPU X20; Programmiersprache C)

Ich würde gerne eine Schrittkette mit switch case und enum realisieren, nur klappt das nicht so richtig.
In der Datei .typ habe ich den enum angelegt.
Bei den Variablen habe ich eine Variable für den aktuellen Step angelegt. Den Type habe ich auf DINT eingestellt da die Enums automatisch auf DINT angelegt werden.

Es tritt schon bei der Zuweisung des aktuellen Schrittes ein Fehler auf:
Code:
cyc.cur_step = CYC_STEP.ACC_FORW;
=> Fehler : expected expression before 'CYC_STEP'

Bei der case Anweisung habe ich den selben Fehler.
Code:
switch (cyc.cur_step) {            
            case CYC_STEP.ACC_FORW:
...

Hat jemand eine Ahnung wie dies richtig umgesetzt werden kann?
Am Anfang hatte ich den Enum weggelassen und die einzelnen Schritte mit #define angegeben. Das hat funktioniert.

godi
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Typedeklaration (automatisch generiert) sieht folgende aus:
Code:
TYPE    
    cycle_routine :     STRUCT  (*UDT for cycle*)
        enable : BOOL; (*enable*)
        step_size_acc : REAL; (*step size accelerate for the voltage of the proportional valve*)
        step_size_dec : REAL; (*step size decelerate for the voltage of the proportional valve*)
        max_output : REAL; (*maximum output  for the voltage of the proportional valve*)
        min_output : REAL; (*minimum output  for the voltage of the proportional valve*)
        start_pos : REAL; (*starting position for cyclic*)
        ref_pos : REAL; (*reference position: this is the position between accelerate an decelerate*)
        start_pos_ok : BOOL; (*starting position is reached*)
        cur_step : DINT; (*the current step of the cycle*)
        steps : CYC_STEP; (*steps of the cycle*)
    END_STRUCT;
    CYC_STEP : 
        ( (*enumeration for the steps of the cycle*)
        ACC_FORW := 1, (*step: accelerate forward*)
        DEC_FORW := 2, (*step: decelerate forward*)
        ACC_BACKW := 3, (*step: accelerate backward*)
        DEC_BACKW := 4 (*step: decelerate backward*)
        );
END_TYPE

Und die Dazugehörige Variable:
Code:
VAR  
    cyc : cycle_routine := (0); (*cycle the hydraulic cylinder*)   
END_VAR

Ich wollte das eigentlich so umsetzen, dass ich nur über die Variable cyc auf den enum Zugreife.
Also so: cyc.steps.ACC_FORW und diesen Wert dann in cyc.cur_step zwischenspeichere.

Im ersten Post habe ich es schon direkt über den Enum versucht. (CYC_STEP.ACC_FORW)
Wie gesagt kommt immer der gleiche Fehler.
 
Zurück
Oben