TwinCAT 3 - TCP/IP Verbindung/Ansteuerung

VeloxAuriga

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

Als Teil meiner Technikerarbeit habe ich die Aufgabe, mithilfe eines Beckhoff IPC über TwinCAT eine TCP/IP Verbindung/Ansteuerung zu einem Lasermarkiersystem herzustellen. Leider bin ich noch neu in der Programmierung mit TwinCAT und hoffe auf eure Hilfe

Für mein Projekt habe ich bereits die IP meines IPC´s angepasst, sodass ein anpingen an den Laser möglich ist. Desweiteren habe ich die TwinCAT TCP Server Anwendung installiert und die Tc2_TcpIP Bibliothek meinem Projekt hinzugefügt.
Mein Versuch nun eine Verbindung mithilfe des FB_SocketConnect aufzubauen sieht nun folgendermaßen aus:

Verbindung.png

Frage 1: Kann ich, da kein Fehler erscheint, davon ausgehen eine Verbindung erfolgreich aufgebaut zu haben?


Ungehindert dessen habe ich anschließend bereits versucht Daten, mithilfe des FB_SocketSend, zu senden:
Sending_Data.png

Dabei erscheint direkt nach dem Starten (und nicht nach Ablauf der Timeout-zeit) der Fehlercode 1861 (Timeout).

Leider weiß ich ab hier nicht mehr weiter und kann nicht sagen ob es sich um Programmier-, Verbindung- oder Einstellungsfehler handelt.


Ich wäre für jede Hilfe dankbar und natürlich auch für Tipps bei der Erstellung einer TCP/IP Verbindung.



Mfg

Lucas
 
Generell hast du schon mal 2 Fehler in deinem Code.

pScr verlangt eine Referenz (Adresse) der Variable die deine Daten enthält. Du übergibts aber einen Wert auf deinem Array.
Code:
pScr := ADR(SendSocketDat[0]),
übergibt die Adresse des Array Elements, wie gefordert.

cbLen ist auch falsch. Wenn SendSocketDat vom Typ Byte ist, dann ist eine Element 1 Byte groß und nicht 50. Wenn das gesamte Array[0..50] gemeint ist, dann sind es 51 Byte, weil das Array 51 Elemente hat.
Damit du dir aber darüber keinen Kopf machen musst, gibt den Operator SIZEOF. Der liefert die Länge zurück.
Code:
cbLen := SIZEOF(SendSocketDat[0]),

Wenn du das ganze Array auf einmal senden willst:
Code:
pScr := ADR(SendSocketDat),
cbLen := SIZEOF(SendSocketDat),

Versuchs erstmal damit.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
"Senden" ist einfach, schwieriger wird es wenn du auch Telegramme empfängst da potentiell die Werte asynchron hereinkommen. Es wäre also möglich das du in der PLC im Empfangspuffer nur die erste Hälfte eines Telegrammes hast.
Um das sauber zu handeln kann ich dann eigentlich nur dazu raten sich hinzusetzen und das im Infosys vorhandene Beispiel zu nutzen... Ist allerdings für Programmiernovizen schon ziemlich anspruchsvoll (zwei State-Maschines und einiges an Byte-gefummel).

Anders - und beim Empfangen auch einfacher da ich garantiert immer ein TCP/IP-Packet en block erhalte wäre dann die Nutzung der TF6311 (anstelle der TF6310).
Allerdings ist die PLC-Implementierung komplett anders als das was du bisher gemacht hast - es gibt dafür aber hier auch soviel ich mich erinnere ein rel. gutes Kochrezept dazu.
Die TF6311 wird halt interessant wenn du die Latenzen des WIndows-Stacks ausschalten willst. Diese sind nämlich nicht zu vernachlässigen.

Guga
 
Zurück
Oben