Hallo zusammen,
Ich habe schon Wochen ein Problem mit Funktionsblock TCP_Server von WagoLibEthernet_01.lib mit die Wago 750-880. Wenn ich mein Projekt lade mit Online -> Einloggen und dann start, funktioniert alles super. Wenn ich aber mein Projekt als Bootprojekt erzeug, gibt es verschiedene ergebnisse:
1)
Ich starte die SPS hoch (24V) mit der Betriebsartenschalter (Mode Selector Switch) in mittlere Position (STOP). Nachdem die SPS hochgestartet ist (alle LEDs sind oder blinken Grün), setz ich der Betriebsartenschalter in die oberste Position (RUN). Wenn ich das so mache, habe ich auch keine Probleme und kann ich über TCP schön kommunizieren.
2)
Ich starte die SPS hoch (24V) mit der Betriebsartenschalter (Mode Selector Switch) in oberste Position (RUN). Alle Funktionalität von meinem Programm scheint zu funktionieren, nur kann ich nicht über TCP Kommunizieren. Ich habe mal die Error Codes vom FB TCP_Server in eine CSV geschrieben. Ich bekomme ständig Error 16#8001 (No socket descriptor available). Wenn ich jetzt der Betriebsartenschalter nach STOP und wieder züruck nach RUN setze, bleibt der Fehler 16#8001.
Ich werde am Ende noch mein Code einfügen.
Ich habe schon mehrere andere Lösungen versucht, aber irgendwie krieg ich das nicht hin. Ich gehe davon aus das ich etwas falsch mache oder das ich auf etwas warten muss bevor ich TCP_server ausführen darf?
Ich bin mittlerweile hoffnungslos und hoffe das Ihr mir helfen könnt.
Und in mein PLC_PRG:
Ich habe schon Wochen ein Problem mit Funktionsblock TCP_Server von WagoLibEthernet_01.lib mit die Wago 750-880. Wenn ich mein Projekt lade mit Online -> Einloggen und dann start, funktioniert alles super. Wenn ich aber mein Projekt als Bootprojekt erzeug, gibt es verschiedene ergebnisse:
1)
Ich starte die SPS hoch (24V) mit der Betriebsartenschalter (Mode Selector Switch) in mittlere Position (STOP). Nachdem die SPS hochgestartet ist (alle LEDs sind oder blinken Grün), setz ich der Betriebsartenschalter in die oberste Position (RUN). Wenn ich das so mache, habe ich auch keine Probleme und kann ich über TCP schön kommunizieren.
2)
Ich starte die SPS hoch (24V) mit der Betriebsartenschalter (Mode Selector Switch) in oberste Position (RUN). Alle Funktionalität von meinem Programm scheint zu funktionieren, nur kann ich nicht über TCP Kommunizieren. Ich habe mal die Error Codes vom FB TCP_Server in eine CSV geschrieben. Ich bekomme ständig Error 16#8001 (No socket descriptor available). Wenn ich jetzt der Betriebsartenschalter nach STOP und wieder züruck nach RUN setze, bleibt der Fehler 16#8001.
Ich werde am Ende noch mein Code einfügen.
Ich habe schon mehrere andere Lösungen versucht, aber irgendwie krieg ich das nicht hin. Ich gehe davon aus das ich etwas falsch mache oder das ich auf etwas warten muss bevor ich TCP_server ausführen darf?
Ich bin mittlerweile hoffnungslos und hoffe das Ihr mir helfen könnt.
Code:
FUNCTION_BLOCK TCPServer_FB
VAR_INPUT
END_VAR
VAR_OUTPUT
END_VAR
VAR
tcpServ: TCP_Server;
receivedData : ARRAY [0..MAX_RECEIVE_TCP_SERVER] OF BYTE;
transmitData : ARRAY [0..MAX_SEND_TCP_SERVER] OF BYTE;
startSend : BOOL;
transmitCount : WORD;
receiveCount : DINT;
dataWrite: STRING;
index: DINT;
result : BOOL;
END_VAR
Code:
tcpServ(xEnable := TRUE,
wPortNumber := 2455,
ptSendData := ADR(transmitData),
diSendCount := transmitCount,
xStartSend := startSend,
aReceiveBuffer := receivedData,
diReceiveCount := receiveCount
);
IF tcpServ.diError > 1 THEN
dataWrite := 'Error';
dataWrite := CONCAT(dataWrite, DINT_TO_STRING(tcpServ.diError ));
dataWrite := CONCAT(dataWrite,ASCIIBYTE_TO_STRING(13)); (*CR*)
dataWrite := CONCAT(dataWrite,ASCIIBYTE_TO_STRING(10)); (*LF*)
CSV_writeData('S:\Logging\EthernetError.csv', LEN(dataWrite), ADR(dataWrite));
END_IF
IF receiveCount >= 10 AND tcpServ.xClientConnected = TRUE THEN
(*At least 6 bytes need to be received (minimum of Lemnatec Communication Protocol*)
dataWrite := 'Received Data: ' ;
dataWrite := DINT_TO_STRING(receiveCount);
dataWrite := CONCAT(dataWrite,ASCIIBYTE_TO_STRING(13)); (*CR*)
dataWrite := CONCAT(dataWrite,ASCIIBYTE_TO_STRING(10)); (*LF*)
CSV_writeData('S:\Logging\EthernetLog.csv', LEN(dataWrite), ADR(dataWrite));
IF receivedData[0] = cStartHeader AND receivedData[receiveCount-2] = cEndMessage THEN
(*Valid message header, process data*)
result := processCommand( (receivedData[1] + receivedData[2]*256), receivedData[3], (receivedData[6] + receivedData[7]*256), ADR(receivedData[8]) );
processResponse( (receivedData[1] + receivedData[2]*256), receivedData[3], ADR(transmitData[0]), ADR(transmitCount), BOOL_TO_BYTE(result));
startSend := TRUE;
END_IF
END_IF
IF receiveCount > 0 THEN
(*Clear receive buffer*)
dataWrite := 'Buffer clear' ;
dataWrite := CONCAT(dataWrite,ASCIIBYTE_TO_STRING(13)); (*CR*)
dataWrite := CONCAT(dataWrite,ASCIIBYTE_TO_STRING(10)); (*LF*)
CSV_writeData('S:\Logging\EthernetLog.csv', LEN(dataWrite), ADR(dataWrite));
FOR index := 0 TO receiveCount BY 1 DO
receivedData[index] := 0;
END_FOR
receiveCount := 0;
END_IF
Code:
PROGRAM PLC_PRGVAR
test : TCPServer_FB;
END_VAR
Code:
test();