- Beiträge
- 24.462
- Reaktionspunkte
- 7.819
-> Hier kostenlos registrieren
Der bekommt das NICHT hin, Bits vertauschen kann der SFC20 nicht.Also das der SFC20 das so hinbekommt wusste ich nicht.
In Deinem Beitrag #14 sehe ich nichts, was darauf hindeutet, daß Du auch noch Bits vertauschen wolltest.
Dein Text und Dein Code suggerieren ein einfaches lineares Kopieren.
(Warum hast Du eigentlich die Bits in falscher Reihenfolge?)
Bist Du sicher, daß Du die 4 niederwertigen mit den 4 höherwertigen Bits tauschen mußt (0123_4567 --> 4567_0123)? Oder willst Du vielleicht die Bitreihenfolge komplett spiegeln (Reverse) (0123_4567 --> 7654_3210)?Ich denke wenn ich den Wert 0x0C vorher um 4 nach links rotiere (sprich: die 4 niederwertigen mit den 4 höherwertigen Bits tauschen) und dann den SFC20 darauf anwende, dass mir der dann die richte Bitfolge generiert.
Deine Beispielzahl B#16#0C ist als Beispiel ziemlich ungeeignet, besser: wie soll ein B#16#29 nach dem Übertragen aussehen?
Ist das so schwer, sich eindeutig auszudrücken? Ist das so schwer, uns ein paar grundlegende Informationen zu geben? z.B. wissen wir immer noch nicht, für welche CPU das ganze sein soll. Manche CPU lassen diese indirekten Zugriffe nicht zu ...
Meine Glaskugel sagt:
Du programmierst mit Step7 V5.x eine CPU S7-300/400
Du hast im STAT eines FB
* BYTE_CODE : ARRAY[0..5] OF BYTE
* BIT_CODE : ARRAY[0..47] OF BOOL
und willst das BYTE-Array BYTE_CODE in das BOOL-Array BIT_CODE umkopieren, wobei die Bits innerhalb jedes Bytes gespiegelt werden sollen.
Nun, eine Kopierschleife aus dem Byte-Array in das Bit-Array könnte etwa so aussehen:
Code:
L P##BYTE_CODE
T #PTR_BYTE //Pointer auf Quellarray
L P##BIT_CODE
T #PTR_BIT //Pointer auf Zielarray
L 6 //Anzahl Bytes
next: T #SCHLEIFENCOUNTER
[COLOR="#0000FF"]// A) Bits 1:1 kopieren[/COLOR]
L DIB [#PTR_BYTE] //Quellbyte lesen
T DIB [#PTR_BIT] //auf 8 Zielbits schreiben
[COLOR="#0000FF"]// B) oder Bits spiegeln/tauschen/...
// z.B. Bitwertigkeiten addieren
// oder Bits tauschen via Schieben und maskieren
// oder Code von Larry #10, oder ...[/COLOR]
//Pointer weiterstellen
L #PTR_BYTE //Pointer auf Quellarray
L P#1.0 //1 Byte = 8 Bit weiterstellen
+D
T #PTR_BYTE
L #PTR_BIT //Pointer auf Zielarray
L P#1.0 //1 Byte = 8 Bit weiterstellen
+D
T #PTR_BIT
L #SCHLEIFENCOUNTER
LOOP next
Einen der Pointer (z.B. #PTR_BYTE) könnte man auch in AR1 behalten.
Die Bits im Byte spiegeln siehe nächster Beitrag.
Harald