TIA Schiebe- und Rotationsbefehle Anwendungsbeispiele

Ja, genau, eher Geschmacksfrage. Aber wenn man die drin lässt, denkt jeder "Halbexperte", der die Rohwerte der Analogkarte sieht (und nicht die Programmierung kennt), dass die Auflösung "stufenlos", also ohne Schrittweite 4, von 0 bis 16383 geht, also 14-Bit-Auflösung ist, und das ist eben irreführend. Die Auflösung ist i.d.R. nur 12-Bit, also 0...4096 ! Da wir die "Rohwerte" bei der Justage mit anzeigen, will ich da keine falschen Erwartungen wecken.
Moin Marty,
Deine Bedenken wegen der Irreführung von "HalbExperten" kann ich nachvollziehen.
Die Formulierungen in den Beschreibungen der AnalogKarten sind manchmal etwas merkwürdig/irreführend, insbesondere durch den Begriff "VorzeichenBit", der leider suggeriert, dass die übrigen Bits der Zahl eindeutig den Betrag der Zahl enthalten. Tun sie aber normalerweise nicht, sondern zweideutig in Abhängigkeit vom VorzeichenBit. Ganz so, wie es bei der Darstellung im ZweierKomplement üblich ist.
Wie wird eigentlich die Genauigkeit (Granularität) angegeben, wenn keine negativen Zahlen vorkommen (können)? Ist dann das höchstwertige Bit einfach nur unbenutzt oder wird es genutzt, um die Genauigkeit dann zu verdoppeln?

High Low Byte drehen ist auch eine Verwendung.
Funktionier in TIA auch vollsymbolisch
Du meinst also High- und Low-Byte tauschen, um die "Endianität" umzuknippsen?
Tauschen klappt "verlustlos" nur mit rotieren. Vooorsicht beim Verwenden von SchiebeBefehlen!
Warum soll ich das trennen wollen?
Vielleicht, um bei Viertel- bis HalbExperten keine falschen Erwartungen bezüglich der Genauigkeit zu wecken.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Achtung: bei Analogwerten muss man das Rechtsschieben (meistens) unter Beachtung des Vorzeichens machen. Deshalb besser mit Ganzzahl-Division machen oder darauf achten, dass vorzeichenrichtiges Schieben verwendet wird. Nach IEC 1131-3 gibt es allerdings kein vorzeichenrichtiges Rechtsschieben (SHR) - es werden immer Nullen eingeschoben.
Ich komme nochmal auf dein Tipp zurück. Es stimmt, es gibt kein "vorzeichenrichtiges Rechtsschieben". Deshalb habe ich nach dem Schieben
#tRawWord := SHR(IN := #In, N := 3)
die drei neuen linken Bits mit dem original-Bit #In.%X15 definiert.
#tRawWord.%X15 := #tRawWord.%X14 := #tRawWord.%X13 := #In.%X15;

Dein Vorschlag mit der Ganzzahl-Division fand ich daher ganz sympathisch, um mir den händischen Vorzeichen-Manipulationsschritt zu sparen. Nun konnte ich das endlich mal testen und vergleichen.
Die Division anstatt Schieben hat aber auch ein NACHTEIL. Sie macht einen kleinen Fehler, wenn eine negative Zahl eins der Bits gesetzt hat, die rausgeschoben werden sollen. Denn dieses Bit bleibt "hängen" und fliegt nicht raus und verfälscht das Ergebnis um 1. In meinem Beispiel, bei einer negativen anstehen Zahl, ist das Statusbit #In.%X1 = FALSE und das Statusbit #In.%X0 gleichzeitig TRUE. Schiebe ich nach rechts um eins, fliegt das TRUE raus, so soll es auch sein. Dividiere ich allerdings durch 2, schiebt zwar fast alles nach rechts, aber das #In.%X0 bleibt auf TRUE!!! Das Ergebnis ist also um den Wert dieses Bits, also um 1, falsch.
Ist klar was ich meine? Wer es nicht glaubt, kann es auch mit dem Windows-Rechner in Programmieransicht, und dort im Bitmodus, überprüfen. Der hat nämlich das gleiche Verhalten, sowohl beim Schieben ( >>, 1, = klicken um eins nach rechts zu schieben) als auch beim Dividieren (im Bitmodus mit Numpad bedienbar).

Resume: Ich bleibe lieber beim Schieben und manueller Vorzeichen-Korrektur.
 
Zuletzt bearbeitet:
Hey,

an sich ist er sehr jung hat aber viel Ahnung von programmieren, er hat halt in SCL mit dem sowohl er als auch ich programmiere, andere Alternativen gefunden um die selben Funktionen auszuführen.
Selbst wenn man andere Möglichkeit(en) gefunden hat, sind die Anwendungen ja im Prinzip dieselben.

Warum soll ich das trennen wollen?
Wenn man z.B. bei IO-Link bei manchen Herstellern dann den Wert "direkt" abfragen kann.
Bei manch einem Hersteller muss man hier 1 Bit nach rechts schieben, um den "Messwert" er erhalten.
 
Zurück
Oben