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

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

Thema: Implizite und explizite Konvertierungen bei SCL

  1. #11
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.400 Danke für 2.000 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    Bei mir ist der erzeugte AWL Code so wie man es erwarten würde:
    Addition von zwei INT -> keine Konvertierung
    Zuweisung des Ergebnisses auf ein DINT -> Vorherige implizite Konvertierung (ITD in AWL)
    Hallo,
    dann ist das doch auch schon die Erklärung.
    Wenn in jedem der beiden MW als Betrag -20000 (oder auch +20000) drin stände dann wäre ohne eine vorherige Umwandlung des Ausgangsbetrages in DINT eine sinnvolle Addition gar nicht möglich weil ein INT weder einen Betrag < -32768 noch einen Betrag > +32767 darstellen kann sondern dann den weniger sinnvollen Rest darstellen würde (bei z.B. -40000 wäre das dann +7232).

    Es macht eigentlich meisst Sinn, erst in das Zielformat zu konvertieren und dann zu rechnen. Zumindestens dann, wenn das Zielformat mehr darstellen kann als das Ausgangsformat (wie z.B. bei DINT und INT).

    Gruß
    Larry

  2. #12
    Earny ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Thomas,

    der zugehörige AWL-Code für MD20 := MW16 + MW18 ist (von ein paar AWL-Specials abgesehen):
    Code:
          SET   
          SAVE  
          =     L      0.1
          L     MW    16
          L     MW    18
          +I    
          SPO   I007
          SPA   I008
    I007: CLR   
          =     L      0.1
    I008: ITD   
          T     MD    20
          CLR   
          U     L      0.1
          SAVE  
          BE
    Das ist nur eine Integer-Addition. Das geht gelegentlich schief.




    Der zugehörige AWL-Code für MD20 := INT_TO_DINT(MW16) + MW18 ist:
    Code:
          SET   
          SAVE  
          =     L      0.1
          L     MW    16
          ITD   
          SAVE  
          L     MW    18
          ITD   
          +D    
          SPO   I007
          SPA   I008
    I007: CLR   
          =     L      0.1
    I008: T     MD    20
          CLR   
          U     L      0.1
          SAVE  
          BE
    Das ist jetzt eine Double-Integer-Addition. Die liefert immer das richtige Ergebnis.


    Gruß
    Earny

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 23.01.2012, 17:06
  2. Antworten: 9
    Letzter Beitrag: 10.02.2011, 10:46
  3. Fehlerfenster bei SCL
    Von flyer im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 25.03.2008, 17:46
  4. Hilfe bei SCL
    Von Gast im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 30.05.2006, 18:28
  5. Brauche Hilfe bei SCL.SFC Aufrufen in SCL
    Von Gerold im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 06.10.2005, 10:47

Lesezeichen

Berechtigungen

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