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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 20 von 20

Thema: S7-400 sfb14/15 put get

  1. #11
    Avatar von vollmi
    vollmi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.649
    Danke
    789
    Erhielt 655 Danke für 498 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Eigentlich nach dem Comm dokument von Siemens müsste man mit den SFB14/15 doch über 400 Byte übertragen können. Ist da bei mir jetzt der Partner der beschränkende Teilnehmer?

    Gibts eine bessere Möglichkeit einseitig ne grössere Menge Daten zu übertragen?

    mfG René

  2. #12
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.797
    Danke
    398
    Erhielt 2.418 Danke für 2.014 Beiträge

    Standard

    Hallo René,
    ob dich die Partner-CPU da jetzt einschränkt weiß ich gerade nicht.
    Wenn du sehr große Datenmengen übertragen willst dann könntest du so vorgehen, dass du in überschaubaren Datenblöcken arbeitest denen du jeweils ein Kennung mitgibst (als Bestandteil des Datenblocks), die dann die andere Seite in die Lage versetzt, das wieder passend hin-puzzeln zu können.

    Gruß
    Larry

  3. #13
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.336
    Danke
    932
    Erhielt 3.333 Danke für 2.691 Beiträge

    Standard

    Wieviel ist eine "grössere Menge Daten"?
    Kann man denn nicht mit einem PUT/GET-Auftrag 4 Bereiche je >=400 Byte = >=1600 Byte zwischen zwei S7-400 übertragen?
    Wieviele Daten übertragen werden können und wovon das abhängig ist, steht im Comm. Kompedium Kapitel 32.2


    Du könntest BSEND/BRCV benutzen. Oder eine ISO-on-TCP-Verbindung statt S7-Verbindung. Da kannst Du ..zig KB "riesige" Datenblöcke je Kommunikationsauftrag übertragen.

    Warum immer nur die "faulen" einseitigen und beim Server nicht diagnostizierbaren PUT/GET?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  4. #14
    Avatar von vollmi
    vollmi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.649
    Danke
    789
    Erhielt 655 Danke für 498 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    Wieviel ist eine "grössere Menge Daten"?
    Kann man denn nicht mit einem PUT/GET-Auftrag 4 Bereiche je >=400 Byte = >=1600 Byte zwischen zwei S7-400 übertragen?
    Wieviele Daten übertragen werden können und wovon das abhängig ist, steht im Comm. Kompedium Kapitel 32.2
    Eben in diesem Kapitel sehe ich eben nix was die Datenmenge einschränken würde. Ich gehe von 417PN intern zu 315PN intern. Und da steht im kapitel 3.2 ja >=160Byte.
    Fakt ist aber, sobald die Datenmenge kleiner ist, läuft die Kommunikation.



    mfG René

    Warum immer nur die "faulen" einseitigen und beim Server nicht diagnostizierbaren PUT/GET?
    Eben weil ich faul bin die 300er haben auf ihrer Seite keine Möglichkeit eine Diagnose anzuzeigen. Selbst wenn sie einen Error hätten würde das keiner merken solange die 400er Client nix diagnostiziert.

    Aber bleibt mir wohl nur BSEND/BRECV

    mfG René

  5. #15
    Registriert seit
    02.03.2011
    Beiträge
    32
    Danke
    3
    Erhielt 9 Danke für 9 Beiträge

    Standard

    Schau doch mal in das Handbuch "System- und Standardfunktionen für S7-300/400 Band 2/2" dort im Kapitel 21.1 gibt es ein paar Tabellen zur Nutzdatengröße.
    Das Handbuch gibt es hier: http://support.automation.siemens.co...ew/de/44240604
    Aber ich lese da auch raus, dass du zwischen einer S7-400 und einer S7-300 maximal 160 Byte übertragen kannst udn nur einen der ADDR_i-Parameter verwenden darfst.

  6. #16
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.336
    Danke
    932
    Erhielt 3.333 Danke für 2.691 Beiträge

    Standard

    Mit PUT/GET zwischen S7-400 und S7-300 können nicht höchstens 160 Byte übertragen werden, sondern mindestens
    Die exakte Nutzdatengröße findet man in der Hilfe zu den Systemfunktionen "Gemeinsame Parameter der SFBs/FBs und der SFC/FC der S7-Kommunikation".

    Wird z.B. von einer S7-400 zu einer S7-300-PN kommuniziert, dann kann ein PUT-Auftrag 212 Bytes senden und ein GET-Auftrag sogar 222 Bytes lesen.

    Bei der S7-400 als Client kommt noch hinzu, daß bei Folgeaufrufen der SFB14/SFB15 nicht mehr Nutzdaten übertragen werden können als beim Erstaufruf für die Verbindung angegeben wurden.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. #17
    Avatar von vollmi
    vollmi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.649
    Danke
    789
    Erhielt 655 Danke für 498 Beiträge

    Standard

    Mit dem Kommunikationshandbuch habe ich leider so meine liebe mühe.
    Da steht zwar wieviel man mindestens kann. Aber dann dieser nette Nebensatz.
    Bei einigen Kommunikationsbausteinen wird angegeben, wie viele Daten mindestens (•x) übertragen werden können.
    Wenn diese Mindestanzahl (•x) nicht ausreicht, kann die exakte maximale Anzahl ermittelt werden (Online Hilfe STEP 7).
    Denn wer will schon die Mindestmenge wissen? Interessant ist doch nur wieviel kann ich maximal. Und wo man in der Online Hilfe dann diese Info bekommt hab ich auch noch nicht gefunden.

    Anyway hab jetzt auf BSEND/RECV geschwenkt bin ich mir gewohnt funktioniert. Muss ja nicht immer was neues anfangen. Hätt halt bei der Kommunikationsmenge gut gepasst wenn man Zentral alles hätte ablegen können ohne bei den Servern noch die Gegenstelle zu parametrieren.

    mfG René

  8. #18
    Avatar von vollmi
    vollmi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.649
    Danke
    789
    Erhielt 655 Danke für 498 Beiträge

    Standard

    So mit BSEND/BRECV funktionierts jetzt tadellos.

    Ich musste ja für die Verbindungsüberwachung in der S7-400 Control (SFC62) statt C_CNTRL nehmen.
    Das bringt ein weiteres Problem mit sich. Dafür brauch ich die den InstanzDB eines Kommunikationsbausteins (PUT, BSEND, USEND, BRECV etc)
    Nur der InstanzDB ist ja wenn man multiinstanzfähig bleiben will ja immer derselbe. Also brauchts noch den Versatz in dieser Instanz. In SCL hab ich das jetzt so hingekriegt. Und ich denke das war die richtige Wahl da sich SCL um die Adressregister kümmert.

    Hier mal die abgespeckte Version meines Bausteins nur zum Senden. Aber halt eben mit Control für die welche es interessiert.
    Code:
    TYPE "ANY_POINTER"
    VERSION : 0.1
    
    
        STRUCT
            SyntaxID    : BYTE;
            Bereichstyp   : BYTE;
            Anzahl_Werte  : INT;
            DB_Nr    : INT;
            Startadresse   : DWORD;
        END_STRUCT;
    END_TYPE
    
    
    FUNCTION_BLOCK MasterCom_2
    
    
    TITLE = 'Kommunikationsbaustein'
    // Kommuniziert zu den Slaves
    VAR_INPUT
      DB_1_Recv : BLOCK_DB ; 
    END_VAR
    
    
    VAR
      BSEND : "BSEND";   
    END_VAR
    
    
    VAR_TEMP
      zDB_1_Send : ANY ; // Pointer für Sendebaustein
            pDB_1_Send AT zDB_1_Send : ANY_POINTER; 
      zBSENDpointer : ANY ; // Pointer der für Control benötigt wird
            pBSENDpointer AT zBSENDpointer : ANY_POINTER;          
      RetVAL : INT ;         
    Control : STRUCT // Structur um Control abzufüllen
          offset : INT;
           error : BOOL;
          status : WORD;
           i_Typ : BYTE;
         i_state : BYTE;
          i_conn : BOOL;
        i_status : WORD;
             END_STRUCT;  
    END_VAR
    
    
    (*Pointer aufbereiten*)
      (*Senden*)
      pDB_1_send.syntaxid         := B#16#10;                                  
      pDB_1_send.Bereichstyp      := 2; // Typ des Bereichs soll Byte sein (INT = 2)
      pDB_1_send.DB_Nr            := WORD_TO_INT(BLOCK_DB_TO_WORD(DB_1_send));  // DB Nummer errechnen
      RetVAL := TEST_DB(DB_NUMBER := BLOCK_DB_TO_WORD(DB_1_send),DB_LENGTH := Anzahl_Werte_SEND ,WRITE_PROT := Write_Prot);
      pDB_1_send.Anzahl_Werte     := WORD_TO_INT(Anzahl_Werte_SEND); // Länge des Pointers weil wir einen BlockDB ohne Länge angeben wollen
      pDB_1_send.Startadresse     := DW#16#84000000;  
      
    (*Verbindungsüberwachung*)
    zBSENDpointer := BSEND; // um eigenen Instanzdb und versatz von Instanz BSEND rauszufinden.
    RetVAL := CONTROL(EN_R :=  TRUE
            ,I_DB := INT_TO_WORD(pBSENDpointer.DB_Nr) // DB Nummer der eigenen Instanz steht durch die Zuweisung oben schon richtig drin.
            ,OFFSET := DWORD_TO_WORD(SHR(in := pBSENDpointer.Startadresse, N:= 3)) // Offset aus Pointer Startadresse filtern.
            ,ERROR := Control.error
            ,STATUS := Control.status
            ,I_TYP :=  Control.i_Typ
            ,I_STATE :=Control.i_state
            ,I_CONN :=  Control.i_conn
            ,I_STATUS := Control.i_status);
    END_FUNCTION_BLOCK
    mfG René

  9. #19
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.336
    Danke
    932
    Erhielt 3.333 Danke für 2.691 Beiträge

    Standard

    Zitat Zitat von vollmi Beitrag anzeigen
    Ich musste ja für die Verbindungsüberwachung in der S7-400 Control (SFC62) statt C_CNTRL nehmen.
    Musstest Du wirklich? Hätte es nicht auch ein einfaches toggelndes Lifebit getan?
    Welche Information/Status benötigst Du, die Du nicht auch schon direkt von BSEND erhältst?

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #20
    Avatar von vollmi
    vollmi ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Ort
    CH
    Beiträge
    3.649
    Danke
    789
    Erhielt 655 Danke für 498 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das Problem ist hier, dass ich zwei Verbindungen zur gleichen SPS über zwei verschiedene Wege projektiere (400H PN/DP) Das heisst ich übertrage ein und denselben DB über zwei Verbindungen. Wenn da drin ein Lifebit mitgeht, dann toggelt der auf beiden Verbindungen. Ich müsste also den empfangenen Datenbereich erstmal zwischenspeichern in einem Lokalen Speicherbereich um zu schauen ob genau nur das Telegramm von Verbindung 1 nicht mehr toggelt. Und dann weiss man immernoch nicht ob die Verbindung fehlt oder die Partnerstation auf Stop ist.

    Darum überwache ich die Verbindungen einzeln und die Funktion der Partnerstation getrennt.

    mfG René

Ähnliche Themen

  1. TIA Get sfb14
    Von SanjaDO im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 24.01.2014, 14:41
  2. Antworten: 8
    Letzter Beitrag: 05.03.2013, 08:25
  3. Antworten: 9
    Letzter Beitrag: 15.12.2010, 12:27
  4. Sfb14
    Von rokb im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 18.02.2010, 13:17
  5. Sfb14 Get
    Von Adenauer im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 13.02.2008, 10:33

Lesezeichen

Berechtigungen

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