-> Hier kostenlos registrieren
Hallo zusammen,
ich habe eine Externes Gerät über die Beckhoff-Funktion TF6310 (FB_SocketConnect) verbunden.
Jedoch kommt es immer wieder zur Unterbrechung der Verbindung. die Verbindung wird anschließend gleich wieder hergestellt.
Woran könnte dies liegen?
Vielen Dank
Gruß
ich habe eine Externes Gerät über die Beckhoff-Funktion TF6310 (FB_SocketConnect) verbunden.
Jedoch kommt es immer wieder zur Unterbrechung der Verbindung. die Verbindung wird anschließend gleich wieder hergestellt.
Woran könnte dies liegen?
Code:
CASE eStep OF
CLIENT_STATE_ECXHA_START:
IF bMJCExcha THEN
GVL.bMJCExcha1 := FALSE;
eStep := CLIENT_STATE_IDLE;
END_IF
CLIENT_STATE_IDLE:
IF bEnable XOR bConnected THEN
bBusy := TRUE;
bError := FALSE;
nErrid := 0;
sFromServer := '';
IF bEnable THEN
fbConnectTON( IN := FALSE );
eStep := CLIENT_STATE_CONNECT_START;
ELSE
eStep := CLIENT_STATE_CLOSE_START;
END_IF
ELSIF bConnected THEN
fbDataExchaTON( IN := FALSE );
eStep := CLIENT_STATE_DATAEXCHA_START;
ELSE
bBusy := FALSE;
END_IF
CLIENT_STATE_CONNECT_START:
fbConnectTON( IN := TRUE, PT := GVL.PLCPRJ_RECONNECT_TIME );
IF fbConnectTON.Q THEN
fbConnectTON( IN := FALSE );
fbConnect( bExecute := FALSE );
fbConnect( sRemoteHost := sRemoteHost,
nRemotePort := nRemotePort,
bExecute := TRUE );
eStep := CLIENT_STATE_CONNECT_WAIT;
END_IF
CLIENT_STATE_CONNECT_WAIT:
fbConnect( bExecute := FALSE );
IF NOT fbConnect.bBusy THEN
IF NOT fbConnect.bError THEN
bConnected := TRUE;
hSocket := fbConnect.hSocket;
eStep := CLIENT_STATE_IDLE;
LogMessage( 'LOCAL client CONNECTED!', hSocket );
iCount := 0;
ELSE
LogError( 'FB_SocketConnect', fbConnect.nErrId );
nErrId := fbConnect.nErrId;
eStep := CLIENT_STATE_ERROR;
END_IF
END_IF
CLIENT_STATE_DATAEXCHA_START:
fbDataExchaTON( IN := TRUE, PT := GVL.PLCPRJ_SEND_CYCLE_TIME );
IF fbDataExchaTON.Q THEN
fbDataExchaTON( IN := FALSE );
fbClientDataExcha( bExecute := FALSE );
fbClientDataExcha( hSocket := hSocket,
sToServer := sToServer,
bExecute := TRUE );
eStep := CLIENT_STATE_DATAEXCHA_WAIT;
END_IF
CLIENT_STATE_DATAEXCHA_WAIT:
fbClientDataExcha( bExecute := FALSE );
IF NOT fbClientDataExcha.bBusy THEN
IF NOT fbClientDataExcha.bError THEN
sFromServer := fbClientDataExcha.sFromServer;
eStep := CLIENT_STATE_WAIT (*CLIENT_STATE_IDLE*);
ELSE
(* possible errors are logged inside of fbClientDataExcha function block *)
nErrId := fbClientDataExcha.nErrId;
eStep :=CLIENT_STATE_ERROR;
END_IF
END_IF
CLIENT_STATE_WAIT:
eStep := CLIENT_STATE_ECXHA_START (*CLIENT_STATE_IDLE*);
CLIENT_STATE_CLOSE_START:
fbClose( bExecute := FALSE );
fbClose( hSocket:= hSocket,
bExecute:= TRUE );
eStep := CLIENT_STATE_CLOSE_WAIT;
CLIENT_STATE_CLOSE_WAIT:
fbClose( bExecute := FALSE );
IF NOT fbClose.bBusy THEN
LogMessage( 'LOCAL client CLOSED!', hSocket );
bConnected := FALSE;
MEMSET( ADR(hSocket), 0, SIZEOF(hSocket));
IF fbClose.bError THEN
LogError( 'FB_SocketClose (local client)', fbClose.nErrId );
nErrId := fbClose.nErrId;
eStep := CLIENT_STATE_ERROR;
ELSE
bBusy := FALSE;
bError := FALSE;
nErrId := 0;
eStep := CLIENT_STATE_IDLE;
END_IF
END_IF
CLIENT_STATE_ERROR: (* Error step *)
iCount := iCount +1;
bError := TRUE;
eStep := CLIENT_STATE_ERR_CHECK;
CLIENT_STATE_ERR_CHECK:
IF ICount < 3 THEN (*Nach dreimaligen Verbindungsversuch wird Fehler ausgegeben*)
eStep := CLIENT_STATE_ERR_DONE;
ELSE
bConnectionErr := TRUE;
sConnectionErr := 'Keine Kommunikation! Bitte Verbindung prüfen!';
IF bErrorBehoben THEN
eStep := CLIENT_STATE_ERR_DONE;
bConnectionErr := FALSE;
sConnectionErr := '';
END_IF
END_IF
CLIENT_STATE_ERR_DONE:
IF bConnected THEN
eStep := CLIENT_STATE_CLOSE_START;
ELSE
bBusy := FALSE;
eStep := CLIENT_STATE_IDLE;
END_IF
END_CASE
Vielen Dank
Gruß