Quantcast
Channel: SPS-Forum - Automatisierung und Elektrotechnik
Viewing all articles
Browse latest Browse all 46422

Hoffnungslos: Bootprojekt, TCP Server und hochstarten

$
0
0
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.

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

Und in mein PLC_PRG:
Code:

PROGRAM PLC_PRGVAR
    test :    TCPServer_FB;
END_VAR

Code:

test();

Viewing all articles
Browse latest Browse all 46422