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

Ergebnis 1 bis 4 von 4

Thema: Probleme mit Lokaldaten von FC

  1. #1
    oliver2306 Gast

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen.

    Ich habe ein Proplem mit untenstehendem Code. Eigentlich dreht sich mein Problem nur um das letzte Netzwerk "Status Meldungen". Ich greife dort auf das gesamte Lokalbyte 1 zu, dessen Bits ich zuvor setze und tranferiere dessen Zustand in einen Datenbaustein. Wenn ich nun zuvor den Lokaldaten-Reset weglasse, habe ich immer falsche Werte die sich unbestimmt ändern. Dann habe ich das ganze mit Merkern getestet anstatt die Lokalbits zu verwenden und es funktioniert einwandfrei. Doch ich verwende diese Lokalbits und auch den Byte zugriff nur ein einziges mal pro Baustein. Die Lösung auf dieses Problem war dann die durchführung des Loakldaten-Resets wobei ich nicht weis warum ich dieses machen muß. Lokaldaten sind doch nur für den Zeitraum verfügbar in dem der Baustein bearbeitet wird. Ich hoffe mal das mir iener von euch da weiterhelfen kann. Schon mal danke im vorraus.

    Code:
    FUNCTION FC 81 : VOID
    TITLE =Ein-/Ausschalten Pumpe 1
    //Dieser Baustein erfüllt folgende Funktionen:
    //1.Setzen des Lebensbit und Transferien des Resets
    //2.Bilden der Ein- und Ausschaltbedingungen
    //3.Pumpe 1 Ein- und Ausschalten
    //4.Statusmeldungen für die Pumpe 1 bilden und Transferieren
    AUTHOR : 
    VERSION : 0.1
    
    
    VAR_TEMP
      l_P1_EIN : BOOL ; //Pumpe 1 Einschalten
      l_P1_AUS : BOOL ; //Pumpe 1 Ausschalten
      l_Reserve0_1 : BOOL ; //Reserve
      l_Reserve0_2 : BOOL ; //Reserve
      l_Reserve0_3 : BOOL ; //Reserve
      l_Reserve0_4 : BOOL ; //Reserve
      l_Reserve0_5 : BOOL ; //Reserve
      l_Reserve0_6 : BOOL ; //Reserve
      l_P1_Status_Lauft : BOOL ;    //Status Pumpe 1 läuft
      l_P1_Status_Lauft_NOT : BOOL ;    //Status Pumpe 1 läuft im Notbetrieb
      l_P1_Status_Stoer : BOOL ;    //Status Pumpe 1 Störung
      l_P1_Status_Sperr : BOOL ;    //Status Pumpe 1 Gesperrt
      l_Reserve1_1 : BOOL ; //Reserve
      l_Reserve1_2 : BOOL ; //Reserve
      l_Reserve1_3 : BOOL ; //Reserve
      l_Reserve1_4 : BOOL ; //Reserve
    END_VAR
    BEGIN
    NETWORK
    TITLE =SPS Lebensüberwachung 
    //Hier wird ein Watchdog Simuliert. Sobal der Simocode ein Low-Signal erkennt 
    //(Stop oder Ausfall CPU) Schaltet er die Pumpe Aus.
          SET   ; 
          =     DB81.DBX   30.7; 
    
    NETWORK
    TITLE =Reset
    //Quittierung von Störungen am Simocode.
    //Dies geschieht duch Bedinung am MP370 oder Automatisch bei einem Neuanlauf der 
    //CPU nach Netz-Wiederkehr.
          O     DB30.DBX   10.0; 
          O     DB30.DBX   80.2; 
          O     M    100.0; 
          =     DB81.DBX   30.6; 
    NETWORK
    TITLE =Störmeldung
    //Eine Stoerung liegt vor wenn der Simocode eine Sammelstörung meldet oder das 
    //"Ready" Signal fehlt.
          U(    ; 
          O     DB81.DBX    0.6; 
          ON    DB81.DBX    1.1; 
          )     ; 
          S     M     81.3; 
          U     DB81.DBX   30.6; 
          R     M     81.3; 
          NOP   0; 
    NETWORK
    TITLE =Einschaltbedingung Pumpe 1
    //Die Einschaltbedingung ist erfüllt wenn für die Pumpe der
    //ungesperrte Handbetrieb aktiv ist und über das MP370 eingeschaltet wird, oder 
    //der Automatikbetrieb aktiv ist und das Einschaltniveau erreicht wurde.
    //In beiden fällen darf das NOT-AUS Relais nicht betätigt sein.
          U(    ; 
          U     M      1.0; 
          UN    M      1.2; 
          U(    ; 
          U     DB30.DBX    0.3; 
          FP    M     81.0; 
          )     ; 
          O     ; 
          U     M      1.1; 
          U     M     20.1; 
          )     ; 
          U     E      2.6; 
          =     #l_P1_EIN; 
    NETWORK
    TITLE =Auschaltbedingung Pumpe 1
    //Die Ausschaltbedingung ist erfüllt wenn für die Pumpe der
    //ungesperrte Handbetrieb aktiv ist und über das MP370 ausgeschaltet wird, oder
    //der Automatikbetrieb aktiv ist und das Ausschaltniveau erreicht wurde.
    //Die Ausschalbedingung ist ebenfalls erfüllt wenn die Pumpe schon gesperrt ist 
    //oder das NOT-AUS Relais angesprochen hat.
          U     M      1.0; 
          UN    M      1.2; 
          U(    ; 
          U     DB30.DBX    0.4; 
          FP    M     81.1; 
          )     ; 
          O     ; 
          U     M      1.1; 
          UN    M     20.1; 
          O     M      1.2; 
          ON    E      2.6; 
          =     #l_P1_AUS; 
    NETWORK
    TITLE =Pumpe einschalten
    //Die Pumpe wird eingeschaltet wenn die Einschaltbedingung erfüllt ist oder der 
    //Schwimmerschalter_Max angesprochen hat.
    //Der Befehl "EIN" wird rückgesetzt wenn die Ausschaltbedingung erfüllt ist und 
    //der Schwimmerschalter_Max nicht angesprochen hat,
    //die Notsteuerung aktiv wird oder das NOT-AUS Relais betätigt wird oder eine 
    //Störung der Pumpe vorliegt.
    //Ist der Einschaltbefehl und der Handbetrieb aktiv wird der Status der Pumpe
    //"Hand EIN" auf dem MP370 dargestellt.
          U(    ; 
          U(    ; 
          O     #l_P1_EIN; 
          O     E      2.4; 
          )     ; 
          S     DB81.DBX   30.2; 
          U(    ; 
          U     #l_P1_AUS; 
          UN    E      2.4; 
          ON    E      2.6; 
          O     M      1.3; 
          O     M     81.3; 
          )     ; 
          R     DB81.DBX   30.2; 
          U     DB81.DBX   30.2; 
          )     ; 
          U     M      1.0; 
          =     DB31.DBX    1.0; 
    NETWORK
    TITLE =Pumpe ausschalten
    //Die Pumpe wird Ausgeschaltet wenn die Ausschaltbedingung erfüllt ist, das 
    //NOT-AUS Relais betätigt wird, vom Notbetrieb zurückgeschaltet wird (nur wenn 
    //vorher Handbetrieb aktiv war) oder eine Störung der Pumpe vorliegt.
    //Der Befehl "AUS" wird rückgesetzt wenn die Einschaltbedingung erfüllt ist.
    //Ist der Ausschaltbefehl und der Handbetrieb aktiv wird der Status der Pumpe
    //"Hand AUS" auf dem MP370 dargestellt.
          U(    ; 
          U     #l_P1_EIN; 
          R     DB81.DBX   30.1; 
          U(    ; 
          O     #l_P1_AUS; 
          ON    E      2.6; 
          O(    ; 
          U     M      1.3; 
          FN    M     81.2; 
          )     ; 
          O     M     81.3; 
          )     ; 
          S     DB81.DBX   30.1; 
          U     DB81.DBX   30.1; 
          )     ; 
          U     M      1.0; 
          =     DB31.DBX    1.1; 
    NETWORK
    TITLE =Status-Meldungen
    //Die Statusmeldungen werden gebildet und ins Lokal Byte 1 geschrieben.
    //Je nach Priorität wird z.B. die Meldung "Pumpe Gesperrt" durch die Meldung
    //"Pumpe läuft im Notbetrieb" überschrieben. Höchste Priorität hat hier die 
    //Störmeldung.
    //Anschließend wird das Lokalbyte in den "Senden" Datenbaustein geschrieben.
    //Statusmeldungen Lokaldaten-Reset
          L     0; 
          T     LB     1; 
    //Status-Meldungen bilden
          U     DB81.DBX   30.2; 
          U     DB81.DBX    1.3; 
          =     #l_P1_Status_Lauft; 
    
          U     M      1.2; 
          =     #l_P1_Status_Sperr; 
    
          U     M      1.3; 
          U     DB81.DBX    1.3; 
          R     #l_P1_Status_Sperr; 
          R     DB81.DBX   30.2; 
          =     #l_P1_Status_Lauft_NOT; 
    
          U     M     81.3; 
          R     #l_P1_Status_Lauft_NOT; 
          R     #l_P1_Status_Sperr; 
          =     #l_P1_Status_Stoer; 
    
    //Status Meldungen Transferieren
          L     LB     1; 
          T     DB31.DBB    3; 
    END_FUNCTION
    Zitieren Zitieren Gelöst: Probleme mit Lokaldaten von FC  

  2. "Danke erstmal für die Antwort.

    Mir ist nur noch nicht klar warum die Lokaldaten beim Aufruf einen undefinierten Zustand haben können.
    Außerdem habei ch auch wohl vergessen noch eine Beobachtung zu erwähnen.
    Bei der online betrachtung (ohne vorherigen Lokaldatenreset) konnte ich beobachten das die undefinierte änderung gleichzeitig mit den werten in Akku 2 ändert (haben aber nicht denselben wert. Ich denke mal das das eher etwas mit der zyklischen bearbeitung zu tun hat.
    Bei einer vorherigen Programmversion hatte ich das Phenomän der sich ändernden Lokaldaten aber nicht. In dem besagten Baustein habe ich aber keine Änderung vorgenommen, sondern nur Änderungen der Analogwertverarbeitung in anderen Programmteilen. (Zusammenhang Analogwertverarbeitung ==> Änderung Akku2 ?)"


  3. #2
    Registriert seit
    30.08.2003
    Beiträge
    2.196
    Danke
    30
    Erhielt 258 Danke für 229 Beiträge

    Standard

    Hallo Oliver,

    Lokaldaten können bei Aufruf eines Bausteins einen unbestimmten Zustand haben und dürfen nur nach vorheriger Zuweisung abgefragt werden. Wenn du Bits setzt kann es passieren dass diese Bits schon beim Sprung in den Baustein 1 waren. Deshalb entweder mit Zuweisungen arbeiten (Zustand aus letztem Zyklus geht eh verloren) oder am Bausteinanfang initialieren. Wenn du nicht alle Bits aus dem Byte verwendest müssen auch die restlichen initialisiert werden.

    MfG
    André Räppel
    Zitieren Zitieren Lokaldaten  

  4. #3
    oliver2306 Gast

    Standard

    Danke erstmal für die Antwort.

    Mir ist nur noch nicht klar warum die Lokaldaten beim Aufruf einen undefinierten Zustand haben können.
    Außerdem habei ch auch wohl vergessen noch eine Beobachtung zu erwähnen.
    Bei der online betrachtung (ohne vorherigen Lokaldatenreset) konnte ich beobachten das die undefinierte änderung gleichzeitig mit den werten in Akku 2 ändert (haben aber nicht denselben wert. Ich denke mal das das eher etwas mit der zyklischen bearbeitung zu tun hat.
    Bei einer vorherigen Programmversion hatte ich das Phenomän der sich ändernden Lokaldaten aber nicht. In dem besagten Baustein habe ich aber keine Änderung vorgenommen, sondern nur Änderungen der Analogwertverarbeitung in anderen Programmteilen. (Zusammenhang Analogwertverarbeitung ==> Änderung Akku2 ?)

  5. #4
    Registriert seit
    10.12.2003
    Beiträge
    34
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    die Lokaldaten werden in der S7 nicht für jeden Baustein oder jede Instanz eines Bausteines fest reserviert, sondern beim Bausteinaufruf dynamisch im Lokaldaten-Stack angelegt. Wenn der Baustein abgearbeitet ist dann wird der Speicherbereich auf dem Stack wieder freigegeben. Das heißt beim Bausteinaufruf sind die Lokaldaten mit Werten vorbelegt, die ein anderer Baustein dort irgendwann mal reingeschrieben hat. Die Änderung der Lokaldaten zusammen mit dem AKKU-2 wie Du es beschrieben hast deutet darauf hin daß auch in dem Analogwert-Baustein Lokaldaten verwendet werden. (Ich weiß es nicht mehr ganz genau aber es kann sogar sein daß auch Ein- und Ausgangsparameter an FCs auf dem Lokaldaten-Stack abgelegt werden).
    m.f.G
    RonOro

Ähnliche Themen

  1. Lokaldaten
    Von S7 Frischling im Forum Programmierstrategien
    Antworten: 9
    Letzter Beitrag: 12.08.2013, 14:20
  2. Lokaldaten
    Von michael77 im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 24.11.2008, 16:07
  3. SCL und Lokaldaten
    Von derwestermann im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 14.03.2008, 11:53
  4. S5 Lokaldaten wie anlegen
    Von plc_tippser im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 30.01.2005, 11:54
  5. Nochmal Lokaldaten
    Von Ralle im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 24.09.2004, 16:00

Lesezeichen

Berechtigungen

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