Warum läuft das nicht?

SPSKILLER

Level-2
Beiträge
728
Reaktionspunkte
159
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,

ich steh grad bissel aufm Schlauch.

Warum funktioniert diese Anweisung
Code:
If (value And &h100) = &h100 Then
.

aber die nicht :confused:
Code:
If (value And &h1000000) = &h1000000 Then
.

"value" ist ein DWORD aus der S7. Ich möchte Bits ausmaskieren...

Kann das VBS mit dem Format nicht umgehen?

Wenn ich die Variable (value) in ein hex. E/A Feld schreibe wird der Wert korrekt ausgegeben!

Ich benutze WinCC6.2 SP2

N Tip wär nett.

MfG Micha
 
Welche Besonderheit ist in VBScript bei der bitweisen Verknüpfung von Variablen zu beachten?

Konfigurationshinweis:
Bei einer bitweisen Verknüpfung einer oder mehrerer 32-Bit Variablen in WinCC Global Script / VBScript kommt es zu einem Überlauf und Abbruch des Scripts, wenn in einer der Variablen das höchstwertige Bit (Bit 31) gesetzt ist.

Beispiel:
Wird VBScript verwendet, um den Zustand bestimmter Bits eines Doppelworts im Bild anzuzeigen, so kommt es zu einer falschen Anzeige, wenn das Bit 31 innerhalb des Doppelworts gesetzt ist.

Abhilfen:
Stellen Sie sicher, dass das Bit 31 nicht verwendet wird bzw. nicht gesetzt ist, wenn Sie bitweise Operationen (z.B. "And"-Operator) auf eine Doppelwortvariable anwenden. Sie sollten eine 32-Bit-Variable vor der ersten bitweisen Verarbeitung auf den Zustand des höchstwertigen Bits (Bit 31) überprüfen und ggf. anpassen. Mit der Abfrage "größer gleich" können Sie ermitteln, ob das Bit 31 einer 32-Bit-Variablen gesetzt ist. Wenn der Wert der 32-Bit-Variablen größer gleich 231 ist, so ist das Bit 31 gesetzt. In diesem Fall können Sie den Wert der 32-Bit-Variablen mit dem Wert 231 subtrahieren, um es rückzusetzen. Dadurch können die restlichen Bits immer korrekt ausgewertet werden. Das folgende Bild zeigt ein VBScript, dass diese Vorgehensweise verdeutlicht. In diesem Beispiel wird der Zustand des Bits 0 einer 32-Bit-Variablen zur Dynamisierung verwendet. Wenn das Bit 0 gesetzt ist, dann wird die Hintergrundfarbe eines Objekts auf den Wert "grün" gesetzt , sonst auf den Wert "grau".

Welche Besonderheit ist in VBScript bei der bitweisen Verknüpfung von Variablen zu beachten?

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Man lernt nie aus und ich hab wieder mal gelernt, daß bei Siemens wirklich Stümper am Werk sind. Selbst, wenn das ein Problem vom eingebauten VBA ist, das kann man doch in einer scheißteuren Anwendung wie WinCC nicht so stehenlassen, oder? Was für Fallen sind da noch so eingebaut, man kann doch nicht immer erst ein 100-seitiges "Ausnahmeregelbuch" durcharbeiten, wenn man mal 3 Bits setzen will. Langsam bin ich doch froh, daß ich mein WinCC-Projekt durchhabe, na ja war ja Gott sei Dank auch nichts mit Userarchiv und andern Optionen.

Tschuldige SPSKiller, das mußte mal raus :cool:.
 
Hallo,

ich hab noch mal probiert, und bin zum Ergebnis gekommen, dass mein Problem nix mit dem Posting vom Kai zu tun hat.
Zum einen weil h1.000.000 meiner Meinung nach Bit 24 ist.

Zum zweiten: Falls die Bytes zwischen S7 und WinCC irgendwie verdreht
sind und h 1.000.000 für WinCC wirklich Bit31 wäre, dann müsste ja h 2.000.000 funktionieren.
Tut es aber auch nicht.

Wie maskiert ihr Bits in VBS aus?

Gruß Micha
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich muß zugeben, dass ich in deinem ersten Posting auch irgendwie das Bit 2^31 gesehen habe.
In meinen eigenen Scripts geht es definitiv bis Bit 2^30 und auch keine Probleme damit. Ich könnte mir aber vorstellen, das du ein Problem mit der Byte-Ausrichtung im Doppelwort hast. Bitte überprüf das doch mal. Das niederwertigste SPS-Byte steht im DWORD vorne (also auf der höchsten VB-Wertigkeit) ...

Gruß
LL
 
Zurück
Oben