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

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

Thema: Vier Bytes in Float (ST) TwinCat 3

  1. #1
    Registriert seit
    21.08.2015
    Beiträge
    12
    Danke
    8
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo alle zusammen!

    ich lesen vier Bytes mit der Klemme EL6001 ein. Diese möchte ich wieder in mein Float-Wert zurück wandeln.

    Zuvor habe ich ein Int-Wert (-1225) gesendet und empfangen (LowByte = 55 , HighByte = 251). Diese wollte ich mit folgender Zeile zurück in den Int-Wert wandeln:

    intValue := (HighByte *255 + LowByte);

    Hat nicht geklappt. Wundert mich nicht, da 255* 251 schon viel zu groß ist, jedoch habe ich den Ansatz im Internet gefunden.


    Ich danke Euch für Eure Unterstützung!

    Gruß
    Fragekatalog
    Zitieren Zitieren Vier Bytes in Float (ST) TwinCat 3  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Wenn Du die richtige Formel benutzt und richtig rechnest dann kommst Du auch auf das richtige Ergebnis:
    Code:
    intValue := (HighByte*256 + LowByte);
       -1225 :=      -5 * 256 + 55
    Einfacher ist aber, die einzelnen Bytes so zusammenzusetzen:
    Code:
    intValue := WORD_TO_INT(SHL(BYTE_TO_WORD(HighByte), 8) OR LowByte));
    Was hat das aber nun mit Float zu tun bzw. wie ist jetzt Deine Frage?

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    SPS_Fragekatalog (31.08.2015)

  4. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Falls Du 4 Bytes zu einem REAL-Wert zusammensetzen willst, dann kannst Du hier die ersten beiden Varianten von RONIN als Vorlage nehmen: SCL: 4 Byte TO Real
    Oder den Code aus dem ersten Beitrag, der ist in Beckhoff-Style ST.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    SPS_Fragekatalog (31.08.2015)

  6. #4
    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 das mit memcpy machen, in etwa wie hier (letzter Post des Threads): http://forum.codesys.com/viewtopic.php?f=11&t=5623

    Dort wird es mit einem Array of 2 Word gezeigt, geht auch mit einem Array of 4 Byte.
    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:

    SPS_Fragekatalog (31.08.2015)

  8. #5
    Registriert seit
    21.08.2015
    Beiträge
    12
    Danke
    8
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Guten Morgen alle zusammen!

    Vielen Dank für Eure Antworten!

    Ich möchte in ST vier Bytes zurück in ein Float umwandeln. Die vier Bytes lese ich über die EL6001 Klemme ein.

    Gruß
    Fragekatalog

  9. #6
    Registriert seit
    21.08.2015
    Beiträge
    12
    Danke
    8
    Erhielt 2 Danke für 2 Beiträge

    Standard

    @ Harald:

    Vllt. blöde Frage aber wie kommt Du auf "-5" für HighByte von "-1225"? Ich erhalte "251".

    Gruß
    Fragekatalog

  10. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Guten Morgen.
    Hast Du die genannten Beispiele ausprobiert? Funktioniert keins?

    Wie sind die 4 Bytes codiert? (Wo kommen die her?) Hast Du ein Beispiel, welche 4 Bytes welchen Wert ergeben sollen?
    Um ganz sicher zu gehen: mit Float meinst Du 32-Bit REAL?

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  11. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    SPS_Fragekatalog (31.08.2015)

  12. #8
    Registriert seit
    21.08.2015
    Beiträge
    12
    Danke
    8
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Bin gerade dabei die Beispiele durch zu sehen und auszuprobieren.
    Nur ist mir sofort aufgefallen, dass Du einen anderen Wert für das HighByte erhalten hast.
    Die Bytes kommen aus einem µC.
    Beispiel:
    Float-Wert: 1234.56
    Byte 1: 236
    Byte 2: 81
    Byte 3: 154
    Byte 4: 68

    Diese Bytes möchte ich nun zurück in den Float-Wert umwandeln.

    Bin in ST noch nicht ganz sicher unterwegs. Mit Float meine ich 32 Bit. Bereich: 3.4028235E+38 bis -3.4028235E+38.
    Wenn das 32Bit-REAL entspricht meine ich das.
    In der Tat ich muss sicher sein wie der µC die Bytes codiert und dementsprechend in ST decodieren.
    Die vier Bytes, die den Float-Wert repräsentieren, liegen im Bereich 0-255 (8Bit).


    Danke für Deine schnelle Antwort.

    Gruß
    Fragekatalog

  13. #9
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von SPS_Fragekatalog Beitrag anzeigen
    Beispiel:
    Float-Wert: 1234.56
    Byte 1: 236
    Byte 2: 81
    Byte 3: 154
    Byte 4: 68

    Diese Bytes möchte ich nun zurück in den Float-Wert umwandeln.
    Byte 1 ist das LSB ... Byte 4 ist das MSB --> Du mußst beim Zusammensetzen die Byte-Reihenfolge 1 2 3 4 beibehalten, kannst also per Pointer oder memcpy direkt die 4 Byte auf eine REAL-Variable kopieren.
    Das TwinCAT-SPS-System arbeitet mit dem Little-Endian-Format (INTEL).

    Harald
    Geändert von PN/DP (31.08.2015 um 11:56 Uhr) Grund: TwinCAT benutzt Little-Endian
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  14. #10
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.197
    Danke
    926
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hier eine weitere fertige Funktion: Byte´s zu Real

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  15. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    SPS_Fragekatalog (01.09.2015)

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 31.03.2015, 20:44
  2. Vier Modbus Register nach double Float
    Von knuppel im Forum Programmierstrategien
    Antworten: 8
    Letzter Beitrag: 20.02.2015, 22:01
  3. TwinCat ADS Kommunikation: Bytes verschoben?
    Von LMDaniel999 im Forum CODESYS und IEC61131
    Antworten: 17
    Letzter Beitrag: 26.01.2015, 09:19
  4. Vier Siebensegmentanzeigen als Timer
    Von TSF im Forum CODESYS und IEC61131
    Antworten: 7
    Letzter Beitrag: 06.06.2011, 16:37
  5. TCP/IP über vier Adern... welche?
    Von Pau1e im Forum Schaltschrankbau
    Antworten: 10
    Letzter Beitrag: 26.08.2009, 22:35

Stichworte

Lesezeichen

Berechtigungen

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