Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 15 von 15

Thema: Anfängerfrage - Zugriff auf statische Variablen von FBs

  1. #11
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    für letztere Fehlermeldung musst du ja den Rückgabewert der Funktion irgendwie zuweisen. z.B. so

    Code:
    FC81 := 1;
    Warum erster Fehler kommt, weiss ich nicht, mache das nie so.

    Ich nehme aber an FC81 gibts noch nicht weil du ihn nicht übersetzen konntest.

    mfG René

  2. #12
    Registriert seit
    27.07.2011
    Beiträge
    41
    Danke
    17
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hm, dann habe ich das ganze wohl doch noch nicht so ganz verstanden.

    Worin unterscheiden sich jetzt Rückgabewert einer Funktion und "VAR_OUTPUT" genau?

    Wie mache ich das am besten ("schönsten", "richtigsten"), wenn ich im FB71 die Variable "currentState" von FC81 aus verändern möchte?

  3. #13
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard

    z.B. So.

    Code:
    FUNCTION_BLOCK FB71
    VAR
        currentState : INT := 1;
    END_VAR
    
    CASE currentState OF
       1: currentState := FC81; 
       2: ...
    END_CASE;
    
    END_FUNCTION_BLOCK;
    
    
    FUNCTION FC81 : INT
    VAR_OUTPUT
       nextState : INT; // wird zur zeit nicht verwendet, könnte also aus Output gelöscht werden.
    END_VAR
    
    (* Motor anschalten *)
    A10.6 := 1;
     FC81 := 2; // Rückgabewert des FC81
    END_FUNCTION;
    VAR_OUTPUT nutzt du wenn dir nur ein Rückgabewert nicht ausreicht.

    Du kannst die Funktion auch so bauen: FUNCTION FC81 : VOID
    Dann musst du keinen rückgabewert Angeben oder kannst nur diese nutzen welche du in VAR_OUTPUT deklarierst.

    mfG René
    Geändert von vollmi (03.08.2011 um 15:54 Uhr)

  4. Folgender Benutzer sagt Danke zu vollmi für den nützlichen Beitrag:

    FrankTheTank (03.08.2011)

  5. #14
    Registriert seit
    27.07.2011
    Beiträge
    41
    Danke
    17
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Wie würde denn so ein Konstrukt mit "VAR_OUTPUT" aussehen?
    Also wenn ich in FC81
    Code:
    ...
    VAR_OUTPUT
       meineVariable1 : INT := 12;
       meineVariable2 : INT := 13;
    END_VAR
    ...
    stehen habe und nun "meineVariable1/2" einer anderen Variable in FB71 zuweisen möchte?

    Die Fehler mit der Zuweisung tauchen nun nicht mehr auf. Übersetzen mag er das Programm trotzdem nicht:
    Code:
    FUNCTION_BLOCK FB71
    VAR
        currentState : INT := 1;
    END_VAR
    
    CASE currentState OF
       1: currentState := FC81; // Ungültiger Datentyp
       2: ...
    END_CASE;
    
    END_FUNCTION_BLOCK;
    
    
    FUNCTION FC81 : INT
    
    (* Motor anschalten *)
    A10.6 := 1;
    FC81 := 2; // Rückgabewert des FC81
    END_FUNCTION;
    Hat jemand eine Idee, woran das liegen könnte?

  6. #15
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.620
    Danke
    777
    Erhielt 647 Danke für 493 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von FrankTheTank Beitrag anzeigen
    Code:
       1: currentState := FC81(); 
       2: ...
    END_CASE;

    Das ist essentiell. sorry vorher nicht drauf geachtet.

    Ansonsten würde ich es so machen. Dann ist alles in der Schnittstelle deklariert und du kannst frei drauf zugreifen und man kommt sogar noch draus.

    Code:
    FUNCTION_BLOCK FB71
    VAR
        currentState : INT := 1;
        meinFC  : FC81; // deklaration des FC
    
    END_VAR
    
    meinFC();
    FC81();
    
    CASE currentState OF
       1: currentState := meinFC.meineVariable1;  // entweder so
       2: currentState := FC81.meineVariable2;  // oder so
    END_CASE;
    
    END_FUNCTION_BLOCK;
    
    
    FUNCTION FC81 : VOID
    VAR_OUTPUT
       meineVariable1 : INT;
       meineVariable2 : INT;
    END_VAR
    
    (* Motor anschalten *)
    A10.6 := 1;
     meineVariable1 := 2; // Rückgabewert des FC81
    END_FUNCTION;
    Geändert von vollmi (03.08.2011 um 16:45 Uhr)

  7. Folgender Benutzer sagt Danke zu vollmi für den nützlichen Beitrag:

    FrankTheTank (03.08.2011)

Ähnliche Themen

  1. statische Variablen...
    Von snowleopard1702 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 08.05.2011, 11:47
  2. Antworten: 17
    Letzter Beitrag: 06.08.2010, 09:41
  3. Statische Variablen in FB´s
    Von Gerri im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 26.06.2008, 14:34
  4. Statische Variablen absolut Adressieren
    Von dpd80 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 19.01.2008, 13:16
  5. Statische Variablen
    Von Sh4gr4th im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 09.12.2005, 14:45

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •