Schrittketten mit case

Bensen83

Level-1
Beiträge
777
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute, will/muss vielleicht bald beruflich mein erstes Projekt mit Codesys machen.
Hatte mir gedacht, alles in ST zu Programmieren. Hierzu dachte ich, dass
ich Schrittketten in einer case struktur aufbaue.

also dann gibt es einmal die reine schrittkette, welche in case läuft und des weiteren ein paar signales des programmteils, die eigentlich immer aufbereitet werden müssen.

Würdet ihr für diese geschichte 2 funktionen machen. die erste (die case struktur) dann an verschiedenen programmteilen einfach mit call aufrufen und den anderen allgemeinen teil immer callen?
oder sollte ich beides in eine funktion packen und dann mit sk.start die case struktur freischalten?

Oder vielleicht doch nen anderen weg gehen und die sk in AS Programmieren?
Das hätte den Vorteil, dass man bei hinmzufügen eines schrittes (in der mitte) nicht immer die nummern des case ändern müsste.

Hier kann man ja einfach die entsprechende transition ändern um in andere schritte zu gelangen. ist allerdings nicht ganz so flexible wie case, aber man kann eigentlich direkt lesen, wo die sk nach jedem schritt weiter geht.


Was meint ihr?
 
Ich würde AS nutzen.

Wenn deine Schritte komplexer werden kannst du diese ja in ST-Ausprogrammieren.

Wenn du umgedingt nur ST nutzen willst dann nimm bei den Schrittnummern genug abstände, um dazwischen noch Schritte einfügen zu können.

Grüße

Marcel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok

Ja, finde AS auch ganz praktisch, kann ich da aber auch irgendwie abfragen, ob ein schritt schon durchlaufen wurde?
also im moment (S7 spl LIST) kann ich einfach vergleichen, ob meine schrittnummer größer xy ist. wenn man in as den schritten namen gibt, geht das ja nicht mehr so einfach, oder?
 
Ich würde AS nutzen.

Wenn deine Schritte komplexer werden kannst du diese ja in ST-Ausprogrammieren.

Wenn du umgedingt nur ST nutzen willst dann nimm bei den Schrittnummern genug abstände, um dazwischen noch Schritte einfügen zu können.

Grüße

Marcel


Da nimmt man keine Nummern, sondern Enumerates (Konstanten). Die werden entweder automatisch nummeriert oder per Hand. Symbolische Namen sind wirklich leichter zu lesen
 
Ok

Klingt gut, aber wenn ich dann einen Schritt hinzufügen möchte, muss ich ja immer die enummeration ändern.


Weis hier jemand die genauen Vor und Nachteile von AS und CASE?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Nein ... du mußt dann nur die Enumeration entsprechend erweitern und deine Schrittkette anpassen ...

Es gibt keine Vorteil von einer IF-Struktur gegenüber einer CASE-Struktur, es sein denn das Eine oder das Andere ist für dich selbst besser oder schlechter lesbar. Vom Code bzw. vom Ablauf sollte es zu identischen Ergebnissen führen - das ist mehr ein philosophisches Thema ...
 
Es gibt keine Vorteil von einer IF-Struktur gegenüber einer CASE-Struktur

Das sehe ich anders. Wenn du einen (komplexen Ablauf hast) musst du nur auf diese Schrittnummer achten die aktuell gilt, der ganze restliche Code wird gar nicht abgearbeitet. Wenn du mit IF arbeitest werden die "AND NOT xxx AND NOT yyy" immer länger ;)...
Wenn du die Case-Struktur mit Zahlen machst, kann du immer auf die Variable zugreiffen und weisst genau wo dein Programm gerade steht. - Ist insbesondere für grosse Projekte nützlich, wenn mal was nicht läuft weisst du sofort welcher Codeteil abgearbeitet wird...
 
... dann kannst du auch die IF-Abfrage verschachteln ...
Aber wie ich schon sagte - das ist mehr ein philosophisches Thema. Ich selbst würde hier auch auf jeden Fall mit CASE arbeiten (weil ich das hierbei schöner finde) ...
 
Klar kannst du das, aber zeige mir bei >1000 Schritten, wo jetzt was in welcher IF-Struktur abgearbeitet wird. Meiner Meinung nach wird viel zu wenig CASE verwendet....
 
IF Schrittnummer == XYZ THEN
wär natürlich zu einfach.. IF oder Case macht hier wenig unterschied. Case sparrt ein wenig Code.

Doch, ein grosser Unterschied gibts:

Code:
20, 30, 40..100, 400..600: 
Anweisung....
Viel Spass sowas mit IF zu erstellen...
Deshalb nimm Case, mache genügend grosse Schritte am Anfang (Du hast mind. 32000 Stück zur Verfügung)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Meiner Meinung nach sollte ein Schritt nur eine Anweisung beinhalten.

Mit diesem Case-Konstrukt könntest du ganz schön Probleme bekommen.
Aber das muss man ja selbst wissen.

Grüße

Marcel

P.S: Ich selbst würde auch CASE nutzen...
 
Ok

Danke für eure Beiträge, aber ich meinte die vor und nachteile von

AS zu CASE

NICHT von If

;-)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok

Danke, gibt es dadurch auch noch vorteile?
Was halten den andere von der Idee mit der Enumeration?
Also Prizipiell finde ich es eine Gute Idee, aber erstens muss ich dann eine enum für jede SK haben, diese jedesmal, wenn ich was ändern möchte auch ändern und ich sage mal so, wenn ich lese, dass ich im schritt 28 bin (bspw.), dann finde ich den doch besser in der SK, wenn ich nach 28: oder so suche, als wenn da die enum steht, oder?

fand es halt bei AS irgendwie vorteilhaft, dass wenn man einen schritt mitten drin einfügen will (und beispielsweise in case keine reserve mehr hat), muss man ja auch die "sprünge" der anderen schritte anpassen, die bspw. vorher auf den case 30 gingn, denn die gehen ja jetzt auf 31. das wäre ja bei as nicht notwendig.
is klar, bei ner enum wäre das auch nicht notwendig, weil man ja dann die enum ändern könnte. Allerdings unm es sauber zu halten, müsste man dann immer alles verschieben.
bin im moment etwas im zwiespalt. :)
 
Zuletzt bearbeitet:
fand es halt bei AS irgendwie vorteilhaft, dass wenn man einen schritt mitten drin einfügen will (und beispielsweise in case keine reserve mehr hat), muss man ja auch die "sprünge" der anderen schritte anpassen, die bspw. vorher auf den case 30 gingn, denn die gehen ja jetzt auf 31. das wäre ja bei as nicht notwendig.
is klar, bei ner enum wäre das auch nicht notwendig, weil man ja dann die enum ändern könnte. Allerdings unm es sauber zu halten, müsste man dann immer alles verschieben.
bin im moment etwas im zwiespalt. :)
Die Enums kannst Du doch automatisch durchnumerieren lassen. Eine Zeile mit einem weiteren Enumerationswert in die Typdeklaration einzufügen, ist dann doch kein grosser Aufwand.
 
Ok

Also beispielsweise die enum in 10er schritten erstellen und dann wenn noch was benötigt wird einfach dazwischen einfügen?
Also rei theoretisch ist es ja egal, ob der ablauf auch wirklich in der richtigen reihenfolge (1..2..3..4..5 usw.) ist, aber es ist eben schöner. :)
aber dank einer enum könnte man es auch durcheinander laufen lassen (den neuen schritt hinten an der enum anfügen. und wenn man ihn zwischen drin einfügt, bzw schritte tauscht, muss man ja dann nur noch die enum anpassen und nicht in der case nachsehen, wo überall der case verwendet wurde, weil das ja dann wiederum über die veränderte enum indirekt mitverändert wurde. stimmts? ;-)
man müsste hat bei veränderungen wirklich nur die enum und vielleicht ne stringtable in der visu anpassen.

abeer vom Prinziep her Case mit enum sollte ein gutes Kozept sein, oder?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Einfach die Enumeration ohne eigene Numerierung erstellen. Wenn Du später ein weiteres Element in die Enumeration einfügst, werden die Zahlen werte für die folgenden Elemente automatisch um 1 erhöht. Wenn Du im Programm konsequent mit den Namen der Enum-Elemente arbeitest und nicht mit Zahlenwerten, brauchst Du daran nichts ändern.
 
Hallo,
ich muss den alten Thread noch einmal aufmachen.
Gibt es bei der Schrittketten programierung mit CASE auch die möglichkeit eines Paralellzweig, ein Alternativzweig ist ja recht einfach. Aber bei zwei paralell laufenden Schrittketten kann es schnell unübersichtlich werden.
 
Hallo,
ein Parallelzweig macht die Sache immer unübersichtlich (und ist mit Case m.E. gar nicht sinnvoll machbar). Das würde ich in der gleichen Schrittkette gar nicht lösen sondern dafür eine separate Schrittkette aufziehen, der du einen Start gibst und deren Status du dann an passender Stelle in deinem Hauptstrang abfragst - im Prinzip also ein Art Unterprogramm starten.

Gruß
Larry
 
Zurück
Oben