# SCL oder AWL



## evolem (25 Februar 2014)

Hallo zusammen,

mich interessiert eure Meinung, wann es sinnvoll  wäre SCL einzusetzen. Bei der folgenden Aufgabe stellten wir fest  (http://www.sps-forum.de/programmierstrategien/69608-ablaufkette-und-schiebefunktion.html),  das die Lösung fehlerhaft bzw nicht vollständig ist. 
Da sich die  Codes in den Lösungen in den Netzwerken nahezu wiederholen, dachte ich  an etwas abgespecktes und das es auch eine schöne Aufgabe ist um SCL zu  lernen. 

Hier meine Lösung:


```
FUNCTION_BLOCK FB101

VAR
    b : INT := 1;
    a : WORD;
END_VAR
    
VAR_INPUT
    //Eingangsparameter
    IN:WORD;
    STOP : BOOL;

END_VAR

VAR_OUTPUT
    //Ausgangsparameter
    OUT : WORD;
END_VAR

    // Anweisungsteil
    // Berechnet IN mit b. 
    // Beispiel: 0000 1000 UND 0000 1000 = 0000 1000 --> Ausgang soll nach der IF-Anweisung geschaltet werden
    // Beispiel: 0000 1000 UND 0000 0111 = 0000 0000 --> Ausgang soll nach der IF-Anweisung nicht geschaltet werden
    // Das Ergebnis wird für die IF Anweisung gebraucht um so festzustellen, das in der richtigen Reihenfolge geschaltet wird
    
    a := IN AND INT_TO_WORD(b);  
       
    IF INT_TO_WORD(b) = a THEN      
        OUT := IN OR OUT;
        b := WORD_TO_INT(SHL (IN := INT_TO_WORD(b), N := 1));
    END_IF;

    IF STOP THEN
        OUT := 0;
        b := 1;
    END_IF;
    
END_FUNCTION_BLOCK
```

Kritik  und Anregungen, wie man es besser machen könnte, ist erwünscht. Macht hier ein SCL-Code Sinn oder kann man es mit AWL eleganter lösen? 

Viele grüße Evo


----------



## ducati (25 Februar 2014)

evolem schrieb:


> mich interessiert eure Meinung, wann es sinnvoll  wäre SCL einzusetzen.



Wenn Der Kunde SCL fordert, nimmst Du SCL. Wenn der Kunde AWL fordert, nimmst AWL. Wenn der Kunde FUP fordert, nimmst Du FUP. usw.

Wenn der Kunde nichts fordert, nimmst Du dass, was Du am besten kannst.

Jemand, der AWL gelernt hat, wird sicherlich bei AWL bleiben. Jemand der neu anfängt, und schon mal früher etwas mit Basic oder C oder Pascal oder sonstwas zu tun hatte, wird mit SCL besser klarkommen.



evolem schrieb:


> Macht hier ein SCL-Code Sinn oder kann man es mit AWL eleganter lösen?



Das hat nichts mit der Sprache zu tun. Mann kann in beiden Sprachen "elegant" programmieren.

Gruß.


----------



## ducati (25 Februar 2014)

evolem schrieb:


> Kritik  und Anregungen, wie man es besser machen könnte, ist erwünscht.



Was soll der FB denn machen? Dann könnte man auch schauen, ob es richtig programmiert ist. Für mich macht das ganze momentan wenig Sinn...

Das Du Out nicht in jedem Aufruf zuweist ist unschön, erstrecht, da Du bei der Deklaration von OUT keinen Wert zugewiesen hast.

Gruß.


----------



## Larry Laffer (25 Februar 2014)

Hallo,
ich würde Ducati nicht in Allem vorbehaltlos zustimmen.
Es gibt so ein paar Dinge, die würde ich ohne SCL nicht mehr machen wollen. Dazu gehören Funktionen, die Schleifen (im weiteren Sinne) beinhalten bzw. Berechnungen.
Bei Schrittketten (z.B.) könnte man sich drüber streiten - das liegt im Auge des Betrachters.
In beiden Fällen gilt aber : Man kann sich auch Einen zusammenprorammieren (so von hinten durch die Brust ins Auge) - das sollte immer vermieden werden ...

Gruß
Larry


----------



## bike (25 Februar 2014)

Man nehme die Erstellsprache die gefordert wird. 
Denn der Kunde hat seine Forderungen und Spezifikationen und daran muss man sich halten.
Berechnungen in KOP oder FUP schauen scheiße aus, funktionieren aber auch.(Denn bei Ladder gibt es nur KOP.)
Ich denke man sehr wohl sowohl in AWL als auch SCL gut Schleifen oder Berechnungen programmieren.
In SCL geht es leichter (wenn man SCL kann).
Ein Kollege von mir macht es in AWL ebenso schnell.


bike


----------



## ducati (25 Februar 2014)

Jo,

und möglichst sollte man in einem Programm nicht alle mögliche Programmiersprachen mischen. OK wäre für mich SCL+FUP oder AWL+FUP usw. aber ungern AWL+SCL ...

Gruß.


----------



## evolem (25 Februar 2014)

Ich habe bereits Erfahrungen mit c, basic uvm. Nichtsdestotrotz habe ich  die Aufgabe auch mit AWL programmiert. Ist etwas mühseliger aber ich  habs auch abgespeckt geschafft :razz:



ducati schrieb:


> Was soll der FB denn machen?



Mit SCL wollte ich diese Aufgabe lösen: http://www.kleissler-online.de/PDF/Schrittkette.pdf



> Das Du Out nicht in jedem Aufruf zuweist ist unschön, erstrecht, da Du bei der Deklaration von OUT keinen Wert zugewiesen hast.



Kann dir da nicht ganz folgen. Muss ich bei der Deklaration zwangsmäßig  den Wert 0 zuweisen als Anfangswert? ist es nicht automatisch ohnehin  schon 0? OUT soll auch nur gesetzt werden, wenn der Eingang in der  richtigen Reihenfolge gesetzt wurde.




ducati schrieb:


> SCL+FUP oder AWL+FUP usw. aber ungern AWL+SCL ...
> Gruß.



Wie ist das gemeint? kann man in SCL auch auf FUP umschalten? Oder meintest du innerhalb eines Bausteins? ich glaube du meinst letzteres


----------



## ducati (25 Februar 2014)

evolem schrieb:


> Kann dir da nicht ganz folgen. Muss ich bei der Deklaration zwangsmäßig  den Wert 0 zuweisen als Anfangswert? ist es nicht automatisch ohnehin  schon 0? OUT soll auch nur gesetzt werden, wenn der Eingang in der  richtigen Reihenfolge gesetzt wurde.



Ich sag ja auch nicht, dass es u.U. nicht auch funktioniert, es ist nur unschön.




evolem schrieb:


> Wie ist das gemeint? kann man in SCL auch auf FUP umschalten? Oder meintest du innerhalb eines Bausteins? ich glaube du meinst letzteres



Nein innerhalb einer SPS, des gesamten Programms, finde ich 2 Sprachen OK, mehr unschön.

Gruß.


----------



## evolem (25 Februar 2014)

ducati schrieb:


> Ich sag ja auch nicht, dass es u.U. nicht auch funktioniert, es ist nur unschön.



Ich mach das zum ersten mal. Wie würde es denn eigentlich schöner aussehen oder wie macht es mehr Sinn?


----------



## ducati (25 Februar 2014)

evolem schrieb:


> Ich mach das zum ersten mal. Wie würde es denn eigentlich schöner aussehen oder wie macht es mehr Sinn?



Auf jeden Fall bei der Deklaration einen Wert mitgeben.

Ausgangsvariablen in jedem Bausteinaufruf zuweisen. Für alles andere interne Variablen definieren.

Gruß.


----------



## vollmi (25 Februar 2014)

ducati schrieb:


> Nein innerhalb einer SPS, des gesamten Programms, finde ich 2 Sprachen OK, mehr unschön.



Wobei IMHO FUP und AWL dieselben Sprachen nur anders dargestellt sind.

AWL und SCL sind hingegen völlig unterschiedlich auch wenn SCL später nach AWL kompiliert wird.

Ich meine es gibt diverse Aufgaben die mit SCL wesentlich übersichtlicher und verständlicher zu lösen sind als AWL. Und auch umgekehrt. Da wäre es doch blödsinnig aus Prinzip auf eine der beiden Sprachen in einem Projekt zu verzichten.

mfg René


----------



## ducati (25 Februar 2014)

war mir, klar, dass das andere anders sehen  Ist auch nur meine Meinung.


----------



## bugatti66 (8 März 2014)

Das Geheimnis um die Programmiersprachen ist doch mittlerweile geklärt.
Ich weiß nicht ob das hier bereits diskutiert wurde. Aber zur Sicherheit schreib ich es noch mal.

Es gab Leute, für die waren einige Programmiersprachen wichtiger als andere.
Man konnte 3 Gruppen ausmachen.
Der S5-Programmierer favorisierten AWL.
Die Codesys-Programmierer favorisierten ST und
einige andere (Rockwell, Mitsubishi-Japan, Omron,..) favorisierten KOP.

Wie konnte es zu solch unterschiedlichen Erkenntnissen kommen?
Waren die Rockwell-Programmierer alle doof? 
(KOP ist was für Doofe sagte der S5-Programmierer)

NEIN, es gab bei einigen Steurungen ganz bestimmte Sachen, die man nur in einer einzigen Programmiersprache machen konnte. Bei der S5 war das halt AWL, bei Codesys ST und bei Omron KOP,...
Sind die Progammierer einmal an so einem Punkt angekommen, so haben sie alles in dieser Sprache weiterprogrammiert, und die anderen nicht mehr benutzt.


----------



## bike (8 März 2014)

So würde ich das nicht stehen lassen.
Ich komme aus der S5 Welt und nehme für jede Anwendung die Sprache? die es für die / den  Kunden einfach macht.
Und kann man Fanuc in ST programmieren?
Oft ist man zu einer bestimmten Art der Programmierung gezwungen.
Also solche Grundsatzdiskussionen sind fast ein Glaubenskrieg.

Sind das wirklich Programmiersprachen oder nur verschiedene Darstellungsarten, ist die nächste Frage.


bike


----------



## bugatti66 (9 März 2014)

In Beitrag #5 hast du noch behauptet, du nimmst die Sprache, die der Kunde fordert.
Ich gehe denn davon aus, dass du auch die Steuerung nimmst, die der Kunde fordert?
Und da wird es ja wohl keinen Kunden geben, der fordert eine Fanuc zu nehmen und sie in ST zu programmieren!
Oder ich will es noch drastischer ausdrücken, 
wenn man die SPS-Hersteller mit Restaurants vergleicht, und die Programmiersprachen wären die Gerichte,
würdest du versuchen Schweinshaxe in einer Dönerbude zu essen?

Ich würde eher die Aussage, dass man Schleifen nur in SCL oder AWL programmieren kann, nicht so stehen lassen!
Ich mache dir die schönsten Schleifen auf der OMRON in *KOP*.

Gut  finde ich, dass, ich nehme mal an, wenn der Kunde keine  Programmiersprache vorgibt, du mehrere verschiedene Programmiersprachen  in einem Projekt einsetzt. Oder habe ich das falsch verstanden?


----------



## bike (9 März 2014)

bugatti66 schrieb:


> In Beitrag #5 hast du noch behauptet, du nimmst die Sprache, die der Kunde fordert.
> Ich gehe denn davon aus, dass du auch die Steuerung nimmst, die der Kunde fordert?
> Und da wird es ja wohl keinen Kunden geben, der fordert eine Fanuc zu nehmen und sie in ST zu programmieren!
> Oder ich will es noch drastischer ausdrücken,
> ...



Was willst du mir damit schreiben?
Wenn du den Glaubenskrieg so nimmst ist es deine Endscheidung.
Ich habe geschrieben, dass ich das nehmen  das sinnvoll ist und dem Kunden hilft mit seinen Anlagen Geld zu verdienen.


bike


----------



## bugatti66 (9 März 2014)

Ich "mag" Glaubenskriege, aber ich würde sie lieber Grundsatzdiskussionen nennen.
Jetz hast du meine Frage aber nicht beantwortet:
Mischt du mehrere verschiedene Programmiersprachen  in einem Projekt?


----------



## bike (9 März 2014)

bugatti66 schrieb:


> Ich "mag" Glaubenskriege, aber ich würde sie lieber Grundsatzdiskussionen nennen.
> Jetz hast du meine Frage aber nicht beantwortet:
> Mischt du mehrere verschiedene Programmiersprachen  in einem Projekt?



Was sind denn verschiedene "Programmiersprachen?  

Die PV ist in SCL geschrieben, die WZV in AWL und andere Funktionen in FUP oder KOP , je nachdem wie du den Editor einstellst und Graph, wenn ich Step 7 verwende und da kommt immer MC7 Code heraus.
Und wenn ich Fanuc machen darf dann eben nur KOP.

Das hat aber keinen Einfluss auf die Funktion, daher die Feststellung, dass es völlig egal mit welcher Entwicklungsumgebung man das Programmieren lernt.


bike


----------



## Blockmove (9 März 2014)

bugatti66 schrieb:


> Mischt du mehrere verschiedene Programmiersprachen  in einem Projekt?



Natürlich. Dafür sind sie ja da.
Jede Sprache hat ihre Vorzüge und eignet sich für bestimmte Aufgaben besser als eine andere.

Betriebsarten / Startbedingungen programmiere ich FUP / KOP.
Berechnungen / Typverwaltung / Datenhandling in SCL / AWL
Schrittketten in Graph

Gruß
Dieter


----------

