Vorlage für "'Standard"-FB

koopy

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
habe folgendes Problem:
Ich soll einen "Standard"-FB erstellen, der immer gleiche Eigenschaften und Methoden enthält. Im inneren des FB läuft eine Schrittkette (CASE) deren Schritte immer gleich sind.
Auch die Steuerung über die Methoden ist immer gleich.
Allerdings sollen in den Schritten bei unterschiedlichen Varianten dieses Bausteins immer unterschiedliche Aktionen erfolgen (eine Variante des FB steuert einen Motor, eine einen Zylinder, eine andere einen ganzen Ablauf mit mehreren Zylindern und Sensoren,... die Vielfalt ist an der Stelle groß).

Gibt es in Codesys eine Möglichkeit, diesen Baustein als eine Art Vorlage in eine Bibliothek zu speichern?
Idealerweise möchte ich ihn so ablegen, dass jemand, der den Baustein als Grundlage verwendet, gleich die Schrittkette im FB, die Methoden und Eigenschaften schon halbfertig da hat und sich nur noch um seinen Ablauf in den einzelnen Schritten kümmern muss, ohne erst noch "Fleißarbeit" investieren zu müssen und eine immer gleiche Schrittkette wieder neu zu schreiben.

Vielleicht hat ja jemand eine Idee?

Ach ja, einen "Grundbaustein" in eine Bibliothek zu legen und mit Vererbung zu arbeiten, hilft mir wegen des "halbfertigen" Codes im FB, der ja noch vervollständigt werden muss, nicht weiter.

Danke schon mal.
 
Das wäre doch eigentlich die richtige Anwendung für ein Interface...

Da ja die Schrittkette immer wieder angepasst werden muss, wird man normalerweise auch nicht drumherum kommen, diese immer wieder anzupacken. Selbst wenn deine Vererbte Methode überschreiben willst, muss du diese in deinem Baustein ja trotzdem neu schreiben
 
Zuletzt bearbeitet:
Da geb ich dir recht. Ein interface hat der Baustein auch schon, aber aus anderen Gründen.
Das Problem ist immer, dass der Code innerhalb der Methoden und des FBs erhalten bleiben müsste.
Ein interface sorgt ja nur dafür, dass gleichnamige Methoden und Eigenschaften vorhanden sind.
Kann es auch sein, dass es keine Lösung für mein Problem gibt, ausser mi einen Export vom Baustein irgendwo zu speichern?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich glaube nicht, dass es dafür eine perfekte Lösung gibt.

Eine weiter Möglichkeit wäre ja vielleicht auch, einen Baustein als abstrakte Basisklasse zu definieren. Alle Methoden wären leer, aber alle nötigen Attribute/ Membervariablen könnte man dort bereits definieren, zu Beispiel die Zählvariable für die Schrittkette. Ich glaube kaum, dass um man das anpassen der Schrittkette pro vererbten Baustein herumkommen wird.

Aber man könnte vielleicht eine Beispielhafte Schrittkette auskommentiert in der Basismehode stehen lassen, so könnte man sich die rauskopieren und müsste halt nicht ganz von vorne anfangen....
 
Ist eine Vorgabe in der Firma, alles in ST zu machen.
Aber in AS oder anderen hätte ich ja das gleiche Problem, oder?

In AS kann man Schrittketten wesentlich einfacher und schneller erstellen und vorallem ändern als in ST.
Bei den Befehlen und Transistionen kann man dann mit Eigenschaften und Methoden arbeiten.
Also man erstellt einen FB für Zylinder, Motoren, NC-Antriebe usw. mit den passenden Methoden und Eigenschaften.
Beim Zylinder z.B. einfahren, ausfahren, In Grundstellung, In Arbeitsstellung, Freigabe Ausfahren, Freigabe Einfahren, ...

Ist vielleicht ein anderer Ansatz, funktioniert aber und ist übersichtlich.
 
Wenn ich in meiner Bibliothek einen FB schreiben will, dessen Variablen später anwendungsspezifische Namem, Typen oer Grössen haben sollen, mache ich das so:
Ich definiere eine abstrakte Basisklasse, die den Grossteil der Funktionalität enthält, aber noch keine Daten. Um die Funktionalität abbilden zu können, arbeitet die Basisklasse mit privaten Eigenschaften mit einfachen Datentypen als Ersatz für die Variablenzugriffe.
Ein abgeleiteter FB muss die notwendigen Daten deklarieren und die abstrakten Eigenschaften der Basisklasse überschreiben, um sie mit den Daten zu verknüpfen. In der Regel arbeite ich dabei mit Unions, die sowohl den einfachen Datentyp für die Basisklasse als auch den anwendungsspezifischen Type enthalten.
In der Bibliothek schreibe ich einen Template-FB, der all diese Dinge tut. Namen, Typen, Grössen seiner Variablen sind natürlich immer noch generisch. Diesen FB und seine DUTs kopiere ich dann in die Anwendung, um sie dort anzupassen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Danke euch dreien. Alle Daumen hoch!
Ich denke, ich werde mich morgen mal den abstrakten Klassen widmen.
Schätze, damit kann ich zumindest einen Großteil der Anforderungen erfüllen.
 
Warum nicht einen Baustein mit einer fixen Anzahl von Schritten, z.B. 10 Schritte, und als Eingangsparameter 10 Transitionen (T1-10) und als Ausgänge 10x Schritt Aktiv.
 
Hallo

Wir haben eine "State-machine" in einem FC gebaut.
Dieser FC bietet eigentlich nur folgendes:
Nächster Schritt(Befehl) , Aktueller Schritt, Zeit im Aktuellen Schritt, letzer Schritt, Array mit den letzten Schritten, und einen Bool der beim Schrittwechsel einen Zyklus lang aktiv ist.

Die Instanz wird im FB darüber abgelegt und am Ende darin aufgerufen. Die Schrittkette läuft mittels einer CASE-Anweisung.


--> Weiss nicht ob das in Codesys auch so gehen würde, habe ich leider zu spät gelesen :rolleyes:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn der Standard-FB nur eine Vorlage sein soll, dann kann man doch ganz normal die Import-Funktion verwenden, wenn man einen neuen FB hinzufügen möchte (anstatt "Add Object").
In TwinCAT wäre es "Add existing item".

Wenn der Standard-FB noch Code enthält, der immer gleich sein soll und ggf. nachträglich aktualisiert werden soll, dann geht das nur, indem dieser Basis-Code Teil eines Basis-FB in einer Bibliothek ist, von dem der Standard-FB ableitet (und ggf. Methoden überschreibt, falls der Basis-Code doch nicht passt).
 
Zurück
Oben