Verbindungsunterbrechungen TF6310 (FB_SocketConnect)

lezer

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> 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?


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ß
 
Zurück
Oben