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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 19

Thema: WinCC VBS Skript If Then Anweisung Bitte um Hilfe

  1. #1
    Registriert seit
    31.07.2013
    Ort
    Unterfranken
    Beiträge
    87
    Danke
    18
    Erhielt 4 Danke für 4 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Forengemeinde,

    Es geht um WinCC 7.0, ich möchte in Abhängigkeit einer Variablen Stat_Ein die Variable Steu_Aus oder Steu_Ein auf true setzen.
    Leider sind meine VBS Kenntnisse sehr beschränkt, habe bereits viele Beispiele aus der Hilfe, oder dem netz probiert,
    bekomme es aber nicht hin vielleicht könnt ihr mir bisl unter die Arme greifen...

    Schreibe ich die Variable ohne der If Anweisung wird sie geschrieben.
    Sobald die If Anweisung mit einfließt funktioniert es nicht mehr.


    Code:
    Sub OnClick(ByVal Item)                                 
    
    Dim Stat_Ein
    Dim Steu_Aus
    Dim Steu_Ein
    
    Set Stat_Ein = HMIRuntime.Tags("VM-HA01-STAT_EIN")
    Set Steu_Aus = HMIRuntime.Tags("VM-HA01-STEU-AUS")
    Set Steu_Ein = HMIRuntime.Tags("VM-HA01-STEU-EIN")
    
    If Stat_Ein = True Then
    
    Set Steu_Aus = True
    Steu_Aus.Write 7
    
    End If
    
    If Stat_Ein = False Then
    
    Set Steu_Ein = True
    Steu_Ein.Write 7
    
    End If
    
    End Sub
    Danke für eure zeit und eure Bemühungen
    Zitieren Zitieren WinCC VBS Skript If Then Anweisung Bitte um Hilfe  

  2. #2
    Registriert seit
    05.11.2004
    Ort
    Schweiz
    Beiträge
    1.138
    Danke
    225
    Erhielt 127 Danke für 85 Beiträge

    Standard

    Code:
    Stat_Ein.Read
    Stat_Ein.Value = True
    Kommt Zeit.... Kommt Rat.... In der Tat.
    Gartenlampe mit Windenergie anstelle von Solar? Bei Interesse -> PN

  3. #3
    Registriert seit
    31.07.2013
    Ort
    Unterfranken
    Beiträge
    87
    Danke
    18
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hi krumix, danke für die schnelle Antwort habe ich das so richtig interpretiert?
    funktioniert leider immer noch nicht. Ich projektiere in derlaufenden Runtime. Bildwechsel nach Änderung sollte doch reichen oder?
    Code:
    Sub OnClick(ByVal Item)                                     
    
    Dim Stat_Ein
    Dim Steu_Aus
    Dim Steu_Ein
    
    Set Stat_Ein = HMIRuntime.Tags("VM-HA01-STAT_EIN")
    Set Steu_Aus = HMIRuntime.Tags("VM-HA01-STEU-AUS")
    Set Steu_Ein = HMIRuntime.Tags("VM-HA01-STEU-EIN")
    
    Stat_Ein.Read
    If Stat_Ein.Value = True Then
    
    Set Steu_Aus.Value = True
    Steu_Aus.Write 7
    
    End If
    
    If Stat_Ein.Value = False Then
    Set Steu_Ein.Value = True
    Steu_Ein.Write 7
    
    End If
    
    End Sub

  4. #4
    Registriert seit
    05.11.2004
    Ort
    Schweiz
    Beiträge
    1.138
    Danke
    225
    Erhielt 127 Danke für 85 Beiträge

    Standard

    Ist dass das 1. Script in dem Projekt? Wenn ja, schau mal, ob das Ausführen von Scripten überhaupt aktiv ist. Findest du in den Eigenschaften vom Rechner im WinCC-Baum.

    Dann brauchst du bei der Zuweisung kein SET zu schreiben. Das könnte auch ein Problem sein.
    Es reicht
    Code:
    Steu_Ein.Value = TRUE
    Steu_Ein.Write
    zu schreiben.

    Du kannst auch noch das apdiag.exe starten, dass dir Script-Fehler ggf. anzeigt.
    Kommt Zeit.... Kommt Rat.... In der Tat.
    Gartenlampe mit Windenergie anstelle von Solar? Bei Interesse -> PN

  5. #5
    Registriert seit
    31.07.2013
    Ort
    Unterfranken
    Beiträge
    87
    Danke
    18
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hallo krumnix,
    bin langsam am verzweifeln. Schaffe es nicht einmal eine einzige Variable zu schreiben...
    Inzwischen eine Testmaschine aufgesetzt mit Verbindung zur SPS, um nicht Gefahr zu laufen den Produktivprozess zu zuerschießen...

    Im Projekt von gestern waren eigentlich nur C# Scripte vorhanden. keine VBS...

    Habe in den Rechnereigenschaften GlobalScript aktiviert. Rechner neu gestartet
    2016-02-03 10_22_12-Application.png

    Mein Code sieht inzwischen nur noch so aus und trotzdem funktioniert nicht:
    2016-02-03 10_43_29-Application Server auf localhost.KNAUF.LOC.png
    Aus der Hilfe: In VBS können Sie Variablen direkt über den Namen ansprechen und Werte setzen und lesen. Wenn Sie auf zusätzliche Eigenschaften der Variablen zugreifen wollen, z.B. den Qualitycode erfragen, müssen Sie die Variable immer über die Tags-Auflistung ansprechen. Über das zurückgelieferte Tag-Objekt haben Sie Zugriff auf alle Eigenschaften und Methoden der Variablen. Sie müssen für das Objekt eine Instanz bilden, damit z.B. mit HMIRuntime.Tags("Variable").Value=TRUE eine binäre Variable geschrieben wird.
    was ist in dem zusammenhang eine Instanz???

    Mit einer Direktverbindung keine Probleme:
    2016-02-03 10_44_47-Application Server auf localhost.KNAUF.LOC.png

    Habe auch schon etliche Varianten durchprobiert: Leerzeichen zwischen = und Zuweisung mit Set oder ohne.... mit .Value alles ohne Erfolg...

    Wärs in C# einfacher?

  6. #6
    Registriert seit
    31.07.2013
    Ort
    Unterfranken
    Beiträge
    87
    Danke
    18
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Manchmal muss man nur einen Post schreiben und schon klappts:

    Dachte das die Variable hier auch gleich geschrieben wird, war aber nicht so.
    Muss separat erfolgen...
    2016-02-03 10_54_22-Application Server auf localhost.KNAUF.LOC.png

    Das wäre die erste Hürde.

    Hat vielleicht jemand eine Idee wie ich es schaffe, dass Bit wieder zurückzusetzen.
    Es muss allerdings natürlich solange im DB TRUE sein, damit die Steuerung dies auch mitbekommt.
    Gibt's hierfür einen WAIT Befehl oder so? WAIT 60 - warte 60ms???

  7. #7
    Registriert seit
    31.07.2013
    Ort
    Unterfranken
    Beiträge
    87
    Danke
    18
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Gute Morgen zusammen,

    da ich die Funktion mit VBS beim besten Willen nicht zum laufen bekommen habe,
    habe ich nun ANSI-C benutzt und das funktioniert tadellos.

    Eine Frage an die Experten:
    Ist das Gebilde so in Ordnung? Oder gibt es hier Argumente die dagegen sprechen?
    Ich merke zwar beim schnellen klicken hintereinander, dass dann ein klick verschluckt wird.
    Beugt aber wie ich finde Fehlbedienungen vor (Wir haben Benutzer die wissen immer noch nicht wann ein klick ausreicht und wann zwei nötig sind)

    Code:
    BOOL bstate;  //Boolsche Variable anlegen
    BOOL bSteuEin;
    BOOL bSteuAus;
    //Variable zuweisen, Wert aus SPS lesen
    bstate = GetTagBit("VM-HA01-STAT_EIN"); //Return-Type: BOOL 
     //Wenn bstate True ist, wird das Signal AUS auf TRUE gesetzt
    if (bstate)
    //Code für if = TRUE
    SetTagBitWait("VM-HA01-STEU_AUS",TRUE);
    
    //Code für if = FALSE: Wenn bstate FALSE, "EIN" auf TRUE setzen
    else 
    SetTagBitWait("VM-HA01-STEU_EIN",TRUE); 
    
    bSteuEin = GetTagBitWait("VM-HA01-STEU_EIN");
    bSteuAus = GetTagBitWait("VM-HA01-STEU_AUS");
    {
    if (bSteuEin)
    //Ist Steuervariable "EIN" TRUE wird diese wieder auf FALSE geschrieben
    SetTagBitWait("VM-HA01-STEU_EIN",FALSE);
    }
    {
    if (bSteuAus)
    //ist Steuervariable "AUS" TRUE wird diese wieder auf False gesetzt
    SetTagBitWait("VM-HA01-STEU_AUS",FALSE);
    }

  8. #8
    Registriert seit
    29.03.2004
    Beiträge
    5.797
    Danke
    144
    Erhielt 1.707 Danke für 1.239 Beiträge

    Standard

    Wenn du dein Code entsprechend der Klammern einrückst, sollte dir was auffallen
    Code:
    BOOL bstate;  //Boolsche Variable anlegen
    BOOL bSteuEin;
    BOOL bSteuAus;
    
    //Variable zuweisen, Wert aus SPS lesen
    bstate = GetTagBit("VM-HA01-STAT_EIN"); //Return-Type: BOOL 
    
    //Wenn bstate True ist, wird das Signal AUS auf TRUE gesetzt
    if (bstate)
    	//Code für if = TRUE
    	SetTagBitWait("VM-HA01-STEU_AUS",TRUE);
    
    //Code für if = FALSE: Wenn bstate FALSE, "EIN" auf TRUE setzen
    else 
    	SetTagBitWait("VM-HA01-STEU_EIN",TRUE); 
    
    bSteuEin = GetTagBitWait("VM-HA01-STEU_EIN");
    bSteuAus = GetTagBitWait("VM-HA01-STEU_AUS");
    {
    	if (bSteuEin)
    		//Ist Steuervariable "EIN" TRUE wird diese wieder auf FALSE geschrieben
    		SetTagBitWait("VM-HA01-STEU_EIN",FALSE);
    }
    {
    	if (bSteuAus)
    		//ist Steuervariable "AUS" TRUE wird diese wieder auf False gesetzt
    		SetTagBitWait("VM-HA01-STEU_AUS",FALSE);
    }
    Die zwei Blöcke am Ende um die beiden if's sind in C zwar erlaubt, haben bei dir aber keine Funktion.
    Ich weiß eh noch nicht so recht was du mit deinem Code so bezwecken willst, das mit den drei TagWait Funktionen ist zumindest äußerst unschön und macht die Ausführung extrem langsam.

    Deinen Code könntest du zumindest dahingehend aufräumen, und so schreiben dass bei dir auch suchen und ersetzen funktioniert:
    Code:
    // WINCC:TAGNAME_SECTION_START
    #define TAGSTEUEIN "VM-HA01-STAT_EIN"
    #define TAGSTEUAUS "VM-HA01-STEU_AUS"
    // next TagID : 1
    // WINCC:TAGNAME_SECTION_END
    
    BOOL bstate;
    BOOL bSteuEin;
    BOOL bSteuAus;
    
    bstate = GetTagBit(TAGSTEUEIN);
    
    if (bstate) {
    	SetTagBitWait(TAGSTEUAUS, TRUE);
    } else {
    	SetTagBitWait(TAGSTEUEIN, TRUE);
    }
    
    bSteuEin = GetTagBitWait(TAGSTEUEIN);
    bSteuAus = GetTagBitWait(TAGSTEUAUS);
    if (bSteuEin) {
    	SetTagBitWait(TAGSTEUEIN,FALSE);
    }
    if (bSteuAus) {
    	SetTagBitWait(TAGSTEUAUS,FALSE);
    }
    Das ließe sich aber noch wesentlich zusammenkürzen, ich habe jetzt nur 1:1 deine Logik übernommen.

    Vielleicht schreibst du mal wann welche Bits wann gesetzt und zurückgesetzt werden sollen, dann lässt sich da bestimmt einiges optimieren.
    Die Genialität einer Konstruktion liegt in ihrer Einfachheit – Kompliziert bauen kann jeder.

    (Sergei Pawlowitsch Koroljow, sowjetischer Konstrukteur von Raketen und Weltraumpionier)

  9. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    Elektricks (06.02.2016)

  10. #9
    Registriert seit
    31.07.2013
    Ort
    Unterfranken
    Beiträge
    87
    Danke
    18
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Hallo thomas und danke für die antwort.

    Erstmal zu meinem Ziel:
    ich möchte ein SR Glied in der SPS setzen (das wäre "VM-HA01-STAT_EIN") bzw. Rücksetzen über die variablen "VM-HA01-STEU_EIN" bzw. "VM-HA01-STEU_AUS".
    Vielleicht ist meine Denke hier aber auch total falsch... Und Wincc bietet mit Bordmitteln diese Funktion ???

    Ich möchte mit meinem Code wenn "VM-HA01-STAT_EIN" FALSE ist, das Signal "VM-HA01-STEU_EIN" für mind. einen Zyklus auf True setzen,
    und wenn "VM-HA01-STAT_EIN" TRUE ist, das Signal "VM-HA01-STEU_AUS" für mind. einen Zyklus auf True setzen.

    Daher warte ich auch bis die Steuervariablen geschrieben sind, um diese anschließend wieder zurückzusetzen...

    Ich schreibe dass so ausführlich, damit ich auch in einem jahr Logisch nachvollziehen kann wie das funktioniert, da das nciht mein tägliches Geschäft ist.
    ich hänge gleich noch ein paar Bilder an, wenn ich wieder am Rechner bin... Grad Kaffeepause

  11. #10
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.255
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich verstehe nicht warum Du das im WinCC machen willst.

    zB:
    Taste Visu "EIN": SetTag (VM-HA01-STEU_EIN,TRUE);
    Taste Visu "AUS": SetTag (VM-HA01-STEU_AUS,TRUE);
    (also das ist C, wird im VBS auch nicht viel anders aussehen)

    in der SPS:
    Code:
    U VM-HA01-STEU_EIN
    S VM-HA01-STAT_EIN
    R VM-HA01-STEU_EIN
    
    U VM-HA01-STEU_AUS
    R VM-HA01-STAT_EIN
    R VM-HA01-STEU_AUS

  12. Folgender Benutzer sagt Danke zu borromeus für den nützlichen Beitrag:

    Elektricks (06.02.2016)

Ähnliche Themen

  1. WinCC V7 Direktverbindung per VBS
    Von FinnT im Forum HMI
    Antworten: 1
    Letzter Beitrag: 20.11.2015, 15:23
  2. WinCC V13 VBS Skript funktioniert nicht
    Von Bobbybau91 im Forum HMI
    Antworten: 8
    Letzter Beitrag: 18.09.2015, 11:44
  3. Antworten: 6
    Letzter Beitrag: 19.07.2015, 23:56
  4. Antworten: 8
    Letzter Beitrag: 26.06.2014, 14:54
  5. VBS-Skript
    Von johnij im Forum HMI
    Antworten: 7
    Letzter Beitrag: 06.06.2008, 14:16

Lesezeichen

Berechtigungen

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