# High-Low Byte tauschen



## kilic (28 Oktober 2008)

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?


----------



## Gerhard K (28 Oktober 2008)

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


```
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


----------



## SPSKILLER (28 Oktober 2008)

Hallo,

so in etwa sollte das laufen (ungetestet):


```
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


----------



## kilic (28 Oktober 2008)

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


----------



## kilic (28 Oktober 2008)

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


----------



## SPSKILLER (28 Oktober 2008)

bitte beachte noch meine Änderung...


----------



## vierlagig (28 Oktober 2008)

die schleife wird nicht funktionieren


----------



## SPSKILLER (28 Oktober 2008)

warum nicht?
habs zwar nur hingeschmiert, schien mir aber plausibel...


----------



## kilic (28 Oktober 2008)

wieso nicht??


----------



## vierlagig (28 Oktober 2008)

SPSKILLER schrieb:


> warum nicht?


 

```
*
      ....
      [B][COLOR=red]L     tiLC[/COLOR][/B]
      LOOP  L1
```


----------



## SPSKILLER (28 Oktober 2008)

tiLC müsste noch in AKKU2 sein...


----------



## vierlagig (28 Oktober 2008)

SPSKILLER schrieb:


> tiLC müsste noch in AKKU2 sein...


 
LOOP arbeitet aber mit AKKU1


----------



## SPSKILLER (28 Oktober 2008)

vierlagig schrieb:


> LOOP arbeitet aber mit AKKU1


 
... das ist richtig, deshalb ja auch

tak
LOOP L1

Schönen Gruß


----------



## vierlagig (28 Oktober 2008)

SPSKILLER schrieb:


> ... das ist richtig, deshalb ja auch
> 
> tak
> LOOP L1
> ...


 
sorry, übersehen


----------



## hugo (30 Oktober 2008)

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


----------



## online (30 Oktober 2008)

Gerhard K schrieb:


> zwei db´s gleichzeitig auf geht nicht.ausser einer davon ist ein IDB.


 
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


----------



## vierlagig (30 Oktober 2008)

online schrieb:


> 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



das würde mich interessieren, zeig mal, wie du das machst ...


----------



## Flinn (30 Oktober 2008)

online schrieb:


> 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:


```
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-


----------



## online (30 Oktober 2008)

vierlagig schrieb:


> das würde mich interessieren, zeig mal, wie du das machst ...


So wie von Flinn gezeigt habe ich es mal gelernt, gebraucht habe ich das aber noch nicht so. Ich weiß halt nur, dass es geht.
Gruß online


----------



## stricky (30 Oktober 2008)

Flinn schrieb:


> Richtig, ich mache das immer so:



dito .. ich auch

gruß
christian


----------



## stricky (30 Oktober 2008)

ach ja,

darfst das natürlich nicht in einem fb machen ... sonst hast du ein problem

oder du sicherst dir das ar2 bevor du das änderst und schreibst es danach zurück !


----------



## Gerhard K (30 Oktober 2008)

```
AUF   DB30                        // AR1: Zeiger auf Quelldaten
        LAR1  P#0.0
        AUF   DI31                        // AR2: Zeiger auf Zieldaten
        LAR2  P#0.0
```
 
da könnte mann wieder eine diskussion losbrechen.der eine sagt das ist unsauber programmiert,der andere schreit nein usw.
wenn man es so macht muß man wie schon erwähnt AR sichern und dann zurückschreiben


----------



## Flinn (30 Oktober 2008)

Gerhard K schrieb:


> ```
> AUF   DB30                        // AR1: Zeiger auf Quelldaten
> LAR1  P#0.0
> AUF   DI31                        // AR2: Zeiger auf Zieldaten
> ...


 
Klar, das AR muss man natürlich sichern.
Aber warum sollte das unsauber programmiert sauber? Erkläre mal Deine (oder deren) Bedenken?

Gruß
Flinn


----------



## stricky (30 Oktober 2008)

tach,

unsauber finde ich das auch nicht ...

wenn man das einfach in einen fc steckt, dann braucht man nicht mal ar2 und instanz db sichern ...

ist dann doch ne einfache lösung und nachvollziehbar

gruß


----------



## Gerhard K (30 Oktober 2008)

wenn einer nicht sattelfest ist wird er denken es wird mit DI ein IDB aufgerufen und schon steht er an.


----------

