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

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

Thema: Probleme mit dem Datentyp "Real"

  1. #1
    Registriert seit
    26.07.2007
    Beiträge
    232
    Danke
    74
    Erhielt 10 Danke für 8 Beiträge

    Frage


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hallo, habe ein kleines problem mit der verarbeitung von real bei einer siemens cpu. irgendwie bekomme ich real nicht richtig verrechnet. habe schon vieles versucht, mit wandeln von int in gleitpunktzahlen und zurück aber immer ohne richtigen erfolg.
    habe unten mal aufgeführt was ich eigentlich vorhabe. hier habe ich alle wandlungen erstmal vernachlässigt um mein eigentliches vorgehen zu beschreiben. ich hoffe es versteht mich jemand und kann mit helfen.


    NW1
    //hier wird 100 durch variable1 dividiert daraus folgt eine zahl in der größe von 0.5 …0.02

    L Festwert [100]
    L variable1 [int]
    div
    T variable2 [real]


    NW2
    //hier soll jede sec. zur variable4 solange die variable2 addiert werden bis das gerundete ergebnis von variable 4 gleich oder fast 100 ist. für den impuls werde ich den taktmerker nutzen.

    L variable3 [int]
    L Festwert [100]
    Cmp <I
    U M1sec
    FP Hilfsmerker
    L variable4 [real]
    L variable2 [real]
    add_R
    T variable4 [real]


    NW3
    //hier wird die variable4 gerundet, variable3 wird als int benötigt für weitere verarbeitung

    L variable 4
    RND+
    T variable3 [int]
    Zitieren Zitieren Probleme mit dem Datentyp "Real"  

  2. #2
    Registriert seit
    16.12.2004
    Ort
    Schleswig-Holstein
    Beiträge
    400
    Danke
    21
    Erhielt 24 Danke für 21 Beiträge

    Standard

    Du musst bei Dein Typen "konstant" bleiben. Will heissen INT/INT=INT, in diesem Fall in NW1 = 0 weil Ergebnis < 1 ist. Wenn Du weißt, dass der Ergebnis immer (oder auch gelegentlich) < 1 wird, dann mußt Du Dein "100" und Dein Variable_1 vorher in REALs umwandeln und dann mit /R dividieren.

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

    Johannes F (15.01.2008)

  4. #3
    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

    Zitat Zitat von Johannes F Beitrag anzeigen
    NW1
    //hier wird 100 durch variable1 dividiert daraus folgt eine zahl in der größe von 0.5 …0.02

    L Festwert [100]
    L variable1 [int]
    div
    T variable2 [real]
    DIV_I bringt dir hier immer ein ganzzahliges ergebnis, in deinem fall wohl immer eine null ... solltest also variable1 in REAL ausführen/wandeln und DIV_R durchführen ...

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

    Johannes F (15.01.2008)

  6. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Laß doch alles auf Int, den Vergleicher auf 10000 statt 100 und am Ende:

    Code:
    L variable4
    L 100
    div
    T Variable3
    Muß im NW2 am Anfang nicht

    Code:
    L variable4
    stehen?

    PS: Natürlich im NW 2 dann alle Operationen für Int!
    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

  7. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Johannes F (15.01.2008)

  8. #5
    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

    Zitat Zitat von Ralle Beitrag anzeigen
    Laß doch alles auf Int, den Vergleicher auf 10000 statt 100 und am Ende:
    und dann kommt mal 0,0003 raus *pfeif* ... aber recht hast du schon, vorallem hat man keine häßlichen rundungsfehler

  9. Folgender Benutzer sagt Danke zu vierlagig für den nützlichen Beitrag:

    Johannes F (15.01.2008)

  10. #6
    Registriert seit
    03.11.2007
    Ort
    noch RLP, demnächst wohl SL
    Beiträge
    206
    Danke
    20
    Erhielt 22 Danke für 20 Beiträge

    Standard

    Huddel nicht so mit den Formaten.

    ...

    Ach, das hat ja schon wer geschrieben......

    Mist

  11. Folgender Benutzer sagt Danke zu Dabbes vorm Herrn für den nützlichen Beitrag:

    Johannes F (15.01.2008)

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

    Standard

    Zitat Zitat von Johannes F Beitrag anzeigen
    NW2
    //hier soll jede sec. zur variable4 solange die variable2 addiert werden bis das gerundete ergebnis von variable 4 gleich oder fast 100 ist. für den impuls werde ich den taktmerker nutzen.

    L variable3 [int]
    L Festwert [100]
    Cmp <I
    U M1sec
    FP Hilfsmerker
    L variable4 [real]
    L variable2 [real]
    add_R
    T variable4 [real]
    Hier fehlen hier ein paar Klammern und ein Sprungbefehl:

    Code:
          U(    
          L     MW    10                    // Variable 3 (INT)
          L     100                         // Festwert   (100)
          <=I   
          )     
          U(    
          U     M     20.0                  // M1sek
          FP    M     20.1                  // Hilfsmerker
          )     
          SPBN  M01
          L     MD    12                    // Variable 4 (REAL)
          L     MD    16                    // Variable 2 (REAL)
          +R    
          T     MD    12                    // Variable 4 (REAL)
    M01:  NOP   0
    Gruß Kai

  13. Folgender Benutzer sagt Danke zu Kai für den nützlichen Beitrag:

    Johannes F (15.01.2008)

  14. #8
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Unglücklich

    @Kai

    Stimmt, siehste, auf Grund der Fragestellung hab ich da gar nicht drauf geachtet .
    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

  15. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    Johannes F (15.01.2008)

  16. #9
    Avatar von Johannes F
    Johannes F ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    26.07.2007
    Beiträge
    232
    Danke
    74
    Erhielt 10 Danke für 8 Beiträge

    Standard

    hatte gestern die awl zeilen nur als anhaltspunkte gepostet um einige neue anregungen zu bekommen.
    ich hatte es in awl so gelöst aber es funktioniert nicht

    NW1
    U( //wandeln in REAL
    L #Offset_Weckzeit_sec //DINT
    DTR
    T #Offset_Weckzeit_sec_Real //REAL
    SET
    SAVE
    CLR
    U BIE
    )
    SPBNB _M01
    L 1.000000e+002
    L #Offset_Weckzeit_sec_Real //REAL
    /R
    T #Dimmfaktor_Real //REAL
    _M01: NOP 0


    NW2
    U #OUT_Alarm_Lichtwecker
    U(
    L #Dimmwert_Lichtwecker //INT
    L 100
    <I
    )
    U #IN_Hilfstakt_1s //BOOL
    FP #FP_Hilfstakt //BOOL
    SPBNB _M02
    L #Dimmwert_Lichtw_Real //REAL
    L #Dimmfaktor_Real //REAL
    +R
    T #Dimmwert_Lichtw_Real //REAL
    _M02: NOP 0
    //das funktioniert nicht so richtig, kann es mir aber nicht erklären


    NW3
    L #Dimmwert_Lichtw_Real //REAL
    RND+
    T #Dimmwert_Lichtwecker //INT
    //hier gibt es probleme mit der wandlung und dem runden von REAL in INT
    // "#Dimmwert_Lichtwecker" wird als int benötigt für weitere verarbeitung
    Geändert von Johannes F (15.01.2008 um 10:51 Uhr)

  17. #10
    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
    FB oder FC? "FP_Hilfstakt" als TEMP, STAT oder INOUT? (gibts übrigens auch als fertige lösung zu kaufen: Philips HF 3461-01 Wakeup Light )

Ähnliche Themen

  1. "Index Pulse", "Home Switch" und "Position Limit Switch"
    Von senmeis im Forum Antriebstechnik
    Antworten: 3
    Letzter Beitrag: 07.03.2011, 11:21
  2. Problem bei Rechnen mit "REAL" Werten
    Von SPS n00b im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 10.02.2010, 10:21
  3. ANY Pointer. Wenn ist DatenTyp NICHT "Byte" ?
    Von JesperMP im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 05.03.2009, 23:11
  4. SCL-DB-Zugriff "Ungültiger Datentyp"
    Von kiestumpe im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 25.05.2007, 17:57
  5. Datentyp "ANY" in SCL zerlegen
    Von hubert im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 28.02.2006, 09:42

Lesezeichen

Berechtigungen

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