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

Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 32

Thema: SCL Anfängerfehler??

  1. #11
    Registriert seit
    09.08.2006
    Beiträge
    3.629
    Danke
    912
    Erhielt 656 Danke für 542 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Du hast IF THEN ELSE nicht richtig verstanden...

    Code:
    IF A THEN
        blablabla;
    ELSE
        IF A AND B THEN
            blablabla;     // Das hier wird NIE ausgeführt
        END_IF;
    END_IF;
    ELSE wird nur ausgeführt, wenn IF unwahr ist...

    Gruß.

  2. #12
    Registriert seit
    16.07.2007
    Beiträge
    61
    Danke
    13
    Erhielt 16 Danke für 16 Beiträge

    Standard

    Vor allem weiß ich nicht, warum da mit Strings gearbeitet wird. Wäre das nicht leichter, mit lokalen Variablen zu arbeiten und den Status im Baustein zu setzen? Wenn's denn sein muß kann man ja noch einen Ventilstatus als Integer ausgeben, dann kann man in WinCC flexible auch mit einer Textliste als Status arbeiten

  3. #13
    Registriert seit
    07.06.2011
    Beiträge
    117
    Danke
    4
    Erhielt 18 Danke für 18 Beiträge

    Standard

    Hallo,

    ich versteh den Eingang "Start" nicht. Da momentan im FB nichts passiert, wenn der nicht gesetzt ist, brauch er auch nicht überall geprüft werden.

    Oder die Funktion soll eine andere sein ...
    Mario

  4. #14
    Registriert seit
    16.07.2007
    Beiträge
    61
    Danke
    13
    Erhielt 16 Danke für 16 Beiträge

    Standard

    Vielleicht sollte der TE mal von vorne anfangen und genau beschreiben was mit dem Baustein gemacht werden soll. Ein simples Ventil schalten sollte ja auch einfacher gehen.

  5. Folgender Benutzer sagt Danke zu m_w für den nützlichen Beitrag:

    ducati (14.05.2013)

  6. #15
    Registriert seit
    07.06.2011
    Beiträge
    117
    Danke
    4
    Erhielt 18 Danke für 18 Beiträge

    Standard

    Kann "Ventil" eigentlich gelesen werden, wenn die Variable nur als Output definiert ist?
    Mario

  7. #16
    Registriert seit
    16.07.2007
    Beiträge
    61
    Danke
    13
    Erhielt 16 Danke für 16 Beiträge

    Standard

    ja es kann ja der Status vom Ausgang abgefragt werden

  8. #17
    Registriert seit
    09.08.2006
    Beiträge
    3.629
    Danke
    912
    Erhielt 656 Danke für 542 Beiträge

    Standard

    Code:
    FUNCTION_BLOCK FB1
    VAR_INPUT
    Eingabetext: STRING; //* Steuertext von WinCC*//
    Start: BOOL; //* Start Variable von WINCC*//
    END_VAR
    
    VAR_OUTPUT
    Ventil: BOOL; //*Ausgangsvariable für das Ventil*//
    END_VAR
    VAR
    
    A2: INT; //*Find Baustein*//
    A3: INT; //*Find Baustein*//
    A4: INT; //*Find Baustein*//
    A5: INT; //*Find Baustein*//
    A6: INT; //*Find Baustein*//
    A7: INT; //*Find Baustein*//
    Text_2: STRING; //*Auswahltext_1*//
    Text_3: STRING; //*Auswahltext_2*//
    Text_4: STRING; //*Auswahltext_3*//
    Text_5: STRING; //*Auswahltext_4*//
    Text_6: STRING; //*Auswahltext_5*//
    Text_7: STRING; //*Auswahltext_6*//
    END_VAR
    
    
    //*Vorbelegung der Auswahltexte*//
    
    
    Text_2:='V1';
    Text_3:='auf';
    Text_4:='zu';
    Text_5:='Ventil';
    Text_6:='öffne';
    Text_7:='schließe';
    
    // Textsuche
    A2:=FIND(IN1:=Eingabetext,IN2:=Text_2);
    A3:=FIND(IN1:=Eingabetext,IN2:=Text_3);
    A4:=FIND(IN1:=Eingabetext,IN2:=Text_4);
    A5:=FIND(IN1:=Eingabetext,IN2:=Text_5);
    A6:=FIND(IN1:=Eingabetext,IN2:=Text_6);
    A7:=FIND(IN1:=Eingabetext,IN2:=Text_7);    
    
    // Ventil schalten
    IF START AND (A2 OR A5) AND (A3 OR A6) THEN
        VENTIL := 1;
    ELSIF START AND (A2 OR A5) AND (A4 OR A7) THEN
        VENTIL := 0;
    END_IF;
    
    END_FUNCTION_BLOCK
    ohne Gewähr...
    Geändert von ducati (14.05.2013 um 15:42 Uhr)

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

    Licht9885 (14.05.2013)

  10. #18
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.626
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard

    Kein FOR Schleife weil der Ergebniss ist Unterschiedlich für die verschiedene STRINGs.

    Meinem Vorschlag:

    Code:
    INPUT_VAR
       Eingabetext: STRING[20]; //* Steuertext von WinCC*// Auf 20 Characters begrenzt. Ohne Dimensionierung werden 256 BYTEs verschwendet.
       Start: BOOL; //* Start Varibale von WINCC*//
    END_VAR 
    
    VAR_OUTPUT
       Ventil: BOOL; //*Ausgangsvariable für das Ventil*//
    END_VAR
    
    VAR
       TestString : ARRAY[2..7] OF STRING[20] ;
    END_VAR 
    
    TEMP_VAR
      i: INT ;
      TempVentil : BOOL ;
    END_VAR 
    
    TempVentil := FALSE ;  // wenn keinen Treffer gefunden ist, wird der Ventil = FALSE.
    
    IF Start THEN
       TestString[2]:='V1';
       TestString[3]:='auf';
       TestString[4]:='zu';
       TestString[5]:='Ventil';
       TestString[6]:='öffne';
       TestString[7]:='schließe';
    
          IF (Eingabetext := TestString[2] OR 
              (Eingabetext := TestString[5] OR
              (Eingabetext := TestString[3] OR
              (Eingabetext := TestString[6] THEN
              TempVentil := TRUE ;
          END_IF ;
          IF (Eingabetext := TestString[4] OR 
              (Eingabetext := TestString[7]  THEN
              TempVentil := FALSE ; // Zu und Schliesse haben vorrang.
          END_IF ;
    
    END_IF ;
    
    Ventil := TempVentil ;
    Geändert von JesperMP (14.05.2013 um 15:50 Uhr)
    Jesper M. Pedersen

  11. Folgender Benutzer sagt Danke zu JesperMP für den nützlichen Beitrag:

    Licht9885 (14.05.2013)

  12. #19
    Registriert seit
    09.08.2006
    Beiträge
    3.629
    Danke
    912
    Erhielt 656 Danke für 542 Beiträge

    Standard

    FIND liefert nen INT, da musst nochwas umbauen... aber prinzipiell geht's so in etwa, und sogar nachvollziehbar.

    @ jesper: im Eingabetext steht "V1 auf" bzw. "V1 zu" so hab ichs verstanden.

    Gruß.

  13. #20
    Registriert seit
    06.10.2004
    Ort
    Kopenhagen.
    Beiträge
    4.626
    Danke
    377
    Erhielt 801 Danke für 642 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von ducati Beitrag anzeigen
    @ jesper: im Eingabetext steht "V1 auf" bzw. "V1 zu" so hab ichs verstanden.
    Aha.
    Also, es konnte einer von "V1 auf", "V1 öffne", "V1 zu", "V1 schliesse", "Ventil auf", "Ventil öffne", "Ventil zu" und "Ventil schliesse" sein.
    Ja dann muss man mit FIND spielen.

    Merkwürdiges Funktionalität.
    Ist es ein Art von Text Parser ?
    Jesper M. Pedersen

  14. Folgender Benutzer sagt Danke zu JesperMP für den nützlichen Beitrag:

    Licht9885 (14.05.2013)

Ähnliche Themen

  1. SCL: FB Aufruf unter SCL mit Variablen DB
    Von ThorstenK im Forum Programmierstrategien
    Antworten: 32
    Letzter Beitrag: 10.02.2011, 19:15
  2. Antworten: 4
    Letzter Beitrag: 07.10.2006, 00:34
  3. Anfängerfehler beim Anschluss??
    Von Max-Schulz im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 27.06.2006, 07:49
  4. Brauche Hilfe bei SCL.SFC Aufrufen in SCL
    Von Gerold im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 06.10.2005, 10:47
  5. Anfängerfehler oder was
    Von andretus im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 16.02.2005, 15:29

Lesezeichen

Berechtigungen

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