Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 3 von 3

Thema: Verbingungsneuaufbau mit AG_SEND & co.

  1. #1
    Registriert seit
    24.06.2011
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo


    Wir haben ein Projekt wo die SPS (S315DP mit einer CP343-1) als Client
    über TCP/IP mit einem Server auf einem normalen PC verbunden ist.

    Die Verbindungen & co funzt im Normalfall auch recht gut.

    Unser Sendbaustein sieht im folgenden so aus

    // I fuer input, S fuer statische Daten eines Funktionsbaustein


    U #I_StartSend // Startsignal
    UN #S_Busy // und die aktuelle Verbindung macht gerade nichts
    = #S_Start // dann Datenübertragung starten
    S #S_Busy

    .....
    CALL "AG_SEND"
    ACT :=#S_Start
    ID :=#I_ID
    LADDR :=#I_LADDR
    SEND :=#S_Daten
    LEN :=#I_Laenge
    DONE :=#S_AG_Send_DONE
    ERROR :=#S_AG_Send_ERROR
    STATUS:=#S_AG_Send_STATUS


    CLR
    = #S_Start

    U #S_AG_Send_DONE // Übertragung beendet
    UN #S_AG_Send_ERROR
    R #S_Busy

    D.h. beim 1. Zyklus wenn es etwas zu Senden gibt wird S_Start auf 1 gesetzt, danach sofort auf 0.

    Das Busy Bit wird gesetzt wenn es was zu senden gibt und gelöscht wenn die Nachricht angekommen ist.

    Problem ist manchmal das bei einem Neustart des Servers die Send-Verbindung haengt, und erst ein RUN->STOP->RUN der SPS dann wieder Pakete von der SPS zum PC geschickt werden. Bei einem Wiederanlauf wird das S_Busy Bit hart gelöscht.

    So meine Frage ist, was ist die sauberste Variante ohne einen manuellen Wiederanlauf der SPS dieses Problem zu lösen.

    Ich bin mir nicht sicher was das Verhalten von AG_SEND bei Fehlern ist.
    Wenn ein Fehler aufgetreten ist, wird natürlich das Busy-Bit nicht gelöscht.
    Meine Frage, versucht es dann AG_SEND erneut, bzw nur in bestimmten Konstellationen.
    Dann sollte aber der Effekt wie oben nicht passieren.

    Ich kann bei Fehlen das Busy-Bit direkt löschen und den Sendeauftrag noch einmal starten lassen. Da wir noch jedesmal ein Ack-Telegramm versenden, kann ich in dem Baustein das auch "Wegwerfen" die Logik darüber sorgt dafür dass dieser Code dann das gleiche Telegramm nocheinmal vorgesetzt bekommt.

    Bin für Ideen dankbar.
    Zitieren Zitieren Verbingungsneuaufbau mit AG_SEND & co.  

  2. #2
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von quaak Beitrag anzeigen
    Ich bin mir nicht sicher was das Verhalten von AG_SEND bei Fehlern ist.
    Wenn ein Fehler aufgetreten ist, wird natürlich das Busy-Bit nicht gelöscht.
    Meine Frage, versucht es dann AG_SEND erneut, bzw nur in bestimmten Konstellationen.
    Nein der Send-Auftrag wird nur mit einer Flanke einmalig abgesetzt.
    An deiner Stelle würde ich schreiben:
    Code:
       U #S_AG_Send_DONE // Übertragung beendet
       O #S_AG_Send_ERROR
       R #S_Busy
    Und ein zusätzliches Problem besteht bei dir (wie du es ja auch schon gemerkt hast) wenn das Send-Bit gesetzt wurde und in diesem Moment die Steuerung in Stopp geht.
    Dazu würde ich in den Anlauf-OB100 das #S_Busy zurücksetzen oder falls es ein Instanzbit ist:
    Im OB 100 einen Merker setzen und mit diesem zusätzlich das S_Busy löschen.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  3. #3
    quaak ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    24.06.2011
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Paule Beitrag anzeigen
    Nein der Send-Auftrag wird nur mit einer Flanke einmalig abgesetzt.
    An deiner Stelle würde ich schreiben:
    Code:
       U #S_AG_Send_DONE // Übertragung beendet
       O #S_AG_Send_ERROR
       R #S_Busy
    Und ein zusätzliches Problem besteht bei dir (wie du es ja auch schon gemerkt hast) wenn das Send-Bit gesetzt wurde und in diesem Moment die Steuerung in Stopp geht.
    Dazu würde ich in den Anlauf-OB100 das #S_Busy zurücksetzen oder falls es ein Instanzbit ist:
    Im OB 100 einen Merker setzen und mit diesem zusätzlich das S_Busy löschen.
    Danke.

    Zu 1. Das werde ich korrigieren.

    Zu 2. ja das wird schon gemacht, deswegen ging es ja nach einem Wiederanlauf normal weiter.

Ähnliche Themen

  1. ISO on TCP AG_SEND
    Von markuscps im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 17.02.2011, 15:03
  2. AG_SEND mit PN-CPUs
    Von paula23 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 31.01.2011, 14:05
  3. nochmals AG_SEND
    Von phoo82 im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 06.02.2010, 03:48
  4. FC5 AG_Send
    Von klauserl im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 07.02.2009, 18:18
  5. Ag_send
    Von reiki im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 06.10.2006, 13:02

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •