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

Ergebnis 1 bis 7 von 7

Thema: Prozessvariable_16Bit auf 2 interne Variablen_8Bit aufteilen Skript in WinCCflexible

  1. #1
    Registriert seit
    04.05.2012
    Beiträge
    36
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo da draußen, ich muss eine Prozessvariable (16Bit,Wort) auf 2 interne Variablen (8Bit,Byte) aufteilen.
    Ich brauche also vom Wort das Lowbyte und das Higbyte. Das Wort kommt von einer S5 und ich will die Datenstruktur auf der S5 Seite nicht anfassen. Wir projektieren mit WinCCflexible, dass Problem ist dass
    Winccflex aus dem Wort die 2 Bytes nicht anzeigen kann, ProTool konnte dass (Dez,Dez).
    Nun muss ich also ein Skript schreiben dass mir die Funktion ausführt.
    Siemens hat dass gleiche schon mal beschrieben alerdings mit WinCC. hier der Link

    http://support.automation.siemens.co...ontent#A634489

    Genau dass bräuchte ich, dass Problem ist nur, dass die Funktionen im Skript vom WinCCflex nicht erkannt werden.
    Hat jemand einen Rat?
    Zitieren Zitieren Prozessvariable_16Bit auf 2 interne Variablen_8Bit aufteilen Skript in WinCCflexible  

  2. #2
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Hm, den Datentyp KY kann man zwar noch anlegen, aber es scheint wirklich keine direkte Möglichkeit zu geben diesen auch byteweise zur Anzeige zu bringen.

    Skriptmäßig könnte man das aber auf interne Variablen vom Typ Byte umlegen. Das wird dann allerdings einiges an Arbeit, zumindest wenn du auch Eingaben vom Panel aus an die SPS zurückschicken willst.

    Das reine ausmaskieren würde in VB-Skript zumindest so funktionieren:
    Code:
    Dim hi
    Dim lo
    Dim wo
    
    wo = SmartTags("wMW10")
    lo = (wo And &HFF00) / 256	' Ausmaskieren wegen Rundungsfehler notwendig
    hi = (wo And &H00FF)
    
    SmartTags("intern_wMW10_Lo") = lo
    SmartTags("intern_wMW10_Hi") = hi
    Bei einer S7 steht dann in der Lo-Variable der Wert von MB10, in der Hi der von MB11.
    Variable "wMW10" ist das MW10 aus einer S7 mit Datentyp Word.
    Die Variablen "intern_wMW10_Lo" und "intern_wMW10_Hi" sind interne Variablen vom Datentyp Byte.

    Das Skript könntest du auf Änderung an eine Variable hängen, oder in einem festen Zeitintervall aufrufen.
    Nur das Schreiben wird schwierig, aber vielleicht gibt es ja noch eine andere Lösung als meine Idee.

  3. #3
    Registriert seit
    04.05.2012
    Beiträge
    36
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Super, danke das mit dem Aufteilen klappt einwandfrei. Nur das Zusammensetzen krieg ich einfach nicht hin.
    Hab das Zusammensetzen so versucht:
    Dim hi
    Dim lo
    Dim wo

    wo = SmartTags("DB_105_DW7")
    wo = ((lo And &HFF00) * 256) Or = (hi And &H00FF)) ' Ausmaskieren wegen Rundungsfehler notwendig

    SmartTags("DB_105_DW7_lo") = lo
    SmartTags("DB_105_DW7_hi") = hi

  4. #4
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Nicht ganz. Die Umkehrung von meinem Beispiel wäre z.B. so:
    Code:
    Dim hi
    Dim lo
    Dim wo
    
    lo = SmartTags("intern_wMW10_Lo")
    hi = SmartTags("intern_wMW10_Hi")
    
    wo = (lo * 256) + hi
    
    SmartTags("wMW10") = wo
    Das sieht zwar mit den beiden Skripten auf den ersten Blick recht einfach aus, in der praktischen Umsetzung wird das aber etwas aufwändiger denn die Skripte müssen ja auch irgendwie aufgerufen werden.
    Wenn nur gelesen werden soll ist das kein Problem sowas mit einem zyklischen Skriptaufruf zu machen. Wenn aber auch geschrieben werden soll muss man sich was überlegen damit es nicht zu Kollisionen kommt (z.B. gerade eingegebene Bytes werden durch das gelesene Wort wieder überschrieben). Da musst du dir halt was elegantes einfallen lassen.

  5. #5
    Registriert seit
    04.05.2012
    Beiträge
    36
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Jipi, super funktioniert DANKESCHÖN

  6. #6
    Registriert seit
    04.05.2012
    Beiträge
    36
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Muss doch nochmal kurz nerven, möchte die Sache dokumentieren und will nichts falsch aufschreiben.
    Deswegen nur kurz die Frage: Stimmt das mit den hi und lo bytes so, oder sind die vertauscht.
    Denn im Wort steht doch links das hi byte und rechts das lo byte, oder.

    Muss es dann nicht so heissen:


    Dim hiDim loDim wolo = SmartTags("intern_wMW10_Lo")hi = SmartTags("intern_wMW10_Hi")wo = (hi * 256) + loSmartTags("wMW10") = woDanke nochmal

  7. #7
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich weiß nicht welche Endianess bei einer S5 gilt. Bei der S7 hast du recht, da müsstest du hi und lo von der Bezeichnung her tauschen. Aber die Endianess ist auch nur interessant wenn du einen Datentyp über mehr als 1 Byte hast. Beim Datentyp KY kann man sogesehen garnicht von Endianess sprechen, da es zwei byteweise Einzelwerte sind. Wenn die S5 wie die S7 auch Big-Endian ist (wahrscheinlich) tauscht du es einfach dann passt es auch wenn du den Datentyp Word/Int oder sonstwas hast.

Ähnliche Themen

  1. Regler aufteilen auf 2 Regelventile
    Von Poldi007 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 03.05.2010, 14:29
  2. WinCCflexible: interne Variable abfragen
    Von vita-2002 im Forum HMI
    Antworten: 8
    Letzter Beitrag: 06.10.2009, 14:10
  3. Antworten: 0
    Letzter Beitrag: 23.10.2008, 21:11
  4. Antworten: 0
    Letzter Beitrag: 12.01.2007, 23:33
  5. OPC Zugriff auf die interne Simulation
    Von bitli im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 03.11.2006, 10:47

Lesezeichen

Berechtigungen

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