Problem mit TIA - SCL -> CASE-Abfrage mit nachfolger AND-Verknüpfung

Koslovski

Level-2
Beiträge
51
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich arbeite mich gerade für die Programmierung einer S7-1200 in SCL ein, und habe ein Problem mit einer CASE-Anwendung:
Code:
FUNCTION "Kette1" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      "Start" : Bool;   // Starten
      "Stop" : Bool;   // Stoppen
      "DB_oben" : Bool;   // Endschalter oben
      "DB_unten" : Bool;   // Endschalter unten
      "N_Ventile" : Int;   // Anzahl Ventile
   END_VAR


   VAR_OUTPUT 
      "Ende" : Bool;   // Kette beendet
   END_VAR


   VAR_IN_OUT 
      "Schritt" : Int;   // Stand der Schrittkette
   END_VAR






BEGIN
    IF #Stop THEN
      #Schritt :=0;// Schrittkette zurücksetzen
      #Ende := false;    
    END_IF;
    
    CASE #Schritt OF
      0: IF #Start THEN  #Schritt :=1;
        #Ende:=false;
      END_IF; // Start Abreinigen
      
      1,3,5 : IF #DB_oben THEN #Schritt := #Schritt+1 ; END_IF; // Oberer Endschalter erreicht
      2,4,6 : IF #DB_unten AND (#Schritt < 2*#N_Ventile) THEN #Schritt := #Schritt+1;
              ELSE
                #Ende := true;
              END_IF; // Unterer Endschalter erreicht
    END_CASE;
            
END_FUNCTION

In den Einstellungen des Bausteines habe ich "ENO automatisch setzen" angewählt.

Wenn ich diesen Baustein nun im einer anderen Funktion (FUP) aufrufe, und die Schritte mit den Endschaltern hochzählen will, wird der Ausgang "ENO" Null, sobald der Schritt einen geraden Wert annimmt. Beim nächsten Schritt (ungerade) ist ENO wieder Eins, d.h. der Code wurde ohne Fehler durchlaufen.

Was ist jetzt das Problem? Darf ich in einer CASE-Anweisung keine UND-Verknüpfung zusätzlich verwenden, da der Baustein ohne Fehler durchlaufen wird, wenn die UND-Abfrage gelöscht wird.


Oder kann TIA V11 SCL keine UND-Verknüpfung, denn ENO ist immer Null bei dieser einfachen Testfunktion:

Code:
FUNCTION "UND_Test" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
   VAR_INPUT 
      "W1" : Bool;
      "W2" : Bool;
   END_VAR


   VAR_OUTPUT 
      "W3" : Bool;
   END_VAR






BEGIN
    IF #W1 AND #W2 THEN #W3 :=1; END_IF;
    
END_FUNCTION

Gruß
Koslovski
 
Hallo,

ich habe grad kein TIA zur Verfügung, doch kann es sein, daß der SCL-Compiler richtigerweise als Fehler signalisiert, wenn einem OUT-Parameter in FUNCTIONs zur Laufzeit nichts zugewiesen wurde und deshalb ein OUT-Parameter einen unkontrollierten Inhalt hat?
Code:
//nicht gut:
    IF #W1 AND #W2 THEN #W3 :=1; END_IF;

//besser:
    IF #W1 AND #W2 THEN #W3:=TRUE; ELSE #W3:=FALSE; END_IF;

//ganz richtig:
    #W3 := #W1 AND #W2;
SCL ist zwar eine schöne Programmiersprache für "höhere" Aufgaben, doch für einfache logische Verknüpfungen verführt es leider zu unvollständiger Programmierung durch falsche bzw. ereignisorientierte Denkweise.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe Dein zwei Verbesserungsvorschläge mal getestet, und es ist so, dass das ENO immer dem Verknüpfungsergebnis folgt.

Seltsam, aber anscheinend so gewollt.

Ich habe die Programmierung der Schrittkette wg. eines logischen Fehlers geändert, das ENO folgt aber immer noch der letzten AND-Verküpfung.
 
es ist so, dass das ENO immer dem Verknüpfungsergebnis folgt.

Seltsam, aber anscheinend so gewollt.
*ROFL*
Das lese ich nicht so aus der TIA-SCL-Dokumentation ...
In Step7 Classic für S7-300/400 entspricht das ENO dem BIE, nicht dem VKE! Liegt es hier an der S7-1200?

Du solltest dieses Phänomen wohl besser mit dem Siemens Support besprechen. Damit das Compiler-Problem dann abgestellt wird oder als "gewollt" dokumentiert wird.

Als workaround mache einfach eine letzte Anweisung in Dein Programm, welche das VKE auf TRUE bringt.
Code:
//Dummy Zuweisung
    #temp_bit := TRUE;

//vielleicht funktioniert auch direkt dieses
    ENO := TRUE;

Unabhängig davon mußt Du in Deinem Programm aber beachten, daß jedem OUTPUT-Parameter immer etwas zugewiesen wird.

Harald
 
Ich konnte das Problem so nicht darstellen. Hab die kleine Testfunktion aus dem erste Post genommen und in eine Steuerung eingespielt. ENO ist immer TRUE...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
So soll es ja auch sein .. (ich kann es gerade nicht testen)
In welche CPU hast Du es eingespielt? Koslovski schreibt von einer S7-1200, vielleicht simuliert er das Programm aber nur?

Harald
 

Anhänge

  • ENO_794.gif
    ENO_794.gif
    20,9 KB · Aufrufe: 31
  • ENO_796.gif
    ENO_796.gif
    15 KB · Aufrufe: 20
Ich hab eine 317-2 PN/DP (317-2EK14-0AB0). Das kann natürlich scon wieder was ausmachen. Aber es sollte eben nicht sein.
 
Es ist eine reale S7-1212C DC/DC/Rly.

@Aventius: Hast Du bei den Eigenschaften der Testfunktion auch "ENO automatisch" verwalten angewählt?
 
Ich glaub' da mal an einen S7-1200 spezifischen Bug ... zumal das noch eine sehr frühe SCL-Compiler-Version für S7-1200 ist.

Allerdings kann man der schwammigen Siemens-Dokumentation auch nicht alles glauben.

z.B. Step7 Basic V11.0 SP2 Systemhandbuch:
Diese Aussage auf Seite 794 ist so nicht eindeutig: "Wenn einer der Anweisungen innerhalb des Bausteins einen Laufzeitfehler erzeugt, wird ENO auf "0" gesetzt." Es steht nicht geschrieben, daß ENO auf "1" bleibt, wenn kein Laufzeitfehler auftritt ... Für FB kann man das der Aussage auf Seite 796 entnehmen: "Wenn alle Anweisungen innerhalb von MyFB fehlerfrei ausgeführt werden, führt MyOutputBool Signal "1"." Das Verhalten in FC bleibt unklar ...
(siehe Bilder im Beitrag #6)

Es gibt im S7-1200 Systemhandbuch 11/2011 (für Firmware 2.2) einen Abschnitt zu SCL mit dem Parameter "OK", welcher nahelegt, die S7-1200 würde sich wie S7-300/400 "Classic SCL" verhalten (siehe Zitat sowie Bildanhang). Merkwürdigerweise wurde diese Erklärung im S7-1200 Systemhandbuch 04/2012 (für Firmware V3.0) wieder weggelassen. Und warum steht diese Erklärung nicht im aktuellen Systemhandbuch für Step7 Basic (bzw. Professional) V11.0 SP2? :confused:
Wenn die CPU mit der Ausführung eines SCL-Codebausteins beginnt, setzt die CPU OK auf WAHR. Tritt während der Ausführung einer Operation ein Fehler auf (z. B. Division durch null), wird OK auf FALSCH gesetzt. Während der Ausführung des SCL-Codes können Anweisungen den Parameter OK abfragen oder sie können OK auf WAHR oder FALSCH setzen.
[...]
Sie können die SCL-Übersetzung so einrichten, dass der Wert von OK nach der Ausführung des Codebausteins in den Ausgangsparameter ENO geschrieben wird.

Step7 Professional V11.0 SP2 Systemhandbuch - 4.6 STEP 7-Projekte migrieren:
SCL nutzt den EN-/ENO-Mechanismus des TIA-Portals. Aus diesem Grund werden bei der Migration alle Verwendungen des OK-Flags durch ENO ersetzt. Die Stellen, an denen im Ursprungsprogramm ENO verwendet wurde, werden markiert. Diese Stellen müssen Sie nach
der Migration überprüfen und an den neuen Mechanismus anpassen.

Also @Koslovski
Du solltest den Siemens Support nerven ;)
Und Dir zwischenzeitlich einen workaround überlegen, denn sooo schnell wird Siemens wegen TIA-Phänomenen wohl nicht reagieren ...

Harald
 

Anhänge

  • SCL_OK_2011.gif
    SCL_OK_2011.gif
    19,3 KB · Aufrufe: 18
  • SCL_OK_2012.gif
    SCL_OK_2012.gif
    9,9 KB · Aufrufe: 12
Zuletzt bearbeitet:
Zurück
Oben