TIA Struktur (16-Bit) nach WORD kopieren ?

zephyr

Level-2
Beiträge
27
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
weiss jemand wie man am einfachsten den Inhalt einer Struktur (Länge 16 Bit) in eine WORD Variable kopieren kann ?
Ich möchte nicht jedes Bit aus der Struktur einzeln auswerten.
Beide Variablen sind in einem DB vorhanden. Und nicht als Merker.

Bei CoDeSys gibt es z. B. die Funktion SysMemCopy.
Bei Rockwell die Routine CPS.

MOVE_BLK usw... habe ich probiert aber ohne Erfolg.

TIA V13 SP1 Update 3
S7-1500
Optimierter Bausteinzugriff ist eingeschaltet !

Vielen Dank im Voraus
zephyr
 
Zuletzt bearbeitet:
Optimierter Bausteinzugriff ist eingeschaltet !
Du mußt jedes Bit einzeln kopieren, weil "niemand" weiß, wo der TIA-Compiler die einzelnen Bits "optimiert" ablegt.
Eventuell werden die Bits eines Arrays aufeinanderfolgend abgelegt, ich glaube aber eher nicht, daß TIA die Anfangsadresse des Arrays verrät.

Vielleicht wäre es besser, wenn Du in der Struktur die 16 Bit gleich als Word deklarierst, dann weißt Du wenigstens, daß die Bits in dem Word liegen.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die Antwort,

Genau das wollte ich vermeiden.
Ich könnte natürlich gleich eine Variable vom Typ WORD benutzen. Ich benötige aber in meinem Projekt beide Variablentypen.
In CoDeSys oder auch Rockwell kann man auf einzelne Bits in einem WORD mit "Word_Variable".x ( bit adresse) zugreifen.
Leider funktioniert dies bei Siemens auch nicht. Sonst wäre mein Problem auch gelöst.

Viele Grüße
zephyr
 
Unter bestimmten Voraussetzungen kann man bei TIA ebenfalls direkt auf einzelne Bits .x.. eines Words zugreifen (siehe Slice-Zugriff).
Eventuell das Word nach TEMP umkopieren und da auf die Bits per Slice zugreifen.
Ansonsten bleibt immer noch die good old Standard-Methode, die Bits per Wordverknüpfung mit einer Bitmaske auszumaskieren.

Harald
 
Bei einer 1500er müsste das immer funktionieren.

Du nimmst also anstatt ein Struct ein Word, und greifst per Slice auf die einzenlnen Bits zu mit:

Code:
.%X1
 
Zurück
Oben