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

Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 27

Thema: Probleme mit FILO ....

  1. #11
    Registriert seit
    22.09.2006
    Ort
    Bodenseeraum
    Beiträge
    1.022
    Danke
    61
    Erhielt 136 Danke für 122 Beiträge

    Blinzeln


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi,
    sind wir hier in Deutsch/Englisch Unterricht, oder was?

    Eigentlich ist das vom @Boxy keins davon, er möchte einfach ein
    Umlaufspeicher mit Fixlänge für x Werte.

    Gruss an alle Teacher:
    Vladi
    ______________________________________
    relax, take it easy
    Zitieren Zitieren Filo, Lifo, Fifo, Papa, Mama, Oma  

  2. #12
    Registriert seit
    18.09.2006
    Beiträge
    231
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von Unregistrierter gast Beitrag anzeigen
    FILO = First In Last Out.
    GENAUuuu !

    und genau das macht der baustein von volker.
    dort wird die sfc20 in einer schleife zum verschieben der datenblöcke genutzt.
    .
    mfg KALEL

    Wer über gewisse Dinge nicht den Verstand verliert, der hat keinen zu verlieren.
    Gottfried Ephraim Lessing

  3. #13
    Registriert seit
    02.02.2006
    Ort
    Hessen
    Beiträge
    429
    Danke
    16
    Erhielt 28 Danke für 22 Beiträge

    Standard

    Hallo,

    da kann man schon mal durcheinanderkommen, mit diesen Denglischen Fachausdrücken aus der DIN-Norm!
    Aber es bleibt dabei:
    Der Ringspeicher (vorn rein, hinten raus, oft mit fester Länge) heißt FIFO, und der Stack (Stapel mit variabler Länge, oben drauf, oben runter) heißt FILO.
    mfG Werner
    Hoch lebe die Suchfunktion!
    Zitieren Zitieren Ringspeicher und Stack  

  4. #14
    Registriert seit
    22.09.2006
    Ort
    Bodenseeraum
    Beiträge
    1.022
    Danke
    61
    Erhielt 136 Danke für 122 Beiträge

    Lächeln

    Hi,

    und dann heisst es auch: der Kollege mit seiner Abfrage(@Boxy)
    macht ein Ring(od.Umlauf) Speicher, wo die älteste Daten rausfallen,
    also prinzipiell ein FIFO, bei welchem zuerst X mal aufgefüllt wird, und "rausgeholt" wird dann, wenn er voll ist!
    Gruss an alle FILOs...

    Vladi
    ______________________________________
    relax, take it easy
    Zitieren Zitieren Aber jetzt  

  5. #15
    Registriert seit
    07.05.2004
    Ort
    Campbelltown
    Beiträge
    2.437
    Danke
    131
    Erhielt 276 Danke für 86 Beiträge

    Standard

    Und der SFC 20 kann auch überlappen, nur die Hilfe richtig lesen, ich habe schon die dollsten Schieberegister usw. mit dem realisiert.

    Und er will einen FIFO das ist auch mal klar.

    pt
    Gegen Schwachsinn, Schwachköpfe und armselige Trittbrettfahrer kann man nicht argumentieren.

    Gott sieht alles, auch Signaturen in Geheimschrift,,... aber er petzt nicht.

  6. #16
    Registriert seit
    22.09.2006
    Ort
    Bodenseeraum
    Beiträge
    1.022
    Danke
    61
    Erhielt 136 Danke für 122 Beiträge

    Beitrag

    Hi,
    Zitat Zitat von plc_tippser Beitrag anzeigen
    Und der SFC 20 kann auch überlappen, nur die Hilfe richtig lesen, ich habe schon die dollsten Schieberegister usw. mit dem realisiert.
    Und er will einen FIFO das ist auch mal klar.
    pt
    Auszug aus Online-Hilfe:
    "Hinweis:Quell- und Zielfeld dürfen sich nicht überlappen. Ist das angegebene Zielfeld größer als das Quellfeld, dann werden auch nur so viele Daten in das Zielfeld kopiert, wie im Quellfeld stehen.Ist das angegebene Zielfeld kleiner als das Quellfeld, dann werden nur so viele Daten kopiert, wie das Zielfeld aufnehmen kann...... "

    Wenn es doch geht, ist super, werde ich mir merken.

    Gruss: Vladi
    ______________________________________
    relax, take it easy
    Zitieren Zitieren Hilfe lesen  

  7. #17
    Registriert seit
    07.05.2004
    Ort
    Campbelltown
    Beiträge
    2.437
    Danke
    131
    Erhielt 276 Danke für 86 Beiträge

    Standard

    Der SFC20 ist ja nichts anderes als das was oben als Code steht.

    Ich glaube, wenn ich die Tabelle um z.B. 4 Byte nach unten kopiere, dann gibt es keine Datenkollision, da der SFC an der untersten Adresse anfängt zu kopieren. Habe hier leider kein S7 am Platz.

    Gruß, pt
    Gegen Schwachsinn, Schwachköpfe und armselige Trittbrettfahrer kann man nicht argumentieren.

    Gott sieht alles, auch Signaturen in Geheimschrift,,... aber er petzt nicht.

  8. #18
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard

    dazu möchte ich auch noch mal auf diesen beitrag verweisen.
    http://www.sps-forum.de/showthread.php?t=8887

    hier mal der fifo für datenblöcke.
    für die die zu faul sind das runterzuladen.
    Code:
    FUNCTION FC 98 : INT
    TITLE =FIFO für Datenblöcke V1.1 von V.Lischnewski (siehe Kommentar)
    //FIFO für Datenblöcke
    //
    //(c) by www.Lischis-Home.de
    //Sie dürfen diesen Baustein frei nutzen.
    //Wenn sie diesen Code nutzen fände ich es korrekt, wenn sie diesen 
    //Kommentar/Coppyrightvermerk nicht löschen.
    //
    //Beispiel: Blöcke=4; Länge pro Block=2 byte
    //
    //ziel            __\ byte1 \________________
    //               |  / byte2 /                |
    //               |    byte3 \_________    /__|3.
    //               |    byte4 /         |   \
    //               |    byte5 \__    /__|2.
    //               |    byte6 /  |   \
    //               |    byte7 /__|1.
    //               |    byte8 \
    //               |
    //               |
    //quelle       4.|__/ byte1
    //                  \ byte2
    //
    //Ablauf: 
    //1. zielbyte 5/6 wird nach zielbyte 7/8 kopiert
    //2. zielbyte 3/4 wird nach zielbyte 5/6 kopiert
    //3. zielbyte 1/2 wird nach zielbyte 3/4 kopiert
    //4. quellbyte 1/2 wird nach zielbyte 1/2 kopiert
    AUTHOR : Lischnew
    FAMILY : ARCHIV
    NAME : FIFO_Blk
    VERSION : 1.1
     
    VAR_INPUT
      Quelle_DB : INT ; //Quelle Datenbaustein
      Quelle_Anfang : INT ; //Quelle Anfangsadresse
      Blockgroesse : INT ; //Anzahl Bytes pro Datenblock
      Anzahl_Bloecke : INT ; //Anzahl der Datenblöcke
      Ziel_DB : INT ; //Ziel Datenbaustein
      Ziel_Anfang : INT ; //Ziel Anfangsadresse
    END_VAR
    VAR_TEMP
      QANY : ANY ; //ANY-Zeiger Quelle
      ZANY : ANY ; //ANY-Zeiger Ziel
      QAnfang_schleife : INT ; 
      ZAnfang_schleife : INT ; 
      schleifenindex : INT ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =vorbelegen
          NOP   0; 
          L     #Anzahl_Bloecke; 
          T     #schleifenindex; 
    sanf: NOP   0; 
    // quelle
          L     #schleifenindex; 
          L     2; 
          -I    ; 
          L     #Blockgroesse; 
          *I    ; 
          L     #Ziel_Anfang; 
          +I    ; 
          T     #QAnfang_schleife; 
    // ziel
          L     #schleifenindex; 
          L     1; 
          -I    ; 
          L     #Blockgroesse; 
          *I    ; 
          L     #Ziel_Anfang; 
          +I    ; 
          T     #ZAnfang_schleife; 
    NETWORK
    TITLE =Verschieben; Zusammenstellung des Quellzeigers
          L     W#16#1002; 
          T     LW     0; 
          L     #Blockgroesse; 
          T     LW     2; 
          L     #Ziel_DB; 
          T     LW     4; 
          L     #QAnfang_schleife; 
          SLD   3; 
          OD    DW#16#84000000; 
          T     LD     6; 
    NETWORK
    TITLE =Verschieben; Zusammenstellung des Zielzeigers
          L     W#16#1002; 
          T     LW    10; 
          L     #Blockgroesse; 
          T     LW    12; 
          L     #Ziel_DB; 
          T     LW    14; 
          L     #ZAnfang_schleife; 
          SLD   3; 
          OD    DW#16#84000000; 
          T     LD    16; 
    NETWORK
    TITLE =Verschieben; Datenbereich kopieren
          CALL SFC   20 (
               SRCBLK                   := #QANY,
               RET_VAL                  := #RET_VAL,
               DSTBLK                   := #ZANY);
    NETWORK
    TITLE = Schleifenende
          NOP   0; 
          L     #schleifenindex; 
          L     1; 
          -I    ; 
          T     #schleifenindex; 
          L     0; 
          <=I   ; 
          SPB   ndat; 
          SPA   sanf; 
    NETWORK
    TITLE =Neue Daten; Zusammenstellung des Quellzeigers
    ndat: NOP   0; 
          L     W#16#1002; 
          T     LW     0; 
          L     #Blockgroesse; 
          T     LW     2; 
          L     #Quelle_DB; 
          T     LW     4; 
          L     #Quelle_Anfang; 
          SLD   3; 
          OD    DW#16#84000000; 
          T     LD     6; 
    NETWORK
    TITLE =Neue Daten;  Zusammenstellung des Zielzeigers
          L     W#16#1002; 
          T     LW    10; 
          L     #Blockgroesse; 
          T     LW    12; 
          L     #Ziel_DB; 
          T     LW    14; 
          L     #Ziel_Anfang; 
          SLD   3; 
          OD    DW#16#84000000; 
          T     LD    16; 
    NETWORK
    TITLE =Neue Daten;  Datenbereich kopieren
          CALL SFC   20 (
               SRCBLK                   := #QANY,
               RET_VAL                  := #RET_VAL,
               DSTBLK                   := #ZANY);
    END_FUNCTION
    ORGANIZATION_BLOCK OB 1
    TITLE =
    VERSION : 0.0
     
    VAR_TEMP
      OB1_EV_CLASS : BYTE ; //Bits 0-3 = 1 (Coming event), Bits 4-7 = 1 (Event class 1)
      OB1_SCAN_1 : BYTE ; //1 (Cold restart scan 1 of OB 1), 3 (Scan 2-n of OB 1)
      OB1_PRIORITY : BYTE ; //1 (Priority of 1 is lowest)
      OB1_OB_NUMBR : BYTE ; //1 (Organization block 1, OB1)
      OB1_RESERVED_1 : BYTE ; //Reserved for system
      OB1_RESERVED_2 : BYTE ; //Reserved for system
      OB1_PREV_CYCLE : INT ; //Cycle time of previous OB1 scan (milliseconds)
      OB1_MIN_CYCLE : INT ; //Minimum cycle time of OB1 (milliseconds)
      OB1_MAX_CYCLE : INT ; //Maximum cycle time of OB1 (milliseconds)
      OB1_DATE_TIME : DATE_AND_TIME ; //Date and time OB1 started
      positive_Flanke : BOOL ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =
          U     E      0.0; //daten eintragen
          FP    M     99.0; //flanke
          =     M     99.1; 
    NETWORK
    TITLE =fifo für blöcke
          U     M     99.1; 
          SPBNB _001; 
          CALL FC    98 (
               Quelle_DB                := 10,
               Quelle_Anfang            := 1,
               Blockgroesse             := 2,
               Anzahl_Bloecke           := 3,
               Ziel_DB                  := 11,
               Ziel_Anfang              := 1,
               RET_VAL                  := MW   100);
    _001: NOP   0; 
    NETWORK
    TITLE =fifo für byte
          U     #positive_Flanke; 
          SPBNB _002; 
          CALL FC    95 (
               Datenbaustein            := DB    11,
               Datenanfang              := 2,
               Datenende                := 4,
               Eintrag                  := MB     3);
    _002: NOP   0; 
    NETWORK
    TITLE =fifo für doppelwort
          U     #positive_Flanke; 
          SPBNB _003; 
          CALL FC    96 (
               Datenbaustein            := DB    11,
               Datenanfang              := 6,
               Datenende                := 8,
               Eintrag                  := MW     4);
    _003: NOP   0; 
    NETWORK
    TITLE =fifo für wort
          CALL FC    97 (
               Datenbaustein            := DB    11,
               Datenanfang              := 8,
               Datenende                := 16,
               Eintrag                  := MD     8);
          NOP   0; 
    END_ORGANIZATION_BLOCK
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

  9. #19
    Boxy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.04.2005
    Ort
    Black Forest
    Beiträge
    1.334
    Danke
    27
    Erhielt 129 Danke für 116 Beiträge

    Standard

    Also ich melde mich jetzt wieder zu Wort, nachdem ich mal das Problem gelöst habe.

    Ob FILO oder FIFO oder LIFO ist doch egal. Aber jedenfalls danke das Ihr euch meines Problems angenommen habt und ich nicht so alleine in der weiten Welt bin

    Also mit dem SFC20 kann man es vergessen, so wie ich es mir vorgestellt habe. Ich möchte einfach nicht viele DB's verwenden, da die Asiaten hier nacher mehr Probleme damit haben könnten es zu verstehen. Daher sollte es eigentlich einfch sein. Es reicht schon wenn sie nicht einmal Simatic schreiben können und wenn es Probleme gibt, immer gleich einen Ghost auf die PCU spielen wollen. Dabei hat halt die PCU nichts mit der PLC zu tun

    Aber ich habe es nun folgend gelöst:

    Code:
          U     "m_e3_daten_gültig"
          FP    "m_res_420_0"
          SPBN  enwe
     
     
          AUF   "DB273"
          LAR1  P#DBX 10.0                  //Startwert wo Daten beginnen
          L     DBD [AR1,P#0.0]             // Startwert eintragen
          T     #vt_mpw
          L     9                           // 1+9 weitere = 10 Messwerte
    MP1:  T     #vt_schleifenzaehl          // Anzahl Durchläufe
          L     #vt_mpw
          L     DBD [AR1,P#4.0]
          T     #vt_mpw                     // Zwischenspeichern
          TAK   
          T     DBD [AR1,P#4.0]             // Umspeichern
          +AR1  P#4.0                       // um 1 DBD erhöhen
          L     #vt_schleifenzaehl
          LOOP  MP1
    //-----
          LAR1  P#DBX 50.0                  //Startwert wo Daten beginnen
          L     DBD [AR1,P#0.0]             // Startwert eintragen
          T     #vt_mpw
          L     9                           // 1+9 weitere = 10 Messwerte
    MP2:  T     #vt_schleifenzaehl          // Anzahl Durchläufe
          L     #vt_mpw
          L     DBD [AR1,P#4.0]
          T     #vt_mpw                     // Zwischenspeichern
          TAK   
          T     DBD [AR1,P#4.0]             // Umspeichern
          +AR1  P#4.0                       // um 1 DBD erhöhen
          L     #vt_schleifenzaehl
          LOOP  MP2
    
    //-----
          LAR1  P#DBX 90.0                  //Startwert wo Daten beginnen
          L     DBD [AR1,P#0.0]             // Startwert eintragen
          T     #vt_mpw
          L     9                           // 1+9 weitere = 10 Messwerte
    MP3:  T     #vt_schleifenzaehl          // Anzahl Durchläufe
          L     #vt_mpw
          L     DBD [AR1,P#4.0]
          T     #vt_mpw                     // Zwischenspeichern
          TAK   
          T     DBD [AR1,P#4.0]             // Umspeichern
          +AR1  P#4.0                       // um 1 DBD erhöhen
          L     #vt_schleifenzaehl
          LOOP  MP3
    //-----
          LAR1  P#DBX 130.0                 //Startwert wo Daten beginnen
          L     DBD [AR1,P#0.0]             // Startwert eintragen
          T     #vt_mpw
          L     9                           // 1+9 weitere = 10 Messwerte
    MP4:  T     #vt_schleifenzaehl          // Anzahl Durchläufe
          L     #vt_mpw
          L     DBD [AR1,P#4.0]
          T     #vt_mpw                     // Zwischenspeichern
          TAK   
          T     DBD [AR1,P#4.0]             // Umspeichern
          +AR1  P#4.0                       // um 1 DBD erhöhen
          L     #vt_schleifenzaehl
          LOOP  MP4
    
          L     "DI73_MESSWERTÜBER".MESSUNG[1].MESSWERT
          T     "DB273".MP1_Messung[1].MP1
          L     "DI73_MESSWERTÜBER".MESSUNG[2].MESSWERT
          T     "DB273".MP2_Messung[1].MP2
          L     "DI73_MESSWERTÜBER".MESSUNG[3].MESSWERT
          T     "DB273".MP3_Messung[1].MP3
          L     "DI73_MESSWERTÜBER".MESSUNG[4].MESSWERT
          T     "DB273".MP4_Messung[1].MP4
    
    enwe: NOP   0
    Dabei habe ich den Speicher nun wegen Anzeige auf HMI RT etwas aufgeteilt. Es sind nun nicht alle Messwerte hintereinander, sondern jeder hat seinen Bereich.
    Zitieren Zitieren Danke Kollegen ...  

  10. #20
    Boxy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    12.04.2005
    Ort
    Black Forest
    Beiträge
    1.334
    Danke
    27
    Erhielt 129 Danke für 116 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Also ich melde mich jetzt wieder zu Wort, nachdem ich mal das Problem gelöst habe.

    Ob FILO oder FIFO oder LIFO ist doch egal. Aber jedenfalls danke das Ihr euch meines Problems angenommen habt und ich nicht so alleine in der weiten Welt bin

    Also mit dem SFC20 kann man es vergessen, so wie ich es mir vorgestellt habe. Ich möchte einfach nicht viele DB's verwenden, da die Asiaten hier nacher mehr Probleme damit haben könnten es zu verstehen. Daher sollte es eigentlich einfch sein. Es reicht schon wenn sie nicht einmal Simatic schreiben können und wenn es Probleme gibt, immer gleich einen Ghost auf die PCU spielen wollen. Dabei hat halt die PCU nichts mit der PLC zu tun

    Aber ich habe es nun folgend gelöst:

    Code:
          U     "m_e3_daten_gültig"
          FP    "m_res_420_0"
          SPBN  enwe
     
     
          AUF   "DB273"
          LAR1  P#DBX 10.0                  //Startwert wo Daten beginnen
          L     DBD [AR1,P#0.0]             // Startwert eintragen
          T     #vt_mpw
          L     9                           // 1+9 weitere = 10 Messwerte
    MP1:  T     #vt_schleifenzaehl          // Anzahl Durchläufe
          L     #vt_mpw
          L     DBD [AR1,P#4.0]
          T     #vt_mpw                     // Zwischenspeichern
          TAK   
          T     DBD [AR1,P#4.0]             // Umspeichern
          +AR1  P#4.0                       // um 1 DBD erhöhen
          L     #vt_schleifenzaehl
          LOOP  MP1
    //-----
          LAR1  P#DBX 50.0                  //Startwert wo Daten beginnen
          L     DBD [AR1,P#0.0]             // Startwert eintragen
          T     #vt_mpw
          L     9                           // 1+9 weitere = 10 Messwerte
    MP2:  T     #vt_schleifenzaehl          // Anzahl Durchläufe
          L     #vt_mpw
          L     DBD [AR1,P#4.0]
          T     #vt_mpw                     // Zwischenspeichern
          TAK   
          T     DBD [AR1,P#4.0]             // Umspeichern
          +AR1  P#4.0                       // um 1 DBD erhöhen
          L     #vt_schleifenzaehl
          LOOP  MP2
    
    //-----
          LAR1  P#DBX 90.0                  //Startwert wo Daten beginnen
          L     DBD [AR1,P#0.0]             // Startwert eintragen
          T     #vt_mpw
          L     9                           // 1+9 weitere = 10 Messwerte
    MP3:  T     #vt_schleifenzaehl          // Anzahl Durchläufe
          L     #vt_mpw
          L     DBD [AR1,P#4.0]
          T     #vt_mpw                     // Zwischenspeichern
          TAK   
          T     DBD [AR1,P#4.0]             // Umspeichern
          +AR1  P#4.0                       // um 1 DBD erhöhen
          L     #vt_schleifenzaehl
          LOOP  MP3
    //-----
          LAR1  P#DBX 130.0                 //Startwert wo Daten beginnen
          L     DBD [AR1,P#0.0]             // Startwert eintragen
          T     #vt_mpw
          L     9                           // 1+9 weitere = 10 Messwerte
    MP4:  T     #vt_schleifenzaehl          // Anzahl Durchläufe
          L     #vt_mpw
          L     DBD [AR1,P#4.0]
          T     #vt_mpw                     // Zwischenspeichern
          TAK   
          T     DBD [AR1,P#4.0]             // Umspeichern
          +AR1  P#4.0                       // um 1 DBD erhöhen
          L     #vt_schleifenzaehl
          LOOP  MP4
    
          L     "DI73_MESSWERTÜBER".MESSUNG[1].MESSWERT
          T     "DB273".MP1_Messung[1].MP1
          L     "DI73_MESSWERTÜBER".MESSUNG[2].MESSWERT
          T     "DB273".MP2_Messung[1].MP2
          L     "DI73_MESSWERTÜBER".MESSUNG[3].MESSWERT
          T     "DB273".MP3_Messung[1].MP3
          L     "DI73_MESSWERTÜBER".MESSUNG[4].MESSWERT
          T     "DB273".MP4_Messung[1].MP4
    
    enwe: NOP   0
    Dabei habe ich den Speicher nun wegen Anzeige auf HMI RT etwas aufgeteilt. Es sind nun nicht alle Messwerte hintereinander, sondern jeder hat seinen Bereich.
    Zitieren Zitieren Danke ....  

Ähnliche Themen

  1. Probleme AWL
    Von Geminon im Forum CODESYS und IEC61131
    Antworten: 9
    Letzter Beitrag: 14.07.2010, 09:53
  2. Probleme mit dem SFB 52
    Von Nicobius im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 06.02.2009, 03:08
  3. Probleme über Probleme!
    Von tom_2802 im Forum Simatic
    Antworten: 25
    Letzter Beitrag: 12.06.2008, 22:19
  4. FI-Probleme
    Von mectron im Forum Schaltschrankbau
    Antworten: 15
    Letzter Beitrag: 11.02.2007, 13:29
  5. Probleme mit CPU 102 S5
    Von lorenz2512 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 27.01.2006, 04:44

Lesezeichen

Berechtigungen

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