Ich habe einen Baustein (PRG) programmiert. Dieser hat einen Eingangsparameter xIn1 (VAR_INPUT). Diesen Baustein benutze ich mehrmals in meinem Programm mit verschiedenen Eingangsparametern.
Nun möchte ich innerhalb des Bausteins wissen, welche Variable an den Eingang xIn1 verknüpft ist. Dazu müsste ich also den Namen der Variablen als String vorliegen haben.
Wie geht das?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
In dem Namen der Variablen steckt eine Kennung, die an ein Alarmierungssystem übermittelt werden soll.
Da es sich um eine große Anzahl von Bausteinen handelt (ca. 2000), will ich nicht an jeden Baustein die Kennung extra als zusätzliche Variable anknüpfen.
Es wäre praktisch, wenn der Baustein aus dem Namen der Variablen die Kennung extrahiert und diese dann sendet.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
falls du programmierbeispiele suchst schau dir mal unsere open source library oscat.lib an dort findest du hunderte von funktionen die du benutzen kannst aber auch deren souirce anschauen kannst.
um den source zu sehen öffne die lib wie ein projekt mit file open und du kannst alles sehen und auch bearbeiten
Dann habe ich ja 8 Variablen vom Typ Beispiel und jeder muss ich den Namen im Element .name extra vergeben.
Das will ich ja gerade vermeiden, bei 2000 Variablen/Strukturen jeweils den Namen als String übergeben?! Das wäre ja Wahnsinn.
Ich habe mir mal ein Speicherabbild der Wago-SPS erzeugt. Dort kann man sehen, das die Namen der Variablen im Speicher zur Laufzeit vorhanden sind (wahrscheinlich für Debug-Zwecke). Also muss es auch möglich sein, aus dem Speicherort einer Variablen (mit ADR rausfinden) den Namen abzuleiten.
Nur wie???
Der Support teilt mir nur mit, dass es sich um "interne" Funktionen handelt.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo liebe Forum-Gemeinde,
wer kann mir helfen?
Ich habe einen Baustein (PRG) programmiert. Dieser hat einen Eingangsparameter xIn1 (VAR_INPUT). Diesen Baustein benutze ich mehrmals in meinem Programm mit verschiedenen Eingangsparametern.
Nun möchte ich innerhalb des Bausteins wissen, welche Variable an den Eingang xIn1 verknüpft ist. Dazu müsste ich also den Namen der Variablen als String vorliegen haben.
Wie geht das?
Wofür brauchst Du den Namen der Variablen?
In dem Namen der Variablen steckt eine Kennung, die an ein Alarmierungssystem übermittelt werden soll.
Da es sich um eine große Anzahl von Bausteinen handelt (ca. 2000), will ich nicht an jeden Baustein die Kennung extra als zusätzliche Variable anknüpfen.
Es wäre praktisch, wenn der Baustein aus dem Namen der Variablen die Kennung extrahiert und diese dann sendet.
Grundsätzlich müsste das möglich sein:
Es gibt einen Baustein der Bibliothek AnalyzationNew.lib, der etwas ähnliches kann (AnalyzeExpression).
Dieser FB gibt einen String aus, der die Namen der verwendeten Variablen an seinem Eingang InputExp enthält.
Hat jemand vielleicht den Quellcode dieser Bibliothek?
du könntest den bausstein mit einem pointer input versehen,
der liefert dir die adresse der variable.
den wert kannst du ansprechen über X := input_var^
die adresse der variable ist dein pointer input selbst.
damit kann deine funktion beliebig oft mit verschiedenen pointern aufgerufen werden und trotzdem die variable als adresse erkennen.
wenn du die variaben als strukturiertes array definierst kannst du auch gleich den namen per string auslesen
Hallo hugo
"wenn du die variaben als strukturiertes array definierst kannst du auch gleich den namen per string auslesen"
Das ist der Punkt: Wie geht das?
Wie kann ich aus dem Pointer den Namen der "gepointerten" Variablen auslesen?
Der Pointer zeigt ja nur auf eine Speicherzelle.
unter datentypen definiest du folgendes:
TYPE beispiel :
STRUCT
END_STRUCT
END_TYPE
im programm definierst du folgendes:
VAR CONSTANT
END_VAR
VAR
end_var
dann bekommt deine funktion den eingang IN vom typ beispiel
in der funktion benutzt du
datax := IN.re;
dataname := IN.name;
pointer sind nicht nötig wäre nur umständlich und gefährlich
falls du programmierbeispiele suchst schau dir mal unsere open source library oscat.lib an dort findest du hunderte von funktionen die du benutzen kannst aber auch deren souirce anschauen kannst.
um den source zu sehen öffne die lib wie ein projekt mit file open und du kannst alles sehen und auch bearbeiten
download unter w www.oscat.de w
zu hugos Beispiel:
Nee, das ist nicht die Lösung.
Dann habe ich ja 8 Variablen vom Typ Beispiel und jeder muss ich den Namen im Element .name extra vergeben.
Das will ich ja gerade vermeiden, bei 2000 Variablen/Strukturen jeweils den Namen als String übergeben?! Das wäre ja Wahnsinn.
Ich habe mir mal ein Speicherabbild der Wago-SPS erzeugt. Dort kann man sehen, das die Namen der Variablen im Speicher zur Laufzeit vorhanden sind (wahrscheinlich für Debug-Zwecke). Also muss es auch möglich sein, aus dem Speicherort einer Variablen (mit ADR rausfinden) den Namen abzuleiten.
Nur wie???
Der Support teilt mir nur mit, dass es sich um "interne" Funktionen handelt.
eine bessere möglichkeit kenne ich auch nicht