High-Low Byte tauschen

kilic

Level-1
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich habe ein DB30 in dem meine Störmeldungen gespeichert sind diese Meldungen möchte ich "high-low-byte" gedreht in den DB31 speichern.
Wie muss der AWL code dafür aussehen??

AUF DB 30
L P#DBX 0.0
LAR1
AUF DB 31
L P#DBX 0.0
LAR2
L W [AR2,P#0.0]
TAW
T W [AR1,P#0.0]

LOOP???

aber wie?
 
zwei db´s gleichzeitig auf geht nicht.ausser einer davon ist ein IDB.mußt du zwischenspeicher benutzen wenn du das umlegen willst.

Code:
AUF DB 30 
L P#DBX 0.0 // ein Bit im pointerformat,oder was willst du hier erreichen???
LAR1 
AUF DB 31 
L P#DBX 0.0
LAR2 
L W [AR2,P#0.0]   // 
TAW 
T W [AR1,P#0.0]  // 
 
LOOP???

aber wie gesagt.so funkt das nicht
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

so in etwa sollte das laufen (ungetestet):

Code:
l dino
t tiDINO //temp INT
 
auf DB31
tdb
auf DB30
lar1 p#dbx0.0
l 100 //Anzahl Worte
L1: t tiLC //temp INT
l w [ar1,p#0.0]
tdb
taw
t w [ar1,p#0.0]
tdb
+ar1 p#2.0
tak
loop L1
 
auf db [tiDINO]
tdb

Änderung: Beispiel ist für nen FB, bei FC muss DINO nicht gespeichert werden.
Gruß Micha
 
Zuletzt bearbeitet:
danke für die schnelle antwort,

nein, das sind beide normale DB'S. Wie du siehst hab ich wenig erfahrung mit AWL.

die idee war: 1.db in AR1 laden, akkus tauschen und in ar2 (2.db) transferieren.
dann loop auf nächstes wort und nochmal ausführen.

ich weis aber nicht wie ich es machen soll

mfg
 
hallo spskiller,

vielen dank für deine rasche hilfe.

ich habs mal eingefügt und es funktiopniert, ich werds noch ausführlich testen aber es sieht sehr gut aus, vielen dank nochmal.

mfg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
einen byte swap macht an üblicherweise mittel ror oder rol (rotate left oder ight) in einziger befehl tausch somit das high und low byte

in st sieht das wi folgt aus: Swap_Byte := ROL( in, 8 );

dinge we diese findest du auch in der open source lib von oscat unter www.osat.de
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, meines wissens nach ist es doch möglich, da ich auch einen normalen DB so aufrufen kann, als wäre es ein Instanz DB. Somit hätte ich zwei normale DB geöffnet.
Gruß online

Richtig, ich mache das immer so:

Code:
        AUF   DB30                        // AR1: Zeiger auf Quelldaten
        LAR1  P#0.0
        AUF   DI31                        // AR2: Zeiger auf Zieldaten
        LAR2  P#0.0
        L     10                            // z.B. 10 Worte
LOP1: T  #t_Schleifenzaehler
        L     DBW [AR1,P#0.0]        // Quellwort mit Meldungen
        TAW                               // Bytes drehen
        T     DIW [AR2,P#0.0]        // Zielwort mit Meldungen
        +AR1  P#2.0                     // nächtes Quellwort
        +AR2  P#2.0                     // nächstes Zielwort
        L     #t_Schleifenzaehler
        LOOP  LOP1

Gruß
-Flinn-
 
Zurück
Oben