Umwandlung Word in Byte

christoph

New member
Registriert
14 Oktober 2003
Beiträge
3
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,

ich habe ein (wahrscheinlich ganz einfach zu lösendes) Problem:

Ich möchte einen Wortwert (+8 ) in ein Bytewert umwandeln.

LD E0.0
MOVW -8, AW0
/I -1, AW0
MOVW AW0, AW2 ----> Bis hierhin klappt noch alles. (AW2=+8 )
ITB AW2, VB2 ------> VB2 ist jetzt 0, soll aber 8 sein.

Kann mir jemand sagen, woran das liegt und wie ich da abhilfe schaffe.

christoph
 

Zottel

Well-known member
Registriert
19 Juni 2003
Beiträge
2.299
Punkte Reaktionen
277
Versuchs mal mit:
MOVB AB3, VB3

Erklärung:
AW0: bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AB 0 bit 15 14 13 12 11 10 9 8
AB 1 bit 7 6 5 4 3 2 1 0

Sieht komisch aus, ist es auch, ist aber so bei Siemens, wenn ich mich richtig erinnere.
 
OP
C

christoph

New member
Registriert
14 Oktober 2003
Beiträge
3
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Ja, das geht.
Hast du vielleicht auch eine Lösung für folgendes Problem :

An meinem Schieberegister SHRB kann ich an dem Eingang, der mit N bezeichnet ist, einen Bytewert von z.B. +8 (für Rechts-Schieben) oder -8 (für Links-Schieben) anlegen. Den wert kann ich bislang nur per Hand ändern,sprich: SPS-Stop, Wert ändern, Prog. reinladen, SPS-Run. Dann schiebt er links.

Im diesen Vorgang zu automatisieren, will ich nun eine Funktion haben, die den Bytewert automatisch ändert,z.B. Wenn E0.0 = 1 und E0.1 = 0, dann soll ein Bytewert von +8 anstehen. Eingänge anderherum= -8 . Kann ein Bytewert im Speicher VB0 oder so überhaupt negativ sein ?? Im Handbuch steht einmal der Bereich 0 - 255 und auch der Bereich -128 - +127. Wie werden die Bereiche deklariert???

Vielen Dank für die Hilfe...

Christoph
 

Zottel

Well-known member
Registriert
19 Juni 2003
Beiträge
2.299
Punkte Reaktionen
277
christoph schrieb:
Hast du vielleicht auch eine Lösung für folgendes Problem :

An meinem Schieberegister SHRB kann ich an dem Eingang, der mit N bezeichnet ist, einen Bytewert von z.B. +8 (für Rechts-Schieben) oder -8 (für Links-Schieben) anlegen. Den wert kann ich bislang nur per Hand ändern,sprich: SPS-Stop, Wert ändern, Prog. reinladen, SPS-Run. Dann schiebt er links.
Bei Werten von 8 ist schieben ineffizient, weil es auf ein ganzes Byte hinausläuft, was durch Byte-Tausch (im vorigen Beitrag im Prinzip vorgeführt) effizienter geht.
Im diesen Vorgang zu automatisieren, will ich nun eine Funktion haben, die den Bytewert automatisch ändert,z.B. Wenn E0.0 = 1 und E0.1 = 0, dann soll ein Bytewert von +8 anstehen. Eingänge anderherum= -8
Was Du eigentlich tun willst ist also bei ener Bedingung rechts, bei einer anderen links schieben.
(Und wenn keine zutrifft, gar nicht?)
Das ist nicht klar, da deine zwei Eingänge insgesamt 4 kombintorische Zustände haben können.
Die Lösung ist:
Bau den Links und den Rechtschiebebefehl ein und überspringe den (oder beide), der/die nicht ausgeführt werden sollen.

Ob schieben mit Variabler Länge geht, weiss ich nicht, kenne den Befehlsvorrat der 200 nicht auswendig. Tippe aber auf nein, da ich niemals eine Steuerung oder einen Mikrocontroller gesehen habe, die es könnten.

. Kann ein Bytewert im Speicher VB0 oder so überhaupt negativ sein ?? Im Handbuch steht einmal der Bereich 0 - 255 und auch der Bereich -128 - +127. Wie werden die Bereiche deklariert???
Gar nicht. Im Speicher stehn nur Bitmuster. Bis +127 sind sie für mit und ohne Vorzeichen identisch. 11111111 binär ist 255 wenn es von eiem Befehl gelesen wird, der kein Vorzeicehn erwartet. Erwarte der Befehl ein Vorzeichen, so ist es -1. Besser ausgedrückt: Der Befehl interpretiert die Bitfolge so oder so.

PS: programmierst Du AWL oder FUP(weil Du von Eingang mit N bez. spachst).
In FUP geht das Springen nicht. Dafür haben die Blöcke einen Freigabe-Eingang. Wenn der nicht 1 ist, werden sie auch nicht ausgeführt.
 
OP
C

christoph

New member
Registriert
14 Oktober 2003
Beiträge
3
Punkte Reaktionen
0
Ich habe jetzt deinen Lösungsvorschlag verarbeitet, Zottel:

Bau den Links und den Rechtschiebebefehl ein und überspringe den (oder beide), der/die nicht ausgeführt werden sollen.

Mein vorheriger Gedanke war wahrscheinlich einfach zu kompliziert. Jetzt funzt es auf jeden Fall.

Christoph

P.S.: Bis jetzt habe ich in KOP programmiert.
 
Oben