Hallo zusammen,
Hat jemand Erfahrung damit UDP-Daten auszulesen und in TwinCAT3 als Variablen zur Verfügung zu stellen?
Für die TwinCAT3 gibt es eine Funktion "TF6311 TCP/UDP Realtime". Sie soll es ermöglichen mit der TwinCAT3 Daten zu empfangen, die per UDP versandt werden.
http://infosys.beckhoff.com/content/...22292382391104
Dazu liefert Beckhoff auch ein kleines, anschauliches Beispiel in dem die von einem UDP Client gesendete Pakete gezählt werden können.
Angeblich kann man auch den Inhalt der gesendeten "Message: Beckhoff TCP-UDP RT" verändern. Wie bekomme ich diese Message auf der Seite der TwinCAT3 als Variable o.ä. angezeigt, so dass ich sie in der TwinCATweiterverwenden kann?
In dem Beispiel wird das Datenfeld "pData" als PVIOD-Type genutzt. Somit dachte ich, dass mir die Funktion "PVOID_TO_STRING" die Variable wieder in ein menschenlesbares Format übersetzt. Hierfür habe ich die passende Library "Tc2_Utilities" bei References hinzugefügt.
https://infosys.beckhoff.com/content...70114159107251
--> Der Versuch in der MAIN:
Deklaration: pDataString: T_MaxString;
Im Programm: pDataString := PVOID_TO_STRING(UdpReceiver.ReceiveData.pData);
Führt zu den Fehlermeldungen:
Fehler 3 Funktionsblock 'UdpReceiver' muss für den Zugriff instanziert werden
Fehler 5 Auf Eingang 'pData' von 'ReceiveData' kann nicht außerhalb des Aufrufs zugegriffen werden
Fehler 6 'pData' ist kein Eingang von 'ReceiveData'
...
Zu Fehler 3: Das Instanziieren erfolgt doch erst beim Funktionsaufruf, darum kann ich das doch garnicht vorher erzwingen.
Zu Fehler 5: Ich will ja gar nicht auf den Eingang sondern den Wert zugreifen, aber mit ".Value" wird direkt im Tooltip angezeigt " Bezeichner 'Value' nicht gefunden".
--> Die Verwendung direkt in der Methode "ReceiveData" des Funktionsbausteins (FB) "UdpReceiver" in dieser Form:
pDataString := PVOID_TO_STRING(pData);
Führt zwar nicht zu Fehlermeldungen, zeigt mir im Eingeloggten Zustand im Programm hinter der Variable nur "???" an und in der Variablen-Liste steht "<Haltepnkt setzten um Wert zu lesen.>". Das Erstellen eines Haltepunktes über "Debuggen", "Neuer Haltepunkt..." bewirkt aber auch keine Änderung.
Ich bin völlig neu in diesem Thema und freue mich über jeden Hinweis und/oder Code-(Abschnitt) den ich bekommen kann. Andere Lösungswege freuen mich natürlich auch.
(Das Ziel ist es, ein XML, das über UDP eintrifft, auszuwerten und später mit veränderten Einträgen zurück zusenden.)
Vielen Dank im Voraus.Hat jemand Erfahrung damit UDP-Daten auszulesen und in TwinCAT3 als Variablen zur Verfügung zu stellen?
Für die TwinCAT3 gibt es eine Funktion "TF6311 TCP/UDP Realtime". Sie soll es ermöglichen mit der TwinCAT3 Daten zu empfangen, die per UDP versandt werden.
http://infosys.beckhoff.com/content/...22292382391104
Dazu liefert Beckhoff auch ein kleines, anschauliches Beispiel in dem die von einem UDP Client gesendete Pakete gezählt werden können.
Angeblich kann man auch den Inhalt der gesendeten "Message: Beckhoff TCP-UDP RT" verändern. Wie bekomme ich diese Message auf der Seite der TwinCAT3 als Variable o.ä. angezeigt, so dass ich sie in der TwinCATweiterverwenden kann?
In dem Beispiel wird das Datenfeld "pData" als PVIOD-Type genutzt. Somit dachte ich, dass mir die Funktion "PVOID_TO_STRING" die Variable wieder in ein menschenlesbares Format übersetzt. Hierfür habe ich die passende Library "Tc2_Utilities" bei References hinzugefügt.
https://infosys.beckhoff.com/content...70114159107251
--> Der Versuch in der MAIN:
Deklaration: pDataString: T_MaxString;
Im Programm: pDataString := PVOID_TO_STRING(UdpReceiver.ReceiveData.pData);
Führt zu den Fehlermeldungen:
Fehler 3 Funktionsblock 'UdpReceiver' muss für den Zugriff instanziert werden
Fehler 5 Auf Eingang 'pData' von 'ReceiveData' kann nicht außerhalb des Aufrufs zugegriffen werden
Fehler 6 'pData' ist kein Eingang von 'ReceiveData'
...
Zu Fehler 3: Das Instanziieren erfolgt doch erst beim Funktionsaufruf, darum kann ich das doch garnicht vorher erzwingen.
Zu Fehler 5: Ich will ja gar nicht auf den Eingang sondern den Wert zugreifen, aber mit ".Value" wird direkt im Tooltip angezeigt " Bezeichner 'Value' nicht gefunden".
--> Die Verwendung direkt in der Methode "ReceiveData" des Funktionsbausteins (FB) "UdpReceiver" in dieser Form:
pDataString := PVOID_TO_STRING(pData);
Führt zwar nicht zu Fehlermeldungen, zeigt mir im Eingeloggten Zustand im Programm hinter der Variable nur "???" an und in der Variablen-Liste steht "<Haltepnkt setzten um Wert zu lesen.>". Das Erstellen eines Haltepunktes über "Debuggen", "Neuer Haltepunkt..." bewirkt aber auch keine Änderung.
Ich bin völlig neu in diesem Thema und freue mich über jeden Hinweis und/oder Code-(Abschnitt) den ich bekommen kann. Andere Lösungswege freuen mich natürlich auch.
(Das Ziel ist es, ein XML, das über UDP eintrifft, auszuwerten und später mit veränderten Einträgen zurück zusenden.)