Sensor über TCP ansprechen
-
Hallo,
ich habe einen Sensor von IFM. Den kann man über TCP ansprechen. Da ich aber noch nicht mit TCP programiert habe stehe ich da ein bischen am Anfang.
hier das Programmhandbuch http://www.ifm.de/mounting/704435DE.pdf
Um erst mal einen Anfang zu haben, hab ich mir die TTCPClient Komponente genommen, da die IP und Port von dem Sensor eingetragen und mal connecten lassen. Die verbindung funktioniert, aber die funktioniert auch wenn ich eine IP eingebe die nicht zu Sesnor geht bzw. überhaupt nicht exestiert
Bin ich mit der Komponente schonmal auf dem richtigen weg, oder sollte ich das besser mit einer anderen aufbauen?
-
Ich würde es mit TClientSocket versuchen, da ist dann auch schon die ASCII-Übertragung implementiert (SendText), die du wohl zur Kommunikation benötigst.
-
TClientSocket habe ich nicht als Komponente (BCB 2007). und das beispiel "chat" was in der hilfe erwähnt wird gibts bei mir auch nicht
-
M.E. kann man beim 2007er die Socket-Komponenten nachinstallieren. Such mal im Installationsverzeichnis oder auf der DVD, den genauen Package-Namen habe ich allerdings nicht im Kopf.
-
Den Quellcode des Chat-Programms hatte ich vor kurzem in diesem Beitrag gepostet: http://www.c-plusplus.net/forum/viewtopic-var-t-is-247174-and-highlight-is-tclientsocket.html
-
Danke für die Hilfe, ich hab es mit der Indy Komponente TIdTcpClient hin bekommen.
Kann mir vielleicht jemand sagen wie ich aus einem String ein Bild mache?
Ich weiß welches das ankommende Bildformat ist (bmp)?ich versuche das gerade mit LoadFromClipboardFormat, abr was mich ein bisschen verwundert sind die ankommenden Daten.
ich bekomme <index (in dez 4 zeichen)> <bildlänge(in dez 9 zeichen)> <bilddaten> zugesendet. Naja, ich bin jetzt mal davon ausgegangen das mit bildlänge die anzahl der Zeichen von bilddaten gemeint ist. Das passt aber wiederrum nicht mit meiner Stringlänge zusammen.
-
Mit Strings lassen sich keine Binärdaten übermitteln. ReadStream sollte da besser geeignet sein.
-
hast du villeicht mal ein beispiel wie das gehen soll?
TMemoryStream *wert = new TMemoryStream(); IdTCPClient1->Socket->ReadStream(wert,-1,0); Image1->Picture->Graphic->LoadFromStream(wert);
so gehts auf jeden fall nicht. Problem scheint zu sein das ich die größe brauche um den wert auszulesen. zudem kommt noch das ja dann im stream nicht die reinen bilddaten sind, sondern auch noch der index und die größe.
-
Ich bekomm das einfach nicht hin?
Kann mir vielleicht jemand helfen aus den daten ein bild zu machen?
hab vorher noch nicht mit stream und noch nicht mit tcp gearbeitet. Streams sind für mich ein großes fragezeichen. Um den stream aus zu lesen brauche ich die größe aber um and ie größe zu kommen brauche ich den stream!?