Hallo und herzlich willkommen zum ersten Video des TIA Portal SCL Kurses.
Bevor wir mit dem praktischen Teil loslegen, möchte ich dir gerne einen kleinen Überblick geben, was es mit der Programmiersprache SCL oder ST genannt auf sich hat.
Direkt im Anschluss daran zeige ich dir in dieser Lektion auch ein kleines Beispiel, warum SCL besser sein kann als andere Programmiersprachen.
Was ist nun SCL??
Structed Control Language oder eben auch SCL (wird auch manchmal ST für strukturierter Text genannt) ist neben AWL die zweite textorientierte Programmiersprache, welche uns in einer SPS zur Verfügung steht sowie der Hochsprachenprogrammierung wie C oder C++ am nächsten kommt und dementsprechend auch am mächtigsten ist.
Das kommt daher, da sie einige Funktionen der Hochsprache Pascal, aber eben auch SPS typische Elemente wie z. B. Ein/Ausgänge, Zeiten und Zähler beherrscht.

Die Haupteinsatzgebiete sind:
- Die Programmierung von komplexen Algorithmen und mathematischen Funktionen.
- Sowie die Datenverwaltung wie z.B Schieberegister oder auch Rezeptur Verwaltungen.
Selbstverständlich könnten diese Aufgaben auch in AWL, KOP oder FUP gelöst werden, aber einige davon können eben in SCL schneller, kompakter und vor allem flexibler durchgeführt werden, was wiederum bedeutet, dass du dir Zeit sparst und der geschrieben Code oftmals auch leichter lesbar ist.

Vorteile von SCL gegenüber anderen Sprachen - Beispiel
Damit das für dich etwas anschaulicher wird, programmiere ich ein kleines Schieberegister.
Hinweis:
Die Funktionen, die ich hier verwende, erkläre ich dir alle noch im Laufe des Kurses, was bedeutet, dass du diese jetzt noch nicht im Detail verstehen musst.
Zum jetzigen Zeitpunkt möchte ich dir im Grunde nur zeigen, welchen Vorteil SCL gegenüber anderen Programmiersprachen haben kann.
Die Aufgabenstellung
Wir haben ein kleines Warenlager mit 10 Plätzen und jedes Mal, wenn ein neues Paket eingelagert wird, muss dieses gescannt werden.
Nachdem das geschehen ist, drückt der Bediener einen Start Knopf und das Paket rutscht einen Platz nach vorne, während des letzte Paket dann vom Regal auf ein Paketband fällt.

Um die Aufgabe zu lösen, erstelle ich nun einen Datenbaustein und in diesem DB lege ich nun einen Startknopf vom Datentyp Bool sowie eben auch 10 Regalplätze vom Datentyp INT an.
INT deswegen, weil jedes Paket ja auch einen Barcode hat und dieser in diesem Beispiel eine Ganzzahl ist.
Nun könnte ich diese Regalplätze ganz einfach 10 mal hintereinander eintragen oder aber ich verwende ein Array, das von 1 bis 10 geht.
Nur als kleine Randinfo, ein Array ist kein besonderer Datentyp, sondern nur ein Datenfeld.
Lösung im FUP
Damit der Vergleich zwischen SCL und den anderen Programmiersprachen etwas ersichtlicher wird, habe ich die Aufgabe als erstes im Funktionsplan gelöst.
Wenn der Startknopf gedrückt wird, dann werden die Daten von Platz 9 auf Platz 10 geschrieben. Im Anschluss daran von Platz 8 auf Platz 9 und das geht so weiter, bis eben Platz 1 in Platz 2 geschoben wird und da dann nichts mehr auf Platz 1 sein kann, wird dieser sowie zur Sicherheit auch der Startknopf gelöscht und die Aufgabe ist gelöst.
Das klappt zwar ganz wunderbar, aber ich möchte dir auch noch gerne die dazugehörige SCL Lösung zeigen.
Lösung in SCL
Ohne hier zu tief ins Detail zu gehen, habe ich die gleiche Aufgabe in SCL mit einer FOR Schleife in einem Bruchteil der Zeit gelöst.
Der ganz große Vorteil gegenüber FUP wird aber erst ersichtlich, wenn sich beispielsweise die Anzahl der Regalplätze von 10 auf 100 verändert.
Denn während du im Funktionsplan die MOVE Box noch 90 mal kopieren müsstest und sich mit großer Sicherheit auch der ein oder andere Tippfehler einschleicht, müsstest du in SCL nur die Zahl des Schleifenzählers verändern und schon wärst du wieder fertig.
Siehst du, wie einfach es sein kann?
Bis hier hin soll das nur ein ganz kleiner Vorgeschmack sein, was ich dir alles über diese Programmiersprache zeigen kann und ich würde mich sehr freuen, dich in der nächsten Lektion wiederzusehen.
4 Comments
Hallo Herr Kaiser,
Habe Mal die Lösung Schieberegister Lösung in SCL im Tia Portal eingetippt und Mal getestet. Ich habe den Endwert end_count von 2 auf 1 geändert. Bei dieser Änderung geht die CPU( semulation) auf Stopp. Ich komme da leider nicht hinter warum das so ist. Würde mich freuen wenn sie mir darauf eine Antwort geben.
Mit freundlichen Grüssen
Yassir Daoudi
Hallo Herr Yassir Daoudi,
sehr gerne helfe ich Ihnen weiter.
Durch das Verändern des Endwertes von 2 auf 1 wird im letzten Durchlauf der Schleife versucht auf „Lager DB“.Regalplatz[0] zuzugreifen.
Da es diesen Speicherbereich aber nicht gibt, wechselt die CPU in die Betriebsart Stopp.
Wenn Sie das Array von 1..10 auf 0..10 abändern dann funktioniert es wieder wie gewohnt.
Ich hoffe, ich konnte Ihre Frage verständlich beantworten und sollten Sie noch mehr Fragen haben dann schreiben Sie mir sehr gerne wieder 🙂
mit freundlichen Grüßen
Rene Kaiser
Hallo Herr Kaiser,
Wunderbar danke hab ich verstanden 8). Eine Frage hätte ich noch. Die Schrittweite ist auf – 1. Und die Laufvariable wird mit der 1 subtrahiert. Der Start wert ist 10 dass heißt die 10 wird mit 1 subtrahiert. Dann hat die Laufvariable den Wert 9. Wird dann die Laufvariable wegen der Schrittweite den Wert 8 erhalten oder passiert dies gleichzeitig so das die Schrittweite keine funktion hat in diesem fall hat?
Gruss Yassir Daoudi
Hallo Herr Yassir Daoudi,
ihre Frage ist sehr gut.
Ich habe die FOR Schleifer sehr detailliert in der Lektion „Wiederholfunktionen in SCL – die For Schleife“ erläutert.
Hier finden Sie den direkten link https://www.sps-tutorial.com/info-scl/#For .
Ich denke, danach sollten keine Fragen mehr offen bleiben 🙂
Und wenn doch dann werde ich diese natürlich auch beantworten.
mit freundlichen Grüßen
Rene Kaiser