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

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

Thema: Vier Bytes in Float (ST) TwinCat 3

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also nun hat es geklappt.

    Der Code aus dem ersten Beitrag, den Harald gepostet hat, hat mich zum Erfolg geführt!

    Vielen Dank nochmal!

  2. #12
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.335
    Danke
    932
    Erhielt 3.333 Danke für 2.691 Beiträge

    Standard

    Hmm, Deine Erfolgsmeldung ist ein bisschen unscharf und mehrdeutig... Könntest Du vielleicht Deinen erfolgreichen Code noch hier posten, damit spätere Suchende schneller die Lösung finden?

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #13
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.739
    Danke
    444
    Erhielt 924 Danke für 744 Beiträge

    Standard

    Zitat Zitat von SPS_Fragekatalog Beitrag anzeigen
    @ Harald:

    Vllt. blöde Frage aber wie kommt Du auf "-5" für HighByte von "-1225"? Ich erhalte "251".
    Da wird das Problem liegen, in der Interpretation des höchsten Bits.
    Das höchste Bit des HighBytes stellt hier das Minus dar, also Wert-128 macht hier 123-128=-5 anstatt 123+128=251.
    Durch das Schieben in Haralds Code bleibt es erhalten, während es durch die Multiplikation des Bytes mit der impliziten Umwandlung in einen INT-Wert dagegen verloren geht.

  4. Folgender Benutzer sagt Danke zu hucki für den nützlichen Beitrag:

    SPS_Fragekatalog (01.09.2015)

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

    Standard

    Guten Morgen!

    Na klar, ich habe den Code von "artofautomation", den Harald in seinem ersten Post verlinkt hat, 1 zu 1 übernommen. Dies klappte dann wunderbar.
    SCL: 4 Byte TO Real - Pointer in Funktion


    Vielen Dank!!!
    Geändert von SPS_Fragekatalog (01.09.2015 um 08:50 Uhr)

  6. Folgender Benutzer sagt Danke zu SPS_Fragekatalog für den nützlichen Beitrag:

    PN/DP (01.09.2015)

  7. #15
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.335
    Danke
    932
    Erhielt 3.333 Danke für 2.691 Beiträge

    Standard

    Zitat Zitat von SPS_Fragekatalog Beitrag anzeigen
    ich habe den Code von "artofautomation", den Harald in seinem ersten Post verlinkt hat, 1 zu 1 übernommen. Dies klappte dann wunderbar.
    SCL: 4 Byte TO Real - Pointer in Funktion
    Hmm, das ist aber merkwürdig. Der Code von artofautomation bringt die Bytes in die Reihenfolge 2 1 4 3

    Gibst Du beim Aufruf der Function FC_4BYTE_TO_REAL die Bytes teilweise vertauscht an?
    Oder speichert das TwinCAT-SPS-System einen 32-Bit-REAL nur wordweise in Little Endian?


    Du hast angegeben, Du empfängst von dem µC
    Code:
            dez hex
    Byte 1: 236  EC  LSB
    Byte 2:  81  51
    Byte 3: 154  9A
    Byte 4:  68  44  MSB
    1234.56 = 16#449A51EC

    Das sollte so im Speicher liegen:
    Code:
    Big Endian (Motorola, Siemens)  : 44 9A 51 EC  (4 3 2 1)
    Little Endian (Intel, TwinCAT)  : EC 51 9A 44  (1 2 3 4)
    
    artofautomation FC_4BYTE_TO_REAL: 51 EC 44 9A  (2 1 4 3)
    Hat jemand eine Erklärung dafür? Ich habe leider kein TwinCAT-SPS-System zum Testen.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    Standard

    Moin Harald,

    so übergebe ich die gelesenen Bytes der Funktion:

    floatZahl := FC_4BYTE_TO_REAL (BYTE2 , BYTE1, BYTE4 , BYTE3)

    Hab dieses hier gefunden: "TwinCAT-SPS-System arbeitet aber mit dem Little-Endian-Format (INTEL)."
    http://infosys.beckhoff.de/index.php...teorder.htm&id=

    Gruß
    Fragekatalog

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

    PN/DP (01.09.2015)

  10. #17
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.335
    Danke
    932
    Erhielt 3.333 Danke für 2.691 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von SPS_Fragekatalog Beitrag anzeigen
    so übergebe ich die gelesenen Bytes der Funktion:

    floatZahl := FC_4BYTE_TO_REAL (BYTE2 , BYTE1, BYTE4 , BYTE3)
    Das erklärt, warum es funktioniert, da die Function die Bytes 2/1 und 4/3 wieder zurücktauscht.

    Die 4 Bytes liegen schon in der richtigen Reihenfolge vor, Du hättest auch einfach mit memcpy oder mit einem Pointer aufs erste Byte die 4 Byte in eine FLOAT/REAL-Variable kopieren können.

    Danke für die vollständig Aufklärung.

    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 (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
  •