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.