Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 4 von 4

Thema: UDP-Datenfeld mit TwinCAT3 verarbeiten

  1. #1
    Registriert seit
    08.09.2016
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    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: I
    ch 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.
    Zitieren Zitieren UDP-Datenfeld mit TwinCAT3 verarbeiten  

  2. #2
    Registriert seit
    11.07.2011
    Beiträge
    65
    Danke
    0
    Erhielt 4 Danke für 4 Beiträge

    Standard

    Meinst Du das Beispiel S02 Udp Client Server (UdpDemoPlc)?

    Die Funktion PVOID_TO_STRING kenne ich nicht. Ich würde da eher die MEMCPY Funktion verwenden.

    Deine Programm-Erweiterungen musst Du direkt in der Methode "ReceiveData" machen. Dort kannst Du
    mit der MEMCPY Funktion die Daten mit der Länge "nData" zum Beispiel in einen String kopieren.
    Dabei einfach aufpassen, dass nur so viele Byte kopiert werden wie im String auch Platz haben....

  3. #3
    Registriert seit
    04.11.2014
    Beiträge
    107
    Danke
    1
    Erhielt 17 Danke für 16 Beiträge

    Standard

    Morgen,

    PVOID ist in Pointer der unter 32bit und 64bit Funktioniert. Also Plattformunabhängig.
    Brauchst du wirklich das Realtime Paket? Ich würde mir mal das normale UDP-Paket TF6310 ansehen.
    Siehe: http://infosys.beckhoff.com/german/m...oHl=1&ancRel=1

    Grüße

  4. #4
    tobor ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    08.09.2016
    Beiträge
    6
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, und danke für die Hinweise.
    Ja, ich meinte das Beispiel „S02 Udp Client Server“. Das mit dem MEMCPY klingt irgendwie sehr kompliziert.
    Das TF6310 sieht wirklich gut aus, das muss ich mir am Dienstag nochmal weiter anschauen. Leider habe ich gestern die Peer-to-Peer-Kommunikation auf dem Rechner nicht direkt hinbekommen, obwohl ich ihnen unterschiedliche Tasks sowie IPs (passend zu den zwei verbauten Netzwerkkarten) vergeben hatte. Die Netzwerkkarten sind mit einem Loop-Kabel verbunden und sehen sich auch, weil über sie das UDP-Sample funktioniert hatte.
    Muss ich sonst noch etwas für das Peer-to-Peer verstellen?

    Das bSendOnceToItself mit „Hello itself“ hat funktioniert an beiden PLCs.
    Einen zweiten Rechner habe ich nicht zur Verfügung und das Zielsystem ist aktuell auch nicht verfügbar.

Ähnliche Themen

  1. Antworten: 7
    Letzter Beitrag: 06.05.2015, 15:44
  2. BC9000 mit TwinCAT3 programmieren?
    Von Macbeth im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 13.09.2013, 14:13
  3. Antworten: 6
    Letzter Beitrag: 13.11.2011, 21:25
  4. Vergleich DW - MySQL-Datenfeld ?
    Von hicom im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 30.06.2008, 10:43
  5. SEND/RECEIVE mit UDP
    Von DerWolf im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 31.07.2007, 18:22

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •