TIA Brauche mal Hilfe bei SCL

Tmbiz

Level-2
Beiträge
562
Reaktionspunkte
15
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, kann mir jemand bitte mal ein CSL Test geben.

Ich brauche eine Case Funktion. Die je nach dem welche Zahl in einer Variable steht, einen Ausgang auf 1 setzt.

Also Case Step_Nr

1: Leuchte1 (A0.0) =1

2: Leuchte2 (A0.1) = 1

3: Leuchte3 (A0.2) =1

Die Ausgänge die über die Funktion gerade nicht angesprochen werden, sollen auf 0 gesetzt werden.


Aber ich habe keine Ahnung wir man das in CSL schreibt. Ich kann in AWL schreiben aber in SCL habe ich noch einige Probleme. Daher brauchte ich mal etwas Hilfe.
 
du könntest alle leuchten vor dem case auf 0 setzen. oder im entsprechenden schritt die entsprechenden leuchten auf 0 setzen wie die die du auf 1 setzt. der möglichkeiten gibt es viele wie in AWL
 
Das kann man in SCL genauso machen wie man es auch in FUP/KOP/AWL machen würde:
Code:
Leuchte1 := Step_Nr = 1;
Leuchte2 := Step_Nr = 2;
Leuchte3 := Step_Nr = 3;

Harald
 
Die beiden Antworten meiner Vorredner noch etwas ausführlicher:

Code:
Leuchte1 := Leuchte2 := Leuchte3 := FALSE; // Alle Ausgänge "Nullen"

CASE Step_Nr OF
1: Leuchte1 := TRUE;
2: Leuchte2 := TRUE;
3: Leuchte3 := TRUE;
END_CASE;
 
Code:
CASE "GlobalDB".stepnr OF
            
        1:
            "Lampe80.0" := 1;
            
        2:
            "Lampe80.1" := 1;
            
        3:
            "Lampe80.2" := 1;
            
        4:
            "Lampe80.3" := 1;
            
            
            
        10..12 :  // Statement section case 2 to 4
            ;
        ELSE  // Statement section ELSE
            ;
    END_CASE;

Ich kann jetzt die Ausgänge ein schalten aber nicht mehr ausschalten. Ich möchte mir dem Case meine Verschiedenen Fälle aufbauen um eine Schrittkette zu erstellen. Daher ist es ja so richtig. Alles was ich eingeschaltet habe, soll so lange eingeschaltet bleiben bis ich es wieder in einem entsprechenden Schritt ausschalte.
 
Du solltest die Ausgänge nach dem Case mit deinem Case beschreiben,
dann werden sie auch Zyklisch beschreiben.
Wie Harald oben geschrieben hat.

Bei größeren Cases kann es ja sein das ein Ausgang bei verschiedenen zuständen des Case geschrieben werden muss.


Gruß

Jens
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du solltest die Ausgänge nach dem Case mit deinem Case beschreiben,
dann werden sie auch Zyklisch beschreiben.
Wie Harald oben geschrieben hat.

Bei größeren Cases kann es ja sein das ein Ausgang bei verschiedenen zuständen des Case geschrieben werden muss.


Gruß

Jens

Es soll ja so sein, dass der Case 1 solange ausgeführt wird, solange der Schritt 1 aktiv ist. Danach soll dann Schritt 2 usw kommen.
 
Alles was ich eingeschaltet habe, soll so lange eingeschaltet bleiben bis ich es wieder in einem entsprechenden Schritt ausschalte.
Sowas nenne ich schlechter Programmierstil. So programmiert man nicht CASE-Schrittketten, höchstens für Kleinstanlagen (oder mit grafischen Programmier-Werkzeugen). Ab einer industrie-üblichen Größe und Komplexität (Verzweigungen) der Schrittkette verzweifelt man, wenn man an so programmierten Schrittketten Änderungen vornehmen muß. Das endet dann oft in "vorsichtshalber" "Angst"-Reset-Orgien von allen möglichen Ausgängen, die "eigentlich" eh' schon aus sein müssten, weil der/die Programmierer in der Schrittkette nicht mehr durchsehen und ihrem Programm-Machwerk nicht mehr trauen. In vielen Programmier-Liefervorschriften sind mehrfache Ausgangs-Zuweisungen an verschiedenen Programmstellen verboten.

Üblicherweise programmiert man in der Schrittkette nur die Weiterschaltungen, und außerhalb der Schrittkette bestimmt man mit OR-Netzwerken, in welchen Schritten ein Ausgang Ein sein soll. Da ist man schon mal sicher, daß ein Ausgang auch ausgeht, wenn man in der Schrittkette eine Ablaufänderung einbaut und im neuen Schritt nicht vorsichtshalber alles mögliche explizit ausschaltet. Das hat außerdem den Vorteil, daß man Verriegelungen (wie z.B. Endschalter) nur einmal zentral verknüpfen muß und sicher ist, daß die auch immer wirken.

Harald
 
*ACK*
Harald, das war definitiv zu einfach. Eine SPS muuuuuß komplizierter sein! :ROFLMAO:

Geht die Lösung von Harald auch wenn man dann eine ganzes Netzwerk an Anweisungen unter dem Schritt hat? Es wird ja nicht nur um eine Lampe gehen sondern manche Dinge müssen gesetzt werde andere zurückgesetzt werden. Dann kommen noch weiterleit Bedingungen usw.
 
Geht die Lösung von Harald auch wenn man dann eine ganzes Netzwerk an Anweisungen unter dem Schritt hat? Es wird ja nicht nur um eine Lampe gehen sondern manche Dinge müssen gesetzt werde andere zurückgesetzt werden. Dann kommen noch weiterleit Bedingungen usw.

Nein, so nicht, Harad hat die kürzeste Lösung präsentiert, die genau zu deiner Frage paßt!
Wenn noch mehr gesteuert werden soll, dann ist die Case-Variante u.U. die Bessere.
 
Es soll ja so sein, dass der Case 1 solange ausgeführt wird, solange der Schritt 1 aktiv ist. Danach soll dann Schritt 2 usw kommen.
Genau das ist das Problem: Case 1 setzt den Ausgang für Leuchte1 auf 1, solange Schritt 1 aktiv ist. Case 1 wird aber nicht mehr durchlaufen, sobald ein anderer Schritt aktiv ist. Wer bzw. welcher Schritt soll also Leuchte1 wieder ausknipsen?
Entweder vor der Case-Verzweigung alle ausknipsen oder einfach eine geeignetere Möglichkeit einsetzen, als die Case-Verzweigung. Wie es ganz einfach geht, hat Dir Harald in #4 gezeigt. Haralds Lösungsweg kann man auch leicht noch so aufbohren, dass eine Leuchte bei verschiedenen Schritten Aktivität anzeigt, sofern das zweckmässig sein sollte.
"Es ist immer wieder überraschend, wie etwas einfaches zum Problem wird, sobald man es in der HochSprachenDenkweise zu lösen versucht." könnte ich hier Haralds Spruch einmal abwandeln.

Aber nein, es ist gar nicht die HochSprachenDenkweise selbst, die Probleme bereitet.
Es ist das unvollständige Durchdenken der Aufgabe, das "Schlabbern der Feinheiten", das hier offenbart wird.
Man kann versuchen, die Logik eines Programms z.B. mittels Anwendung der Case-Selektion übersichtlicher zu gestalten.
Man kann aber nicht erwarten, dass die Anwendung einer Case-Selektion genügt, um die fehlende Logik zu ersetzen bzw. die noch ausstehenden Überlegungen des Programmierers vorausschauend und automatisch auszubügeln.
Ich weiss aus eigener Erfahrung sehr wohl, wie leicht einem GedankenSprünge unterlaufen können - da kann man noch so gewissenhaft überlegt haben.
Gruss, Heinileini


 
Zurück
Oben