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

Ergebnis 1 bis 4 von 4

Thema: DB automatisch mit Werte füllen

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Noch mal Hallo an alle! (( =

    Habe hier vor ein paar Tagen einen Thread gesehen in dem es drum ging einen DB automatisch zufüllen, finde diesen leider nicht mehr... =//

    Ich habe vor einen DB (DB11) bei Anlauf der SPS (Neustart / Warmstart,...) Automatisch über einen FC(FC41) füllen zulassen.

    Habe schon was zusammengeschrieben, finde nach 2-4 Stunde finde ich habe ich wieder mal keinen Ansatz woran es liegen könnte!?
    Daher wäre es nett, wenn Jemand noch mal drüber schaut! (( =

    Und weiterhin vorab, ja habe es evtl. mit den Kommentaren übertrieben! ((; Und nicht jeder Kommentar trifft noch zu!




    Soweit erst mal danke an Alle! [ =

    PS:
    Wie kann man einen OB/FB/FC in Step7 So "heraus kopieren"?
    Mache das z.Z. über WIN-SPS... =//

    Code:
    FUNCTION FC41:VOID 
    TITLE= 
     
     
    AUTHOR:nb
    FAMILY:nb
    NAME:nb
    VERSION:00.01 
     
     
     
     
     
    VAR_TEMP 
           tSensor:UDT11;
           tZielDBXANYP:ANY;
           tSensorANYP:ANY;
           tSchrittWW:WORD;
           tStartAdrZielDbW:WORD;
           tStopBgKAdrINT:INT;
           tAnzLOOPsW:WORD;
           tRetValSFC20INT:INT;
           tBgKAdrINT:INT;
           tStartBgKAdrINT:INT;
           tSensorNrINT:INT;
           tSchrittWBgKAdrINT:INT;
           tZielDBNrW:WORD;
    END_VAR 
    BEGIN 
     
    NETWORK
    TITLE= 
    
     
    //*****************************************************************************************// 
    //*****************************************************************************************// 
    // Tämporäre Globale Deklation 
    //*****************************************************************************************// 
     
           L    W#16#000B;                   // Lade die Nummer des Ziel DBs 
           T    #tZielDBNrW;
     
           L    W#16#0006;
           T    #tSchrittWW;
     
           L    W#16#0000;
           T    #tStartAdrZielDbW;
     
           L    320;
           T    #tStartBgKAdrINT;
     
           L    366;
           T    #tStopBgKAdrINT;
     
           L    2;
           T    #tSchrittWBgKAdrINT;
     
    // Berechne LOOPs 
           L    #tStopBgKAdrINT;
           L    #tStartBgKAdrINT;
           -I;
           T    #tAnzLOOPsW;
     
     
    //*****************************************************************************************// 
    //*****************************************************************************************// 
    // ZEIGER FÜR KOPIERN AUS / IN DEN DATENBAUSTEIN BAUEN 
    //*****************************************************************************************// 
     
    //*****************************************************************************************// 
    // Baue Zeiger für tZielDBXANYP 
    //*****************************************************************************************// 
           LAR1 P##tZielDBXANYP;             // Lade Adresse des zielANYPDbx 
           L    B#16#10;                     // Lade Wert für einen Bereichsübergeifender Zeiger 
           T    LB [AR1,P#0.0];              // Speicher "B#16#10" an die Stelle des zielANYPDbx mit dem "offset" P#0.0 
           L    B#16#02;                     // Lade Typ: Byte 
           T    LB [AR1,P#1.0];              // Speicher Typ Byte an die Stelle des zielANYPDbx mit dem "offset" P#1.0 
           L    #tSchrittWW;                 // Lade schrittweite / Bytes die geschrieben werden sollen. 
           T    LW [AR1,P#2.0];              // ... mit dem offset P#2.0 
           L    #tZielDBNrW;                 // Lade die Nummer des Ziel DBs 
    //     L    DINO                         // Lade die FB DBnr 
           T    LW [AR1,P#4.0];              // ... mit dem offset P#4.0 
    // Bereichszeiger zusammenstellen 
           L    #tStartAdrZielDbW;           // Lade Start Adresse innerhalb des Ziel DBs 
           SLD            3;                 // Um 3 bit links schieben 
           T    LD [AR1,P#6.0];              // ... mit dem offset P#6.0 
           L    B#16#87;                     // Lade 84h (Bereichsübergreifend, Globaldaten) // DB11 ist Global 
           T    LB [AR1,P#6.0];              // Überschreibe Byte 1 des Bereichszeigers 
     
     
    //****************************************************************************// 
    // Baue Zeiger für tSensorANYP 
    // !!!ACHTUNG!!! -->> dIGNOR!!! 
    // Im Speicher MUSS tBgKAdrINT vor tSensorNrINT stehen und beides NACH ein- 
    // ander, da die zwei Variabeln an die Start Adresse von tBgKAdrINT 
    // gekoppelt sind!!! 
    //****************************************************************************// 
           LAR1 P##tSensorANYP;
           L    B#16#10;
           T    LB [AR1,P#0.0];              // Speicher "B#16#10" an die Stelle des zielANYPDbx mit dem "offset" P#0.0 
           L    B#16#02;                     // Lade Typ: Byte 
           T    LB [AR1,P#1.0];              // Speicher Typ Byte an die Stelle des zielANYPDbx mit dem "offset" P#1.0 
           L    #tStartAdrZielDbW;           // Lade schrittweite / Bytes die geschrieben werden sollen. 
           T    LW [AR1,P#2.0];              // ... mit dem offset P#2.0 
           L    0;                           // Lade die Nummer des Ziel DBs, da kein DB-Any Pointer ist steht hier eine 
    //     L     DINO                        // Lade die FB DBnr 
           T    LW [AR1,P#4.0];              // ... mit dem offset P#4.0 
    // Bereichszeiger zusammenstellen 
    //      L     P##tSensor                  // Lade Adresse des "tSensor" 
           L    P##tStartBgKAdrINT;          // Siehe !!! ACHTUNG !!! 
           T    LD [AR1,P#6.0];              // .. mit dem offset P#6.0 
           L    B#16#87;                     // Lade 87h (Bereichsübergreifend, temporäre Lokaledaten des Vorgängerbausteins) 
           T    LB [AR1,P#6.0];              // Überschreibe Byte 1 des Bereichszeigers 
     
     
     
     
    //****************************************************************************// 
    //****************************************************************************// 
    // Beginn der Schleife 
    //****************************************************************************// 
           L    #tAnzLOOPsW;
    L001  :T    #tAnzLOOPsW;
     
           L    0;
           NOP  0;
           L    1;
           L    0;
     
    //****************************************************************************// 
    // Aktueller Werte in DB11 Kopieren, 
    // über die AnyZeiger tSensorANYP und tZielDBXANYP 
    //****************************************************************************// 
           CALL SFC      20(
             SRCBLK:=#tSensorANYP,
             RET_VAL:=#tRetValSFC20INT,
             DSTBLK:=#tZielDBXANYP);
     
     
    //****************************************************************************// 
    // Baugruppenadresse + Kanallnummer Aktualisieren 
    //****************************************************************************// 
           L    #tSchrittWBgKAdrINT;
           L    #tStartBgKAdrINT;
           +I;
           T    #tStartBgKAdrINT;
           L    #tStartAdrZielDbW;
     
    //****************************************************************************// 
    // Neuer Bereichszeiger für tStartAdrZielDbW zusammenstellen 
    //****************************************************************************// 
     
     
    // Einen Schritt weiter gehen im DB11 
           L    #tStartAdrZielDbW;
           L    #tSchrittWW;
           +I;
           T    #tStartAdrZielDbW;
     
    // Neuer Bereichszeiger für für tStartAdrZielDbW 
           LAR1 P##tZielDBXANYP;             //Lade Adresse des tZielDBXANYP 
     
           L    #tStartAdrZielDbW;           // Lade die NEUE Start Adresse innerhalb des Ziel DBs 
           SLD            3;                 // um 3 bit links schieben 
           T    LD [AR1,P#6.0];              // ... mit dem offset P#6.0 
           L    B#16#87;                     // Lade 87h (Bereichsübergreifend, temporäre Lokaledaten des Vorgängerbausteins) 
           T    LB [AR1,P#6.0];              // Überschreibe Byte 1 des Bereichszeigers 
     
     
    //****************************************************************************// 
    // schreifen ende 
    //****************************************************************************// 
           L    #tAnzLOOPsW;
    //    L    1 
    //    -I 
        //   T    #tAnzLOOPsW 
       LOOP L001;
     
     
    //****************************************************************************// 
    //****************************************************************************// 
    END_FUNCTION
    Angehängte Dateien Angehängte Dateien
    Geändert von Potenzial (02.07.2010 um 08:44 Uhr) Grund: CODE != QUOTE ((; @4L
    Zitieren Zitieren DB automatisch mit Werte füllen  

  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 Potenzial Beitrag anzeigen
    Ich habe vor einen DB (DB11) bei Anlauf der SPS (Neustart / Warmstart,...) Automatisch über einen FC(FC41) füllen zulassen.
    Ich habe das jetzt nur kurz überflogen, aber so wie das aussieht willst Du einen Strukt öfters in einen DB schreiben.
    Dafür ist der SFC21 "FILL" sehr gut geeignet.
    Als Eingangsparameter kannst Du den Strukt übergeben und am Ausgang gibst Du Deinen Zielbereich ein.
    Jetzt wird der Eingangsbereich (Strukt, anhand der Länge) so oft in den Ausgangsbereich kopiert wie es die Ziellänge erlaubt.
    Zitat Zitat von Potenzial Beitrag anzeigen
    Wie kann man einen OB/FB/FC in Step7 So "heraus kopieren"?
    Das geht mit:
    Baustein öffnen > Datei schließen > Quelle generieren > Namen definieren > Speichern
    Nun liegt eine AWL-Quelle des Bausteins vor.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

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

    Standard

    Nicht ganz falsch! (( ;

    Also der DB11 ist so aufgebaut:
    Array[0..15] of UDT11
    Und will immer im temporären UDT Daten austauschen und
    so mit den DB11 Stück für Stück füllen...

    Schau mir Morgen mal die Funktion des SFC21 an.

    Danke so weit [ =

  4. #4
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    anm.: CODE nicht QUOTE!!!
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

Ähnliche Themen

  1. Mit Schleife DB füllen
    Von htw im Forum Simatic
    Antworten: 59
    Letzter Beitrag: 23.05.2011, 18:29
  2. Array füllen
    Von elmoklemme im Forum Simatic
    Antworten: 18
    Letzter Beitrag: 31.08.2010, 18:23
  3. DB Füllen
    Von SPS_NEU im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 16.08.2010, 16:25
  4. WinCC Flex: Meldetext automatisch füllen
    Von The Spirit im Forum HMI
    Antworten: 3
    Letzter Beitrag: 12.05.2010, 16:29
  5. Kreis füllen
    Von doretan im Forum HMI
    Antworten: 1
    Letzter Beitrag: 21.06.2009, 23:51

Lesezeichen

Berechtigungen

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