ich habe erst vor einigen Wochen ein neues Projekt begonnen, bei dem ich mich in Codesys einlesen und einarbeiten musste. Also bin ich erst noch im Anfangsstadium. Aber hierzu war dieses Forum schon des öfteren sehr hilfreich. Also schon mal ein dickes Danke an der Stelle.
Momentan bin ich an der Umsetzung einer TCP-IP Kommunikation mit einem Beamer, der sich im selben Netzwerk befindet wie mein IPC, auf dem Codesys läuft. Hier kann ich bereits über die SysLibSockets.lib meine 3 gewünschten Meldungen absetzen
eine zum Einschalten
eine zum Ausschalten
und eine um den Status abzurufen
Beim Status-Abruf des Beamers sendet er mir unmittelbar die Meldung zurück:
-1d 00 00 (Hex) entspricht OFF
-1d 01 00 (Hex) enstpricht On
-1d 02 00 (Hex) entspricht COOL DOWN
Leider bekomme ich es gerade programmierseitig nicht hin, diese Meldung auch wirklich zu empfangen. Könnt ihr mir hier helfen?
Mein Versuchsprojekt, das ich später noch in mein Hauptprogramm implementieren werde habe ich angehängt.
erst mal danke für die schnelle Antwort. Dass ich die FUN SysSockRecv verwenden sollte war mir schon irgendwie klar.
diDataSize müsste dann ja bei mir vermutlich 3 sein. Aber TCPReceiveData liefert mir dann ja auch nur ne 3 und nicht den von mir gewünschten Array [0..2] of Byte.
Mein Hauptproblem ist hier, wo ich den Recv-Aufruf in mein Programm einbaue und wie ich überprüfe ob ich alle Daten erhalten habe.
Auch wie ich dann an meine gewünschten Daten in Form eines Arrays komme, ist mir noch nicht ganz klar.
Vielleicht kannst du mir hier nochmal auf die Sprünge helfen.
Gruß
Alex
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Heist das nicht, dass die Adresse der erhaltenen Daten (die ja in pbyData liegt) mit der Adresse des leeren Arrays überschrieben wird?
In der Beschreibung heist es, dass pbyData die 'Adresse des Speichers, von dem empfangen werden soll' sein soll. Und mit dem konnte ich bisher eben nichts anfangen.
Irgendwie steh ich gerade auf dem Schlauch, sorry.
danke!! Beim letzten Versuch, hab ich nun die gewünschte Meldung erhalten!! Ich denke, dass ich die Implementierung dann auch umgesetzt bekomme. Sonst melde ich mich nocheinmal.
Grüße
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
ich hab mal noch ne Frage bezüglich der Anzahl der Sitzungen, die bei Codesys möglich sind. Auf meinem IPC läuft eben ne Visu, gleichzeitig ist aber auch ne Webvisu möglich. Gibt es eine Möglichkeit, die Anzahl der Zugriffe/Sitzungen auf/in Codesys zu erhalten, in Form einer Variablen?
Ich hab mir gerade überlegt, was passiert, wenn jemand über die Webvisu die Verbindung zum Beamer herstellt, somit ein Socket öffnet, und dieses Socket dann nicht mehr geschlossen wird, da einfach irgenwann der Browser geschlossen wird. Da wird dann vielleicht irgendwann ein Socketmaximum oder ein Socketüberlauf erreicht.
Ich hoffe ich konnte die Frage verständlich formulieren. Gibts hier Möglichkeiten?
Gruß
Alex
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo zusammen,
ich habe erst vor einigen Wochen ein neues Projekt begonnen, bei dem ich mich in Codesys einlesen und einarbeiten musste. Also bin ich erst noch im Anfangsstadium. Aber hierzu war dieses Forum schon des öfteren sehr hilfreich. Also schon mal ein dickes Danke an der Stelle.
Momentan bin ich an der Umsetzung einer TCP-IP Kommunikation mit einem Beamer, der sich im selben Netzwerk befindet wie mein IPC, auf dem Codesys läuft. Hier kann ich bereits über die SysLibSockets.lib meine 3 gewünschten Meldungen absetzen
eine zum Einschalten
eine zum Ausschalten
und eine um den Status abzurufen
Beim Status-Abruf des Beamers sendet er mir unmittelbar die Meldung zurück:
-1d 00 00 (Hex) entspricht OFF
-1d 01 00 (Hex) enstpricht On
-1d 02 00 (Hex) entspricht COOL DOWN
Leider bekomme ich es gerade programmierseitig nicht hin, diese Meldung auch wirklich zu empfangen. Könnt ihr mir hier helfen?
Mein Versuchsprojekt, das ich später noch in mein Hauptprogramm implementieren werde habe ich angehängt.
Grüße
TCPIPTest3.pro [93.19 KiB]
Moin
Du solltest vielleicht irgendwo den Receive aufrufen...
TcpReceiveData:= SysSockRecv(diSocket, pbyData, diDataSize, 0);
Gruß
Erik
Hallo Erik,
erst mal danke für die schnelle Antwort. Dass ich die FUN SysSockRecv verwenden sollte war mir schon irgendwie klar.
diDataSize müsste dann ja bei mir vermutlich 3 sein. Aber TCPReceiveData liefert mir dann ja auch nur ne 3 und nicht den von mir gewünschten Array [0..2] of Byte.
Mein Hauptproblem ist hier, wo ich den Recv-Aufruf in mein Programm einbaue und wie ich überprüfe ob ich alle Daten erhalten habe.
Auch wie ich dann an meine gewünschten Daten in Form eines Arrays komme, ist mir noch nicht ganz klar.
Vielleicht kannst du mir hier nochmal auf die Sprünge helfen.
Gruß
Alex
Hi
Hast du die Beschreibung von SysSockReceive schon mal gelesen ?
Die Datentypen zu meinem Beispiel sehen so aus:
diSocket: DINT; ( Socket-ID )
pbyData: DWORD; ( Address of data buffer )
diDataSize: DINT; ( Size of data to receive )
Der Pointer auf die Daten kann auch genausogut auf ein ByteArray zeigen.
Also z.B.
abyRecvData: ARRAY[1..100] of BYTE;
pbyData := adr(abyRecvData[1]);
Dann werden die Daten auch gleich ins ARRAY geschrieben.
Gruß
Erik
Related
Talk.ru: 1
Hab ja noch was vergessen...
Size of data to receive ist die Größe des Empfangspuffers in Byte an.
Also in unserem Beispiel 100.
Du kannst der Funktion ja (in den meisten Fällen) nicht im voraus sagen wie viele Bytes kommen werden.
Gruss
Erik
Ok, soweit so gut.
Hatte die Beschreibung auch schon gelesen, bin nur nicht ganz damit klar gekommen.
Du hast geschrieben:
pbyData := adr(abyRecvData[1]);
Heist das nicht, dass die Adresse der erhaltenen Daten (die ja in pbyData liegt) mit der Adresse des leeren Arrays überschrieben wird?
In der Beschreibung heist es, dass pbyData die 'Adresse des Speichers, von dem empfangen werden soll' sein soll. Und mit dem konnte ich bisher eben nichts anfangen.
Irgendwie steh ich gerade auf dem Schlauch, sorry.
Related
Talk.ru: 1
Mahlzeit
In pbyData gibts du die Adresse des Speicherbereichs an in den die empfangenen Daten geschrieben werden sollen.
In diDataSize wird die Grösse des Empfangspuffers in Byte angegeben.
Die Funktion schreibt dann direkt in diesen Puffer.
Gruss
Erik
Hallo Erik,
danke!! Beim letzten Versuch, hab ich nun die gewünschte Meldung erhalten!! Ich denke, dass ich die Implementierung dann auch umgesetzt bekomme. Sonst melde ich mich nocheinmal.
Grüße
Hallo,
ich hab mal noch ne Frage bezüglich der Anzahl der Sitzungen, die bei Codesys möglich sind. Auf meinem IPC läuft eben ne Visu, gleichzeitig ist aber auch ne Webvisu möglich. Gibt es eine Möglichkeit, die Anzahl der Zugriffe/Sitzungen auf/in Codesys zu erhalten, in Form einer Variablen?
Ich hab mir gerade überlegt, was passiert, wenn jemand über die Webvisu die Verbindung zum Beamer herstellt, somit ein Socket öffnet, und dieses Socket dann nicht mehr geschlossen wird, da einfach irgenwann der Browser geschlossen wird. Da wird dann vielleicht irgendwann ein Socketmaximum oder ein Socketüberlauf erreicht.
Ich hoffe ich konnte die Frage verständlich formulieren. Gibts hier Möglichkeiten?
Gruß
Alex