Little Endian / Big Endian in S7 und DP Slave

superkato

Level-1
Beiträge
220
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,
hab folgendes Problem und zwar habe ich einen DP Slave mit folgendem Hinweis:

"16/32-bit Werte werden im Motorola Format (Big Endian, High Byte…Low Byte) übertragen."

sprich wenn ich auf das 6te Bit von 16Bit bzw. DWord eine "1" setzen will dann muss ich bspw. bei den Bytes AB10 und AB11 nicht A10.6 sondern A11.6 angeben..

Auch alle Werte in Bytes die ich vom DP-Slave erhalte sind entsprechend gedreht, auch die sende bytes müssen entsprechend gedreht werden.

Gibts eine Einstellung in Step7 oder einen Programmiertrick oder Baustein wie ich das wieder ins Siemens also Little Endian Format bekomme?

vom DP Slave erhallte ich 88byte Eingang (zum auslesen von werten) und 2Byte Ausgang (zum schreiben von Befehlen).

Für Hilfe wäre ich sehr dankbar!


lg
Sk

PS. In c++ konnte man byte-arrays immer mit dem array reverse befehl drehen um auf das richtige format zukommen.
 
Moin,

die Bytes können in Step7 ganz einfach mittels dem Befehl "TAW bzw. TAD" getauscht werden.

Code:
//Bytes im Wort tauschen
L MW0
TAW
T MW1

//Bytes in Doppelwort tauschen
L MD10
TAD
T MD20
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank eye sowas hab ich gesucht!

Ich hatte übrigens nun auch dieses Problem in einem FC2, dass ich ja 4 DP Slaves habe und diese gehen bis E 588.

Ich hab in dem FC2 versucht auf das Bit 2 zu greifen (E588.2) was nicht ging weil die S7-300 nur bis E128 unterstützt. Das FC lies sich deswegen auch nicht auf die CPU laden.

Mit PED588 / PEW588 geht es aber dann müsste ich ja erstmal das Wort oder DWort laden und dann aus dem Lademerker das bit ziehen oder?
so?

also
NW1:
L PED588
T MD5

NW2:
MD5.0
= A4.0

kann man das nicht eigentlich direkt in einem Netzwerk schreiben?^^ Oder gibts da diese "für jeden ausgang nur ein NW" Regel?
 
NW1:
L PED588
T MD5

NW2:
MD5.0
= A4.0

kann man das nicht eigentlich direkt in einem Netzwerk schreiben?^^ Oder gibts da diese "für jeden ausgang nur ein NW" Regel?

Dein NW 2 sollte so heißen:
U M 5.0
= A 4.0

Wenn die Ausgänge fortlaufend sind wie das PED , dann kannst du schreiben:

L PED 588
T AD4

Dann hast du das Abbild vom PED im AW


bike
 
Mit PED588 / PEW588 geht es aber dann müsste ich ja erstmal das Wort oder DWort laden und dann aus dem Lademerker das bit ziehen oder?
so?

also
NW1:
L PED588
T MD5

NW2:
U M5.0
= A4.0
Ja, ist so.
kann man das nicht eigentlich direkt in einem Netzwerk schreiben?^^ Oder gibts da diese "für jeden ausgang nur ein NW" Regel?
Ne, das geht in einem Netzwerk. Würde ich auf jeden Fall so machen.
Wenn du es so nach deinem Beispiel machst, dann kannst du auch immer das selber MD nehmen:
Code:
   L PED588
   T MD4 // gerade ist besser
   U M4.0 
   = A4.0
 
   L PED562
   T MD4
   U M4.0 
   = A4.1
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wieso ist eigentlich gerade besser?

ah ok also ich kann den MD4 immer wieder benutzen?

kanns nicht passieren das der MD4 A4.1 die daten von A4.0 noch drin hat?

(naja ich denk bei einer zyklischen sps ist das halt so und nicht wie in einem c++ programm, wegen dem prozessabbild nicht wahr?)
 
wieso ist eigentlich gerade besser?

ah ok also ich kann den MD4 immer wieder benutzen?

kanns nicht passieren das der MD4 A4.1 die daten von A4.0 noch drin hat?

(naja ich denk bei einer zyklischen sps ist das halt so und nicht wie in einem c++ programm, wegen dem prozessabbild nicht wahr?)

Du kannst das MD öfter beschreiben und dann zu verwenden.
Doch machen würde ich es nicht, da bei Doppelzuweisung es schwer Fehler ggF zu finden.
Und du musst auch unterscheiden zwischen Merkern und Ausgang beachten.
Du kannst mit einem Merker verschiedene Ausgänge ansteuern.

U M4.0
= A4.0

U M 4.1
= A 4.0

U M4.0
= A 4.2

Alle Varianten sind möglich.


bike
 
Zurück
Oben