TwinCAT Array mit unterschiedlichen Datentypen

LMDaniel999

Level-1
Beiträge
57
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi.

Hab eine Frage bezüglich TwinCat 2.11 und der Deklaration eines Arrays:
Kann man ab einem bestimmten Index den Datentyp wechseln?

Hintergrund:
Ich habe eine Maschine mit vielen identischen Baugruppen, für die ich einen FB erstellt habe.
In einem Array lade ich nun mehrere dieser FBs und kann damit arbeiten.
Also sowohl die Visu, wie auch ein Algorithmus geht nun den Array durch und verarbeitet bestimmte Variablen.
Auch eine Datenübertragung zu einem entfernten Panel mache ich so "platzsparender"...

Nun wird die Maschine erweitert und die neuen Baugruppen haben die gleiche Funktion, jedoch eine andere Hardware Struktur.
Ich möchte nun das Array erweitern, jedoch einen neuen FB erstellen. Dieser FB soll die gleichen "I/Os" innerhalb des Arrays haben, jedoch unterschiedliche Hardwareanbindungen.
Nun habe ich auch einen anderen FB erstellt, kann diesen aber nicht an das Array anhängen, da ja der Datentyp nicht passt.

wie kann ich das an der Stelle lösen?
Gibt es andere Möglichkeiten?
Interfaces sind mir ein Begriff, jedoch kenn ich das nur aus der objektorientierten Sprache...
Ich programmiere hier so zwar "pseudo objektorientiert", aber komme nicht weiter...

Ein weiterer Lösungsansatz wäre, dass ich den Code beider FBs in einen gemeinsamen FB packe, und je nach Index dann unterschiedlichen Code mit einer CASE oder IF Anweisung nutze...
Aber das macht es weder übersichtlich, noch schön, noch flexibel....

Hat jemand nen Tipp oder ne Idee?
Danke!
 
Hallo,
ein Array kann immer nur einen Typ haben (nicht zu verwechseln mit List (of T) oder Collection von z.B. Visual Studio).
Du kannst also nur entweder um-Switchen (was ich auch "unschön" fände) oder deinen Basis-Typ dergestalt erweitern, dass du beides (Alt und Neu) damit abdecken kannst ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Verdammt, das hab ich befürchtet...
Beides abdecken ist schwierig, da ich für gleiche Aktionen teilweise komplett andere Hardware und Abläufe habe...

Kann ich irgendwie verschiedene Arrays über einen Namen zugreifbar machen?

z.B.: (Pseudo Code)

Alt[1..20] := AlteMaschine;
Neu[1..20] := NeueMaschine;
Gemeinsam[1..40] := Alt[1..20] + Neu[1..20];

sodass: Gemeinsam[21] = Neu[1] ???

Quasi nur als Zuordnung zum Ansprechen?
Ich kann da definitiv keine anderen Namen mehr einfügen.
Dann werde ich 100% was im Programm vergeigen!
Aber ich kann auf einfache Weise die Anzahl der Maschinenteile erhöhen und alle Algorithmen erweitern sich von alleine...
Das war nämlich so von Anfang an vorgesehen... Nur dass sich die Teile ändern war nicht vorgesehen...

Danke!
 
Mit etwas böser Programmiererei könnte es gehen:
Die beiden FBs programmieren, dabei darauf achten, dass die gemeinsamen Daten auch in beiden FBs an der gleichen Stelle stehen und dass die Datenbereiche beider FBs gleich gross sind, ggfs. einen mit Dummies auffüllen.
Einen dritten FB ohne Code schreiben, der nur die gemeinsamen Daten der ersten beiden enthält, auch den mit Dummies auf die passende Grösse bringen.
Die Arrays an der gleichen Adresse im Merkerbereich anlegen, z. B.
ArrFB1:ARRAY[1..20] OF FB1 AT %MB0; (* Alte FBs *)
ArrFB2:ARRAY[1..20] OF FB2 AT %MB0; (* Neue FBs *)
ArrFB3:ARRAY[1..20] OF FB3 AT %MB0; (* Dummy-FBs nur für Zugriff auf die Daten *)
Aufruf der FBs dann über ArrFB1, ArrFB2, je nach tatsächlichem Typ.
Zugriff auf die FB-Daten über ArrFB3.
Und wenn es funktioniert, in Ruhe über einen Umstieg auf TC3 nachdenken.
 
Zurück
Oben