Codesys V3.5 Funktionsbausteine erstellen

Timo HoAp

Level-1
Beiträge
25
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ich bin Timo und Codesys Neuling,

ich habe eine Frage zu Funktionsbausteine der VDI3814, diese muss ich in Codesys programmieren und dann anhand von OPC Client auslesen.

hier ein Beispiel

fgh.JPG

kann mir jemand erklären wie ich so eine FB anlege von Grundauf?

Vilen Dank schon mal, VG Timo
 
Was meinst Du jetzt mit von Grundauf? Die grundsätzliche Bedienung von Codesys?
Die erste Frage wäre, was mit einem OPC Client ausgelesen werden soll? Dann ob sich die Parameter ändern können oder ob diese immer je nach Verwendung des FBs fest sind?
Bei letzterem deklarierst Du die Variablen AB, RT und PF unter VAR_INPUT und den Ausgang SSS unter VAR_OUTPUT. Für die Parameter nimmst Du dann die Methode FB_init bei der Du im Deklarationsteil unter VAR_INPUT die Variablen OSG, USG und HYS hinzufügst, dann legst Du im Deklarationsteil des FBs die selben Variablen an und kopierst im Programmteil der Methode dann die Eingänge der Methode auf die Variablen des FBs. Damit das bei gleichen Namen klappt musst Du bei den FB Variablen ein THIS^. vorstellen. Dann musst Du im FB nur noch die Logik programmieren, das SSS dann TRUE wird, wenn der untere Wert - Hysterese /2 unterschritten und FALSE wird wen der untere Wert + Hysterese / 2 überschritten wird. Beim oberen Wert ist es dann genau umgekehrt.
Mit OPC unter Codesys kenne ich mich jetzt nicht so aus, aber es gibt wohl eine Symbolkonfiguration in der Du die zu veröffentlichen Variablen aktivieren musst.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Danke Oliver für die schnelle Antwort,

das mit dem OPC UA ist erstmal nebensache

es geht in erster Linie um die Funktionsbaustein erstellung. Ich habe so etwas noch nicht gemacht, das ist das Problem. Ich weiß nicht wie damit anfangen soll
 
Ich habe hier nur TwinCAT, das basiert zwar auf Codesys, sieht aber doch anders aus. Aus diesem Grunde kann ich Dich nur am Rande etwas im Blindflug führen.
Du musst eine POU vom Typ FB (Funktionsbaustein erstellen), als Sprache kannst Du wählen was Du möchtest, aber ich würde ST nehmen.
In diesem FB erzeugst Du die von mir beschriebene Methode, da es sich um eine von drei Standardmethoden handelt müsste es ein Auswahlfeld geben wo Du diese auswählen kannst.
Dann legst Du im FB und in der Methode die Variablen an, da wo ich es beschrieben habe und füllst die Methode und den FB mit leben.
 
Du musst eine POU vom Typ FB (Funktionsbaustein erstellen), als Sprache kannst Du wählen was Du möchtest, aber ich würde ST nehmen. das habe ich



deklarierst Du die Variablen AB, RT und PF unter VAR_INPUT und den Ausgang SSS unter VAR_OUTPUT

wo genua mach ich das?
 
Naja, das Fenster des FBs ist zweigeteilt. Der obere Teil ist der Deklarationsteil und der untere der Implementationsteil wo Du das Programm schreibst.
Im oberen Teil müsste mindestens schon neben dem FB Namen der Eintrag VAR und VAR_END existieren. Da musst Du jetzt noch VAR_INPUT und VAR_OUTPUT hinzufügen, wenn Du dann Enter drückst sollte VAR_END automatisch hinzugefügt werden. Und in diesen Abschnitten fügst Du dann die Variablen hinzu.
Hat man Euch wirklich auf Codesys losgelassen ohne Euch zumindest ein wenig die Grundlagen beizubringen? Schau mal bei Tante Google nach "Einführung Codesys" es gibt viele Hersteller die Codesys ziemlich unverändert einsetzen so das Du das auch auf das native Codesys übernehmen kannst.
 
Ich denke, du solltest dir einfach ein paar Videos auf Youtube ansehen. Es gibt dort mehrere Videos, die den Einstieg in Codesys gut erklären.
 
So, jetzt aber. Erstmal 100% Ackn. zu dem Vorschlag von Kieler, außerdem solltest Du Dir, wie schon erwähnt, auch mal die Handbücher der verschiedenen Hersteller ansehen die Codesys für Ihre SPSen einsetzen.
Was Du in Deinem Screenshot gezeigt hast geht doch schon in die richtige Richtung. Du hast einen FB erstellt und warst gerade dabei eine Methode hinzuzufügen. Wie gesagt ist FB_init eine von drei Standardmethoden, weswegen Du auch nicht den Namen selber eingeben musst oder besser darfst, sondern Du klickst im Feld Name auf den Pfeil nach unten und wählst dann FB_init aus. In der dann erstellten Methode wird dann im Deklarationsteil ein Bereich für Eingangsvariablen existieren, dieser beginnt mit VAR_INPUT und endet mit END_VAR, in diesem werden dann, wenn es wie bei TwinCAT ist schon zwei Variablen vom Typ BOOL deklariert sein. Nun deklarierst Du die von mir aufgeführten Variablen an den von mir geschilderten Stellen sowohl in der Methode als auch im FB, natürlich nicht alle Variablen überall, sonndern nur so, wie von mir schon beschrieben. Dann erstellst kopierst Du in der Methode die Eingangsvariablen auf die entsprechenden Variablen im FB und im FB erstellst Du dann noch die Programmlogik, die ich Dir auch eigentlich schon komplett beschrieben habe.
Hier mal ein paar Screenshots die Dich hoffentlich in die richtige Richtung schubsen. Übrigens solltest Du kein leeres Projekt erzeugen, sondern ein Standardprojekt, dann sind grundlegende Dinge schon angelegt, siehe hier.
Codesys_01.png
Hier siehst Du das Hinzufügen der Methode
Codesys_02.png
Und nach der Auswahl
Codesys_03.png
Und hier mal ein Schubser in die richtige Richtung bezüglich einer möglichen Lösung.
Codesys_04.png
 
Hallo oliver.tonn, danke für die super Antwort. Was ich nicht verstehe wieso ich eine Methode erstellen soll und nicht ein einfach ein POU als FB. Was genau ist eine Methode?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo oliver.tonn, danke für die super Antwort. Was ich nicht verstehe wieso ich eine Methode erstellen soll und nicht ein einfach ein POU als FB. Was genau ist eine Methode?
Hallo Timo,
na so super kann meine Antwort nicht gewesen sein, wenn noch solche Fragen, bzw. falsche Vorstellungen vorherrschen. Du hast wirklich noch sehr große Wissenslücken was Codesys angeht, die Du dringend füllen musst. Daher erneut der Rat Dir mal auf YouTube Videos zu dem Thema anzusehen und auch mal in Anleitungen der diversen SPS Hersteller die Codesys einsetzen zu schauen, von der Firma Codesys direkt gibt es glaube ich keine Doku "nur" eine Hilfe Webseite.
Ich habe nie geschrieben, dass Du nur eine Methode erzeugen sollst, was auch gar nicht geht, da eine Methode ein Bestandteil eines FBs ist. Eine Methode ist sozusagen ein Programmteil eines FBs, der unabhängig vom "Hauptprogramm" des FBs ausgeführt wird. Eine Methode ist ähnlich wie eine Aktion, mit dem Unterschied, dass die Methode auch eigene Variablen hat, deren Werte allerdings nicht wie bei den direkten Variablen des FBs auch nach der Ausführung erhalten bleiben und einen Rückgabewert.
Die Methode hatte ich nur als Ergänzung vorgeschlagen, falls Parameter wie die Hysterese nur einmalig gesetzt werden müssen, dafür kann man die Methode FB_init nämlich gut nehmen. In der Methode legt man, wie schon beschrieben, alle Parameter als Eingangsvariable an und parallel die selben Variablen im FB als lokale zwischen VAR und END_VAR. In der Methode kopiert man dann die Eingangsvariablen auf die Variablen im FB um, wie in meinem Beispiel angedeutet.
 
Hi Timo,

erzähl uns doch mal kurz Deinen Backround und was Dein Ziel ist, das Du erreichen möchtest. Dann können einige hier ihre Antworten besser zuschneiden und müssen nicht so viel vorraussetzen, was Dich vielleicht eher irritiert.

Schon die Frage, dass Du nicht weißt, was eine Methode ist, lässt da aufhorchen. Das heißt nicht, das aus Dir nicht mal was Großes werden könnte. Aber etwas Basiswissen wäre schon mal ganz gut und da helfen Dir die hier erwähnten Tutorials, die es massenweise bei Youtube gibt, erst mal vom Kosten/Nutzen-Verhältnis am besten weiter. Oder Hast Du jemanden in Deiner Umgebung, mit dem Du Dich vielleicht mal 2 Tage zusammenhocken kannst? Da bekämst Du mehr Basiswissen als in 2 Monaten hier im Forum.
 
Hallo, naja Ziel ist es eine Bibleothek mit bestimmten Funktionsbausteine zu erstellen. Mein Codesys ist dann mein OPC Client der die Berechnung der Bausteine vornehmen soll. Über OPC UA werden die Daten an Mein OPC Server geleitet.

Eine weitere Frage, wenn ich im Bibleothekerverwalter eine Bibleothek hinzufüge, wie kann ich auf diese zugreifen? ALso wie kann ich diese Bausteine verwenden um mit diesen weiter zua rbeiten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine weitere Frage, wenn ich im Bibleothekerverwalter eine Bibleothek hinzufüge, wie kann ich auf diese zugreifen? ALso wie kann ich diese Bausteine verwenden um mit diesen weiter zua rbeiten.
Wie gesagt, arbeite Dich bitte durch vorhandene Dokus und Videos durch. Auch diese Frage könntest Du Dir selber beantworten, wenn Du etwas Zeit investierst und Dir mal die Grundlagen aneignest.
Auf eine Bibliothek selber greifst Du gar nicht zu, nur auf dessen Inhalte. Eine Bibliothek ist eine Sammlung von Objekten, z.B. FBs, Strukturen, ENUMS, und weiteres. Eine Bibliothek wird genutzt, um den Funktionsumfang von Codesys zu erweitern. Als Beispiel seien hier mal Timer angeführt, welche in der Bibliothek standard.library oder standard64.library in Form von FBs zu finden sind. Wenn Du jetzt einen Timer nutzen möchtest musst Du eine Instanz von diesem im Deklarationsteil anlegen, dies erfolgt ähnlich wie das Anlegen einer Variable, nur das Du statt des Variablentyps (z.B. BOOL) den Namen des FBs angibst, bei einer Einschaltverzögerung also TON. Das sieht dann so aus:
Code:
VAR
    fbTON01 : TON;
END_VAR

Und im Codeteil rufst Du den instanziierten FB dann auf, z.B. so:
Code:
fbTON01(IN := xStart, PT := T#1s, Q => TimerQ01);
 
Hi Timo,

korrigiere mich, wenn ich falsch liege, aber mein Gefühl sagt mir gerade, dass das Ziel etwas zu hoch gesteckt ist.
Um Codesys kennen zu lernen, würde ich nicht mit dem Programmieren einer Bibliothek beginnen.

Also um es nochmal Revue passieren zu lassen: Du hast vorhin gefragt, was eine Methode ist. Ich denke deshalb, dass Du noch gar keine großen Programmiererfahrungen hast. Geht das mir alleine so?

Und dann haust Du mit Schlagworten wie OPC UA um Dich und das Du einen eigenen? OPC-Server hast und Dich mit einem OPC-Client verbinden willst. Prinzipiell klingt das wieder richtig.
Ich behaupte mal einfach, die OPC-UA-Client Bibliothek gibt es fertig für Dein System, die bindest Du ein, instanziierst die erforderlichen Funktions-Bausteine und rufst die im Main-Task auf. Über die Parameter beim Aufruf gibst Du dem OPC-Client bekannt, was er beim Server abholen / hinsenden soll.

Wenn Du diesen letzten Absatz nicht verstanden hast, fängst Du bitte bitte ganz vorne an, so wie es auch meine Kollegen bereits empfohlen haben.
 
Zurück
Oben