Twincat 3 Link in Variable speichern

Fabi0815

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

ist es möglich einen "Link" in einer Variable zu speichern? Also z.b. in einem String?

Also so, dass ich diesen dann z.B. an einem Baustein angeben kann.

also zum Beispiel:

System.Daten[1].Auslastung Typ INT

Das als Zeichen in einen String zu schreiben ist ja kein Problem.

Aber wie lese ich das aus bzw konvertier das wieder, dass ich es wieder als "link" zuweisen kann?

Ich hoffe ihr versteht was ich meine.

Gruß und danke !
 
Nö: Das geht nicht.
Du kannst ja schlecht erwarten dass ein compiliertes System aus einem String die Adresse/Information = Datentyp, Groesse... einer Variable per Magie extrahiert.

Was du machen kannst ist vielleicht mit Attributen um dein "kleine schwarze Box wo die Magie passiert" herumzuarbeiten.
Schau mal nach dem Attribut 'TcLinkTo' / 'TcLinkToOSO'. Ansonsten wäre eine Referenz oder Pointer auf die Variable möglich die du dem Baustein übergibst. (Oder eine abgeleitetete Struktur...) Allerdings solltest du da wissen was du da machst.


Guga
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

schonmal danke für deine Antwort.

Evntl. kannst du mir ja helfen wenn ich mein genaues Problem beschreib.

Ich möchte über Twincat 3 Variablen in MQTT publishen und subscriben.

Dafür möchte ich an einem FB von außen den Pfad angeben und die Anzahl der Arrays, worauf Subscribed werden soll.
also z.B. /home/Wohnzimmer/Thermostat[]
anzahl 5

Dann wird nacheinander Thermostat[1] .. [5] gelesen
Da das als String übergeben wird, ist das kein Problem.

Ich würde jetzt aber gern einen Speicherpfad angeben. z.B. Heizung.Thermostat[]

so dass autmatisch der Wert von /home/Wohnzimmer/Thermostat[1] in Heizung.Thermostat[1] und /home/Wohnzimmer/Thermostat[2] in Heizung.Thermostat[2] geschrieben wird.

also als Input vom FB

iPfad : STRING;
iSpeicherort : STRING;
iAnzahl :INT;

Die Zahlen in der Klammern können durch variablen ersetzt werden. Jedoch bekomme ich dann die Zuweisung des Wertes nicht in den am Eingang definierten Pfad geschrieben.
Wenn ich jetzt IM Baustein bei der Zuweisung Heizung.Thermostat[variable] angeb, funktioniert es natürlich, dann ist aber der Effekt vom FB dahin.

Vielleicht hast du ja einen anderen Lösungsweg für mich.
 
Hallo,

also im Endeffekt geht es um die Position, welche im Bild im Anhang rot markiert ist.

Dort wird die Variable angegeben, in welche die Nachricht aus dem Mqtt Topic geschrieben wird.

Jetzt würde ich gerne die Bezeichnungen variabel angeben.
Also um genauzusein:

"System.Test" und "Licht".

Hat mir hierzu jemand einen Tipp wie ich das machen könnte?
 

Anhänge

  • Bildschirmfoto 2018-03-22 um 21.37.16.png
    Bildschirmfoto 2018-03-22 um 21.37.16.png
    77,2 KB · Aufrufe: 17
für solche Späße kannst du das ADS-Protokoll bemühen, da kannst du Variablen über einen solchen String ansprechen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kannst du mir da noch ein zwei tipps geben wie ich das ganze machen könnt. Hab mich durch etliche Dokus von Beckhoff durchquält aber eigentlich ist immer nur die Kommunitkation zwischen 2 Beckhoff Pcs beschrieben oder eine Kommunikation zwischen Beckhoff und einem anderen Objekt. Aber eigentlich brauch ich ja nur ein Baustein, welcher mir das ganze "aufsplittet". In Text und Typ oder?
 
Du bist auf einem Holzweg. Im Prinzip schreibst du einen Multiplexer FB. Per ADS-Protokoll ginge das sicher auch, nur warum kompliziert, wenn es auch einfach geht?
 
Danke schonmal für die Antworten !
Hast du mir hierzu vielleicht einen Link zum einlesen?
Oder noch besser evntl ein Beispiel?

Gruß
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, ADS ist eigentlich für Kommunikation zwischen zwei Teilnehmern ausgelegt, aber du kannst auch ganz einfach mit dem "lokalen" System reden, indem du die AMSNetID einfach leer läßt
 
Zurück
Oben