AS-Elemente in ST

Die folgenden →AS-Elemente werden in ST unterstützt, um damit AS-Netzwerke zu erstellen

Artikel in diesem Abschnitt:

AS-Netzwerke effizient und korrekt erstellen/verwenden

  • Kenntnisse über die Schrittkettenprogrammierung werden beim Erstellen von AS-Netzwerken vorausgesetzt.

  • Es ist möglich, mehrere AS-Netzwerke innerhalb von →Programmen und →Funktionsbausteinen zu erstellen.

  • Die Inhaltshilfe des ST-Editors bietet Vorlagen zum schnellen Erstellen der AS-Netzwerke: Drücken Sie Strg+Leerzeichen und tippen Sie das Start-Schlüsselwort in Kleinbuchstaben ein, um die jeweilige Vorlage zu erhalten. Beispiel: Mit step erhalten Sie die Vorlage für den Schritt.

  • Sie können die AS-Elemente im ST-Code beliebig reihen. Neuron empfiehlt, die AS-Elemente in einer für Sie verständlichen Reihenfolge anzuordnen.
    Siehe das folgende Beispiel: abwechselnd Schritte und Transitionen, abschließend die Aktionen
    Informationen darüber, in welcher Reihenfolge ein AS-Netzwerk ausgewertet wird, finden Sie unter "Auswertung des ST-Codes inklusive der AS-Netzwerke."

  • Laut der →IEC-Norm ist es nicht erlaubt, diese AS-Elemente mit ST-Anweisungen auf der obersten Ebenen zu kombinieren (z.B. Baustein-Aufrufe oder Zuweisungen parallel zu Schritte und Transitionen). Eine Meldung informiert Sie darüber, falls der eingegebene ST-Code mit den AS-Elementen zusammen nicht erlaubt ist.

  • Unsichereunerreichbare und/oder sich gegenseitig blockierende AS-Netzwerke werden von Neuron Power Engineer nicht erkannt oder verhindert.
    Unsichere AS-Netzwerke können entstehen, falls das AS-Netzwerk öfter verzweigt, als es zusammengeführt wird. Unerreichbare Verzweigungen im AS-Netzwerk können verursacht werden, falls das AS-Netzwerk in einer anderen Weise verzweigt, als es zusammengeführt wird. Bei sich gegenseitig blockierenden AS-Netzwerken wartet jedes der AS-Netzwerk auf eine nicht ausgeführte Operation des anderen AS-Netzwerks.
    Vertiefende Informationen zu solchen AS-Netzwerken finden Sie in der IEC-Norm und/oder im Technical Report IEC TR 61131-8 (Programmable controllers – Part 8: Guidelines for the application and implementation of programming languages)  mit den Suchbegriffen "unsafe SFC", "unreachable SFC" und "deadly embrace".

Beispiel 1 für eine Schrittkette mit AS-Elementen in ST
PROGRAM SampleSfcCounting1
    VAR
        cntStep0 : DINT;
        cntStep1 : DINT;
    END_VAR
 
    INITIAL_STEP step0 :
        act0(N);
    END_STEP
 
    TRANSITION t0 FROM step0 TO step1
        := cntStep0 MOD 10 = 0;
    END_TRANSITION
 
    STEP step1 :
        act1(N);
    END_STEP
 
    TRANSITION t1 FROM step1 TO step0
        := cntStep1 MOD 10 = 0;
    END_TRANSITION
 
    ACTION act0 :
        cntStep0 := cntStep0 + 1;
    END_ACTION
 
    ACTION act1 :
        cntStep1 := cntStep1 + 1;
    END_ACTION
 
END_PROGRAM

Die schematische Darstellung der AS-Elemente aus dem Beispiel 1:

 

Zum besseren Verständnis der Kommentare für ACTION ... END_ACTION für das folgende Beispiel sind Kenntnisse über die Auswertung des ST-Codes inklusive der AS-Netzwerke erforderlich.

Beispiel 2 für eine Schrittkette mit AS-Elementen in ST
FUNCTION_BLOCK SampleSfcCounting2
 
  VAR
    cnt1, cnt2, cnt3, cnt4, cnt5, cnt6 : LINT;
  END_VAR
 
  INITIAL_STEP Step1 :
    Action1();
    Action2(D, T#5s);
    Action3(L, T#5s);
    Action4(P0);
    Action6(SD, T#15s);
    Action7(D, T#10s);
  END_STEP
 
  TRANSITION FROM Step1 TO Step2
    := Action7;
  END_TRANSITION
 
  STEP Step2 :
    Action2(L, T#5s);
    Action3(D, T#5s);
    Action5(P1);
  END_STEP
 
  TRANSITION FROM Step2 TO Step3
    := Step2.T > Time#10s - T#200ms;
  END_TRANSITION
 
  STEP Step3 :
    Action6(R);             
  END_STEP
 
  TRANSITION FROM Step3 TO Step1
    := TRUE;
  END_TRANSITION
 
  // runs from 0-10
  ACTION Action1 :
    cnt1 := cnt1 + 1;
  END_ACTION
 
  // runs from 5-10 sec (while Step1 is active) and 10-15 sec (while Step2 is active) 
  ACTION Action2 :
    cnt2 := cnt2 + 1;
  END_ACTION
 
  // runs from 0-5 sec and 15-20 sec
  ACTION Action3 :
    cnt3 := cnt3 + 1;
  END_ACTION
 
  // runs at the end of Step1
  ACTION Action4 :
    cnt4 := cnt4 + 1;
  END_ACTION
 
  // runs at the start of Step2
  ACTION Action5 :
    cnt5 := cnt5 + 1;
  END_ACTION
 
  // runs from 15-20 sec  (while Step2 is active)
  ACTION Action6 :
    cnt6 := cnt6 + 2;
  END_ACTION
 
  // used to signal end of step1 after 10 sec 
  ACTION Action7 :
  END_ACTION
 
END_FUNCTION_BLOCK