MW zum DB

max1de

Level-1
Beiträge
45
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Freunde!

Kleines Problem was mich aber zum Kochen bringt!!

Problem: Ganz einfach ( eigentlich! )

Ich sende eine Hex Zahl (Wort 47F) zu einem Datenbaustein.
Dort soll diese Zahl in Binärer Darstellung angezeigt werden.
Datenbausteinbitadressen 8.0 bis 9.7
47f hex = 0000 0100 0111 1111 bin (Rechtslauf Micromaster!)

Das Problem ist das der Datenbaustein die Bytes vertauscht!

47f hex ist bei mit im DB jetzt: 0010 0000 1111 1110

Komisch: gestern machte er es noch 100 % richtig.

Hoffe das mir jemand eine Lösung geben kann.
Bestimmt habe ich ein Häkchen gesetzt oder gelöscht oder.....


Vielen dank im Voraus !!!!!
 
Bist Du sicher, dass Du die Bits richtig interpretierst?

guck mal hier...
 

Anhänge

  • word.jpg
    word.jpg
    15,5 KB · Aufrufe: 83
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo max1de,
da müsstest du schon etwas von deinem Code darstellen. Dann kann man mal schauen (und dir vielleicht helfen)
Schon mal getestet:
- Schreibst und schaust du im richtigen DB?
- Liegt im Programm eventuell eine Doppelzuweisung vor?
- Bezieht sich irgendeine Berechnung auf das DW8 im DB?
Es gibt noch viele andere Gründe, aber ausschließen kannst du sicherlich zu 100%, dass sich die Daten "von allein" verändern.
 
Will ich doch hoffen !

also ich transferiere die Hex Zahl

47F = 0000 0100 0111 1111 in den DB2.DBW 8.0

Da ich die bits auswerten möchte sollten diese also von der Adresse 8.0 bis zur Adresse 9.7 angezeigt werden.

jedoch dreht er die Bytes, so dass ich angezeigt bekomme

0010 0000 11111110 ==> dies ist halt nicht 47f ==> Frequenzumrichter meckert !
 
Hallo max1de,
da müsstest du schon etwas von deinem Code darstellen. Dann kann man mal schauen (und dir vielleicht helfen)
Schon mal getestet:
- Schreibst und schaust du im richtigen DB?
- Liegt im Programm eventuell eine Doppelzuweisung vor?
- Bezieht sich irgendeine Berechnung auf das DW8 im DB?
Es gibt noch viele andere Gründe, aber ausschließen kannst du sicherlich zu 100%, dass sich die Daten "von allein" verändern.



...
L w#16#47F
T db2.dbx 8
....

Habe nachgeschaut : keine Doppeltzuweisung keine Berechnung
 
Hallo max1de,
Wie ich schon vermutete liegt Dein Problem darin, dass Du den Aufbau eines
Wortes nicht verstanden hast. In Deinem Beispiel stellst Du die Bitfolge für
HEX47F im Datenbausteinwort 8 wie folgt dar:

8.0__8.1__8.2__8.3__8.4__8.5__8.6__8.7__9.0__9.1__9.2__9.3__9.4__9.5__9.6__9.7
-0----0----1----0----0----0----0----0----1----1-----1----1----1----1----1----0

Ein Wort setzt sich allerdings nicht so zusammen(obwohl es im Editor so scheint),
sondern folgendermaßen:

8.7__8.6__8.5__8.4__8.3__8.2__8.1__8.0__9.7__9.6__9.5__9.4__9.3__9.2__9.1__9.0
-0----0----0----0----0----1----0----0----0----1-----1----1----1----1----1----1

Wie Du siehst wird so auch Deine Hex-Zahl 47F richtig dargestellt.
Dass Dein FU meckert wird wohl einen anderen Grund haben.;)
 
0000 0100 0111 1111 = 047F in S5
0111 1111 0000 0100 = 047F in S7

Wenn du "0000 0100 0111 1111" in einem S7 Word stehen haben willst, musst du "FE08" in das Word schieben.
S7 tauscht quasi die Bytes im Vergleich zur S5, oder dem Windoof Taschenrechner. Sieht man ganz gut im Bild von OHGN.

MfG
Borsti
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@borsti
quatsch mit sosse.

der unterschied s5/s7 ist der, dass s5 dw's 16bit breit adressiert.
transferiere ich mw10 in s5 nach dw0 steht mb10 im highbyte und mb11 im lowbyte. bei s7 steht mb10 im dbb0 und mb11 im dbb1.

bei wortzugriff ist das völlig wurscht.

s5
AWL
A DB 10
L KH 047F
T MW 10
T DW 0

DB 10
MW 10 KH=047F
DW 0 KH=047F
MW 10 KM=00000100 01111111
DW 0 KM=00000100 01111111
s7
L W#16#47F
T MW 10
T DB10.DBW 0

MW 10 HEX W#16#047F
DB10.DBW 0 HEX W#16#047F
MW 10 BIN 2#0000_0100_0111_1111
DB10.DBW 0 BIN 2#0000_0100_0111_1111
0010 0000 11111110 das ist 20fe
 
@KalEl:
:???:
Ich denk es soll "0000 0100 0111 1111" an den MM gesendet werden...
Dann ist "0000 0100" doch "04" in Hex und "0111 1111" ist "7F" in Hex, oder?
Wenn nun "04" in einem Byte steht (sagen wir DB0) und "7F" in Byte+1 (In diesem Fall halt DB1) hab ich, wenn ich mir das DW0 ansehe, doch "0000 0100 0111 1111" stehen. Und wenn ich mir dieses DW0 als Hex Zahl anschaue, dann seh ich "7F04" und nicht "FE08", ja ich hatte Unrecht.
Und ja, in S5 ist es halt mit High- und Low- Byte, da hab ich mich falsch ausgedrückt.

Schande über mein Haupt... :ROFLMAO:
 
hallöchen

in der s5 ist es in m und e und ausgangsbereich genau so wie in der s7 nur in der s5 ist der db wordadressiert und somit dritt das problem nicht auf

in der s7 must du high und low tauschen das du das richtige bit muster ausgibst
 
Zuviel Werbung?
-> Hier kostenlos registrieren
in der s7 must du high und low tauschen das du das richtige bit muster ausgibst

Genau durch diese Aussage kommt es immer wieder zu Verwirrungen.

Ich muss bloß wissen, dass bei einer Wortaddressierung das (gerade) Adressbyte das Highbyte ist und das darauffolgende (ungerade) Byte das Lowbyte.
Wenn ich das beim programmieren beachte muss ich garnix tauschen!

.
 
folgendes muss man beachten wenn man z.b. von s5 auf s7 konvertiert.

transferiere ich in s5. mw10 in dw0 und mw12 in dw1 ist das völlig ok, da ja unter s5 der datenbereich 16bit breit ist.

mache ich das gleich in s7, so schreibe ich das mw10 in dw0 (dbb0 und dbb1) mw12 transferiere ich in dw1 (dbb1 und dbb2)
ich überschreibe hier also einen teil des mw10 im dbw0.

merke: s5 -> s7. in der s7 die adresse des dw einfach mit 2 multiplizieren. dann passt das.
 
Genau durch diese Aussage kommt es immer wieder zu Verwirrungen.

Ich muss bloß wissen, dass bei einer Wortaddressierung das (gerade) Adressbyte das Highbyte ist und das darauffolgende (ungerade) Byte das Lowbyte.
Wenn ich das beim programmieren beachte muss ich garnix tauschen!

.

Stimmt nicht ganz

wenn du eine zahl nimmst und diese word weisse schreibst und davon ausgehst das es 1 zu 1 drinnen steht dann ist die verwirrung da

allso das was du schreiben willst drehen und dann ist ganz einfach
oder gleich direkt auf die m-bits schreiben dann ist auch kein problem

aber nicht streiten sondern fasching feiern
 
Ok bei mir funzt es wieder!!

Lösung: Habe den FU auf Werkseinstellung gesetzt und ansch. neu Parametriert!

jetzt ist z.B. 47F der Rechtslauf !!!

Danke das ihr mir geholfen habt !!!

Schönen Rosenmontag !
 
Zurück
Oben