TIA Wandeln Big Endian in Little Endian

mitchih

Level-2
Beiträge
806
Reaktionspunkte
32
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich stehe gerade ein wenig auf dem Schlauch.
Ich verwende TIA V15 SP1 und eine 1512FSP als PLC.

Nun muss ich von einem Microcontroller über Profinet Daten auslesen. Ich habe 32 byte Steuerdaten und 64 Byte Empfangdaten.

Ich habe natürlich die Daten schön in die vorgegebenen Strukturen gepackt und nun in einem DB gepackt. In den Struktueren habe ich DINT, Real, Bool, INT als Datentypen.

Bei der S7 300 konnte man das ja mit TAW lösen. Das klappt bei mir nicht mehr der Befehl wird immer rot dargestellt. Außerdem möchte ich das natürlich gerne möglichst symbolisch machen.
In SCL hab ichs mit SWAP WORD versucht, aber das geht ja nicht bei Strukturen.

Also ich habe aktuell einen Bereich im Rohdaten Format. Hier könnte ich auch ein Array anlegen wenns einfacher ist.
Schlussendlich sollen die Daten aber in der STruktur liegen, da ich damit ja arbeiten muss.

Wie stelle ich das mit Tia am geschicktesten an ?

Danke für eure Hifle
 
In SCL hab ichs mit SWAP WORD versucht, aber das geht ja nicht bei Strukturen.
Das sollte aber gehen, z.B. so
Code:
#iResult := WORD_TO_INT( SWAP(INT_TO_WORD(#myStruct.iVar)) );
#rResult := DWORD_TO_REAL( SWAP(REAL_TO_DWORD(#myStruct.rVar)) );

TAW und TAD können nur in AWL verwendet werden - will TIA V15.1 die Anweisungen nicht mehr? :confused:

Harald
 
Hallo,
Danke für die Tips,
Also TAD bzw TAW wollen nicht. Also in AWL.
Das hatte ich getestet.
Wie bekommen ich den die Daten in mein struct?
Also
Struct:= swap_word( meine andere Struktur oder 2 Byte )
Am liebsten würde ich ja auch den ganzen Block wandeln. Mit einer Schleife oder so.



Gesendet von iPhone mit Tapatalk
 
Am liebsten würde ich ja auch den ganzen Block wandeln. Mit einer Schleife oder so.
Es muß jede Variable einzeln ge-SWAP-t werden. Schleife oder so ginge nur wenn das ein Array ist. Wie sieht die Struktur der 64 Byte Empfangdaten aus?
Ich denke mal, 20 Variablen mit einzelnen Anweisungen zu SWAPen ist eh effizienter und auf jeden Fall verständlicher als eine Schleife basteln.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe ein Struct mit 16 Bool dann ein int ein paar Ding und reals
Bei den Ausgängen sind das 2 Strukturen mit je 16 bool und dann real und int.
Die Ints und real usw sind ja kein Problem suche nur eine Lösung fur meine Boolschen Strukturen.



Gesendet von iPhone mit Tapatalk
 
Warum willst Du die BOOLs SWAPen? Du brauchst die doch nur in der Reihenfolge symbolisch deklarieren wie sie tatsächlich kommen und dann einfach symbolisch ansprechen.

Die Byte-Reihenfolge Big Endian und Little Endian gilt nur für die Bytes innerhalb eines einfachen mehrByte-Datentyps (z.B. xINT, xWORD, xREAL). Bei BOOL und einByte-Datentypen (z.B. BYTE, CHAR) und bei zusammengesetzten Datentypen (z.B. Struct, Array) ist die Reihenfolge immer so, daß erst das erste Element und zuletzt das letzte Element kommt.

Harald
 
Also TAD bzw TAW wollen nicht. Also in AWL.
Das hatte ich getestet.
Ich habe (noch) kein TIA V15.1, doch vielleicht hat man festgestellt, daß TAW anders funktioniert als in der Hilfe beschrieben, und anstatt die Hilfe/Dokumentation/Handbuch zu korrigieren hat man die Anweisung entfernt/gesperrt? ;)
Systemhandbuch STEP 7 und WinCC Engineering V15.1 (10/2018 )
Abschnitt TAW: Bytes im rechten Wort des Akkumulators 1 tauschen (S7-1500)
Das Beispiel "Funktionsweise der Anweisung anhand konkreter Operandenwerte" ist seit V13 SP1 (2014) falsch. Siemens bekommt die zig hundert Fehler in den vielen tausend Seiten der TIA-Dokumentation einfach nicht korrigiert... Hauptsache viele neue Funktionen einführen, die ein echter Programmierer nicht braucht... ;)

Harald
 
Dafür gibt es in TIA in SCL doch die Befehle READ_LITTLE, WRITE_LITTLE, READ_BIG und WRITE_BIG.
Benötigt zwar einen Zwischenspeicher, etwas umständlich, aber funktioniert.

Juppi
 
Zurück
Oben