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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: Normierung in SCL < Problem >

  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
    das sieht mir aus, wie ne 0..10V messung?!

    versuch mal das:

    Code:
    *
        T_ist1: = (((OGPEW - UGPEW) * PEW) / 27648) + UGPEW
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  2. #12
    Pfalz ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    01.04.2010
    Ort
    Frankenthal (Pfalz)
    Beiträge
    5
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Lächeln

    Erstmal vielen Dank für eure Antworten

    @ vierlagig

    Bei dieser Funktion ist es egal ob es 0...10V, 0...20mA oder 4...20mA oder irgend eine andere Größe handelt. Man kann eine x beliebige Größe in eine andere Größe normieren.

    @ SKg

    Der Knackpunkt ist aber, dass ich gerade nicht in REAL Zahlen rechnen soll.
    Zykluszeit etc. Ja das ist totaler quatsch, aber so ist die Aufgaben Stellung nun mal.

    @ bike

    Wie kann ich das machen, ich bekomme die Fehlermeldung:
    Der Baustein ist nicht testbar!
    Es wurde keine Debug Info erstellt.

    Gibts da was in der Hilfe?

    @ Dotzi

    Code:
    NW1 Temperatur in 1/1000000°C
          L     #T_min
          ITD   
          L     L#1000000
          *D    
          T     #T_min_DINT
    
          L     #T_max
          ITD   
          L     L#1000000
          *D    
          T     #T_max_DINT
    
    NW2 Normierung der Temperatur
          L     #T_max_DINT
          L     #T_min_DINT
          -D    
          T     #zw1                        // T_max - Tmin
    
          L     #OGPEW
          ITD   
          L     #UGPEW
          ITD   
          -I    
          T     #zw2                        // IN_max - IN_min
    
          L     #zw1
          L     #zw2
          /D    
          T     #zw3                        // zw1 / zw2
    
          L     #PEW
          ITD   
          L     #UGPEW
          ITD   
          -D                                // IN_ist - IN_min
    
          L     #zw3
          *D    
          L     #T_min_DINT
          +D    
          T     #T_ist_DINT
    
    NW3 Umrechnen der 1/1000000 in 1/10°C
          L     #T_ist_DINT
          L     L#100000
          /D    
          T     #T_ist
    Zum wohl der Pfalz

  3. #13
    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 Pfalz Beitrag anzeigen
    Wie kann ich das machen, ich bekomme die Fehlermeldung:
    Der Baustein ist nicht testbar!
    Es wurde keine Debug Info erstellt.

    Gibts da was in der Hilfe?
    Extras > Einstellungen > Compiler > nun den Haken "Debug Info erstellen" setzen, speichern und übertragen.
    Jetzt kannst Du den Baustein online anschauen.

    Wenn Du wieder Offline gehen willst, dann erneut auf die Brille und explizit noch mal auf Test > Test beenden (warum auch immer, ist halt so).
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  4. Folgender Benutzer sagt Danke zu Paule für den nützlichen Beitrag:

    Pfalz (02.04.2010)

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

    Beitrag

    Zitat Zitat von SKg Beitrag anzeigen
    Hi

    also ich bin zwar auf dem gebiet nicht ganz versiert aber ich würte sagen der fehler liegt in der folgenden Zeile:

    T_ist1:= (PEW - UGPEW) * ((T_max - T_min) / (OGPEW - UGPEW)) + T_min; // Normierung des PEW in IST Temperatur

    wenn du nicht sicherstellen kannst das bei einer Teilung von Zahlen immer gerade (keine Kommazahlen) Zahlen bei rumkommen solltest du vollständig mit REAL Zahlen arbeiten und nicht mit INT bzw. DINT

    Gruß
    SK
    Im Prinzip richtig aber es soll ja anscheinend nicht mit Fliesskomma gerechnet werden.

    Wenn die Eingangssignale den vollen Wertebereich eines INT belegen, muss es bei einer Multiplikation zwangsweise zu einem Überlauf kommen. Was die SPS Implementation in diesem Falle daraus macht (manche setzen automatisch ein Fehler Flag), weiss ich nicht, aber es kommt Schrott raus, wenn man es nicht abfängt, den Schrott danach noch einmal dividieren erzeugt dann das nächste Problem.

    Also: Eingangswerte von INT in DINT casten, mit DINT rechnen und dann das Ergebnis ganz am Ende wieder in INT verwandeln.

    Dabei auch noch beachten, wenn es komplizierter wird: Zuerst Multiplizieren, danach dividieren, sonst geht die Genauigkeit weg. In Obigem Beispiel heisst das, die Klammern sind falsch !!!
    Geändert von RobiHerb (02.04.2010 um 08:22 Uhr) Grund: Tippfehler
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren Normierung  

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

    Pfalz (02.04.2010)

  7. #15
    Registriert seit
    15.10.2007
    Ort
    St.Pölten
    Beiträge
    875
    Danke
    98
    Erhielt 200 Danke für 188 Beiträge

    Standard

    du solltest vielleicht statt.
    T_max und T_min

    Code:
    zwT_max:= T_max*1000000;
    zwT_min:= T_min*1000000;
    diese werte einsetzen.oder brauchst du die nicht?


    Ich habe die Gleiche Formel in AWL, direkt in ein FC geschrieben und die Funktioniert.
    da hast du aber immer die werte zuerst in DINT umgewandelt bevor du damit gerechnet hast.ist das bei SCL nicht notendig?
    ich meine
    Code:
     
    T_ist1(DINT) := (PEW(INT) - UGPEW(INT)) * ((T_max(INT) - T_min(INT)) / (OGPEW(INT) - UGPEW(INT))) + T_min(INT);
    Geändert von Gerhard K (02.04.2010 um 10:24 Uhr)
    Beginne jeden Tag mit einem lächeln,es kann dir nämlich während des Tages sehr schnell vergehen.

  8. Folgender Benutzer sagt Danke zu Gerhard K für den nützlichen Beitrag:

    Pfalz (02.04.2010)

  9. #16
    Pfalz ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    01.04.2010
    Ort
    Frankenthal (Pfalz)
    Beiträge
    5
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Daumen hoch


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @ Paule
    Das ist ne super Funktion!

    @ RobiHerd & Gerhard K
    ich habe alle Zwischenwert Variablen (zw) als DINT deklariert, nur nicht in die Formel geschrieben. Daher wurde die Zahl bei der Division kleiner 1.
    Mit Gleitpunkt Zahlen hätte man dies sofort gesehen nur leider nicht mit ganzen Zahlen.

    Code:
        zwT_max:= T_max*1000000;
        zwT_min:= T_min*1000000;
          
        T_ist1:= (PEW - UGPEW) * ((zwT_max - zwT_min) / (OGPEW - UGPEW)) + zwT_min;  // Normierung des PEW in IST Temperatur
        T_ist1:= T_ist1/100000;  // Temperatur in 1/10°C
        T_ist:= DINT_TO_INT(T_ist1);
    In SCL kann man mit INT und DINT rechnen, es wird erst gemekert, wenn das Ergebniss > 32000 ist und als INT deklariert ist.

    Vielen Dank euch allen.
    Bin von diesem Forum ganz begeisteret!!!
    Zum wohl der Pfalz
    Zitieren Zitieren Jetzt gehts  

Ähnliche Themen

  1. Probleme mit Normierung
    Von tymanis im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 28.05.2010, 19:39
  2. Normierung mit FC 105
    Von uz_ohio im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 05.05.2010, 12:28
  3. Analogwert Normierung
    Von vogel77 im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 09.01.2007, 19:33
  4. Normierung und Datenwörter.
    Von Tigerkroete im Forum Programmierstrategien
    Antworten: 9
    Letzter Beitrag: 21.06.2006, 19:12
  5. Analogwert Normierung für die 135 U
    Von Bernd_B im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 17.10.2005, 17:03

Lesezeichen

Berechtigungen

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