Unbekanntes Struct auslesen in TwinCat 3

M_Krueger

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

ich habe folgendes Problem in TwinCat 3:

ich übergebe einem Funktionsbaustein eine komplexe, verschachtelte Struktur.
Die Struktur wird auf unterster Ebene aus bekannten Strukturen zusammen gesetzt.

Beispiel:

TYPE ST_HMI:
STRUCT
stAxisData : ST_Axis;
stChannelData : ST_Channel;
END_STRUCT
END_TYPE

TYPE ST_Axis:
STRUCT
stActPositions : ST_REAL_DATATYPE;
stSetPosition : ST_REAL_DATATYPE;
END_STRUCT
END_TYPE

TYPE ST_REAL_DATATYPE:
STRUCT
rValue : REAL;
rMax : REAL;
rMin : REAL;
...
...
END_STRUCT
END_TYPE

Ich werte diese Struktur innerhalb einer PLC-Bibliothek aus.
Die Gesamtstruktur ist in der Bibliothek bekannt und soll Element für Element (je BasisStruktur wie zB ST_REAL_DATATYPE) in ein Array geschrieben werden.
Ich suche nach einer Möglichkeit das "Registrieren" der einzelnen BasisStructs in den jeweiligen Arrays zu automatisieren, ohne das komplette Struct kennen zu müssen.
Die HauptStruktur ST_HMI wird kontinuierlich erweitert, und ich möchte vermeiden dabei jedes mal das Array händisch anpassen zu müssen.

De Facto suche ich eine Möglichkeit die Struktur ST_HMI nach den bekannten Basis Strukturen wie zB ST_REAL_DATATYPE zu "scannen".

Ich hoffe mein Problem ist verständlich erklärt :)
Ich freue mich auf eure Vorschläge :)
 
Ich weis jetzt nicht so recht, wie die Frage zu deinem Problem lautet. Eigentlich steht doch alles in deinem Struct.

Du legst ein "Array of Struct" an und kannst dann auf alle Unterelemente zugreifen.

Code:
Var
aVerzeichnis : Array[0..25] of ST_HMI;
rTestValue : Real;
rSuchValue : Real;
iSuchIndex : Int;
i : Int := 0;
End_Var

For i := 0 to 25

   If Verzeichnis[i].stAxisData.stActPositions.rValue = rSuchValue Then
      iSuchIndex := i;
      Exit_For
   End_If
Next

So etwa würde das in ST in TwinCat funktionieren.
Man kann die einzelnen Strukturen später beliebig erweitern und darauf zugreifen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mmmmhm, auch ich bin mir nicht ganz sicher was du tatsächlich willst.
Informationen über eine Variable/struktur herauszufinden geht aber auch über ADS.
Wenn es das ist was du willst such mal in den C++ Beispielen nach Indexgroup 0xF009 bzw. ADSIGRP_SYM_INFOBYNAMEEX. Du brauchst aber das Symbol der Variable.
Eventuell kann dir hier __VARINFO (https://infosys.beckhoff.com/conten...18014402037259659.html?id=5090928014248470572) arbeiten.

Aber versuch noch mal zu beschreiben was du willst.

Michael
 
Die Gesamtstruktur ist in der Bibliothek bekannt und soll Element für Element (je BasisStruktur wie zB ST_REAL_DATATYPE) in ein Array geschrieben werden.
Ich suche nach einer Möglichkeit das "Registrieren" der einzelnen BasisStructs in den jeweiligen Arrays zu automatisieren, ohne das komplette Struct kennen zu müssen.
Die HauptStruktur ST_HMI wird kontinuierlich erweitert, und ich möchte vermeiden dabei jedes mal das Array händisch anpassen zu müssen.

De Facto suche ich eine Möglichkeit die Struktur ST_HMI nach den bekannten Basis Strukturen wie zB ST_REAL_DATATYPE zu "scannen".
Hmmm, bedeutet das, diejenigen, die kontinuierlich die Struktur ST_HMI erweitern nehmen keine Rücksicht auf die Belange derer, die die Daten irgendwo auch sinnvoll auswerten müssen?
Wenn die gleiche Struktur bereits für z.B. 5 Geräte verwendet wird, sollte es ein leichtes sein, diese auch auf z.B. 7 Geräte aufzubohren, sofern die HauptStruktur bereits Arrays enthält.
Werden aber Bedeutungen hinzugefügt, für die es in der VorgängerVariante der Struktur noch keine Entsprechungen gab, woher soll die Automatik wissen, was sie mit den neuen "ZusatzInformationen" anfangen soll?
Das klingt irgendwie recht abenteuerlich. Hautsache strukturiert - egal wie? Und wenn schon "StrukturWandel", dann automatisch.
Oder willst Du die Daten "nur" statistisch auswerten, nach dem Motto "wieviel Prozent der RealVariablen der Struktur sind kleiner als 0"?
Könnte mir vorstellen, dass Du aus einer für Deine Belange viel zu umfangreichen Struktur versuchen willst, die wenigen für Dich relevanten Daten herauszufiltern.
Aber anscheinend musst Du auch in dem für Dich relevanten Bereich mit "überraschenden" Erweiterungen der HauptStruktur rechnen?

Gruss, Heinileini
 
Zurück
Oben