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

Ergebnis 1 bis 9 von 9

Thema: SCL - dword als Real interprätieren

  1. #1
    Registriert seit
    20.04.2016
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,


    vorab - ich habe rel. selten mit Siemessteuerungen zu tun, mein Hauptaufgabengebiet befindet sich eher im Bereich der Hochsprachenprogrammierung. Für einen Test benötige ich nun aber ein Programm in einer S7 1200, das Daten per S7 Kommunikation in einem DB annimmt, manipuliert und in einem anderen DB wieder zur Verfügung stellt.


    Mein Eingangs- und Ausgangs DB wird mit 16 Bit Words befüllt. Ich muss nun jeweils 2 Words nehmen, einen Word Swap machen, das entstandene DWord als Float interprätieren, eine Berechnung durchführen, in einen Integer konvertieren und wieder in 2 Words ausgeben.
    In "C" kann man das z.B. mit memcpy() oder einem Union lösen


    union {
    u16 low;
    u16 high;
    float f;
    } reinterpret;


    reinterpret.low = dw2;
    reinterpret.high = dw0;
    floatval = reinterpret.float;


    Wie mache ich das in Siemens SCL?


    Mit der Suche bin ich nicht wirklich weitergekommen. Einige Suchergebnisse beziehen sich auf Codesys ST, andere habe ich einfach nicht verstanden


    Danke!
    Zitieren Zitieren SCL - dword als Real interprätieren  

  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

    Union in C entspricht AT-Sicht in SCL, geht aber nicht in Speicher mit "optimiertem" Zugriff. Außerdem geht eine AT-Sicht auf Strukturen nur auf den Struktur-Anfang, aber nicht auf Struktur-Mitglieder:
    Code:
      reinterpret : STRUCT
        low : WORD;
        high : WORD;
      END_STRUCT;
    
      f AT reinterpret : REAL;
    
    //Zugreifen Beispiele
    #reinterpret.low := #reinterpret.high;
    #RealVar := #f;
    Falls Du mit TIA programmierst, da mußt Du die AT-Sicht zusammenklicken oder aus einer SCL-Quelle importieren (ich weiß nicht wie das geht). Außerdem will das TIA-SCL ein # vor jedem Variablenname von lokalen Variablen.

    Beispiele für AT-Sichten
    Wie programmieren Sie in STEP 7 (TIA Portal) die Überlagerung von Variablen mit dem Schlüsselwort "AT"?
    Wie kann in S7-SCL mit Hilfe der AT-Funktion ein ANY Pointer zusammengestellt werden?


    2 Words zusammenfassen und als REAL interpretieren - diese Variante geht immer:
    Code:
    #RealVar := DWORD_TO_REAL( SHL(IN:=WORD_TO_DWORD(#H_Word), N:=16) OR WORD_TO_DWORD(#L_Word) );
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  3. #3
    Registriert seit
    25.01.2008
    Ort
    Hamburg
    Beiträge
    306
    Danke
    16
    Erhielt 85 Danke für 47 Beiträge

    Standard

    Ich habe das zwar noch nicht ausprobiert, aber evtl. geht das mit den ReadXEndian Anweisungen.

    ReadXEndian.jpg

  4. #4
    Registriert seit
    25.09.2013
    Beiträge
    231
    Danke
    10
    Erhielt 31 Danke für 30 Beiträge

    Standard

    @ Miasma,

    das fällt flach da er eine S1200 hat.

    Gruß

    Jens

  5. #5
    Registriert seit
    25.01.2008
    Ort
    Hamburg
    Beiträge
    306
    Danke
    16
    Erhielt 85 Danke für 47 Beiträge

    Standard

    Zitat Zitat von DOD666 Beitrag anzeigen
    @ Miasma,

    das fällt flach da er eine S1200 hat.

    Gruß

    Jens
    Das haben die mit der aktuellen Firmware nachgezogen.

    ReadXEndian.PNG

  6. #6
    Registriert seit
    25.09.2013
    Beiträge
    231
    Danke
    10
    Erhielt 31 Danke für 30 Beiträge

    Standard

    Wow das hätte ich nicht gedacht.

  7. #7
    Registriert seit
    11.12.2009
    Beiträge
    2.115
    Danke
    388
    Erhielt 390 Danke für 271 Beiträge

    Standard

    Mein Ansatz wäre etwa so:

    Code:
    AUSGANGSREAL := INT_TO_REAL(SWAP(EINGANGSWORD));
    ggf. noch
    Code:
    AUSGANGSREAL := INT_TO_REAL(WORD_TO_INT((SWAP(EINGANGSWORD)));
    Grüße

    Marcel
    Stell Dir vor es geht, und keiner kriegts hin!

  8. #8
    martin.wagner ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    20.04.2016
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für eure Antworten.

    Mit den Funktionen DWORD_TO_REAL(), REAL_TO_DWORD() etc. funktionierts. Diese habe ich in der Doku zwar gesehen, aber nicht näher betrachtet da ich davon ausgegangen bin das diese eine Datentypkonvertierung machen...

  9. #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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Nein, bei Siemens-SCL übernimmt DWORD_TO_*/*_TO_DWORD rein das Bitmuster ohne Konvertierung. (wie ich es bei ANY_BIT-Datentypen auch erwarte)
    Bei Codesys-ST wird WORD als Synonym zu "unsigned" vermixt und konvertiert da. Da darf man mit ANY_BIT-Datentypen auch rechnen. (halte ich für nicht korrekt)

    Wie solche Konvertierungen funktionieren sollen ist in der IEC61131-3 leider nicht festgelegt, sie sind "implementation-dependent".
    Die Siemens-Variante halte ich für die "richtige".

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    vollmi (21.04.2016)

Ähnliche Themen

  1. Array an DWORD übergeben (SCL)
    Von MatthiasH24 im Forum Simatic
    Antworten: 22
    Letzter Beitrag: 30.01.2014, 20:04
  2. Step 7 DWORD to REAL
    Von basstscho im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 06.12.2013, 18:35
  3. Antworten: 7
    Letzter Beitrag: 11.01.2013, 17:37
  4. Word,DWORD oder doch Real
    Von Thor´sHammer im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 24.09.2011, 14:22
  5. SCL Bit in Dword
    Von enter im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 25.08.2010, 00:08

Lesezeichen

Berechtigungen

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