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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

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

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo allerseits!

    Ich verstehe nicht ganz, wie das mit dem Variablenzugriff auf statische Variablen, die ich in FBs eingeführt habe, funktioniert.

    Ich habe einen FB, der so aussieht:

    Code:
    FUNCTION_BLOCK FB70
       VAR_INPUT
       E2.5 : BOOL;
       E3.0 : BOOL;
       END_VAR
    
       VAR
       s1_prev_state : BOOL := 0;
       s2_prev_state : BOOL := 0;
       s1_pos_edge : BOOL;
       s2_pos_edge : BOOL;
       END_VAR
    
    s1_pos_edge := E2.5 & NOT s1_prev_state;
    s2_pos_edge := E3.0 & NOT s2_prev_state;
    
    ...
    
    END_FUNCTION_BLOCK
    In der Doku hab ich folgendes gefunden:
    Von anderen Bausteinen aus können Sie die Variable durch indizierten Zugriff ansprechen, z.B. DBx.variable.

    Ich möchte nun in einer Funktion (FC80) auf "s1_pos_edge" zugreifen. Wie mache ich das? Ich hab ja nur einen FB angelegt, aber keinen DB? Wird das automatisch gemacht?

    Würde denn
    Code:
    IF DB70.s1_pos_edge = 1
       THEN (* irgendwas machen *)
    END_IF
    funktionieren?

    mfg,
    Frank
    Zitieren Zitieren Anfängerfrage - Zugriff auf statische Variablen von FBs  

  2. #2
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.649
    Danke
    789
    Erhielt 655 Danke für 498 Beiträge

    Standard

    Zitat Zitat von FrankTheTank Beitrag anzeigen
    Code:
    IF DB70.s1_pos_edge = 1
       THEN (* irgendwas machen *)
    END_IF
    funktionieren?

    mfg,
    Frank
    Genau so. Wobei DB70 der instanzdb ist.

    Deinen FB musst du aber mit einem call aufrufen, also z.B. call deinfb, instanzdb (z.B. DB70)

    Dann wird auch der DB70 automatisch generiert.

    Anzumerken ist noch das es unschön ist auf statische Variablen extern zuzugreifen. Für externe zugriffe hat Siemens die Schnittstelle erfunden.
    Und Absolute Adressen musst du nicht bei VAR_INPUT Deklarieren, das funktioniert so nicht.

    mfG René
    Geändert von vollmi (02.08.2011 um 17:09 Uhr)

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

    Standard

    Okay, das mit den absoluten Adressen ist behoben. Das Programm funktioniert jetzt auch.

    Inwiefern ist der Zugriff auf statische Variablen "unschön"? Meinst du mit Schnittstelle, dass "VAR_OUTPUT" verwenden soll?

  4. #4
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.649
    Danke
    789
    Erhielt 655 Danke für 498 Beiträge

    Standard

    Zitat Zitat von FrankTheTank Beitrag anzeigen
    Okay, das mit den absoluten Adressen ist behoben. Das Programm funktioniert jetzt auch.

    Inwiefern ist der Zugriff auf statische Variablen "unschön"? Meinst du mit Schnittstelle, dass "VAR_OUTPUT" verwenden soll?
    Oder VAR_INPUT oder VAR_IN_OUT

    mfG René

  5. #5
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.590
    Danke
    63
    Erhielt 261 Danke für 221 Beiträge

    Standard

    Zitat Zitat von FrankTheTank Beitrag anzeigen
    Inwiefern ist der Zugriff auf statische Variablen "unschön"? Meinst du mit Schnittstelle, dass "VAR_OUTPUT" verwenden soll?
    Das war so gemeint, dass man auf die Variable von extern zugreifen kann, indem man (woanders) die absolute Adresse der Variablen im Instanz-DB angibt. (z.B. DB70.dbx...) Das geht dann nur so lange gut, wie der Instanz-DB unverändert bleibt. Sobald die Schnittstelle des Bausteins verändert wird, rutschen die Adressen durch und der absolute Zugriff adressiert möglicherweise etwas ganz anderes...
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

  6. #6
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.649
    Danke
    789
    Erhielt 655 Danke für 498 Beiträge

    Standard

    Zitat Zitat von Tigerente1974 Beitrag anzeigen
    Sobald die Schnittstelle des Bausteins verändert wird, rutschen die Adressen durch und der absolute Zugriff adressiert möglicherweise etwas ganz anderes...
    Man kann natürlich auch konsequent alles symbolisch machen. Den Vorrang auf Symbolisch umstellen. Jeden externen zugriff auf den IDB öffnen dass die geänderte Zuweisung erkannt wird speichern und erneut herunterladen.

    Ich bevorzuge übergänge über die schnittstelle nach draussen. Und wenn dafür etwas mehr speicher verbraucht wird. Ich finde es übersichtlicher.

  7. #7
    Registriert seit
    06.10.2009
    Ort
    NRW
    Beiträge
    1.590
    Danke
    63
    Erhielt 261 Danke für 221 Beiträge

    Standard

    Da gab es schon mal eine sehr "angeregte" Diskussion über den externen Zugriff auf den IDB...
    Meine bescheidene Sichtweise ist übrigens ebenso wie die von René: Wenn Zugriffe gemacht werden sollen, dann über die Schnittstelle des FB.
    Meine Motivation läuft nackig mit einem Cocktail über eine Wiese.

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

    Standard

    Man kann natürlich auch konsequent alles symbolisch machen. Den Vorrang auf Symbolisch umstellen. Jeden externen zugriff auf den IDB öffnen dass die geänderte Zuweisung erkannt wird speichern und erneut herunterladen.
    Was genau bedeutet "symbolischer Zugriff"?

    Sowas?
    Code:
    IF DB70.s1_pos_edge = 1

  9. #9
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.649
    Danke
    789
    Erhielt 655 Danke für 498 Beiträge

    Standard

    Zitat Zitat von FrankTheTank Beitrag anzeigen
    Was genau bedeutet "symbolischer Zugriff"?

    Sowas?
    Code:
    IF DB70.s1_pos_edge = 1
    Das ist ein teilsymbolischer zugriff, das funktioniert eh nur in SCL
    Hier adressierst du den DB Absolut und die Stelle im DB dann Symbolisch.

    Spielt also keine Rolle sobald du die SCL Quelle übersetzt wird dem Zugriff die absolute Adresse zugewiesen.

    In AWL isses dann anders, da wird die eingabe dann direkt in eine absolute Adresse umgewandelt und du musst dann händisch die Adresse überall anpassen sollte sich am DB irgendwas verschieben.


    Wenn der DB aber einen symbolischen Namen hat (Symbolliste oder Rechtsklick -> Objekteigenschaften auf den DB im Projektmanager) dann kannst du ihn so ansprechen
    U SymbolvonDB.s1_pos_edge

    oder

    IF SymbolvonDB.s1_pos_edge = TRUE THEN

    mfG René

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

    FrankTheTank (03.08.2011)

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Okay, Werte möchte ich nun per Schnittstelle ändern. Leider liefert mir das beim Übersetzen Fehlermeldungen. Ich kann allerdings keinen Fehler erkennen.

    Code:
    FUNCTION_BLOCK FB71
    VAR
        currentState : INT := 1;
    END_VAR
    
    CASE currentState OF
       1: currentState := FC81; // ungültiger oder fehlender Funktionstyp
       2: ...
    END_CASE;
    
    END_FUNCTION_BLOCK;
    
    
    FUNCTION FC81 : INT
    VAR_OUTPUT
       nextState : INT;
    END_VAR
    
    (* Motor anschalten *)
    A10.6 := 1;
    nextState := 2;
    END_FUNCTION; // Der Rückgabewert der Funktion ist nicht gesetzt

Ä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
  •