hallo
die network.lib für codesys ist auf einer wago 750-841 sps entwickelt und getestet worden, und verwendet die SysLibSockets.lib
bei deinem System "CoDeSys 2.3.9.13; RTE 2.3.7.6; WinXp Professional V2002 SP3" sind theoretisch alle vorraussetzungen gegeben,
jedoch gibt es von system zu system leider immer kleiner funktionelle abweichungen.
Soweit ich es bisher feststellen konnte:
TCP Client (geht nicht, problem beim verbindungdaufbau)
TCP Server (geht)
UDP Client (geht)
UDP Server (geht)
------------
mit dem parameter c_mode gibst du den verbindungsmodus vor
0 = TCP Client (Aktiv)
1 = UDP Client (Aktiv)
2 = TCP Server (Passiv)
3 = UDP Server (Passiv)
somit ist c_mode = 0 für deine Anwendung richtig
c_mode musst du nur einmal beschreiben.
die wertigkeiten im sendbuffer sind auch so richtig , so wie du es angenommen hast,
--------------
in der network_lib sind diverse demo-programme enthalten (zum testen)
problem ist, das es viele diverse ethernet-bibliotheken gibt , die aber immer nur für eine plattform funktionieren, und so muss
man für jedes system immer eine adaptierung machen.
so wie es aussieht liegt es primär bei unserer network.lib am tcp_client problem auf Windows-Plattformen
hast du irgendwelche Demoprogramme für dein system , wo eine tcp kommunikation benutzt wird, und dies auch eindeutig funktioniert
wenn ja, bitte mit schicken....
sowie es aussieht musst du dich leider noch gedulden, bis die gründe gefunden sind....
---------------
noch ein paar tips
du schreibst... du hast einen tcp_server und deine sps soll als tcp_client sich mit diesem verbinden
das heisst dein kommunikationspartner (server) hat die ip-adresse '192.168.001.11'
du hast beim ip_control die adresse des tcp_clients angeben ?
bitte überprüfen
du hast in deinem sps-programm zwei ip-adressen in verwendung ?
es ist nur die ip-adresse des kommunikationspartners relevant, nur die sollte angegeben werden
die portnummer und ip-adresse kannst du über die IP_CONTROL Datenstruktur vorgeben, als auch über den IP_CONTROL direkt.
ich würde es aber so machen....
weiters gibt es in deinem testprogramm kein auswertung auf Datenempfang , kann solltest du auch dies vorgeben
IP_C1.R_OBSERVE:= FALSE; (* Datenempfang überwachen *)
------
IPServer_Adr:=IP4_DECODE('192.168.001.11');
IPClient_Adr:=IP4_DECODE('192.168.001.10');
es reicht wenn du die adresse einmal vor dem senden/empfangen konvertierst und übergibst
(* Login an Server senden *)
IF send THEN
IP_C1.C_MODE := 0; (* auf SPS den TCP-Client Modus verwenden *)
IP_C1.C_IP := IP4_DECODE('192.168.001.11'); (* Adresse des kommunikationspartners , in dem fall die des TCP-Servers *)
IP_C1.C_PORT := 1000;
IP_C1.C_ENABLE:= TRUE; (* Verbindungsaufbau freigeben *)
IP_C1.R_OBSERVE:= FALSE; (* Datenempfang überwachen *)
IP_C1.TIME_RESET:= TRUE;
S_BUF1.BUFFER[0] := BYTE#16#01;
S_BUF1.BUFFER[1] := BYTE#16#00;
S_BUF1.BUFFER[2] := BYTE#16#00;
S_BUF1.SIZE :=3;
send := FALSE;
END_IF;
IP_CONTROL1(IP:=0 ,PORT:=0 ,TIME_OUT:=T#10s,IP_C:= IP_C1,S_BUF:=S_BUF1, R_BUF:=R_BUF1 );
und in deinem demo-programm kann ich mit folgenden zeilen nichts anfangen
IP_C1.C_STATE;
IP_C1.C_ENABLE;
IP_C1.C_MODE;
IP_C1.ERROR;
IP_C1.FIFO;
IP_C1.R_OBSERVE;
IP_C1.TIME_RESET;
IP_CONTROL1(IP:=IPClient_Adr ,PORT:=1000 ,TIME_OUT:=T#10s,IP_C:= IP_C1,S_BUF:=S_BUF1, R_BUF:=R_BUF1 );
IP_CONTROL1.c_enable;