# Wann benutze ich Methoden, bzw. Aktionen und wann nicht?



## Bensen83 (27 Dezember 2012)

Ein Beispiel was man immer sieht ist bspw. Die Methode start(), mit der ein Motor gestartet wird.
Aber sagen wir mal wir haben einen visubutton, welcher diesen starten soll und ich eine boolsche Variable Abfrage und wenn diese True ist die Methode Aufrufe. Kann ich dann nicht genausogut einen boolschen Eingang benutzen, der den Motor startet?

Also wozu benötige ich da ne Methode? Mit ist nur der generelle Vorteil noch nicht so klar, denn ich kann ja doch genausogut einen Programmteil im FB überspringen, wenn dieser nicht ausgeführt werden soll. 

Ps. Wenn jetzt mein Baustein nur aus eingängen Aktionen und Methoden besteht. Muss ich diesen dann überhaupt noch aufrufen? Oder genügt es dann die Eingänge zuzuweisen und die Aktionen aufzurufen?


----------



## Bensen83 (27 Dezember 2012)

*Nur noch Methoden ?*

Oder ist es vielleicht sinnvoll nur noch Methoden einzusetzen und sonst hat keinen Code mehr direkt im Baustein zu haben? Wie es bei Visual Studio der fall ist?

Ein Beispiel wäre eine Ventilansteuerung für vor zurück.
Wo ich also vor zurück als Button in der Visu habe und vor zurück aus der Automatik ansteuern kann.
Dort würde ich einfach die Buttons Abfragen und bei einer Flanke bspw.
Ventil.vor(); aufrufen und in der Automatik Rufe ich im entsprechenden Schritt auch 
Ventil.vor(); auf. In der Methode selbst setze ich je nach Freigabe die ausgangsbits. 
Wäre das so ok?


----------



## Bensen83 (27 Dezember 2012)

*Zeitkonflikt*

Kann es denn nicht zu einem Zeitkonflikt kommen?
Also in dem Sinne, dass ich bspw. Eine Freigabe habe, die in einem Programm gebildet wird.
Wenn diese nun im letzten Zyklus True war. Aufgrund der äußeren Bedingungen nun False zugewiesen bekommen würde, ich aber vor der Zuweisung eine Methode Aufrufe. --> Methode wird mit Freigabe = True ausgeführt. Obwohl diese ja in diesem Zyklus False gesetzt wird.

Wenn ich eine eingangsvariable setzen würde, die bausteinintern das ausführt, was die Methode macht, würde das ja nicht passieren, da dann ja die "Methode" erst mit dem Aufruf des Bausteins ausgeführt werden würde. Zu diesem Zeitpunkt wäre ja der Eingang Freigabe schon mit False belegt.

Oder?


----------



## StructuredTrash (28 Dezember 2012)

Bensen83 schrieb:


> Oder ist es vielleicht sinnvoll nur noch Methoden einzusetzen und sonst hat keinen Code mehr direkt im Baustein zu haben? Wie es bei Visual Studio der fall ist?


Nein, das halte ich nicht für sinnvoll. Die meisten FB's erfordern einen Codeteil, der unbedingt zyklisch aufgerufen werden muss. Im Falle Deines Ventil-FB's wäre da z. B. die Freigabe, die ständig abgefragt werden muss, um die Ventilausgänge ggfs. auszuschalten. In den Aktionen würde ich nur die Steuerbefehle setzen. Verknüpfen der Steuerbefehle mit Freigaben und Ausgabe auf die Ausgänge, aber auch Rückmeldung der Endlagen dann im zyklisch aufgerufenen Hauptcode des FB's.


----------



## Bensen83 (28 Dezember 2012)

*Also wie?*

Also ich hatte es Bspw. So vor.

Wenn in der Visu ein Button betätigt wird, soll das Ventil vor fahren (wenn die Freigabe vor erteilt wurde). Ich will aber auch über die Automatik das Ventzil ansteuern. Das könnte ich direkt über eine Aktion machen.

Jetzt kommt es. Ich habe einen Schritt, wo mehrere Ventile losfahren sollen, diese sind aber gegeneinander Verriegelt. Da ich nun nicht immer die Freigaben abfragen will werden alle ansteuerungen gleichzeitig gesetzt.
Wenn die Freigabe eines Ventils erreicht wird, so fährt es los. allerdings weis ich nicht wann das genau passiert. deswegen müsste ich die methoden dauerhaft aufrufen, oder?
Wenn ich nun allerdings dafür eine Boolsche Variable verwenden würde könnte ich diese auch zusätzlich noch dafür verwenden eine zu lange anstahende Verriegelung zu erkennen.

Was meinst du dazu? Istes hier überhaupt sinnvoll von auißen Methoden oder aktionen zu verwenden? Bin irgendwie durcheinander


----------



## Larry Laffer (28 Dezember 2012)

Hallo Benson,
ganz gleich, welches Programmier-Mediums du dich befleissigst ... ich gewinne mehr und mehr den Eindruck, dass ich mit deinen Programmen nicht unbedingt etwas zu tun bekommen möchte.

So wie ich es mir über die letzte Zeit so erlesen habe beschäftigst du dich mit TwinCat 3.
Du hast aber keine wirkliche Aufgabenstellung und recherchierst ein bißchen ins Blaue hinein.
Du hattest bsiher mit OOP etc. nicht wirklich etwas zu tun.

Stimmen meine Überlegungen bis hierhin ?
Was planst du wirklich zu tun ?
Wie sehen die Maschinen (und deren Aggregate) aus, für die das Ganze (vielleicht später einmal) sein soll ...?

Gruß
Larry


----------



## IBFS (28 Dezember 2012)

Larry Laffer schrieb:


> Hallo Benson,
> ganz gleich, welches Programmier-Mediums du dich befleissigst ... ich gewinne mehr und mehr den Eindruck, dass ich mit deinen Programmen nicht unbedingt etwas zu tun bekommen möchte.



Vor allem wenn man versucht ihn von dem Schwachsinn abzubringen mit aller Gewalt den STEP7 BOCKMOVE mit Absolutadressen/-längen bei CodeSys nachzubilden anstatt Strukturen zu kopieren.

@Bensen

Tut mir Leid Herr Bensen, aber du fängst alles irgendwie an ohne am Ball zu bleiben und eröffnest jeden Tag ein neues Thema.

Wenn du dein Wissen erweitern möchtest, dann gehe bitte etwas strukturierter als bisher vor. 

Speziell Post #5 zeigt mir, das du wirklich keinen Plan zu haben scheinst, wie man eine Maschine oder Anlage programmiert.



> Bin irgendwie durcheinander :smile:



Du bist deswegen durcheinander, weil die schlicht die Grundlagen fehlen. Deshalb gehen auch die Begriffe wild durcheinander.  

Daher würde ich dir dieses Werk - etwas älter aber gut - empfehlen:  http://www.amazon.de/dp/3528445807

Frank


----------



## Bensen83 (28 Dezember 2012)

*Ok sorry*

Sorry leute dass ich etwas durcheinander schreibe und viele Fragen eröffne, aber das liegt daran das ich gerade neu in Codesys binund vieles wissen mag.
Ich will auch nicht alles altbacken machen. Finde es ja im gegenteil sehr gut Strukturen zu kopüieren. So anders als Bei Siemens ist es aber nicht, die können das ja auch in ST.

Ich wollte damals lediglich ne alternative um eben mit einem Baustein instanziert mehrere verschiedenme Strukturen kopiern zu können. naja egal. Anderes Thema.


Allerdings hin zu gehen und zu bahaupten, dass ich keine Ahnung vom Programmieren hätte usw halte ich für sehr frech.
Ich habe schon zig Maschinen und Anlagen Programmiert. Hin von einer kleinen 3 Achsen Maschine ebis hion zu kompletten Handlings mit 20 10 Achs Anlagen und 20 Robotern. Also denke ich schon, dass ich Ahnung habe.
Auch wenn es hier nicht so schein arbeite ich in meinen Programmen schon sehr strukturiert und mt bedacht zur leichten Wiederverständlichkeit.

Ich frage eben deswegen so viel, weil ich jetzt ein Konzept für mich entwickeln möchte in Codesys zu programmieren. Also bitte nicht gleich verurteilen.

Wollte halt auch hier hauptsächlich wissen wann ich Methoden usw benutze und wann nicht.


----------



## Larry Laffer (28 Dezember 2012)

Das ist alles bis jetzt auch noch nicht schlimm ...
Schlimm ist aber das "von einem Topf in den Anderen springen".
Ich selber habe mich mit TwinCat3 noch nicht beschäftigt, werde es wohl aber im nächsten Jahr tun.
Ich  habe aber, denke ich, einen ganz guten Bezug und Verständnis zu OOP -  hier Visual Studio (in dem das TC3 ja auch läuft) und dabei vor Allem  VB.

Wenn du dich selber mit OOP schon beschäftigt hast dann  sollten dir die Begriffe "Klassen, Methoden, Properties etc." etwas  sagen und du solltest zumindestens eine Vorstellung von deren Gebrauch  haben. Wie sich das in TC3 wiederfinden läßt muss man dann vielleicht  für sich selbst herausfinden.

Das Ding, an dem ich mich gestossen  habe (und anscheinend ja auch der Frank), ist dass du die  Elementar-Dinge einem nach dem Anderen hier reinhaust und das (dem  Anschein nach) nur des Reinhauens willen. Wenn ich mit etwas anfange und  mich damit beschäftigen möchte dann fange ich zunächst erstmal damit  an, das umzusetzen, was ich schon verstehe. Dann versuche ich mich an  das Mehr des Neuen heranzutasten und das so nach und nach zu verstehen.  Bestimmt stelle ich dann auch Fragen - aber immer zu der einen Sache  (die mich gerade bewegt) aber nicht quer-Feld-Beet durch das ganze  System. Da würde ich auf jeden Fall Schwierigkeiten haben, dass alles zu  verarbeiten und zu verstehen.
Deshalb mein Vorschlag : versuch es doch mal mit "der Reihe nach" und "Schritt für Schritt"

Und ... das ist jetzt nicht Böse gemeint ... aber schon Kritik ...

Gruß
Larry


----------



## IBFS (28 Dezember 2012)

Bensen83 schrieb:


> Allerdings hin zu gehen und zu behaupten, dass ich keine Ahnung vom Programmieren hätte usw halte ich für sehr frech.
> Ich habe schon zig Maschinen und Anlagen Programmiert. Hin von einer  kleinen 3 Achsen Maschine ebis hion zu kompletten Handlings mit 20 10  Achs Anlagen und 20 Robotern. Also denke ich schon, dass ich Ahnung  habe.
> Auch wenn es hier nicht so schein arbeite ich in meinen Programmen schon  sehr strukturiert und mt bedacht zur leichten Wiederverständlichkeit.
> 
> Ich frage eben deswegen so viel, weil ich jetzt ein Konzept für mich  entwickeln möchte in Codesys zu programmieren. Also bitte nicht gleich  verurteilen.



Meine - zugegebenermaßen sehr akzentuierte -  Einschätzung entstand aus folgenden Sätzen:




Bensen83 schrieb:


> Jetzt kommt es. Ich habe einen Schritt, wo mehrere Ventile losfahren sollen, diese sind aber gegeneinander Verriegelt. Da ich nun nicht immer die Freigaben abfragen will werden alle ansteuerungen gleichzeitig gesetzt.
> Wenn die Freigabe eines Ventils erreicht wird, so fährt es los. allerdings weis ich nicht wann das genau passiert. deswegen müsste ich die methoden dauerhaft aufrufen, oder?
> Wenn ich nun allerdings dafür eine Boolsche Variable verwenden würde könnte ich diese auch zusätzlich noch dafür verwenden eine zu lange anstahende Verriegelung zu erkennen.
> 
> Was meinst du dazu? Istes hier überhaupt sinnvoll von auißen Methoden oder aktionen zu verwenden? Bin irgendwie durcheinander



Tut mir leid, wenn ich das so sage, aber m.E. ist quasi gleichzeitige Starten von Ventilen, die ihrerseits 
über ihre Interlocks ein Art eigene Schrittsequenz erzeugen wirklich schlimmer Pfusch. 

Wo bitte hast du das gelernt.

Aktiv gegen logische Software-Verriegelungen fährt man nur maximal im Handbetrieb und auch nur der, der die konkrete Verriegelung nicht kennt.

In der Automatik sollte ein Ansteuern eines Aktors gegen eine logische (und damit oftmals mechanische) 
Verriegelung zu einer Fehlermeldung führen, denn dann ist - bei den Schrittketten die ich kenne - Müll programmiert worden.

Egal wie viele Maschinen du programmiert haben magst, aber diese Denkweise an sich ist schon vom Ansatz her verkehrt.

frank


----------



## Bensen83 (28 Dezember 2012)

*Naja ok*

Naja es ging bspw. Darum wenn eine Achse verfährt und in der Zwischenzeit Freigaben kommen, dann sollen Ventile fahren. Und da kannst du jetzt sagen was du
Magst das ist vom Kunden so gewollt und nicht stümperhaft. Habe auch schon einige C# Projekze gemacht also auch OOP Erfahrung. Kann Methoden nur noch nicht so richtig in die SPS Welt umsetzen.

Wieso sollte man auch zB. Keine Ventile gleichzeitig ansteuern? Wenn es drauf ankommt kann man so auch wichtige Tatzeit sparen, aber ich könnte ja jetzt auch gehässig sein und sagen dass  jemand der es nicht versteht quasi relaitätsfremd ist. ;-)


----------



## Cassandra (28 Dezember 2012)

Bensen83 schrieb:


> Naja es ging bspw. Darum wenn eine Achse verfährt und in der Zwischenzeit Freigaben kommen, dann sollen Ventile fahren. Und da kannst du jetzt sagen was du
> Magst das ist vom Kunden so gewollt und nicht stümperhaft. Habe auch schon einige C# Projekze gemacht also auch OOP Erfahrung. Kann Methoden nur noch nicht so richtig in die SPS Welt umsetzen.
> 
> Wieso sollte man auch zB. Keine Ventile gleichzeitig ansteuern? Wenn es drauf ankommt kann man so auch wichtige Tatzeit sparen, aber ich könnte ja jetzt auch gehässig sein und sagen dass  jemand der es nicht versteht quasi relaitätsfremd ist. ;-)



Hallo Bensen,

 da hast du Recht, was der Kunde wünscht ist immer korrekt, auch wenn die Idee noch so dumm (problembehaftet) ist!
 Wenn du das nicht respektierst, gehen dir viel zu schnell die Herausforderungen aus.
 Stell dir mal vor du beherrscht das System und den Prozess – dann wird es schnell langweilig.

 Sei aber vorsichtig, wenn du die Zylinder schaltest. Ruck zuck fahren die Ventile davon und kollidieren. 
Dann ist es geschickt, wenn du zur Tatzeit weit weg bist. 

 LG Cassandra


----------



## mkd (29 Dezember 2012)

Bensen, 

du solltest deine Energie m.M.n. eher in eine saubere Programmstruktur und Lesbarkeit für andere Programmierer stecken!
Das ist Gold Wert - auch für Änderungen / Erweiterungen von dir an deinem eigenen Code.

Wenn ich das so lese, wird mir ganz anders, erst recht, wenn du mehrere Zylinderbewegungen im Automatikbetrieb nur durch Verriegelungen realisierst. Oft ist es gut, wenn man seinen FB einfach in FUB aufruft (natürlich nicht immer!). Gerade wenn es sich um die Ansteuerung von Aktoren handelt.

Aktionen machen m.M.n. bei anderen Dingen wie Datenhandling / Kommunikation mehr Sinn.

Man muss ja auch nicht immer alle Werkzeuge nutzen die einem die Programmiersprache bietet.

Ein Koch nutzt auch nicht für jedes Gericht sein ganzes Gewürzregal und IMMER Standardrezepte.

Er passt sein Rezept auch mal den Zutaten an.

Du kannst die .net Welt auch nicht gnadenlos auf eine SPS herunterbrechen. Für jede Aufgabe sein Werkzeug. 


Gruß


----------



## Bensen83 (29 Dezember 2012)

*Stimmt*

Stimmt ja, ich würde es ja auch nicht so machen. Würde in de Automatik natürlich auch anders Vorgehen. 
Kunde wollte es eben so. 
naja und wenn wir mal ehrlich sind. Wenn es zur Taktzeitoptimierung kommt und ich die Positionen in der Schrittkette Abfrage und entsprechend die Ventile steuere kommt es aufs gleiche raus als wenn ich die Position in der Verriegelung drin habe.

Und Chrash kann es eh nicht geben, weil es ja verriegelt ist.


----------

