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

Ergebnis 1 bis 5 von 5

Thema: Instanz zyklisch in der SPS-Task aufgerufen - Wie???

  1. #1
    Registriert seit
    03.02.2009
    Beiträge
    48
    Danke
    1
    Erhielt 6 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, ich arbeite mit TwinCAT und soll per TCP/IP Daten auf ein Identsystem schreiben. Das Verbinden uns hinsenden von Daten funktioniert soweit sehr gut, doch beim empfangen kommt es vor, dass die Daten durch TCP/IP in mehreren Teilen kommen. In der Hilfe zu dem Baustein steht folgendes:

    Es ist also möglich, dass nicht alle Daten auf einmal mit einem Aufruf der Instanz von FB_SocketReceive empfangen werden können. Aus diesem Grund muss die Instanz zyklisch (pollend) in der SPS-Task aufgerufen werden, so lange bis alle benötigten Daten empfangen wurden. Dabei wird eine steigende Flanke, z.B. alle 100ms, an dem bExecute-Eingang erzeugt.
    Kann mir bitte jemand ein Beispiel dazu geben, wie ich ich dies in ST am besten mache?

    Bin noch nicht so bewandert in CoDeSys.

    Vielen Dank.
    MfG
    rapser
    Zitieren Zitieren Instanz zyklisch in der SPS-Task aufgerufen - Wie???  

  2. #2
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Was für ein Zielsystem ist das (PC oder BC/BX) und welche Bibliothek nutzt du?

  3. #3
    rapser ist offline Benutzer
    Themenstarter
    Registriert seit
    03.02.2009
    Beiträge
    48
    Danke
    1
    Erhielt 6 Danke für 2 Beiträge

    Standard

    Zeilsystem ist ein PC und als Bibliothek habe ich die TcpIp.lib.
    Dort gibt es ja die FB FB_SocketConnect, FB_SocketSend und FB_SocketReceive.

    Connect und Send funktionieren auch, doch leider weiß ich nicht wie ich das Receive aurufen muss, das es alles empfängt bzw. wann weiß ich, dass ich alles emfangen habe? Es steht zwar etwas mit Nullterminierung in der Hilfe, doch wie überprüfe ich darauf?
    MfG
    rapser

  4. #4
    rapser ist offline Benutzer
    Themenstarter
    Registriert seit
    03.02.2009
    Beiträge
    48
    Danke
    1
    Erhielt 6 Danke für 2 Beiträge

    Standard

    hier nun etwas code, vielleicht kann mir dann jemand einen tip geben.

    Code:
    CASE iSchrittId OF
    
        1:
            fb_ssend(sSrvNetId:=sNetId, hSocket:=Socket_id, pSrc:= ADR(sInitString),cbLen:= LEN(sInitString),bExecute:= bSendInitString);
            IF fb_ssend.nErrId=0 THEN
                bSendInitString:=FALSE;
                bStarteEmpfangen:=TRUE;
                iSchrittId:=2;
            END_IF
    
        2:
                fb_sreceive(sSrvNetId:=sNetId, hSocket:=Socket_id, pDest:= ADR( sFromServer ),cbLen:= SIZEOF( sFromServer ),bExecute:= bStarteEmpfangen);    
                KommtVor:=FIND(sFromServer, '$060');
                IF KommtVor<>0 THEN
                    bSendString:=TRUE;
                    iSchrittId:=3;
                ELSE
                    bSendInitString:=TRUE;
                    bStarteEmpfangen:=FALSE;
                    iSchrittId:=1;
                END_IF
    
        3:
    ...
    ich möchte quasi eine schrittkette darstellen, zuerst soll gesendet werden, wenn dabei kein fehler entstanden ist, soll er in den nächsten schritt (2) gehen und soll dort empfangen. kommt nun in dem STRING sFromServer eine bestimmte zeichenkette vor, soll er in den schritt 3 gehen, wenn nicht wieder schritt 1 und neu senden. er wechslet andauernd zwischen schritt 1 und 2, doch glaube ich sendet er in schritt 1 nicht erneut.

    Bitte um Hilfe.
    Geändert von rapser (23.02.2009 um 10:42 Uhr)
    MfG
    rapser

  5. #5
    Registriert seit
    09.01.2008
    Beiträge
    85
    Danke
    5
    Erhielt 13 Danke für 12 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Rapser,

    ich hoffe ich kann Dir helfen. Es gibt von Beckhoff eine Beispielprojekt, welches Du Dir einmal ansehen soltlest.

    http://infosys.beckhoff.com/content/...ple01_test.htm

    In Diesem Projekt ist ein gibt es eine Funktion die da heist 'fb_DataExcha'. Diese macht genau das, was Du vor hast. Du sendest einen STRING an einen Clienten, und der Antwortet Dir ebenfalls mit einem STRING. Die Funktion Arbeitet selbstständig so lange, bis die NULL-Terminierung erfolgt ist.
    Die Funktion basiert auf den Standard-Funktionen wie FB_SocketConnect, FB_SocketSend und FB_SocketReceive

    Gruß Scrat

Ähnliche Themen

  1. Programm wird nicht aufgerufen
    Von Bensen83 im Forum CODESYS und IEC61131
    Antworten: 1
    Letzter Beitrag: 05.09.2011, 21:44
  2. FB1348 wird von FB5 aufgerufen
    Von Springbock im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 13.10.2010, 08:20
  3. Grenzwertbaustein wird nicht aufgerufen
    Von lexx1984 im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 06.10.2010, 13:09
  4. Script wird nht aufgerufen
    Von Bensen83 im Forum HMI
    Antworten: 6
    Letzter Beitrag: 07.04.2010, 11:45
  5. Antworten: 13
    Letzter Beitrag: 18.01.2008, 12:47

Lesezeichen

Berechtigungen

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