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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Problem mit floating point Operationen

  1. #1
    Registriert seit
    01.09.2015
    Beiträge
    72
    Danke
    10
    Erhielt 3 Danke für 3 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Tag,

    ich versuche eigentlich nur aus 3 Wertpaaren den Leistungsfaktor, also lambda=|P|/S, mit einem FB zu berechnen. Jedoch schmiert mir bei der Ausführung das gesamte System ab. Nutze übrigens TC 3.1 auf einem C5210.

    Nun zu meinem FB
    Code:
    FUNCTION_BLOCK FB_Power_Factor
    VAR_INPUT
        fl32_P1     :REAL;
        fl32_P2     :REAL;
        fl32_P3     :REAL;
        
        fl32_S1     :REAL;
        fl32_S2     :REAL;
        fl32_S3     :REAL;
    END_VAR
    VAR_OUTPUT
        fl32_PF1     :REAL;
        fl32_PF2     :REAL;
        fl32_PF3     :REAL;
    END_VAR
    VAR
        dummy :ARRAY[1..3]OF REAL;
    END_VAR
    Code:
    dummy[1]:=ABS(fl32_P1);
    dummy[2]:=ABS(fl32_P2);
    dummy[3]:=ABS(fl32_P3);
    
    fl32_PF1:=(dummy[1]/fl32_S1);
    fl32_PF2:=(dummy[2]/fl32_S2);
    fl32_PF3:=(dummy[3]/fl32_S3);
    Als Fehler erscheint daraufhin folgendes
    fehler1.jpg
    Außerdem kommt noch der Fehler "Ads-Error 0x12:Port is disabled" dies hat jedoch damit zu tun, dass TwinCAT in den "Exceptionmode"(gelbes Symbol) wechselt.
    Hat vielleicht jemand einen Tipp für mich?

    MfG

    Bone
    Zitieren Zitieren Problem mit floating point Operationen  

  2. #2
    Registriert seit
    24.02.2009
    Beiträge
    1.244
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Division durch Null mag kein Rechner. Ich würde da auch abschmieren.....

    An den Fehlermeldungen könnte Beckhoff aber noch arbeiten. /0 Exceptions sollte man schon als Klartext erwarten können.
    Sänd from mei Kombjudder mitse Dastadurr.

  3. Folgender Benutzer sagt Danke zu MasterOhh für den nützlichen Beitrag:

    bone666 (24.02.2016)

  4. #3
    Registriert seit
    29.06.2015
    Beiträge
    33
    Danke
    2
    Erhielt 7 Danke für 6 Beiträge

    Standard

    Ganz allgemein: Sobald etwas geteilt werden soll, dass ganze in eine IF-Anweisung packen, den Teiler mit Null vergleichen und sonst eine Fehlermeldung bringen. Direkt angewöhnen und nie vergessen.

  5. Folgender Benutzer sagt Danke zu b4w3f für den nützlichen Beitrag:

    bone666 (24.02.2016)

  6. #4
    Registriert seit
    01.09.2015
    Beiträge
    72
    Danke
    10
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Danke für die schnellen Antworten. Dachte mir schon so etwas. Jetzt muss ich mal gucken wo ich den Bock eingebaut habe -.-

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

    Standard

    Zitat Zitat von b4w3f Beitrag anzeigen
    Ganz allgemein: Sobald etwas geteilt werden soll, dass ganze in eine IF-Anweisung packen, ...
    Echt jetzt? Gibt es unter Codesys wirklich keine andere Möglichkeit? Was bedeutet in diesem Fall "Abschmieren"?
    Es gibt viel mehr Leute, die freiwillig aufgeben, als solche, die echt scheitern.
    Henry Ford

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

    LargoD (24.02.2016)

  9. #6
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Standard

    Zitat Zitat von Onkel Dagobert Beitrag anzeigen
    Echt jetzt? Gibt es unter Codesys wirklich keine andere Möglichkeit? Was bedeutet in diesem Fall "Abschmieren"?
    Wenn man es nicht garantieren kann, dass da keine Null im Nenner steht, muss man schon das ganze vor der Division überprüfen. Das überlebt sonst kein mir bekanntes "RohProgramm" System.

    Interessant wird es bei der SPS, was macht man denn im Fall des Falles! Ich habe schon etliche Programme als Revisor gesehen, die da keine Antwort für im Code haben.
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren Teilen durch Null kann nur der Mensch  

  10. #7
    Registriert seit
    01.09.2015
    Beiträge
    72
    Danke
    10
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Morgen allerseits

    @ Onkel Dagobert: Abschmieren meint in meinem Fall, dass sich mein System aus dem Runmode in den Exceptionmode versetzt und ich neustarten muss.

    Habe das Problem übrigens gefunden, habe falsche Variablen verknüpft, sodass ich dachte, dass eig. ein Wert >0 anliegen müsste, dem war jedoch nicht so.

  11. #8
    Registriert seit
    13.12.2011
    Beiträge
    1.423
    Danke
    147
    Erhielt 161 Danke für 152 Beiträge

    Standard

    Hallo bone666,
    den Absturz kannst Du allerdings verhindern indem Du eine Überprüfungsfunktion hinzufügst, diese wird automatisch aufgerufen wenn ein DivByZero auftritt.

  12. #9
    Registriert seit
    01.09.2015
    Beiträge
    72
    Danke
    10
    Erhielt 3 Danke für 3 Beiträge

    Standard

    Hi oliver,

    was genau meinst du mit einer Überprüfungsfunktion?
    Das Problem ist momentan, dass ich bis auf meinen IPC noch keine andere Hardware habe. Also alles nur "offline" teste. Wenn das System irgendwann mal von meinen Kommilitonen aufgebaut worden ist und alle Messungen richtig laufen, sollte es eig. nicht vorkommen, dass eine Leistung=0 ist, sodass auch nicht durch 0 geteilt wird.

  13. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.204
    Danke
    926
    Erhielt 3.293 Danke für 2.662 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ein Steuerungsprogramm darf sich nicht darauf verlassen, daß ein Wert 0 "eigentlich nicht vorkommen" kann. Sowas muß mittels vorheriger Prüfung garantiert werden. Ein Steuerungsprogramm ist so schnell, daß alles was theoretisch vorkommen kann auch zur Lebenszeit des Programmierers mal vorkommt

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 31.10.2011, 15:07
  2. Bildaufbau-Operationen Liste
    Von Oele im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 23.05.2011, 08:59
  3. Antworten: 1
    Letzter Beitrag: 17.09.2010, 08:45
  4. string to floating point
    Von noeppkes im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 31.10.2007, 10:29
  5. Potenzieren mit S7-Operationen?
    Von Andrew im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 05.05.2004, 11:48

Lesezeichen

Berechtigungen

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