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

Ergebnis 1 bis 9 von 9

Thema: Typwandlung DINT -> INT???

  1. #1
    Registriert seit
    23.03.2005
    Beiträge
    31
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, allerseits!

    Kurze Frage: Wie kann ich einen DINT-Wert in einen INT-Wert wandeln?
    Habe hier eine REAL-Variale, die ich mittels ROUND in DINT wandeln kann,
    aber für DINT -> INT finde ich nix...

    Danke!

    Gruß, Olav
    Zitieren Zitieren Typwandlung DINT -> INT???  

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

    Standard

    Ich würde folgendes versuchen:

    L MD 10
    T MW 20

    Du mußt aufpassen, daß der Wert in MD10 kleiner 16 Bit ist, also in MW20 hineinpaßt. (Evtl. Verleicher einsetzen) Für eine negative Zahl solltest du das erst testen, ich habe jetzt keine CPU zur Hand.
    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

  3. #3
    Registriert seit
    30.01.2004
    Ort
    Erfurt
    Beiträge
    961
    Danke
    42
    Erhielt 109 Danke für 87 Beiträge

    Standard

    Hallo,

    es geht auch direkt:
    Code:
    L Kammertemperatur  //MD100
    RND
    T PCData.TempKamm  //DB für PC, DBW 0
    Allerdings werden die Realwerte schon vorher auf Über- und Unterlauf getestet und negative Werte kommen hier per Definition hier nicht vor.

    Peter

  4. #4
    Olav ist offline Benutzer
    Themenstarter
    Registriert seit
    23.03.2005
    Beiträge
    31
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo!

    Nun, das hatte ich mir auch überlegt, aber bei DINT ist das MSB, also das höchste Bit (31), ein Vorzeichenbit, während ich aber eigentlich dann nur die "unteren" 16 Byte betrachte.
    Wenn ich`s so machen will, muß ich dann wohl erst meine DINT Zahl auf "Negativ" prüfen, dann obiges durchführen und dann bei negativem DINT zu meinem Wert noch 2^16 dazuaddieren, um das Vorzeichenbit zu setzen, oder wie jetzt?

    Ich dachte eigentlich an einen "einfachen" FUP-Block, vorne DINT rein, hinten INT raus... Schade eigentlich

    Schönen Freitag und angenehmes Wochenende Euch allen!

    Gruß, Olav

  5. #5
    Registriert seit
    03.12.2013
    Beiträge
    49
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo

    Ich muss das Thema nochmal aufgreifen, hab da auch meine Schwierigkeiten mit.

    Ich arbeite auch mit dem ROUND- Befehl. Leider kann ich nachdem ich die REAL zahl umgewandelt habe und das Signal in meinem DB als INT hineinschreibe, die Variable nicht vor einem Vergleicher ( CMP ) setzen. Hab schon vieles versucht bekomme es einfach nicht hin. Im Anhang mal ein Bild.
    Zur Info: DBD36 ist die realzahl die vom Touchpanel kommt ( auch als REAL im DB100 deklariert )
    Habs einmal in AWL probiert wie oben schon beschrieben und einmal noch mit einem Zwischenschritt wo ich versuche das Signal nach dem ROUND befehl über einen Movebefehl direkt nochmal in einem INT schiebe. Die eingegeben Zahlen gehen von 0 - 300....Ohne Vorzeichenänderung.

    Bitte um Hilfe
    MFG


    DINT_to_int_AWL.JPG

    DINT_to_int.JPG

  6. #6
    Registriert seit
    29.03.2004
    Beiträge
    5.739
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    Was ist denn das Problem, dass du bei zweiten Bild nur die Adresse DB100.DBW58 zu sehen bekommst?

    Du hast dort eine Adressüberschneidung.
    DB100.DBD58 besteht aus den beiden Wörtern DB100.DBW58 und DB100.DBW60.

    Eine Adresse kann immer nur ein einziges Symbol besitzen.

  7. #7
    Registriert seit
    04.04.2008
    Beiträge
    389
    Danke
    85
    Erhielt 39 Danke für 24 Beiträge

    Standard

    In AWL gibt es ITD (INT to DINT) aber kein DTI (DINT to INT). Ein "DTI" wäre auch bei negativen Zahlen nicht erforderlich. Das liegt an der Darstellung der negativen Zahlen durch das sogenannte Zweierkomplement. Es gibt natürlich auch keine DINT-to-INT-Wandlungen in FUP und KOP.

    Beispiel:
    L MD10 //32-Bit-Operand, DINT
    T MW20 //16-Bit-Operand, INT

    Solange im MD10 nur Werte zwischen -32768 bis 32767 (INT-Bereich) liegen, kommen diese Werte auch immer im MW20 korrekt an.


    Man kann sich das am besten klar machen, wenn man PLCSim zu Rate zieht und sich das MD10 und MW20 sowohl im Ganzzahlformat als auch Binär anzeigen lässt. Dann kann man auch erkennen, wie die negativen Zahlen dargestellt werden.



    Aber: In SCL gibt es DINT_TO_INT. Es ist eine Klasse-B-Konvertierung, die immer programmiert werden muss. Natürlich kann der Wert aus dem DINT-Operanden nur dann in einem INT-Operanden untergebracht werden, wenn er zwischen -32768 bis 32767 liegt.
    Obiges Beispiel muss dann so programmiert werden:
    MW20 := DINT_TO_INT(MD10);
    Geändert von Earny (18.08.2014 um 20:34 Uhr)

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Ohne die Adressüberschneidung funktioniert es wie gewünscht.
    In AWL kann man es auch noch kürzer schreiben, ohne Move in eine Zwischenvariable.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #9
    Registriert seit
    03.12.2013
    Beiträge
    49
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke für die Hilfe. Es funktioniert jetzt ..........

    MFG

Ähnliche Themen

  1. DInt zu any
    Von Bensen83 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 31.03.2010, 09:00
  2. Int / Dint
    Von Gerri im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 09.07.2008, 11:14
  3. DINT Maximalwert
    Von Wolfi_L im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 25.10.2007, 13:18
  4. SCL Typumwandlung DINT => INT
    Von fbeine im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 06.02.2006, 14:05
  5. Division von DInt
    Von godi im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 07.01.2006, 08:10

Lesezeichen

Berechtigungen

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