Zugriff auf Variable über String mit Var-Namen

grosser_marco

Level-1
Beiträge
45
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,
habe ein ziemliches Problem:
Gibt es unter TwinCAT eine Möglichkeit, über einen String (der z.B. in einer Visu beschrieben wird und den Variablennamen enthält), im PLC-Programm auf die Variable dieses Namens zuzugreifen und sie abzufragen?
Z.B. Variable vom Typ BOOL: TEST1
Wenn in einem String (in der PLC) dann der Variablenname "TEST1" steht, kann man dann mittels dieses Strings auf die gleichnamige Variable zugreifen und ihren Signalzustand in der PLC abfragen/verarbeiten?

Danke im Voraus für eure Hilfe!
Marco
 
Nochmal langsam zum mitschreiben.
Du willst extern mit einer Software auf Variablen in deiner SPS zugreifen, von denen du nur die Namen kennst?

Mit den ganzen Visualisierungen kenne ich mich nicht aus. Aber es funktioniert auf jeden Fall mit mit C++, Delphi, (Basic?) und LabView.
TwinCat OCX ist eigentlich recht einfach zu handhaben, gewisse Grundkenntnisse in den jeweiligen Sprachen vorrausgesetzt.

Ist es sowas, was dir vorschwebt, oder wandere ich hier auf dem Holzweg?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... wenn ich die Frage richtig verstanden habe, dann will der Themenstarter in einem String der SPS den Namen der Variablen übergeben, die sie be-/verarbeiten soll ...
Wenn ja, dann ginge das m.E. nur in dem in der SPS eine Routine programmiert wird, die den Inhalt des Strings abfragt/vergleicht und entsprechend dann die (schon bekannten) Variablen verwendet ...

Gruß
LL
 
Larry Laffer hat recht...
Aber hat jemand eine Idee, wie ich eine Variable im PLC-Programm verarbeite, von der ich nur den Namen in einem String habe? Wie könnte man diese Variable anhand ihres Namens suchen und verarbeiten?
 
Ich sehe das wie Larry, so wie du das gern hättest geht das nicht.

Du mußt den Variablennamen aus den String isolieren.
Dann per Stringvergleich in einer vordefinierten Liste nachsehen, ob ein Varname paßt. Für jeden Varnamen brauchst du dann die entsprechende Aktion mit dieser Variablen.

PHP:
IF strVarName = 'Variable_1' THEN
	Var_Wert := Variable_1;
ELSE
	IF strVarName = 'Variable_2' THEN
        		Var_Wert := Variable_2;
      	ELSE
		IF strVarName = 'Variable_3' THEN
          		 Var_Wert := Variable_3;
          	END_IF
     	END_IF
END_IF
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wäre es nicht einfacher, in der Visu den Wert der gewünschten Variablen zu ermitteln und diesen direkt einer anderen Variablenzuzuweisen, mit der dann in der PLC weitergearbeitet wird?
Die Variablennamen sind meines Wissens nach nicht im PLC-Programm zur Laufzeit verfügbar. Deshalb wäre auch eine vordefinierte Liste wie bei Ralle notwendig.
 
Habe mir mal die Systemfunktionen von Twincat angesehen.

Da gibt es den FB:

-> PLC_ReadSymInfoByName

Der nimmt als Eingangsparameter den Namen der Variablen als String entgegen. Als Out gibt er zwar nicht direkt den Wert der Variablen aus, aber zumindest die Größe der Variablen und deren Adresse.
Dann könnte man evtl. indirekt über die Adresse auf die Variable zugreifen.

Ist aber ohne Gewähr, weil ich noch nie mit TwinCat gearbeitet habe. Also am besten mal eben die Twincat-Hilfe nach "PLC_ReadSymInfoByName" befragen.
 
Habe mir mal die Systemfunktionen von Twincat angesehen.

Da gibt es den FB:

-> PLC_ReadSymInfoByName

Der nimmt als Eingangsparameter den Namen der Variablen als String entgegen. Als Out gibt er zwar nicht direkt den Wert der Variablen aus, aber zumindest die Größe der Variablen und deren Adresse.
Dann könnte man evtl. indirekt über die Adresse auf die Variable zugreifen.

Ist aber ohne Gewähr, weil ich noch nie mit TwinCat gearbeitet habe. Also am besten mal eben die Twincat-Hilfe nach "PLC_ReadSymInfoByName" befragen.

Hier der entsprechende Link zur Beckhoff-Hilfe.
 
Nicht schlecht, wenn das damit funktionieren würde. Damit könnte man auf jeden Fall mal experimentieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Nicht schlecht, wenn das damit funktionieren würde. Damit könnte man auf jeden Fall mal experimentieren.

Ich habe es grad mal schnell bei mir auf dem Rechner ausprobiert. Funktioniert einwandfrei. Es muss allerdings beachtet werden, dass der komplette Pfad der Variable eingetragen wird.
 
Ich habe es grad mal schnell bei mir auf dem Rechner ausprobiert. Funktioniert einwandfrei. Es muss allerdings beachtet werden, dass der komplette Pfad der Variable eingetragen wird.

Meinst du mit Pfad die Struktur oder das Array?? Erkläre mal bitte kurz, am Besten du zeigst den Code gleich mal, grins.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Meinst du mit Pfad die Struktur oder das Array?? Erkläre mal bitte kurz, am Besten du zeigst den Code gleich mal, grins.

Mit Pfad meine ich Programm/FB/FN->Struktur->Variable. Dazu mal zwei Beispiele:
Code:
MAIN.Var   (* Variable Var im Programm Main *)
 
MAIN.Struct1.Var5   (* Variable Var5 in der Struktur Struct1 im Programm Main *)
 
Zurück
Oben