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

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 36

Thema: TIA SCL-Code vereinfachen ?

  1. #1
    Registriert seit
    12.12.2013
    Ort
    Kaiserslautern
    Beiträge
    1.337
    Danke
    385
    Erhielt 218 Danke für 173 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Servus..

    ich bin jetzt dabei mir die SCL Sprache mit die Methode "learning by doing" rein zu ziehen.
    Als unterlagen das Berger, Johannes Hofer Buch und natürlich das SPS-Forum.
    Durch das der SCL Editor im TIA recht Anfänger freundlich ist komme ich ganz gut voran.

    Doch kommt die mir die frage auf ob solche (Einfache) Code noch zu vereinfachen ist.

    Code:
     // Alarm High High
    IF NOT #HH_Activ THEN
        #HH_AL_Intern := false;
        GOTO Jump_HH;
        ;
    END_IF;
    IF #AV_intern >= #Limit_HH THEN
        #Running_Time_HH_Help_M := TRUE;
    ELSE
        #Running_Time_HH_Help_M := false;
        ;
    END_IF;
    #TIMER_HH(IN := #Running_Time_HH_Help_M,
             PT := #Delay_HH);
    IF #TIMER_HH.Q = true THEN
        #HH_AL_Intern := true;
    ELSIF (#ACK AND #Extern_ACK_Activ) OR ((#AV_intern < (#Limit_HH - #HYSTERYSE_HH) AND NOT #Extern_ACK_Activ))
    THEN
        #HH_AL_Intern := false;
        ;
    END_IF;
    Jump_HH:
    
    
    // Analog
    #LL_LIM_OUT := #Limit_LL;
    #Comm_ZLT.Limit_LL := #Limit_LL;
    
    
    //Alarm and BIT OUT and STATE
    IF #LL_AL_Intern THEN
        #LL_ALARM_OUT := true;
        #STATE_HMI.LL_ALARM_OUT := true;
        #Comm_ZLT.STATE.LL_ALARM_OUT := true;
    ELSE
        #LL_ALARM_OUT := false;
        #STATE_HMI.LL_ALARM_OUT := false;
        #Comm_ZLT.STATE.LL_ALARM_OUT := false;
        ;
    END_IF;
    z.b.
    Beim teil //Alarm High High, habe ich versucht die IF-Struktur zu verschachteln. Test haben gezeigt das diese Code dann nicht funktioniert. ist das die kürzte Methode ? Den Flipflop die ich drinnen hab geht auch bestimmt anders.

    Beim Teil //Analog will ich das #Limit_LL auf diverse andere stellen schreiben. Mus ich das #Limit_Ll dann bei jede Zuweisung abfragen oder geht das auch das mann nur 1 ml abfragt und dann auf die andere stellen schreibt.

    Beim Teil //Alarm and BIT OUT and STATE will ich das Bit #LL_AL_Intern auch weiter rangieren.
    Muss man da so vorgehen wie ich gemacht hab ? (in der AWL komm ich mit 4 Zeilen zurecht)

    ich bin gespannt auf euer Bemerkungen.

    Bram
    Geändert von de vliegende hollander (05.05.2015 um 14:50 Uhr)
    Wenn es nicht auf STRAVA ist, ist es nicht passiert !!
    Zitieren Zitieren TIA SCL-Code vereinfachen ?  

  2. #2
    Registriert seit
    03.02.2015
    Ort
    Hatten
    Beiträge
    183
    Danke
    16
    Erhielt 32 Danke für 29 Beiträge

    Standard

    Hallo Bram,

    so notwendig GOTO auch in AWL ist, so sehr versucht man es in Hochsprahcen zu vermeiden.
    Arbeite lieber mit IF/ELSE oder anderen Konstrukten. GOTO macht Code unübersichtlich und man findet Fehler auch nicht so schnell.

    Was meinst Du mit
    Beim teil //Alarm High High, habe ich versucht die IF-Struktur zu verschachteln.
    Beim Teil //Analog will ich das #Limit_LL auf diverse andere stellen schreiben. Mus ich das #Limit_Ll dann bei jede Zuweisung abfragen oder geht das auch das mann nur 1 ml abfragt und dann auf die andere stellen schreibt.
    Ich denke, das geht nur so...

    Beim Teil //Alarm and BIT OUT and STATE will ich das Bit #LL_AL_Intern auch weiter rangieren.
    Muss man da so vorgehen wie ich gemacht hab ? (in der AWL komm ich mit 4 Zeilen zurecht)
    Du kannst Dir theoretisch das IF sparen und den Wert #LL_AL_Intern direkt an die Variablen zuweisen. Wenn Du nichts Komplizierteres machen möchtest, wäre das ein 3zeiler.

    Doch kommt die mir die frage auf ob solche (Einfache) Code noch zu vereinfachen ist.
    Code vereinfachen heißt dann nicht unbedingt, daß er leserlicher wird. Da wir aus den Zeiten der notwendigen Codeoptimierungen ziemlich raus sind, schreibe ich oft eher eine Zeile mehr, wenn der Code dadurch verständlicher wird.
    Theoretisch könntest Du Dir in diesem Fall das
    Code:
    IF #AV_intern >= #Limit_HH THEN
        #Running_Time_HH_Help_M := TRUE;
    ELSE
        #Running_Time_HH_Help_M := false;
        ;
    END_IF;
    sparen und die Bedingung in Klammern direkt an den Timereingang schreiben, da Du mit der Hilfsvariablen sonst nichts weiter machst.

    Gruß
    JS

  3. Folgender Benutzer sagt Danke zu JSEngineering für den nützlichen Beitrag:

    de vliegende hollander (05.05.2015)

  4. #3
    Registriert seit
    12.12.2013
    Ort
    Kaiserslautern
    Beiträge
    1.337
    Danke
    385
    Erhielt 218 Danke für 173 Beiträge

    Standard

    Danke JS,

    Du kannst Dir theoretisch das IF sparen und den Wert #LL_AL_Intern direkt an die Variablen zuweisen. Wenn Du nichts Komplizierteres machen möchtest, wäre das ein 3zeiler.
    Und
    Code vereinfachen heißt dann nicht unbedingt, daß er leserlicher wird. Da wir aus den Zeiten der notwendigen Codeoptimierungen ziemlich raus sind, schreibe ich oft eher eine Zeile mehr, wenn der Code dadurch verständlicher wird.
    Theoretisch könntest Du Dir in diesem Fall das
    Code:
    IF #AV_intern >= #Limit_HH THEN
    #Running_Time_HH_Help_M := TRUE;
    ELSE
    #Running_Time_HH_Help_M := false;
    ;
    END_IF;
    sparen und die Bedingung in Klammern direkt an den Timereingang schreiben, da Du mit der Hilfsvariablen sonst nichts weiter machst
    hab ich so umgesetzt nach die Vorschlag.

    Das sind jetzt die Denkanstöße die Mann braucht.

    Beim teil //Alarm High High, habe ich versucht die IF-Struktur zu verschachteln.
    Da hab ich es einfach mal probiert, mit dem ziel die Code die zusammen gehört, zusammen in ein IF zu machen.

    Wie springe ich im Hochsprache über stücke Programme wenn "GOTO" vermieden werden soll ?
    ,, Schaue es mir über IF-Else an so wie du sagst..

    Bram
    Geändert von de vliegende hollander (05.05.2015 um 15:42 Uhr) Grund: if else
    Wenn es nicht auf STRAVA ist, ist es nicht passiert !!

  5. #4
    Registriert seit
    03.02.2015
    Ort
    Hatten
    Beiträge
    183
    Danke
    16
    Erhielt 32 Danke für 29 Beiträge

    Standard

    Wie springe ich im Hochsprache über stücke Programme wenn "GOTO" vermieden werden soll ?
    Indem Du sie in einen IF oder ELSE-Zweig setzt:
    Code:
     // Alarm High High
    IF NOT #HH_Activ THEN
        #HH_AL_Intern := false;
    ELSE
       IF #AV_intern >= #Limit_HH THEN
           #Running_Time_HH_Help_M := TRUE;
       ELSE
           #Running_Time_HH_Help_M := false;
           ;
       END_IF;
       #TIMER_HH(IN := #Running_Time_HH_Help_M,
                PT := #Delay_HH);
       IF #TIMER_HH.Q = true THEN
           #HH_AL_Intern := true;
       ELSIF (#ACK AND #Extern_ACK_Activ) OR ((#AV_intern < (#Limit_HH - #HYSTERYSE_HH) AND NOT #Extern_ACK_Activ))
       THEN
           #HH_AL_Intern := false;
           ;
       END_IF;
    END_IF;

  6. Folgender Benutzer sagt Danke zu JSEngineering für den nützlichen Beitrag:

    de vliegende hollander (05.05.2015)

  7. #5
    Registriert seit
    12.12.2013
    Ort
    Kaiserslautern
    Beiträge
    1.337
    Danke
    385
    Erhielt 218 Danke für 173 Beiträge

    Standard

    Danke JSE,

    ich habe es verstanden.

    Bram
    Wenn es nicht auf STRAVA ist, ist es nicht passiert !!

  8. #6
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.238 Danke für 971 Beiträge

    Standard

    Hallo Bram,

    Solche Konstruktionen
    Code:
    IF #LL_AL_Intern THEN
        #LL_ALARM_OUT := true;
        #STATE_HMI.LL_ALARM_OUT := true;
        #Comm_ZLT.STATE.LL_ALARM_OUT := true;
    ELSE
        #LL_ALARM_OUT := false;
        #STATE_HMI.LL_ALARM_OUT := false;
        #Comm_ZLT.STATE.LL_ALARM_OUT := false;
        ;
    END_IF;
    kannst du vereinfachen
    Code:
    #LL_ALARM_OUT := #LL_AL_Intern;
    #STATE_HMI.LL_ALARM_OUT := #LL_AL_Intern;
    #Comm_ZLT.STATE.LL_ALARM_OUT := #LL_AL_Intern;
    Gruß
    Dieter

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

    de vliegende hollander (05.05.2015)

  10. #7
    Registriert seit
    12.12.2013
    Ort
    Kaiserslautern
    Beiträge
    1.337
    Danke
    385
    Erhielt 218 Danke für 173 Beiträge

    Standard

    Danke Dieter,

    hab bald keine Code mehr übrig.

    Die IF-ELSE Methode ist wirklich gut als Ersatz für die "GOTO" Sprüngen.

    Bram
    Wenn es nicht auf STRAVA ist, ist es nicht passiert !!

  11. #8
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Statt
    Code:
       IF #AV_intern >= #Limit_HH THEN
           #Running_Time_HH_Help_M := TRUE;
       ELSE
           #Running_Time_HH_Help_M := false;
           ;
       END_IF;
    sollte doch auch

    Code:
    #Running_Time_HH_Help_M := #AV_intern >= #Limit_HH;
    funktionieren.

    Wäre aber Geschmackssache.
    Sänd from mei Kombjudder mitse Dastadurr.

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

    de vliegende hollander (05.05.2015)

  13. #9
    Registriert seit
    12.12.2013
    Ort
    Kaiserslautern
    Beiträge
    1.337
    Danke
    385
    Erhielt 218 Danke für 173 Beiträge

    Standard

    Ja, ich hab gemeint immer in Else verwenden zu müssen.
    Jetzt hab ich auch die vergleichend direkt am IN vom TON Timer.

    Bram
    Wenn es nicht auf STRAVA ist, ist es nicht passiert !!

  14. #10
    Registriert seit
    17.07.2009
    Ort
    Am Rande der Ostalb
    Beiträge
    5.480
    Danke
    1.141
    Erhielt 1.238 Danke für 971 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von de vliegende hollander Beitrag anzeigen
    Ja, ich hab gemeint immer in Else verwenden zu müssen.
    Im Prinzip entspricht "IF ... THEN ... END_IF" einem Setze- oder Rücksetze-Befehl in KOP/FUP/AWL.
    Ein "IF ... THEN ... ELSE ... END_IF" ist eine Zuweisung(=).
    Ein "IF ... THEN ... ELSIF ... END_IF" ist ein S/R.

    Gruß
    Dieter

  15. Folgende 3 Benutzer sagen Danke zu Blockmove für den nützlichen Beitrag:

    de vliegende hollander (06.05.2015),friendo (06.05.2015),testuser (07.05.2015)

Ähnliche Themen

  1. TIA SCL Code Problem
    Von lsr im Forum Simatic
    Antworten: 17
    Letzter Beitrag: 19.02.2015, 22:44
  2. Step 7 SCL Code
    Von Casio im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 12.03.2014, 10:33
  3. Exponent im SCL Code
    Von paula23 im Forum Simatic
    Antworten: 26
    Letzter Beitrag: 08.09.2013, 19:40
  4. SCL code
    Von awl-scl im Forum Simatic
    Antworten: 21
    Letzter Beitrag: 14.01.2008, 17:02
  5. 1.Adressübertragung?, 2.SCL-code?
    Von hobel im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 05.09.2006, 14:49

Lesezeichen

Berechtigungen

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