DP-DP-Koppler

Zuviel Werbung?
-> Hier kostenlos registrieren
Ich versuche mich gerade daran little und big endian zu tauschen, wenn man das so bezeichnet.
Und zwar möchte ich die Daten die in DB1002 ("falsche" Reihenfolge) in der Reihenfolge korrigieren und dann in DB1006 schreiben.

Habe das gerade so ausprobiert:

AUF DB1002 //DB wo die Daten der B&R Steuerung ankommen
L DBW0
TAD //um die Reihenfolge in Akku1 umzutauschen
T MW100

AUF DB1006 //DB wo die Daten in korrekter Reihenfolge rein geschrieben werden sollen
L MW100
T DBW0

Wenn ich den Code beobachte, sehe ich auch das der Inhalt von AKKU1 getauscht wurde.
Der "neue" Wert steht aber dann direkt in der Zeile "AUF DB1006" und eigentlich muss der doch erst die Zeile danach aufgerufen werden.
Wo ist mein Fehler damit ich den neuen Wert in den DB1006 schreibe?
 
Als ersters solltest du mal TAW statt TAD verwenden da du ja ein Wort umwandeln willst!


Meinst du das du zeitlich gesehen siehst das er getauscht wurde und dann auch schon im DB1006 steht?!
Bzw. könntest du gleich so schreiben

Code:
L DB1002.DBW0
TAW
T DB1006.DBW0

Gruß
 
Jein kommt drauf an was du machen willst!

Schau mal bei der Hilfe rein!


Willst du die Bytes in einem Word tauschen oder was willst genau machen?
Gruß
 
Okay dann versuch doch mal folgendes falls du auch ein Doppelword übertragen bekommst!

Code:
L DB1002.DBD0
TAD
T DB1006.DBD0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich bekomme Doppelworte und da vermuten wir das wir Byte 1 mit Byte 2 tauschen müssen und dann Byte 3 mit Byte 4 tauschen und so weiter.

Und dann nochmal Wortweise drehen, also Wort 1 mit Wort 3.

leichter verständlich:
Byte1 -> Byte 4
Byte2 -> Byte 3
Byte3 -> Byte 2
Byte4 -> Byte 1

Aber ob das bei B&R auch so ist, ist jetzt nur eine Vermutung von mir.

Gruß.
 
Den ersten Teil haben wir inzwischen richtig "geschoben".
DINT und REAL muss mit dem Befehl "RRD 16" rotiert werden.
B&R schickt mir noch ein UDINT, welches in meinem Datenbaustein BOOL-Werte sind. Da ist dann Byte 0 mit 1 zu tauschen und 2 mit 3.
Die Daten die ich von der B&R-Steuerung gesendet bekomme, kommen nach dem rotieren jetzt fast alle korrekt an. Die Daten die ich von der S7-Steuerung zu B&R schicke haben wir noch nicht getestet, dürfte aber genauso funktionieren.
 
Das was ich bisher nur sehr unschön gelöst habe ist, das ich die Daten die rotieren möchte immer mit einem eigenen
L DB1002.DBD0
RRD 16
T DB1006.DBD0

L DB1002.DBD4
RRD 16
T DB1006.DBD4

usw. Lade- und Transfehrbefehl rotiert habe. Das muss ich noch in eine Schleife packen, aber zunächst muss die Datenübertragung auch von S7 zu B&R funktionieren.
 
Ich habe jetzt versucht die Daten die ich von der S7-Steuerung zur B&R schicke zu rotieren, damit diese dann auf B&R Seite richtig angezeigt werden. Dem ist aber nicht so.
Das rotieren verschiebt die Bits so wie ich das erwarte. Das Ergebnis auf B&R Seite sind komplett falsche Werte zu denen die ich vorgebe.
Muss ich bei den Daten die ich schicke etwas beachten?
 
Bei den Werten die ich sende, gibt es auf B&R-Seite bei drei Werten das Phänomen das diese Werte (ich gebe statische vor) immer zwischen zwei Werten schwanken.
Wenn ich in meiner VAT oder im DB beobachte ist alles gut, keine Wechsel bei den Werten.
Um auszuschließen das ich den DB an einer anderen Stelle beschreibe, habe ich auch schon einen komplett neuen DB erstellt.
Es scheint als wenn ein Bit sich ändert. Ist dieses Phänomen schon jmd bekannt?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin,
ich versuche gerade einen DB mittels SFC20 in einen anderen DB zu kopieren.
Ich habe zwei S7-Steuerungen von denen ich Daten bekomme, die ich an eine B&R-Steuerung weiterleite.
Ich habe für die Daten die ich von den S7-Steuerungen bekomme jeweils einen DB und einen DB für Mittelwerte (wenn beide S7-Steuerungen laufen).
Da ich nur einen DB an die B&R-Steuerung sende, will ich mittels SFC20 immer die "aktuellen" Daten in den DB kopieren den ich sende.
Wenn ich den SFC20 aufrufe habe ich aber angeblich immer Syntaxfehler.
Code:
CALL "BLKMOV"
SRCBLK := DB1003.DBX0.0 Byte 128
CALL "BLKMOV"
SRCBLK := DB1003.DBX0.0 Byte 128
RET_VAL:=MW0
DSTBLK := DB1005.DBX0.0 Byte 128

Der kursive Teil ist in Step7 rot.
WO ist mein Syntaxfehler, in den Beispielen die ich gefunden habe steht das so.
 
Code:
      CALL  "BLKMOV"
       SRCBLK :=[COLOR="#FF0000"]P#[/COLOR]DB1003.DBX0.0 Byte 128
       RET_VAL:=MW0
       DSTBLK :=[COLOR="#FF0000"]P#[/COLOR]DB1005.DBX0.0 Byte 128

Harald
 
Zurück
Oben