Es gibt da ein paar Gründe ...
Hallo winny,
ein Grund ist recht trivial: um hier FUP-Code abzubilden, muss man einen
Screenshot anfertigen. Der S7-Manager kann aber aus jedem Baustein
eine AWL-Quelle erzeugen und die lässt sich dann als Text leicht hier im
Forum einfügen.
Der Hauptgrund für die große Verbreitung von AWL liegt aber in der
Historie: die Vorgängerin S5 kannte kein SCL und wenn man Konstruktionen
wie FOR, IF oder CASE benötigte, war AWL die einzige Möglichkeit. Viele
"alte Hasen" sind eben mit der S5 groß geworden sind (lange vor IEC1131).
Heute sollte man grundsätzlich die Stärken und Schwächen von
KOP/FUP/AWL und SCL kennen, damit man immer die am am besten
geeignete Sprache einsetzen kann.
Einige Dinge kann man nur in AWL lösen und nicht in SCL. Oft muss man
in SCL eine Funktion aufrufen, für die es in AWL eine direkte Anweisung
gibt (z.B. wortweise Bitmanipulationen oder den Zugriff auf System-
funktionen).
Bei der Wahl zwischen AWL und KOP/FUP gilt:
- AWL ist S5/S7-spezifisch in der Regel nicht portierbar
- KOP/FUP-Netzwerke kann man z.B. in Allen Bradley zur Not
auch "abmalen".
- Bitoperationen mit vielen Verschachtelungen (UND vor ODER vor
UND, etc.) sind eindeutig leichter graphisch zu programmieren, zu
verstehen und zu debuggen.
- für einfache Lade- und Transferbefehle, Vergleiche und kleine Schleifen
sind m.E. KOP/FUP- und AWL-Netzwerke gut in einem Baustein mischbar.
Bei der Nutzung von SCL sollte man aber auch immer ein wenig an
die armen Instandhalter denken, die Jahre später einen defekten
Geber suchen, sich mit zig Steuerungsfamilien und -generationen,
Antriebsreglern diverser Hersteller, Bussystemen, intelligenter
Sensorik, etc. herumschlagen müssen und daher nicht immer den ge-
samten SCL-Sprachumfang parat haben.
Daher mein Tip:
- SCL-Funktionen immer in eigenen FCs/FBs kapseln
- dabei NIE auf absolute Operanden wie E/A/M/Z/T, etc. zugreifen,
sondern alles als Parameter übergeben
- diese Bausteine in KOP/FUP/AWL aufrufen und die Ergebnisse auf
die Peripherie rangieren
- SCL (und Instanzen) einsetzen, wenn man wiederverwendbaren Code
schreiben möchte und leistungsfähige Hardware (S7-400 oder
VIPA
Speed7) zur Verfügung hat
- den Berger (AWL/SCL) durcharbeiten und verstehen!
- die Empfehlung in der SCL-Hilfe ernst nehmen
aus der scl-hilfe
S7-SCL ist besonders für folgende Aufgaben geeignet:
Programmierung komplexer Algorithmen
Programmierung mathematischer Funktionen
Daten- bzw. Rezepturverwaltung
Prozessoptimierung
In einem Punkt muss ich KalEl aber widersprechen:
den schnellsten und optimalsten code schreibt man immer noch in awl. wenn mans kann und richtig einsetzt.
Auch in SCL kann man schnellen (UND oft verständlicheren)
Code schreiben, wenn man
- EIN: Objectcode optimieren
- AUS: Feldgrenzen überwachen
- AUS: Debug-Info erstellen
- AUS: OK-Flag setzen
und das sollte man am Ende einer IBN auch tun können! Schließlich
überprüft in AWL auch kein Compiler die Bereichsgrenzen bei indi-
zierter Adressierung!
Meistens nutzt man in SCL gekapselte Module, also Instanzen.
Hier liegt der Hase im Pfeffer: da Siemens die Instanz-Zugriffe
nicht sauber in MC7 implementiert hat, werden Unmengen von
AWL-Anweisungen erzeugt, um
a) die Parameter zu ver- und entsorgen
b) auf die Operanden innerhalb eines Instanz-DBs zuzugreifen.
Wenn man in AWL mit Instanzen arbeitet, wird der Code auch langsamer
und NOCH unverständlicher und z.T. auch lebensgefährlich, wenn man
an die S7-interne Verwendung des Adressregisters denkt. Hier kann
man Programme mit sporadischen (!!!) Fehlern schreiben, die auch
Spezialisten zur Verzweiflung bringen können!
Oft spielen in der Automatisierung aber auch die Hardwarekosten eine
große Rolle (nicht immer sinnvoll, aber Maschinenbauer und die Controller
einer Maschinenbaufirma achten nun mal nur auf die Preise in der Stück-
liste, die kann man mit Excel besser zusammenzählen) und wenn der arme
Programierer dann mit der kleinsten S7-300 auskommen muss, kann er sich
den Luxus von Instanzen und weiteren hochtrabenden Programmier-
strategien gar nicht leisten, sondern er MUSS in AWL und mit absoluten
Operanden programmieren, um seine Zykluszeit einhalten zu können.
Und ein guter Tipp zum Schluss: PC und SPS sind zwei verschiedene
Welten und eine kleine Serienmaschine in großen Stückzahlen ist etwas
anderes als die Steuerung einer Papiermaschine oder einer Walzstraße.
Die optimale Programmierstrategie für alle Aufgaben gibt es nicht!
Wenn du noch in der Ausbildung bis, versuche ALLES gut kennenzulernen,
denn nur nur so kannst du später wirklich entscheiden, ob sich ein Problem
besser in AWL, in SCL, in C++ oder in SQL lösen lässt.
Zu Thema SPS-Programmiersprachen ist übrigens auch schon viel in
http://www.sps-forum.de/showthread.php?t=2093
gesagt worden.
Und jetzt: BUILD dir deine eigene Meinung!
Gruß U.