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

Ergebnis 1 bis 6 von 6

Thema: Wieder Multiinstanz... Mittelwert Bildung

  1. #1
    Registriert seit
    06.10.2009
    Ort
    Hessen
    Beiträge
    560
    Danke
    24
    Erhielt 43 Danke für 40 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich würde gern aus meinem Mittelwert Baustein als Multiinstanz aufrufen.

    Sobald ich das mache arbeitet er aber nichtmehr....

    Ich find leider den Fehler nicht.

    Code:
    FUNCTION_BLOCK "Real_Mittelwert_bilden"
    TITLE =
    VERSION : 0.1
    
    
    VAR_INPUT
      IN : REAL ;    //Messwert
      Anz_Werte : INT ;    //Anzahl der Messwerte [1-20]
    END_VAR
    VAR_OUTPUT
      OUT : REAL ;    
    END_VAR
    VAR
      Speicher : REAL ;    
      Zaehler : INT ;    
      Zaehler1 : INT ;    
      Wert_1 : REAL ;    
      Wert_2 : REAL ;    
      Wert_3 : REAL ;    
      Wert_4 : REAL ;    
      Wert_5 : REAL ;    
      Wert_6 : REAL ;    
      Wert_7 : REAL ;    
      Wert_8 : REAL ;    
      Wert_9 : REAL ;    
      Wert_10 : REAL ;    
      Wert_11 : REAL ;    
      Wert_12 : REAL ;    
      Wert_13 : REAL ;    
      Wert_14 : REAL ;    
      Wert_15 : REAL ;    
      Wert_16 : REAL ;    
      Wert_17 : REAL ;    
      Wert_18 : REAL ;    
      Wert_19 : REAL ;    
      Wert_20 : REAL ;    
    END_VAR
    VAR_TEMP
      Anzahl_Werte : INT ;    
      Adr_1 : DWORD ;    
      Adr_2 : DWORD ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =Anzahl Werte begrenzen
    
          L     #Anz_Werte; 
          L     1; 
          <I    ; 
          SPBN  _1; 
          L     1; 
          T     #Anzahl_Werte; 
          SPA   _3; 
    _1:   L     #Anz_Werte; 
          L     20; 
          >I    ; 
          SPBN  _2; 
          L     20; 
          T     #Anzahl_Werte; 
          SPA   _3; 
    _2:   L     #Anz_Werte; 
          T     #Anzahl_Werte; 
    _3:   NOP   0; 
    NETWORK
    TITLE =Reset Zähler
    
    
    
          U(    ; 
          L     #Zaehler; 
          L     #Anzahl_Werte; 
          >=I   ; 
          )     ; 
          SPBNB _001; 
          L     0; 
          T     #Zaehler; 
    _001: NOP   0; 
    NETWORK
    TITLE =Wert in Register schreiben
    
          L     #Zaehler; 
          L     32; 
          *I    ; 
          L     P#18.0; // Anfangsadresse Register
          +D    ; 
          T     #Adr_1; 
    
    //   Wert in Speicherplatz
          L     #IN; 
          T     DID [#Adr_1]; 
    
    // Zaehler erhöhen
          L     #Zaehler; 
          L     1; 
          +I    ; 
          T     #Zaehler; 
    NETWORK
    TITLE =Mittelwert bilden
    
          L     P#18.0; 
          T     #Adr_2; 
    
          L     0.000000e+000; 
          T     #Speicher; 
    
          L     #Anzahl_Werte; 
    Anf:  T     #Zaehler1; 
    
    // Werte summieren
          L     DID [#Adr_2]; 
          L     #Speicher; 
          +R    ; 
          T     #Speicher; 
    
    // Adresse inkrementieren
          L     #Adr_2; 
          L     P#4.0; 
          +D    ; 
          T     #Adr_2; 
    
    // Zaehler degrementieren
          L     #Zaehler1; 
          LOOP  Anf; 
    
    // Mittelwert bilden
          L     #Speicher; 
          L     #Anzahl_Werte; 
          ITD   ; 
          DTR   ; 
          /R    ; 
          T     #OUT; 
    END_FUNCTION_BLOCK
    Gruß
    Das, was man weiß, hat doppelten Wert, wenn man zugleich das, was man nicht weiß, nicht zu wissen eingesteht.
    Zitieren Zitieren Wieder Multiinstanz... Mittelwert Bildung  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Code:
    NETWORK
    TITLE =Wert in Register schreiben
    
          L     #Zaehler; 
          L     32; 
          *I    ; 
          L     P##Wert_1; // Anfangsadresse Register
    
    [...]
    
    NETWORK
    TITLE =Mittelwert bilden
    
          L     P##Wert_1; 
          T     #Adr_2; 
    
    [...]
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    c.wehn (25.10.2012)

  4. #3
    Avatar von c.wehn
    c.wehn ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    Hessen
    Beiträge
    560
    Danke
    24
    Erhielt 43 Danke für 40 Beiträge

    Standard

    Okay, das sehe ich ein ist aufjedenfall schonmal ein Schritt in die richtige Richtung.
    Leider funktioniert es immer noch nicht!
    Man erkennt immernoch das der FB3 auf die Adressen des FB4's schreibt an der stelle wo du mich korrigiert hast!
    Das, was man weiß, hat doppelten Wert, wenn man zugleich das, was man nicht weiß, nicht zu wissen eingesteht.

  5. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.191
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    OK, dann so:
    Code:
    VAR_TEMP
      Anzahl_Werte : INT ;    
      Adr_1 : DWORD ;    
      Adr_2 : DWORD ;    
      Adr_Werte : DWORD ;    
    END_VAR
    BEGIN
    
    [...]
    
    NETWORK
    TITLE =Wert in Register schreiben
    //Adresse Werte-Array der Multiinstanz brechnen
          TAR2                              //Offset Multiinstanz
          UD    DW#16#FFFFFF                //Bereichskennung entfernen
          L     P##Wert_1                   //Adresse Werte-Array in dieser Instanz
          +D                                //dazuaddieren -> Adresse Array in Multiinstanz
          T     #Adr_Werte                  //merken
    
          L     #Zaehler; 
          L     32; 
          *I    ; 
          L     #Adr_Werte; // Anfangsadresse Register
    
    [...]
    
    NETWORK
    TITLE =Mittelwert bilden
    
          L     #Adr_Werte; 
          T     #Adr_2; 
    
    [...]
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    c.wehn (25.10.2012)

  7. #5
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Sollte nicht bei einer Multiinstanz noch das AR2 dazu addiert werden, das ja den Offset für den jeweiligen Multiinstanz-FB enthält oder lädt man diesen Offset mit L P##... gleich mit? Das würde ich mal ausprobieren.

    Edit: Ah, ich seh grad Harald schlägt das auch vor.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  8. #6
    Avatar von c.wehn
    c.wehn ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    06.10.2009
    Ort
    Hessen
    Beiträge
    560
    Danke
    24
    Erhielt 43 Danke für 40 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Funktioniert jetzt auch. Danke nochmal... sonst müsste ich die Steuerung mit lauter DB's unübersichtlich vollknallen!
    Das, was man weiß, hat doppelten Wert, wenn man zugleich das, was man nicht weiß, nicht zu wissen eingesteht.

Ähnliche Themen

  1. mittelwert berechnung
    Von candemirkorkmaz im Forum Sonstige Steuerungen
    Antworten: 1
    Letzter Beitrag: 27.07.2011, 13:11
  2. Ringpuffer mit Mittelwert
    Von taucherd im Forum Simatic
    Antworten: 28
    Letzter Beitrag: 19.05.2011, 23:30
  3. Mittelwert von zehn Temperaturen bilden
    Von husox81 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 22.11.2010, 15:03
  4. Mittelwert bilden für einen DB-Bereich
    Von GFI im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 03.09.2009, 17:32
  5. Mittelwert bilden (von zb 5 SPS-Zyklen)
    Von Matthias O. im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 05.01.2007, 14:21

Lesezeichen

Berechtigungen

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