Nachhilfe / Unterstützung in CODESYS (gerne gegen Bezahlung)

tim_bosch

Level-2
Beiträge
7
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich suche Unterstützung bzw. Nachhilfe in CODESYS.
Es geht um grundlegende und aufbauende Themen wie FUP/KOP, Funktionsblöcke, Variablen, saubere Strukturierung sowie Fehlersuche beim Online-Gehen und in der Simulation.

Ich habe bereits ein Projekt, bei denen ich punktuell Hilfe brauche, um die Logik korrekt umzusetzen und typische Fehler zu vermeiden. Mir ist wichtig, die Dinge wirklich zu verstehen und nicht nur „irgendwie lauffähig“ zu bekommen.

Die Unterstützung würde ich selbstverständlich bezahlen.
Ideal wäre jemand mit praktischer Erfahrung in CODESYS, gerne auch per Online-Session.

Falls jemand Interesse hat oder jemanden empfehlen kann, freue ich mich sehr über eine Rückmeldung.

Schon mal Danke,
Tim
 
Das Forum ist eigentlich relativ geduldig und hilft gerne und umfangreich - auch bei vermeintlichen einfachen (Anfänger-)Fragen. Wenn du magst, kannst du deine konkreten Fragen auch einfach hier im Forum stellen. Ist günstiger für dich und hilft später eventuell auch anderen ;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielen Dank für die Rückmeldung und den Hinweis, das weiß ich sehr zu schätzen.
Ich werde sicher auch weiterhin Fragen hier im Forum stellen, wenn sie sich dafür eignen.

Meine Fragen gehen allerdings teilweise recht tief ins Detail und betreffen vor allem das grundsätzliche Verständnis und den sauberen Aufbau von Lösungen in CODESYS (z. B. Strukturierung von FUP-Netzwerken, Zusammenspiel mehrerer Funktionsblöcke, typische Fehlerursachen beim Online-Betrieb, saubere Signalflüsse usw.).

Dabei hilft mir momentan ein direkter Austausch oder eine Schritt-für-Schritt-Erklärung, bei dem ich auch direkt Rückfragen stellen kann.
Danke im Voraus.
 
Das Problem mit dem sauberen Aufbau ist, dass es da keine Patentlösung für gibt. Es gibt nicht den einen richtigen Weg und die Anderen sind falsch.
Mal aus dem Nähkästchen geplaudert. Bei manchen Kunden wurden bei der Variablendeklaration Präfixe verwendet, x für boolesche Variablen, b für BYTE, i für Integer, fb für Instanzen von Funktionsbausteinen und so weiter. Andere haben dies nicht gemacht, weil der Typ ja auch angezeigt wird via Mouseover Infos.
Wichtig ist, dass es für die Programmierung einheitliche Vorgaben gibt, z.B. wie die Variablen benannt werden sollen, wie eingerückt wird, wie Kommentiert wird und so weiter.
Es gibt schon ein paar Grundregeln, die grundsätzlich beachtet werden sollten. Globale Variablen so viel wie nötig, aber so wenig wie möglich zu nutzen. Für Zahlen möglichst die passenden Variablentypen nutzen, slso nicht mit BYTE oder WORD rechnen.
Möglichst die explizite Typkonvertierung nutzen.
 
... allerdings ist das, was Oliver da geschrieben hat, keine spezielle Codesys-"Grundregel" sondern eine Grundregel für jede Programmier-Entwicklungsumgebung.

Zum Erstellen von Code ganz allgemein : wenn du dir deinen erstellten Code nach einem halben Jahr anschaust und ihn immer noch verstehst und sofort etwas darin ändern oder anpassen kannst ... dann ist er gut !!!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Problem mit dem sauberen Aufbau ist, dass es da keine Patentlösung für gibt. Es gibt nicht den einen richtigen Weg und die Anderen sind falsch.
Exakt. Das Vorgehen zur Programmierung ist ganz stark basiert auf der eigenen Erfahrung, dem Umfeld (Kollegen, Bestandssysteme, ...), internen Vorgaben (Konventionen, Richtlinien usw.) sowie der Branche in der man tätig ist. Dazu weicht das Vorgehen zwischen der Programmierung in unterschiedlichen Systemen (bei mir) ab. Ein Programm in TwinCAT sieht teilweise deutlich anders aus im Vergleich zu einer Programmstrukturierung in TIA.

Strukturierung von FUP-Netzwerken, Zusammenspiel mehrerer Funktionsblöcke, typische Fehlerursachen beim Online-Betrieb, saubere Signalflüsse
Viele dieser Themen eignen sich hervorragend für eine Fragestellung im Forum. Am Beispiel der Strukturierung: Präsentiere doch eine Anwendung und deine bisherigen Überlegungen dazu. Anschließend bekommst du sicherlich mehrere andere Ansätze und kannst bewerten, was für dich besser passt. Du bekommst außerdem ein paar Schlagworte, um dich in einige Aspekte selbst einzulesen. Dadurch lernst du sicherlich mehr. Hast du einen Tutor, übernimmst du automatisch sein Vorgehen.

Themen wie FUP/KOP
In meinen Augen solltest du deine Liste um strukturierten Text ergänzen. Die FUP/KOP Editoren in Codesys halte ich echt für anstrengend - ST funktioniert dort besser. In TIA genau umgekehrt.
 
z. B. Strukturierung von FUP-Netzwerken, Zusammenspiel mehrerer Funktionsblöcke, typische Fehlerursachen beim Online-Betrieb, saubere Signalflüsse usw.
Wie du schon erkannt hast, heißt Codesys nicht automatisch, dass mit Texteditor (z.B. ST) programmiert wird. Logische Verknüpfungen programmiere am besten in KOP oder FUP oder CFC oder AS, dann versteht man das viel länger und schneller und besonders bei der Online-Fehlersuche. ("für jedes Problem das richtige Werkzeug wählen") Programmiere und kommentiere so, dass auch andere Programmierer deinen Code verstehen können.
 
Vielen Dank für die bisherigen Erklärungen und Hilfestellungen!

Ich lerne aktuell für ein kleines Uni-Projekt und arbeite dabei mit Aufgaben aus alten Klausuren, die ich leider ohne Musterlösung nachzustellen versuche. Dabei stoße ich immer wieder auf Syntaxfehler oder unerwartetes Verhalten und verstehe leider oft nicht, warum diese auftreten.
Genau dieses Verständnis, also zu erkennen, was ich falsch mache und wie ich es korrekt lösen kann, wäre für mich extrem hilfreich. Jede Erklärung in diese Richtung bringt mich fachlich deutlich weiter und wäre daher wirklich sehr willkommen.

Vielen Dank vorab für jede Unterstützung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja ... wenn du z.B. auf einen Syntaxfehler stößt oder auch etwas, dass sich unerwartet verhält dann wäre das genau so etwas, dass du gut hier Online stellen könntest um dazu spezielle Info oder ggf. auch Tipps zu erhalten ...
 
Da gebe ich dir Recht. Leider steht dort aber, dass man die Dateien nicht online für die Allgemeinheit teilen darf.

Da die Fehler darauf hinweisen, dass Verknüpfungen fehlen bzw. nicht definiert sind, und ich nicht eindeutig verstehe, ob der Fehler von mir kommt oder aus dem Projektstammbaum entsteht, müsste ich eigentlich das komplette .pro im Forum teilen. Das möchte ich jedoch vermeiden, um keinen Ärger zu bekommen.

Danke trotzdem für das Angebot. Ich hatte gehofft, jemanden zu finden, der mir persönlich etwas Nachhilfe geben kann und sich das gemeinsam mit mir in einem Teams- oder Zoom-Call anschaut.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Fehler4001:Aktion Step11-Entry (1):Variable 'Bauteil2'nicht deklariert:
Fehler4001:Aktion Step19-Entry (1):Variable 'Greifer1'nicht deklariert
....
Von diesen Fehlermeldungen gibt es leider sehr viele, und ich verstehe nicht, warum sie auftreten. Der Begriff „Bauteil“kommt in keiner der Projektaufgaben oder Beschreibungen vor, daher weiß ich nicht, wo oder warum ich ihn hinzufügen sollte.

Wenn ich auf die Meldung klicke, erscheint z. B.
bauteil2.nXOffset = -84.

In den Aufgabenbeschreibungen finde ich dazu keinerlei Bezug, daher ist mir unklar, woher dieser Fehler stammt.

Danke im Voraus!
 
Für mich sieht es so aus, als ob du einen SFC Baustein u. a. mit den Schritten 11 und 19 hast. Diese Schritte haben jeweils eine Eingangsaktion und rufen darin die strukturierten Variablen Bauteil2 und Greifer1 auf, so wie in deinem Beispiel Bauteil2.nXOffset.

Wenn du in einer der Eingangsaktionen bist, sollte in der Navigationsleiste das soweit ausgeklappt sein, dass du siehst, in welchem FB sich diese Aktion befindet. Öffne mal den FB. Im Editor siehst du dann im oberen Bereich all deine deklarierten Variablen und im unteren Bereich die Schrittkette. Im oberen Bereich müsste es eigentlich Bauteil2 und Greifer1 geben, bspw. im VAR-Bereich und einem passenden Datentyp, bspw. Greifer1 : MyGripperStruct;.

Denkbar wäre auch, dass Bauteil2 und Greifer1 als globale Variablen in einer GVL deklariert sind, hier aber nicht vollqualifiziert mit ihrem Namensraum aufgerufen werden (schlechter Programmierstil) und daher der Zusammenhang zwischen der lokalen Verwendung und der globalen Deklaration nicht hergestellt werden kann.
Such im gesamten Projekt mal nach Bauteil2 und Greifer1, ob du eine Deklaration in FBs und GVLs findest.
 
Fehler4001:Aktion Step11-Entry (1):Variable 'Bauteil2'nicht deklariert:
Fehler4001:Aktion Step19-Entry (1):Variable 'Greifer1'nicht deklariert
....
Wenn ich auf die Meldung klicke, erscheint z. B.
bauteil2.nXOffset = -84.

In den Aufgabenbeschreibungen finde ich dazu keinerlei Bezug, daher ist mir unklar, woher dieser Fehler stammt.
Die Meldungen besagen, dass Dekarationen oder Instanzen fehlen. Handelt es sich bei Bauteil2 um eine Variable vom Typ einer Struktur, dann fehlt die Dekaration einer Variablen mit dem Namen Bauteil2 oder Greifer1 und dem Typ der zugehörigen Struktur.
Soll Bauteil2 oder Greifer1 die Instanz eines Funktionsbausteins (FB) sein fehlt die Anlage der Instanz mit dem entsprechenden Namen.
Ich würde Dir empfehlen mit Hilfe von geeigneter Literatur Dich zunächst in die Thematik SPS-Programmierung einzuarbeiten.
Damit Du Variablen/Strukturen nutzen kannst, ihnen mit "Variablenname := Wert" zum Beispiel einen Wert zuweisen kannst muss diese erst deklariert werden.
Ähnlich ist es mit der Nutzung von Funktionsbausteinen. Möchtest Du irgendwo eine Einschaltverzögerung TON nutzen musdt Du erst eine Instanz dieses FBs deklarieren.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich mir den Screenshot anschaue dann bin ich auch bei @roboticBeet mit seiner Aussage "schlechter Programmierstil". Da ist etwas unsauber oder gar nicht deklariert - sowas sollte eigentlich nicht passieren, selbst wenn man etwas aus seinem Zusammenhang herausreißt ...
 
Ich kann zeitlich leider nicht ausführlich antworten, sorry.
Bei Dir fehlen die Deklarationen von Variablen (Fehler 4001), dann gibt es mehrere Schritte mit dem selben Namen (4363).
Wie gesagt, schaff Dir einmal Literatur zum Thema SPS-Programmierung an. Außerdem gibt es viele Hilfeseiten zu Codesys, schau dort mal nach der Ablaufsprache (AS).
 
Hallo, also dein Screenshot schaut danach aus als würdest du irgendwelche Schrittketten in einer AS Sprache versuchen zu erstellen. Und offensichtlich sind Variablen nicht deklariert.
Wenn du vernünftig Programmieren willst, dann vergiss das alles was du da tust.
Erstens, nimm ST. KOP ist kompletter Mist, FUP nur unwesentlich besser, aber in manchen Situationen möglicherweise geeignet. Die meisten größeren Firmen haben Vorgaben, dass KOP und FUP nicht verwendet werden darf, ausschließlich ST. Und so schreibt man auch Progamme und nicht in irgenwelchen Bildchen Sprachen. AS ist tatsächlich eine ganz gut verwendbare Sprache um Ablaufschrittketten zu basteln, geht allerdings auch mit ST und CASE Anweisungen.

Dann arbeitet man sauber. Viele aus dem Kollegenkreis programmieren in einem derart schlechten Stil, das ist einfach Pfusch. Denk an einen Handwerker, den bezahlst du auch nur, wenn die Arbeit gut, fachmännisch und sauber ist. Zu einem guten Stil gehört eine vernünftige Variabelbezeichnung. Vor kurzem hab ich irgendwo eine Variable gelesen, die hieß sd_mtr und sollte Speed Motor darstellen. Tatsächlich war es ein Geschwindigkeitsvorwahlwert im DatenTyp Real. Eine solche Variable sollte rSpeedMotorSlow heißen oder irgendwie so ähnlich. Der Datentyp steht vorne an der Variable, der Name sagt aus was die Variable tut. Zu JEDER Variabe gehört ein sinnvoller Kommentar. "Geschwindigkeit Motor langsam" ist kein sinnvoller Kommentar. "Langsame Geschwindigkeit Förderbahn Motor für Endpositionierung" hingegen ist ein sinnvoller Kommentar.

Code wird vernünftig strukturiert und eingerückt. Textblöcke sauber getrennt, es wird mit Absätzen gearbeitet, logsche Verknüpfungen schreibt man ordentlich untereinander. Code muss einfach lesbar und nachvollziehbar sein, auch nach Jahren und von Leuten die den Code noch nicht kennen.

Fang im prgMain an und beschätige dich mit Deklaration, IF THEN ELSE, CASE, FOR Schleifen. Schau dir an was der unterschied zwischen Programmen, Functions und Functionblocks ist. Kuck wie man Strukturen erstellt und damit arbeitet. Überlege dir eine sinnvolle Struktur für dein Programm.

AutomatikMode, ManualMode, SafetyOk, DruckluftIO, sowas wird nicht immer wieder händisch ausprogrammiert, da erstellt man sich Standardbausteine dafür, die das alles im Hintergrund managen.

Wenn du so anfängst und langsam immer komplexere Dinge entwickelst, lernst du vernünftig ein Programm zu schreiben. Und das war ja dein Ziel nach dem Eingangsposting.

Grüße,
Parallax
 
Zurück
Oben