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

Seite 2 von 5 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 46

Thema: Mittelwertbildung

  1. #11
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von pinolino Beitrag anzeigen
    Soweit ich es verstanden habe, wird das Array von hinten nach vorne ( Platz 8 bis Platz 1) aufgefüllt.
    Korrekt!
    Zitat Zitat von pinolino Beitrag anzeigen
    Beim ersten Durchlauf des Programms steht doch für die Anweisung ( Zeile 6 bis Zeile 8 ) noch gar kein Wert zur Verfügung. Der erste Wert wird doch erst in der letzten Anweisungszeile geladen und in das Array geschrieben.
    Ja, macht ja nix dann werden halt die Nullwerte rausgeschoben.
    Zitat Zitat von pinolino Beitrag anzeigen
    Sehe ich es richtig, dass der 8. Wert (also der jeweils neue) direkt in das 7. Feld des Arrays (T #aRealArray[7]) geschrieben wird?
    3) Ist das Array dann wie folgt deklariert:
    ARRAY [0..7] ?
    Ganz genau, Du könntest natürlich die Array Felder mit 1..8 benennen dann wäre es leichter lesbar.

    Die erste 8 ist klar?
    Da sich das Ganze in einem Instanz DB abspielt wurde ja im Deklarationsteil das Array gesetzt. Und diese Startadresse ist in dem Beispiel die Adresse 8
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  2. #12
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    Zitat Zitat von Paule Beitrag anzeigen
    Die erste 8 ist klar?
    Da sich das Ganze in einem Instanz DB abspielt wurde ja im Deklarationsteil das Array gesetzt. Und diese Startadresse ist in dem Beispiel die Adresse 8
    habe es mittlerweile in besagtem beispiel angepasst, da lautet es jetzt

    Code:
    *
          LAR1  P##aRealArray               //Startadresse des Arrays ins Adressregister laden
    was die funktion besser beschreibt und sachlich richtiger ist ... danke für den hinweis pinolino

    ansonsten, ja, das ist ein array[0..7] ... ich programmiere! da fängt die welt mit 0 an! for i=0 to 7... U M100.0 usw.
    Geändert von vierlagig (25.01.2010 um 18:43 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. #13
    pinolino ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.10.2007
    Beiträge
    261
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Vielen Dank für deine Hilfe, Paule!

    Zitat Zitat von Paule Beitrag anzeigen
    Die erste 8 ist klar?
    Da sich das Ganze in einem Instanz DB abspielt wurde ja im Deklarationsteil das Array gesetzt. Und diese Startadresse ist in dem Beispiel die Adresse 8
    Ja, denke diese erste 8 ist klar... somit könnte man für dieses Beispiel sagen, dass das Daten-Instanz-Doppelwort 8 des Instanz-DB´s die Startadresse angibt.

    Nur, wo ist denn definiert, dass diese Startadresse ( also das DID8 ) dem Array-Feld 7 zugeordnet ist? Wo ist der Bezug zwischen Startadresse und Array-Feld?

    Danke
    pinolino
    Geändert von pinolino (25.01.2010 um 22:05 Uhr)

  4. #14
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von pinolino Beitrag anzeigen
    Nur, wo ist denn definiert, dass diese Startadresse ( also das DID8 ) dem Array-Feld 7 zugeordnet ist? Wo ist der Bezug zwischen Startadresse und Array-Feld?
    Die Startadresse ist ja nicht dem Array-Feld 7 zu geordnet sondern dem Feld 1
    Auf das Array-Feld 7 wird ja direkt zugegriffen.
    Die direkte Zuweisung auf eine Adresse ( in diesem Fall 8 ) ist auch nicht sauber.
    Aber 4L hat ja die bessere Lösung schon an seinem Beitrag geändert.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  5. #15
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von spezy Beitrag anzeigen
    Das Programm ist keine Mittelwertbildung, sondern ein Schieberegister.
    Der erste Wert wird gelöscht.
    Die 2. bis 8. Werte werden an Stelle 1 - 7 verschoben
    und der neue Wert (#rInput) wie an die 8. Stelle geschrieben.

    Beim Schieben müssen die Real-Werte noch addiert und durch 8 dividiert werden!
    He Pinolino,
    jetzt wurden Dir hier schon verschiedene Lösungen angeboten.
    Ist ja OK das Du Dich für die Lösung von 4L entschieden hast, aber da hat der Spezy mit seinem erst Beitrag absolut recht, die Daten hast Du jetzt erstmal verschoben.
    Von einem Mittelwert bist Du noch eine Addition und einer Division entfernt.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  6. #16
    Registriert seit
    24.04.2006
    Beiträge
    23
    Danke
    3
    Erhielt 2 Danke für 2 Beiträge

    Standard

    In der CFC Library unter ELEM_300 gibt es einen fertigen Baustein zu Mittelwertbildung. FB4 "SAMP_AVE". Den benutze ich immer. Rufe ihn in einem Weckalarm-OB auf, um eine vernünftige Zeitbasis zu haben.

    Beschreibung aus der Hilfe zum FB4:

    SAMP_AVE

    Funktion

    Dieser Baustein gibt am Ausgang den Mittelwert der letzten N Eingangswerte aus.
    OUT = (Ink + Ink -1 + ... + Ink -n + 1) / N
    wobei Ink der aktuelle Eingangswert ist. Die Anzahl N der Eingangswerte muss die Bedingung
    0 < N < 33
    erfüllen.

    Anlaufverhalten

    Bei Anlauf und Erstlauf wird jedes Element des Buffers für IN- und OUT-Werte auf 0 gesetzt.

    Gruß Buster
    Zitieren Zitieren Benutze fertigen Baustein SAMP_AVE  

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

    pinolino (26.01.2010)

  8. #17
    pinolino ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.10.2007
    Beiträge
    261
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke nochmals für eure Erklärungen!

    Das mit dem Schieben habe ich jetzt soweit verstanden... habe mir dazu die einzelnen Array-Felder mit ihren dazugehörigen Adressen notiert :

    Array-Feld 0 → DID [AR1, P#0.0] → 1. Wert

    Array-Feld 1 → DID [AR1, P#4.0] → 2. Wert

    Array-Feld 2 → DID [AR1, P#8.0] → 3. Wert

    Array-Feld 3 → DID [AR1, P#12.0] → 4. Wert

    Array-Feld 4 → DID [AR1, P#16.0] → 5. Wert

    Array-Feld 5 → DID [AR1, P#20.0] → 6. Wert

    Array-Feld 6 → DID [AR1, P#24.0] → 7. Wert

    Array-Feld 7 → DID [AR1, P#28.0] → 8. Wert


    @Paule:
    Ja stimmt schon, dass bereits mehrere Lösungen aufgezeigt wurden. Mir geht es aber auch darum, die Sache mit den Pointern und Arrays zu verstehen und nachvollziehen zu können, da dies Neuland für mich ist. Denke, wenn ich das Prinzip verstanden habe, dann verstehe ich auch die anderen Codes...


    So, nun noch ein Problem:

    Wollte das Ganze gerne mal mit PLCSIM testen - aber sobald ich im FB1 auf den Beobachtungsmodus klicke, geht die CPU in Stop! Wo könnte das Problem liegen?

    Was ich gemacht habe:

    1.
    FB1 angelegt und den bekannten Code programmiert. In dem Deklarationsbereich des FBs habe ich "aRealArray" als statische Variable angelegt (siehe Bild!).

    2.
    Durch den Aufruf "Call FB1, DB1" im OB1 hat sich der Instanz-DB1 lt. Bild angelegt.

    Wäre super nett, wenn ich noch einen Tipp bekommen könnte, was ich hier falsch gemacht habe...

    Vielen Dank - auch für eure Geduld mit mir!
    pinolino
    Angehängte Grafiken Angehängte Grafiken

  9. #18
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    1. diagnosepuffer?
    2. ich tippe darauf, dass du den DB1 nicht mit übertragen hast.
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  10. #19
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    jetz hab ich mir dann auch mal die bilder angeguckt

    deine anfangsadresse ist NICHT 8
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  11. #20
    pinolino ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    19.10.2007
    Beiträge
    261
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke vierlagig,

    habe den FB1, den DB1 und den OB1 geladen.


    Der Diagnosepuffer weist auf zwei Probleme hin:

    1)
    STOP durch Programmierfehler (OB nicht geladen oder nicht möglich, bzw. kein FRB vorhanden )
    Unterbrechungstelle im Anwenderprogramm: Zyklisches Programm (OB 1)
    Prioritätsklasse: 1
    FB-Nummer: 1
    Bausteinadresse: 16
    Bisheriger Betriebszustand: RUN
    Angeforderter Betriebszustand: STOP (intern)
    interner Fehler, kommendes Ereignis


    2)
    Bereichslängenfehler beim Lesen
    Instanz-DB, Doppelwortzugriff, Zugriffsadresse: 32
    FB-Nummer: 1
    Bausteinadresse: 16
    Angeforderter OB: Programmierfehler-OB (OB 121)
    OB nicht vorhanden oder gesperrt oder nicht startbar im aktuellen Betriebszustand
    interner Fehler, kommendes Ereignis


    Leider sagt mir das nicht so viel - kann man daraus ein Problem feststellen?

    Danke, pinolino

Ähnliche Themen

  1. Erweiterte Mittelwertbildung
    Von Full Flavor im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 18.10.2011, 22:30
  2. Mittelwertbildung aus integer
    Von daudel im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 14.11.2010, 14:56
  3. Mittelwertbildung SIWAREX U
    Von petzi im Forum Simatic
    Antworten: 35
    Letzter Beitrag: 20.06.2010, 10:42
  4. Mittelwertbildung S5-95U
    Von demo im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 28.08.2007, 21:10
  5. Mittelwertbildung
    Von Servomaster im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 18.10.2005, 06:42

Lesezeichen

Berechtigungen

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