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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 24

Thema: Glättung eines Analogwertes

  1. #11
    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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    würde dann in etwa so aussehen:

    Code:
    *
    FUNCTION_BLOCK "AVERAGING_BLOCK_LIM_SYNC"
    TITLE =AVERAGING BLOCK WITH LIMIT AND SYNCHRO
    //if the rInput inside the range and xSynchro on then calculate the average from 
    //an 8 value shift register every xTrigger-time else the rOutput are the old 
    //output
    //without synchro the accu will be filled
    //reset will zeroing the FIFO
    //
    //DATE:     19.02.2008
    //AUTHOR:   4lagig
    //VERSION:  V0.1 BasicVer
    AUTHOR : '4lagig'
    FAMILY : RealGF
    VERSION : 0.1
    
    
    VAR_INPUT
      xTrigger : BOOL ;    
      xSynchro : BOOL ;    
      xReset : BOOL ;    
      rInput : REAL ;    
      rLowCut : REAL ;    
      rDelta : REAL ;    
    END_VAR
    VAR_OUTPUT
      rOutput : REAL ;    
    END_VAR
    VAR
      xHelpFlag : BOOL ;    
      rAccu1 : REAL ;    
      rAccu2 : REAL ;    
      rAccu3 : REAL ;    
      rAccu4 : REAL ;    
      rAccu5 : REAL ;    
      rAccu6 : REAL ;    
      rAccu7 : REAL ;    
      rAccu8 : REAL ;    
      rOutpuAux : REAL ;    
      rHighX : REAL ;    
      rLowX : REAL ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE = 
    // 
    //_______INITIALIZATOR_______//
          U     #xReset; 
          SPB   _004; 
          L     #rInput; 
          L     #rLowCut; 
          <R    ; 
          ON    #xSynchro; 
          SPB   _005; 
    
    //_______RANGE LIMITS_______//
          L     #rOutpuAux; 
          L     #rDelta; 
          +R    ; 
          T     #rHighX; // High limit
          L     #rOutpuAux; 
          L     #rDelta; 
          -R    ; 
          T     #rLowX; // Low limit
    
    //_______TRIGGER_______//
          U     #xTrigger; 
          FP    #xHelpFlag; // One shot pulse
          SPBN  _006; // Do NOT jump if there is a pulse
    
    //_______HIGH FILTER_______//
          L     #rInput; 
          L     #rHighX; 
          >R    ; 
          SPB   _006; // Jump if input is too HIGH
    
    //_______LOW FILTER_______//
          L     #rInput; 
          L     #rLowX; 
          <R    ; 
          SPB   _006; // Jump if input is too LOW
    
    //_______SHIFTER_______//
    _005: L     #rAccu7; 
          T     #rAccu8; 
          L     #rAccu6; 
          T     #rAccu7; 
          L     #rAccu5; 
          T     #rAccu6; 
          L     #rAccu4; 
          T     #rAccu5; 
          L     #rAccu3; 
          T     #rAccu4; 
          L     #rAccu2; 
          T     #rAccu1; 
          L     #rAccu1; 
          T     #rAccu2; 
          L     #rInput; 
          T     #rAccu8; 
    
          SPA   _006; 
    
    //_______ZEROING_______//
    _004: L     0.000000e+000; 
          T     #rAccu1; 
          T     #rAccu2; 
          T     #rAccu3; 
          T     #rAccu4; 
          T     #rAccu5; 
          T     #rAccu6; 
          T     #rAccu7; 
          T     #rAccu8; 
    
    //_______AVERAGE VALUE CALCULATION_______//
    _006: L     #rAccu1; 
          L     #rAccu2; 
          +R    ; 
          L     #rAccu3; 
          +R    ; 
          L     #rAccu4; 
          +R    ; 
          L     #rAccu5; 
          +R    ; 
          L     #rAccu6; 
          +R    ; 
          L     #rAccu7; 
          +R    ; 
          L     #rAccu8; 
          +R    ; 
          L     8.000000e+000; 
          /R    ; 
          T     #rOutpuAux; 
          T     #rOutput; 
    
    //_______EN-EN0 MECHANISM_______//
          SET   ; 
          SAVE  ; 
    END_FUNCTION_BLOCK
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  2. #12
    Registriert seit
    11.10.2007
    Ort
    Allgäu
    Beiträge
    112
    Danke
    155
    Erhielt 14 Danke für 7 Beiträge

    Standard

    Hi hank12 - wenn ich Dich recht verstehe, möchtest Du im Digitalen das machen, was im Analogen sonst ein PT1-Tiefpass-Filter mit der Verstärkung 1 macht.

    Da kann ich Dir aus der Abtasttheorie helfen - geht sehr einfach und sehr effektiv - Du musst die Theorie gar nicht verstehen - nur anwenden.

    Das Rezept: x(n) = a * x(n-1) + b * y(n-1).

    a und b sind konstante Koeffizienten *),
    x(n) ist der Ausgangswert des Filters zum momentanen Zeitpunkt t=n*H, H ist die Zeit zwischen zwei Berechnungen (Abtastschrittweite) kann mit OB35 elegant festgelegt werden, n ist eine mit der Zeit ganze fortlaufende Zahl.
    y ist der Eingangswert, y(n-1) ist demnach der Eingangswert einen Takt vor y(n).

    So, und der Clou sind die Koeffizienten a, b: a=exp(-H/T) und b= 1-a, wobei T die von Dir gewählte Zeitkonstante Deines PT1-Filters ist.

    Du bestimmst also einmal(!) (z.B. im OB100) die Koeffizienten a und b.
    Spendierst 2 REAL-Speicherstellen für die alten Werte x(n-1) und y(n-1)
    und berechnest mit a*x(n-1) + b*y(n-1) den neuen Ausgangswert x(n), der dann im nächsten Rechenschritt wieder bei x(n-1) eingefüllt wird. usw.

    Also mit gerade mal 2 Speicherstellen, 2 Koeffizienten, 2 Multiplikationen und 1 Addition hast Du ein Digitales PT1-Filter!

    Nebenbei bemerkt - mit Hilfe der Abtasttheorie lässt sich jedes analoge Filter sehr effektiv in ein Digitales Filter abbilden - man muss nur wissen, wie die Koeffizienten bestimmt werden (das ist das "know-how", das wir momentan zum Nulltarif nach China liefern ...)

    Gruß
    Feng

    *) Da gibt es Programmierer, die im Programm diese Koeffizienten bei jedem Rechenschritt ausrechnen lassen! Ist ja nicht falsch - und kein Schwein merkt von außen diese Sünde - man sollte denen 20 Stockschläge verpassen (in Arabien würden die Fingerkuppen abgeschnitten werden ...)
    Geändert von Feng (15.07.2008 um 14:10 Uhr)

  3. Folgende 2 Benutzer sagen Danke zu Feng für den nützlichen Beitrag:

    /*Matthias*/ (15.07.2008),Onkel Dagobert (14.07.2008)

  4. #13
    Registriert seit
    11.10.2007
    Ort
    Allgäu
    Beiträge
    112
    Danke
    155
    Erhielt 14 Danke für 7 Beiträge

    Standard

    Hi hank12 -
    Geändert von Feng (14.07.2008 um 21:34 Uhr)

  5. #14
    Registriert seit
    06.10.2003
    Beiträge
    3.414
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard

    Hallo Feng,

    schön erklärt, aber zusätzliche Realwerte muss man dabei nicht speichern.

    x(n) = a * x(n-1) + b * y(n-1)

    x(n-1) ist der berechnete Ausgangswert des letzen Zyklus der hier rekursiv neu berchnet wird
    y(n-1) ist der aktuelle Eingangswert der Funktion.


    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  6. Folgender Benutzer sagt Danke zu Onkel Dagobert für den nützlichen Beitrag:

    Feng (14.07.2008)

  7. #15
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.227
    Danke
    534
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von Feng Beitrag anzeigen
    (das ist das "know-how", das wir momentan zum Nulltarif nach China liefern ...)

    Gruß
    Feng
    Meinst du das im Ernst? Das haben wir schon vor 20 Jahren an der Uni beigebracht bekommen (ok, das meißte ist schon wieder weg ) und das steht in jedem Lehrbuch über digitale Regelungstechnik. Immerhin, lesen können die Chinesen auch.

    PS: Aber im Prinzip verstehe ich schon was du meinst, mir ist auch nicht wohl bei diesen gedankenlosen Firmenverlegungen etc.
    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. #16
    Registriert seit
    11.10.2007
    Ort
    Allgäu
    Beiträge
    112
    Danke
    155
    Erhielt 14 Danke für 7 Beiträge

    Standard

    Ja ja - ralle - Du hast das schon richtig verstanden - vor 40 Jahren konnten die Chinesen allenfalls Fahrräder herstellen - heute bauen sie Festplatten etc - und demnächst werden wir bei denen abschauen ... falls sie uns lassen ...

  9. #17
    Registriert seit
    11.10.2007
    Ort
    Allgäu
    Beiträge
    112
    Danke
    155
    Erhielt 14 Danke für 7 Beiträge

    Standard

    Onkel Dagobert Du hast (fast) Recht - aber zumindest 1 REAL-Wert muss man doch bereitstellen für den alten x(n-1) - oder man trickst mit den Akkus ...

  10. #18
    Registriert seit
    06.10.2003
    Beiträge
    3.414
    Danke
    451
    Erhielt 506 Danke für 408 Beiträge

    Standard

    Hallo Feng,

    naja, dass man den berechneten Wert irgendwo abspeichern muss ist klar. Es ist ja der gedämpfte Messwert, den man woanders im Programm benötigt. Wenn man diesen als IN_OUT an die FC übergibt, kann man ihn sowohl als X(n) als auch als x(n-1) in der Berechnung verwenden. Vor der Berechnung ist es der "Altwert", nach der Berechnung der "Neuwert". Aber es ist dieselbe Variable.


    Gruß, Onkel
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

  11. #19
    Registriert seit
    23.08.2006
    Ort
    Benningen
    Beiträge
    13
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Hank12,

    ich habe mal einen Baustein FB150 geschrieben, der ein VZ1 Glied realisiert. War ursprünglich zur Sollwertglättung gedacht, deshalb die entsprechenden Bezeichnungen. Aufruf sollte im zeitgesteuerten OB erfolgen, Zeitwert bei Parameter Tsample in Sekunden eingeben.
    Im Anhang die Quelle.

    Gruß Siggi
    Angehängte Dateien Angehängte Dateien
    • Dateityp: zip VZ1.zip (690 Bytes, 96x aufgerufen)

  12. #20
    Registriert seit
    18.03.2008
    Beiträge
    267
    Danke
    3
    Erhielt 26 Danke für 26 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hab soeben den Algorithmus eines einpoligen digitalen Tiefpass in einem anderen Forum gepostet, allerdings in Hochsprachencode...

    http://www.progforum.com/showthread.php?t=8468

Ähnliche Themen

  1. Konfiguration eines PG
    Von Magni im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 01.08.2010, 14:47
  2. Verwendungsstellen eines UDT
    Von Bretti im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 03.09.2009, 14:32
  3. Aufruf eines Date_and_Time eines DB's
    Von hank12 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 08.07.2009, 10:33
  4. Antworten: 40
    Letzter Beitrag: 08.12.2008, 13:38
  5. Auslesen des Analogwertes Et200s
    Von BaalX im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 21.02.2008, 18:21

Lesezeichen

Berechtigungen

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