TIA Byte zugriff eines DInt innerhalb einer FOR schleife

Julian0815

Level-1
Beiträge
6
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi zusammen,

ich möchte die 4 Bytes eines DInt's in ein "Array of Byte" schreiben.
Manuell ist das ja recht einfach z.b. so:
Array[byte] := DINT.byte​

#Request_Data_to_be_send[0] := #Stat_Tel_Lenght.%B0;
#Request_Data_to_be_send[1] := #Stat_Tel_Lenght.%B1;
#Request_Data_to_be_send[2] := #Stat_Tel_Lenght.%B2;
#Request_Data_to_be_send[3] := #Stat_Tel_Lenght.%B3;


Das funktioniert soweit auch ganz gut - jetzt wollte ich das eleganter mit einer FOR-Schleife lösen aber da hab ich so meine Probleme...
Hab mir das so gedacht:

FOR #i := 0 TO 3 DO

#Request_Data_to_be_send[#i] := #Stat_Tel_Lenght.%B[#i];

END_FOR;

Aber ich bekomm den hinteren Ausdruck nicht korrekt hin (fett markiert) - wie muss ich das schreiben das ich auf das i'te Byte von #Stat_Tel_Lenght zugreifen kann??

Ich steh grad voll auf em Schlauch :-(

Danke schon mal für eure Hilfe und ein schönes Wochenende

Grüße

Julian
Screenshot.png
 
@ DeltaMikeAir:
hast recht, in dem Screenshot fehlt es, aber ich hatte es auch schon drin und macht keinen unterschied :-(

@ Vollmi

Echt? :-( Das ist doch Sche**e... das geht doch in andern Programmiersprachen auch ohne Probleme :-(
Naja im schlimmsten Falls mach ich das halt "manuell" - wäre nur schön gewesen und sähe schöner aus ;-)
 
Zuletzt bearbeitet:
#Request_Data_to_be_send[0] := #Stat_Tel_Lenght.%B0;
#Request_Data_to_be_send[1] := #Stat_Tel_Lenght.%B1;
#Request_Data_to_be_send[2] := #Stat_Tel_Lenght.%B2;
#Request_Data_to_be_send[3] := #Stat_Tel_Lenght.%B3;


Das funktioniert soweit auch ganz gut - jetzt wollte ich das eleganter mit einer FOR-Schleife lösen
Apropos "elegant": Ich halte dieses Einzelbyte-Kopieren bereits für die eleganteste Methode, weil es für jederman sofort verständlich ist und auf jeder SPS funktioniert. Auch eventuell nötige beliebige Vertauschungen der Bytereihenfolge sind bei den 4 Einzel-Transfers sehr einfach und verständlich einbaubar. Außerdem ist das gleichzeitig die effizienteste Methode.

Wenn es denn aber unbedingt umständlich und undurchsichtig aussehen muß, dann wäre noch möglich:
A) auf das Ausgabe-Byte-Array per "AT" ein DINT legen und den Eingangs-DINT #Stat_Tel_Lenght mit nur einer Anweisung da rein kopieren
B) oder auf den Eingangs-DINT #Stat_Tel_Lenght per "AT" ein Byte-Array legen, dann können die einzelnen Bytes indiziert angesprochen werden

Wahrscheinlich ist bei beiden Varianten allerdings die Bytereihenfolge verkehrt herum und muß bei Bedarf noch separat vertauscht werden. Außerdem funktioniert die "AT"-Geschichte nicht mit "optimiertem" Speicher.

PS: Length schreibt man mit "th" und nicht mit "ght".

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Harald,

Oh - da ist mir ein Tippfehler unterlaufen, danke für den Hinweis mit dem "ght" :-)

Wenn man nur 4 Bytes verschieben will ist es ok es so zu machen, wen man aber ein größeres Array (z.B. 64byte) hat ist es viel kopieren und es werden einige Zeilen mehr als mit einer Schleife.
Außerdem finde ich Schleifen nicht wirklich undurchsichtig - aber das ist ja "Geschmackssache"

Das mit der Reihenfolge ist mir vorhin auch schon aufgefallen und hab ich auch schon korrigiert :-)

Naja, ich werde es dann wohl so machen wie ich es am Anfang hatte und auf die Schleife verzichten - hab ja zum Glück nur wenige Bytes (zumindest aktuell) die ich verschieben muss

Aber ich werde die AT-Variante wohl trotzdem interessehalber mal ausprobieren ;-)
 
Ohje... " I think I Spider" - was hab ich den da für einen Stuss geschrieben...
Ich glaube es lag einfach daran das es Freitag war und ich schon längest am Baggersee liegen wollte
 
Zurück
Oben