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

Ergebnis 1 bis 9 von 9

Thema: Zahlenverarbeitung

  1. #1
    Registriert seit
    22.05.2009
    Beiträge
    20
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hallo zusammen,

    gegeben ist ein ST-Code zur Füllstandserrechnung.

    ein Auszug:
    Code:
    %MW0:=%EW0*%EW0*%EW0*9*7/10/6
    mit Werten für EW0 von 0 bis 100

    mehr oder weniger stupide in AWL übersetzt wäre das:
    Code:
    L     EW0    //100
    L     EW0    //100
    *I             //10000
    L     10      
    /I             //1000
    L     9       
    *I            //9000
    L     6      
    /I            //1500
    L     EW0
    *I           //150000  //oder *D ??
    L     7
    *I           //1050000 //oder *D ??
    T     MW10
    Allerdings treten dabei Werte auf die weit jenseits einer Wortbreite liegen. Vor Allem das Endergebnis passt größenmäßig nicht wirklich.

    Meine Fragen:
    Welche maximalen Werte dürfen während einer Rechnung auftreten, bzw. was kann der AKKU maximal?
    Hängen die Werte die auftreten dürfen größenmäßig von den größen der Eingangs-/Ausgangsvariablen ab?
    Ist die oben gegebene Berechnung in ST so eigentlich möglich (Stichwort: Bereichsüberschreitung)?

    gruß
    thomas
    Geändert von the (01.07.2009 um 12:01 Uhr)
    Zitieren Zitieren Zahlenverarbeitung  

  2. #2
    Registriert seit
    21.12.2006
    Ort
    Wiener Neustadt
    Beiträge
    931
    Danke
    154
    Erhielt 169 Danke für 127 Beiträge

    Standard

    Hallo
    Du mußt double nehmen, denn integer geht nur bis 2^15 (32768 )

    viel
    erfolg
    Geändert von Manfred Stangl (01.07.2009 um 12:08 Uhr) Grund: 8 + ) ergeben smilie
    Gruß
    M

    Handbook not read error...
    Klare Frage - klare Antwort

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

    the (01.07.2009)

  4. #3
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.792
    Danke
    398
    Erhielt 2.416 Danke für 2.012 Beiträge

    Standard

    also so :
    Code:
    L     EW0    //100
    itd
    L     EW0    //100
    itd
    *D            //10000
    L     10      
    /I             //1000
    L     9       
    *D           //9000
    L     6      
    /D           //1500
    L     EW0
    *D           //150000 
    L     7
    *D           //1050000 
    T     MD10
    Gruß
    LL

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

    the (01.07.2009)

  6. #4
    Registriert seit
    24.05.2006
    Beiträge
    234
    Danke
    14
    Erhielt 77 Danke für 57 Beiträge

    Standard

    Leider nein, lieber LL. Dir ging ein /I durch die Lappen:

    also so :
    Code:
    L     EW0    //100
    itd
    L     EW0    //100
    itd
    *D            //10000
    L     10    
    //******  hier drunter stand /I
    /D             //1000
    L     9       
    *D           //9000
    L     6      
    /D           //1500
    L     EW0
    *D           //150000 
    L     7
    *D           //1050000 
    T     MD10
    Gruß
    LL

  7. Folgende 2 Benutzer sagen Danke zu hovonlo für den nützlichen Beitrag:

    Larry Laffer (01.07.2009),the (01.07.2009)

  8. #5
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.792
    Danke
    398
    Erhielt 2.416 Danke für 2.012 Beiträge

    Standard

    @Hovonlo:
    Danke dir - war keine böse Absicht ...

  9. #6
    the ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    22.05.2009
    Beiträge
    20
    Danke
    7
    Erhielt 0 Danke für 0 Beiträge

    Standard

    OK. Danke. War meine Vermutung Doppelwörter nutzen zu müssen so weit richtig.
    Trptzdem nochmal die Frage oder der gegebene Code in ST so funktiert, da hier ja nur Wortbreite genutzt wird (MW0)!?

  10. #7
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.792
    Danke
    398
    Erhielt 2.416 Danke für 2.012 Beiträge

    Standard

    Es ist durchaus möglich, dass ST intern (der Einfachheit halber) mit Doppelwörtern arbeitet ... Ist aber blosse Spekulation ...

    Gruß
    LL

  11. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.262
    Danke
    537
    Erhielt 2.707 Danke für 1.956 Beiträge

    Standard

    Ich würde die Divisionen (wenn von der Größe der Variablen her möglich) auch an das Ende legen, da ja hier jeweils ein Rest bleibt, der dann unter den Tisch fällt.
    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

  12. #9
    Registriert seit
    25.05.2009
    Ort
    Raum Zürich CH
    Beiträge
    85
    Danke
    15
    Erhielt 15 Danke für 15 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hätte da auch noch eine Idee:

    Code:
    L       EW0
    ITD               //in DINT wandeln (Vorzeichen)
    DTR               //in REAL wandeln 
    PUSH              //AKKU1 in AKKU2 kopieren
    *R                // EW0 * EW0
    *R                // EW0^2 * EW0
    L      9.0
    *R
    L      7.0
    *R
    L      10.0
    /R
    L      6.0
    /R
    RND              //REAL wieder auf DINT runden
    T      MD10
    Durch die Umwandlung auf Gleitpunkzahl (REAL) hast du während der Berechnung keine Rundungsfehler und einen genügend grossen Zahlenbereich.
    Das Ergebnis ist aber auch hier DINT (32Bit-Festpunkzahl).

    Gruss

Lesezeichen

Berechtigungen

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