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

Ergebnis 1 bis 9 von 9

Thema: Rechenalgorithmen in S7

  1. #1
    Registriert seit
    10.01.2008
    Beiträge
    13
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    bin gerade an einem Projekt dran und bin mir noch nicht sicher ob ich Rechenalgorithmen in C oder in S7 schreiben soll.
    Es geht um Sachen wie
    -Gradengleichung aus n Punkte
    -Kreisgleichung aus n Punkte
    -Fourieranalyse
    ich würde das ganze gerne in S7 schreiben. Gibt es denn Bibliotheken die dass können?
    Was mein ihr dazu?
    Zitieren Zitieren Rechenalgorithmen in S7  

  2. #2
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.626
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Es ist ein klare Fall für SCL. SCL ist sehr Pascal-ähnlich.
    Selber schreibe ich z.B. Kurvenfitting mit Least-Squares Algoritmen in SCL.

    SCL ist ein Option zu STEP7. Evtl ist ein Upgrade von STEP7 auf STEP7 Pro günstiger. Dann bekommt man SCL, GRAPH und PLCSIM in ein 'Bundle'.

    Ob es fertige 'Bilbliotheken' gibt mit die gewünschte Funktionen fix und fertig weiss ich nicht.
    Jesper M. Pedersen

  3. #3
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.487
    Danke
    1.141
    Erhielt 1.243 Danke für 974 Beiträge

    Standard

    Zitat Zitat von figo80 Beitrag anzeigen
    Hallo Leute,

    bin gerade an einem Projekt dran und bin mir noch nicht sicher ob ich Rechenalgorithmen in C oder in S7 schreiben soll.

    Was mein ihr dazu?
    Schau dir mal SCL an.
    Ist eine Hochsprache für S7 und damit kann man schon recht viel anstellen.

    Gruß
    Dieter

  4. #4
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Eine Fourier-Analyse in S7-SCL hatten wir hier schon einmal:

    http://www.sps-forum.de/showthread.php?t=17105

    Gruß Kai

  5. #5
    figo80 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.01.2008
    Beiträge
    13
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    SCL hatte ich mir auch schon angeschaut und installiert, ich muss jetzt mal in Experimentierphase gehen da ich SCL noch nie programmiert habe.
    Scheint mir aber auch der richtige Weg zu sein, in AWL würde man verrückt werden.

    @Kai
    Der Beitrag über FFT ist sehr Interresant, da muss ich mal einarbeiten und testen ob dass das richtige für mich ist.

    Hat vielleicht jemand schonmal mit was in Richtung Geradengleichung oder Kurvengleichung gemacht?
    Die Algorithmen müssten ja bekannt sein nur bin ich mir nicht sicher ob das die Rechenfähigkeit einer SPS sprengt.
    Da ich z.B. aus einen Kreis mit 360 Messpunkte den radius und die Mittelpunktkoordinaten wissen sollte!
    Als SPS habe ich eine CPU 319F.

  6. #6
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.727
    Danke
    398
    Erhielt 2.404 Danke für 2.002 Beiträge

    Standard

    Hallo,
    die von dir gewünschten Funktionen sind grundsätzlich mit der SPS machbar - eine leistungsfähige CPU vorausgesetzt ...
    Du darfst dennoch bei komplizierteren Berechnungen (wie z.B. FFT-Analyse) nicht außer Acht lassen, das deine Zykluszeit ganz erheblich ansteigt - das sollte aber keine Hinderungsgrund sein ...

    Gruß
    LL

  7. #7
    figo80 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.01.2008
    Beiträge
    13
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ja dass mit der Zykluszeit ist verständlich, während der Rechnungen müssen keine Steuerungstechnische Aufgaben gemacht werden somit ist es eigentlich egal.

  8. #8
    figo80 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    10.01.2008
    Beiträge
    13
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von JesperMP Beitrag anzeigen
    Es ist ein klare Fall für SCL. SCL ist sehr Pascal-ähnlich.
    Selber schreibe ich z.B. Kurvenfitting mit Least-Squares Algoritmen in SCL.

    @JesperMP
    Wäre es möglich dein Least-Squares Algorithmus in SCL zu posten.
    Könnte ich eventuell auch gebrauchen und dass würde mir weiterhelfen mich in SCL einzuarbeiten. Wäre echt spitze!

  9. #9
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.626
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hier ist ein Beispiel von lineare kurvenfitting.
    Diese FB addiert eine Messpunkt.
    Das durchscleifen von eine Menge von Messpunkte muss durch den aufrufene Baustein passieren.
    Vor eine neue kurvenfitting muss man den Reset Eingang verwenden.

    Code:
    FUNCTION_BLOCK FB_KURVFIT
    // by Jesper M. Pedersen
    // Curvefits logged points of (x,y) to y=f(x)=a+b(x).
    // The coefficients a and b are found by running through all points of x and y.
    // The "weight" allows to let some points be more important than others, i.e. for "aging" of datapoints for example.
    // If "weighing" or "aging" is not to be used, simply set rWeight:=1.0.
    // The looping through of the datapoints is done in the calling block.
    // This block updates one point per call.
    // Need to be done: Calculating a "quality" of the approximated curve.
    VAR_INPUT
        biReset : BOOL ;
        rx : REAL ;
        ry : REAL ;
        rWeight : REAL ;
    END_VAR
    VAR_OUTPUT
        ra : REAL ;
        rb : REAL ; 
    END_VAR
    VAR_TEMP
        rDivisor :REAL ;
        rWeight_squared : REAL ;
    END_VAR
    VAR
        rn : REAL ;
        rsum_y : REAL ;
        rsum_x : REAL ;
        rsum_xsquared : REAL ;
        rsum_xy : REAL ;
        
    END_VAR
    IF biReset THEN
        rn := 0.0 ;
        rsum_y := 0.0 ;
        rsum_x := 0.0 ;
        rsum_xsquared := 0.0 ;
        rsum_xy := 0.0 ;
        ra := 0.0 ;
        rb := 0.0 ;
    END_IF ;
    IF NOT biReset THEN
        IF NOT (rx=0.0 AND ry=0.0) THEN // ignore if empty values
            // first add up all summed values
            rn := rn + rWeight ;  
            rsum_y := rsum_y + (rWeight * ry) ;
            rsum_x := rsum_x + (rWeight * rx) ;
            rWeight_squared := rWeight * rWeight ;
            rsum_xsquared := rsum_xsquared + (rWeight * rx * rx) ;
            rsum_xy := rsum_xy + (rWeight * rx * ry) ;
            //then do the actual curvefit
            rDivisor := (rn * rsum_xsquared) - (rsum_x * rsum_x) ;
            ra := ((rsum_y * rsum_xsquared) - (rsum_x * rsum_xy))/rDivisor ;
            rb := ((rn * rsum_xy) - (rsum_x * rsum_y))/rDivisor ;
        END_IF ;
    END_IF  ;
    END_FUNCTION_BLOCK
    Jesper M. Pedersen

Lesezeichen

Berechtigungen

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