Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: Win CC flex einzelne Bits einer Variable per VBS schreiben

  1. #11
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Perfektionist Beitrag anzeigen
    aber vermutlich gibt es für noch ganz andere Wege.
    habs jetz grad nicht vor augen, aber gilt ein ARRAY [0..255] OF BOOL nicht auch als ein Powertag?
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  2. #12
    Registriert seit
    01.10.2007
    Ort
    Waiblingen
    Beiträge
    3.317
    Danke
    767
    Erhielt 536 Danke für 419 Beiträge

    Standard

    ... das wäre dann sowas wie:
    Code:
    myWord or &H80
    myWord and not &H80
    oder so ähnlich für das Setzen bzw. Rücksetzen eines Bits.

  3. #13
    Registriert seit
    01.10.2007
    Ort
    Waiblingen
    Beiträge
    3.317
    Danke
    767
    Erhielt 536 Danke für 419 Beiträge

    Standard

    Zitat Zitat von vierlagig Beitrag anzeigen
    habs jetz grad nicht vor augen, aber gilt ein ARRAY [0..255] OF BOOL nicht auch als ein Powertag?
    ich glaube, ja.

    PS:
    Zitat Zitat von MSB Beitrag anzeigen
    Power-Tag ist eine externe Variable, also eine Zeile in der Variablentabelle, welche auf die Steuerung verweist.
    Sagt aber nichts über die Größe der Variable aus.
    Ein BOOL ist genau so ein Powertag wie ein ARRAY mit 1000 Werten.

    Also bei 69 Tags sollte sich ein doch relativ Leistungsstarkes Gerät langweilen.

    In den jeweiligen Technischen Daten, hier z.B. für das MP370:
    http://support.automation.siemens.com/WW/view/de/12950002&td=1
    im Abschnitt "Anzahl Prozessbilder".

    Mfg
    Manuel
    Geändert von Perfektionist (30.06.2010 um 08:42 Uhr) Grund: zu viel Farbe

  4. #14
    Registriert seit
    13.10.2007
    Beiträge
    12.031
    Danke
    2.786
    Erhielt 3.268 Danke für 2.156 Beiträge

    Standard

    mmh...ist es bei flex nicht so das ein Array von variabeln
    nur ein powetag ist? Wenn es darum gehen sollte, das nur
    Geld für eine 128PT lizens da ist.
    Ich glaube das meinte auch der perfekte.
    - - -
    Wer als Werkzeug nur einen Hammer hat, sieht in jedem Problem einen Nagel.

  5. #15
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard

    In der SPS 32 Bits zu einem Doppelword zum Panel zusammenfassen und am Panel wieder ausmaskieren
    Code:
    myBit1 = myDWord and 1
    ...
    myBit31 = myDWord and &H40000000
    ' kann man auch so schreiben:
    SmartTags("myBit32") = SmartTags("myDWord") and &H80000000
    ist eine gute Idee zum Sparen von Powertags. Ich würde mich aber nicht darauf verlassen, daß dann
    eine "BeiWertänderung"-Aktion an den Panel-lokalen Einzelbits immer korrekt ausgeführt wird bzw.
    die Doppelword-Variable muß dann auf ständig lesen stehen. Oder man muß dafür sorgen, daß überall
    da, wo die Einzelbits benötigt werden, die Doppelword-Variable aus der SPS gelesen wird.


    Beim Zusammenfassen von Einzelbits, die vom Panel zur SPS geschrieben werden sollen, da habe ich
    leichte Bauchschmerzen, da kann es durch die Kommunikations-Laufzeit haarig werden.

    Wenn die SPS auch in das empfangene Doppelword schreibt (z.B. Rücksetzen von Tastenbits), dann
    kann das Bit in der SPS durch die Panel-Zugriffe kurz danach unerwartet wieder gesetzt sein.
    Wenn die SPS nicht auf das empfangene Doppelword schreibt, dann gibt es weniger Probleme.

    Einzelne Bits in der Doppelwort-Schreibvariable setzen oder löschen kann man z.B. in einem Skript
    durch verknüpfen mit einer Bitmaske (hinein-ORen oder heraus-ANDen), wie der Perfektionist gezeigt
    hat. Oder gleich einen Wert 1, 2, 4, 8, 16, 32, ... zuweisen.
    Dies kann aber einen Skript-Stau verursachen, wenn in schneller Folge mehrere Bits in dem Schreib-
    Doppelwort verändert werden.
    Mehrere unabhängige Bits im Schreib-Doppelwort gleichzeitig ändern geht nur in einem Skript.

    Oder man nutzt die Systemfunktionen
    * SetzeBitInVariable
    * RuecksetzeBitInVariable
    * InvertiereBitInVariable

    Wegen der Probleme die aus der Kommunikations-Laufzeit resultieren können, schreibt die WCCflex-Onlinehilfe:
    Die Systemfunktion überträgt nach der Änderung des angegebenen Bits die gesamte Variable wieder an die Steuerung. Es wird nicht geprüft, ob sich zwischenzeitlich andere Bits in der Variablen geändert haben. Bediener und Steuerung dürfen auf die angegebene Variable nur lesend zugreifen, bis die Variable wieder an die Steuerung übertragen wurde.

    Hinweis
    Verwenden Sie diese Systemfunktion nicht, wenn die Steuerung BOOL-Variablen unterstützt. Verwenden Sie statt dessen die Systemfunktion "SetzeBit".
    "Nur lesend zugreifen, bis ..." - woher soll die Steuerung wissen, wann die Variable vom Panel gelesen
    und wann wieder zurückgeschrieben wurde?


    Ein ARRAY [0..255] OF BOOL ist zwar nur 1 Powertag, es kann aber auch hier zu Problemen kommen, wenn
    in der SPS auf Bits in dem Array geschrieben wird.
    Beim Ändern eines Array-Bits vom Panel wird das komplette Array in die SPS geschrieben und danach wieder
    gelesen. Wenn nun im Panel schon ein weiteres Bit geändert wurde, wird wieder das gesamte Array in die
    SPS geschrieben, mit dem vermeintlich noch gesetzten Bit von der ersten Änderung! Und ohne zwischenzeitlich
    von der SPS geänderte Bits.
    Das Panel kann man (zumindest unter WinCCflex) nicht zwingen, eine Variable vor dem Schreiben NICHT zu lesen.


    Nachteile der Zusammenfassung von Bits in Doppelwörtern oder Arrays of Bool:
    - Auf die einzelnen Bits kann nicht mehr "symbolisch" zugegriffen werden.
    - Die Querverweisliste in WCCflex wird unvollständig und unübersichtlich.
    - Die meisten WCCflex-Objekte können nicht mit Arrays umgehen, (ich glaube) nur Schalter.
    - Auf Bitfeld-Variablen vom Panel darf die SPS nicht schreiben.
    - in Panel und SPS unterschiedliche Berechnung, auf welcher Adresse Bit0 ... Bit31 sind

    Gruß
    Harald

  6. Folgende 2 Benutzer sagen Danke zu PN/DP für den nützlichen Beitrag:

    Perfektionist (30.06.2010),rostiger Nagel (29.06.2010)

  7. #16
    Hahnus ist offline Benutzer
    Themenstarter
    Registriert seit
    04.01.2006
    Beiträge
    53
    Danke
    2
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Entschuldigung, war beim Zahnarzt und konnte deshalb das zwischenzeitliche Rätseln, was ich eigentlich tun will, nicht aufklären.

    Ich bekomme ein Textfile (mehrere Zeilen mit einem 200 Byte langen String). Die einzelne Zeile (der 200Byte-String) steht jeweils für ein Produkt aus dem Los, das Textfile verkörpert dann das kpl. Los. Das Textfile hole ich per VBS von einem Server und lege es auch so in der SPS ab.
    Während der Bearbeitung sollte ich nun jeweils die Daten eines Produktes in Bits und Bytes wandeln, damit ich in der SPS entsprechend bearbeiten kann. Das könnte ich in der SPS machen, der elegantere Weg wäre wahrscheinlich ein Script zu schreiben, welches den 200Byte-String entsprechend zerhackt und zur SPS zurückgibt. Hier ergeben sich doch relativ viele Bits, die ich in der Visu gern zu einem Wort bzw. Doppelwort zusammenfassen möchte (Reduzierung Powertags).
    D.h. grundsätzlich schreibt nur die Visu in diesen Datenbereich, die SPS liest nur --> keine Konflikte.
    Die Bits werde ich am Skript-Start alle initialisieren (auf 0 setzen), danach dann definiert setzen so wie ich sie brauche. Jetzt muss ich also mal schauen, ob ich eine der angebotenen Lösungen umsetzen kann.
    Mit den Arrays in WinCCF habe ich noch nicht gearbeitet, auch das schaue ich mir an.

    Danke + Gruß
    Hahnus

  8. #17
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.715
    Danke
    398
    Erhielt 2.398 Danke für 1.998 Beiträge

    Standard

    Hallo,
    aus unter Anderem den auch schon von PN/DP genannten Gründen würde ich nicht den String in der Visu zerlegen und die Einzel-Komponenten dann zur SPS zurückschicken. Das Hauptproblem dabei ist, dass du nicht weißt, wann die letzte Einzel-Variable zur SPS zurückgeschrieben und somit für sie verfügbar ist.
    Ich würde dir hier doch dazu raten, das Ganze in der SPS zu machen.
    Wenn die ganze Routine eher ein Kandidat für ein Script ist, so hast du mit SCL ja diese Möglichkeiten auch in der SPS. Denk mal drüber nach ...

    Gruß
    Larry

  9. #18
    Hahnus ist offline Benutzer
    Themenstarter
    Registriert seit
    04.01.2006
    Beiträge
    53
    Danke
    2
    Erhielt 2 Danke für 2 Beiträge

    Standard

    @LarryLafer
    Das sollte sich doch ganz gut damit bewerksteligen lassen, dass ich ein Testbit aus dem Wort per SPS hochsetze, dann das Skript starte und darauf warte, dass das Visu-Skript dieses rücksetzt --> SPS-Abfrage Testbit = 0 --> Skript fertig und Variablen gültig.
    Oder denke ich hier zu einfach?

    Danke + Gruß
    Hahnus

  10. #19
    Hahnus ist offline Benutzer
    Themenstarter
    Registriert seit
    04.01.2006
    Beiträge
    53
    Danke
    2
    Erhielt 2 Danke für 2 Beiträge

    Standard

    PS an alle:
    Ja, ein Array ist nur eine Variable!

    Hahnus

  11. #20
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.166
    Danke
    921
    Erhielt 3.286 Danke für 2.655 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Hahnus,

    das konsistente Schreiben mehrerer zusammengehöriger Variablen vom Panel zur SPS ist ein typischer Anwendungsfall
    für Rezepturen (Datensätze). Die Systemfunktion SchreibeDatensatzvariablenInSteuerung (SetDataRecordTagsToPLC)
    gibt sogar eine Ende-Meldung, wenn der Datensatz komplett in die Steuerung geschrieben wurde.

    Ein Skript-Beispiel für die Anwendung findest Du hier:
    konsistent Variablen in SPS schreiben mit Endemeldung

    Gruß
    Harald

    PS: Ein Array ist nur 1 PowerTag.

Ähnliche Themen

  1. MW in MB wandeln bezw einzelne bits holen
    Von grünschnabel im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 12.07.2010, 07:34
  2. LinNoDave und einzelne Bits
    Von Lazarus™ im Forum Hochsprachen - OPC
    Antworten: 4
    Letzter Beitrag: 19.01.2009, 13:46
  3. Einzelne Bits ausmaskieren
    Von zwerg77 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 03.12.2007, 07:14
  4. WinCC flex Variable statisch in DB schreiben
    Von geduldiger im Forum HMI
    Antworten: 14
    Letzter Beitrag: 05.07.2007, 13:56
  5. Antworten: 10
    Letzter Beitrag: 28.09.2004, 08:36

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •