CodeSys v3 - Variablennamen aus structur auslesen

Gerri

Level-1
Beiträge
822
Reaktionspunkte
37
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
kann ich aus einer Structure eine Variable ermitteln?

Type X
struct
a : Bool;
b : Bool;
res : Bool; // not used
end_struct
end_type



var
test : X;
idx : int;
end_var



wie kann ich nun die Variable test.res ermitteln?

ergebnis sollte idx = 2 sein?
 
Hallo,

vielleicht so :
Code:
myBool := test.res ;

oder ...

if test.res then ...
... oder was war deine Frage ...?

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
ich habe einen datenstream der maximal 100 bits versenden kann.
Acteull werden an die 50 bits genutzt.
diese sind in einer struktur definiert.
ab 51 heissen die variablen einfach nur resxxx.
die will ich im stream natürlich nicht mitsenden.
also brauche ich die aktuelle anzahl der verwendetetn bits meiner struktur und die geht bis zum ersten resxxx
den index 50 brauche ich nun.
dazu muß man den symbolischen namen der variablen in der struktur ermitteln.
 
Ähhh ... und wie passt das mit der oben beschriebenen Struktur zusammen ?

Wenn du die Anzahl der gesetzten Bits in einem Bit-Array feststellen willst oder wenn du feststellen willst, wieviele Bits in einer Folge gesetzt sind so geht das nur über eine Schleife in der du die von dir gewünschten Kriterien überprüfst.
Dafür kann man natürlich auch ein Code-Beispiel machen - dafür wäre es aber wichtig zu wissen, was du da wirklich hast ...

Gruß
Larry
 
strukt.jpg das ist die STruct einer Variablen. diese kann in Zukunft erweitert werden. Gestreamt soll alles werden bis zum ersten SPARE_XXX. also brauche ich die Boolanzahl. in diesem Fall 41
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Naja ... nach den Namen suchen kannst du hier nicht.
Wenn es um einen Status geht dann könntest du das wie von mir beschrieben machen. Dafür müßtest du "nur" eine AT-Sicht auf deine Struktur machen, die die ganze Struktur als gleich großes Bit-Array darstellt und dann diese AT-Sicht durchsuchen.

Gruß
Larry
 
Meines Wissens geht das nicht.

Du könntest aber vielleicht mal bei Beckhoff anrufen und nachfragen, ob es eine Art Reflektion von Variablen-Namen gibt - ich kann es mir aber nicht vorstellen ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Servus,

ich kann mir auch nicht vorstellen, dass das funktioniert. Aber warum definierst du nicht einfach eine Konstante "SizeStruct" mit dem Wert 50? Sollte das Programm irgendwann einmal erweitert werden, muss der Programmieren nur noch die Konstante ändern und fertig.
 
naja, ich kann schon die SPARE_XXX mit Streamen und ins leere laufen lassen. Es wäre nur von der Performance schöner.
Die Sache ist, das es sich um einen Standard handeln wird für die nächsten Jahre und Vertretungen von Indien bis Amerika damit arbeiten. Daher muß so viel als möglich gekapselt und automatisiert werden.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@ST:
an so etwas, wie von dir gepostet, hatte ich auch schon gedacht.
Ich habe allerdings die Anfrage des TE so verstanden, dass sich die Namen in der Struktur ändern können und das dann die Adresse eines weiter hinten liegenden Res-Elements benutzt werden müßte.
In diesem Fall würde dein Vorschlag gegenüber einer angegebenen Konstante nicht so schrecklich viel mehr bringen, da auch er ja keinen Automatismus beinhaltet ...

Gruß
Larry
 
@LL:
Da hast Du Recht. Dann müsste man nicht nach Adressen, sondern nach Namen von Variablen suchen können. Und das geht wohl wirklich nicht.
Ich würde es eh vorziehen, erst gar keine Reservevariablen anzulegen, sondern die Struktur bei Bedarf nachträglich zu erweitern. Die Grösse der zu sendenden Daten könnte man dann mit der SizeOf-Funktion ermitteln.
 
Zurück
Oben