Instanz in Struktur anlegen funktionier tnicht

Bensen83

Well-known member
Beiträge
777
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo Leute.

Ich möchte mir gerad eine Struktur für meine Antriebe in Codesys V3 aufbauen.
Nun habe ich eine Antriebsstruktur erstellt, in welcher auch Instanzen von Bausteinen liegen.
Die Struktur (Den Datentyp) habe ich nun in Einer Globalen Variablenliste deklariert.

Wenn ich nun über die eingabehilfe Instanzaufrufe einfügen möchte bekomme ich die Instanzen, welche in der Struktur deklariert sind nicht angezeigt.
Wenn ich die Instanzen direkt in der Globalen Variablenliste deklariere funktioniert es.
Was ist da los? Kann man keine Instanzen in einer Struktur definieren?

Kann mir jemand helfen? Danke
 

Larry Laffer

Supermoderator
Teammitglied
Beiträge
13.148
Punkte Reaktionen
2.745
Hallo Benson,

hattest du nicht irgendwann mal geschrieben, dass du schon Erfahrung mit OOP hast ?
Überleg mal, was du da machen willst - eine Struktur ist ein Bauvorschlag für etwas. Den kannst du 100 mal einsetzen - immer mit der gleichen Instanz da drin ?

Versuch das Gleiche doch mal in Visual Studio mit C# oder VB - geht das ?

Gruß
Larry
 
OP
B

Bensen83

Well-known member
Beiträge
777
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
Warum geht das nicht?

Also ich habe eine Struktur vom Typ Achse
Dort liegt ein Typ (Instanz) vom Typ Achsen_FB drin. Diesen haben ich AchsenInstanz genannt.

Wann ich jetzt Folgendes machen:

Code:
Achse_1 : Achse;
Achse_2 : Achse;

Dann kann ich doch mit:

Code:
Achse_1.AchsenInstanz
Achse_2.AchsenInstanz

2 Verschiedene Instanzen ansprechen. Das geht doch.

Warum sollte das nicht gehen?


Ps. Zu Bspw. C# ..... Da geht es sehrwohl ;-)
ist doch nichts anderes, als eine Klasse verschachtelt in einer anderen.
 
Zuletzt bearbeitet:

Larry Laffer

Supermoderator
Teammitglied
Beiträge
13.148
Punkte Reaktionen
2.745
Da hast du Recht - so hatte ich deine Frage aber auch nicht verstanden.

Natürlich kannst du in Visual Studio (und wahrscheinlich auch in TC3) eine Variable (also ein Objekt) vom Typ meineKlasse in einer Struktur definieren. Nur instanzieren kannst du sie nur nachdem du der Struktur selbst wieder eine Zuweisung gegeben hast (und dann mußt die die Instanz auch erstmal zuweisen). Deine Frage war ja :
Kann man keine Instanzen in einer Struktur definieren?

Gruß
Larry
 

RobiHerb

Well-known member
Beiträge
678
Punkte Reaktionen
112
Instanzen etc.

Ich habe ein ähnliches Problem einmal so gelöst:

Meine Achse war eine Struct von Soll und Ist Werten (Drehzahl, Moment, ...)

dann ein Array von Achsen angelegt und mit den entsprechenden Werten zum Beginn des Zyklus aus dem EtherCAT Bus die Sollwerte eingetragen,

durch die entsprechenden SoftMotion FUBS alle einzelnen Achsen in einer Schleife nacheinander durchgemangelt (Achse[n] mit VAR InOut übergeben),

im Anschluss ggf. die Istwerte überprüft und darauf reagiert.

Also ein Array of Datastructs und nicht ein Array oder eine (Super) Struct of FUB Instances.

Übrigens noch einen Spruch von meinem Programmier Vorbild: "eine struct ist eine class, bei der alle member public sind".
 
OP
B

Bensen83

Well-known member
Beiträge
777
Punkte Reaktionen
3
Zuviel Werbung?
->Hier kostenlos registrieren
Falsch ausgedrückt

Ok hatte mich falsch ausgedrückt. Wollte einfach nur ein Datentypen von FB myFB in eine Struct myStruct packen. Das funktioniert ja auch.
Wenn ich nun die Struct also den gesamten Datentypen instanziere: myIntanz : myStruct;
Dann kann ich den FB auch mit myInstanz.myFBInstanz aufrufen und es funktioniert auch alles, aber ....... Wenn ich die eingabehilfe Aufrufe bekomme ich ihn nicht unter Instanzen angezeigt.
Gibt es da einen Grund für?
 

Werner29

Well-known member
Beiträge
297
Punkte Reaktionen
117
Bei mir geht das, möglicherweise war das mal ein Fehler in der Eingabehilfe? Instanzen in Strukturen sind nicht sehr häufig, aber durchaus erlaubt.
Wenn die Instanz nicht auftaucht, dann musst du halt ohne Eingabehilfe arbeiten

instanzInStruct.PNG
 
OP
B

Bensen83

Well-known member
Beiträge
777
Punkte Reaktionen
3
Aha ok

Wieso sind die nicht so häufig? Wie ist es denn üblich? Eine Instanz in einer globalen Variablenliste? Oder lokal?


Also ich habe die neuste Version von Codesys und bei mir geht's nicht.
Denke lege mir einfach ne Struktur an und deklariere die Instanzen lokal im PRG.
Wenn ich mein Programm und die Visu auf meine Struktur anpasse und nicht auf bspw. Instanzen von Regler Bausteinen, dann kann ich es auch besser wieder benutzen, wenn andere Regler eingesetzt werden.
;-)
 
Zuletzt bearbeitet:

Werner29

Well-known member
Beiträge
297
Punkte Reaktionen
117
Zuviel Werbung?
->Hier kostenlos registrieren
Ich habe auch die neueste Version von CODESYS. Wie schaut die Eingabehilfe denn bei dir aus?
Und was würdest du erwarten?
Tatsächlich erlaubt die Norm (bisher) keine FB-Instanzen in Strukturen. Vermutlich wird das deshalb nicht so häufig gemacht.
Es spricht aber überhaupt nichts dagegen, weswegen das CODESYS auch erlaubt. Vor allem wenn du mehrere FBs hast, die gleichzeitig
instanziert werden sollen.
Häufiger wird man FB-Instanzen in anderen FBs finden. Strukturen und FBs sind ja verwandt, und die Idee ist, Strukturen für einfache
Aufgaben zu verwenden (z.B. Koordinaten) und FBs für komplexe Aufgaben.
 
OP
B

Bensen83

Well-known member
Beiträge
777
Punkte Reaktionen
3
Anderst gelöst

Also ich habe nun meine Bausteininstanzen lokal im Programm deklariert und die Ein- und Ausgänge mit Variablen einer Struktur beschaltet.
Denke es ist dann auch einheitlich, wenn ich über die Struktur zugreife und immer die Gleiche Verschachtelung vorfinde.
 
Oben