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

Ergebnis 1 bis 6 von 6

Thema: Schieberegister mit UDT's

  1. #1
    Anonymous Gast

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Habe ein Schieberegister mit UDT-Datensätzen.
    Womit kann/soll ich jetzt die Datensätze weiterschieben?
    Mit SFC20 und ANY-Pointern?
    Oder kann man das Ganze einfach auch Wortweise mit Pointern
    (mit UDT-entsprechenden Versatz) nach unten schieben?

    Danke
    Maxdo
    Zitieren Zitieren Gelöst: Schieberegister mit UDT's  

  2. "Das SR ist "relativ" groß... ca. 10-15 kB.
    Die Daten des abgelaufenen Tages werden in einem UDT
    zusammengefasst und im SR abgelegt.

    Da die Datensätzte später ausgewertet werden (Wochenauswertung)
    dachte ich es ist (der Übersichtlichkeit wegen) einfacher die
    Datensätzte weiterzuschieben... z.B. vorgestern = 3.Datensatz

    Wie komme ich beim Ringspeicher wenn zb. aktueller Scheibezeiger
    auf 5.Datensatz und ich will die Position von "akt. Datum -7 Tage" errechnen?

    danke
    maxdo"


  3. #2
    Registriert seit
    28.01.2005
    Beiträge
    19
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Kommt darauf an, wie groß Dein UDT ist. Mit dem SFC BLK_MOV und ANY-Pointern hab ich bisher keine Probleme gehabt.
    30 Jahre Erfahrung kann auch heissen, dass man 30 Jahre Mist gebaut hat!!

  4. #3
    Registriert seit
    16.06.2003
    Ort
    88356 Ostrach
    Beiträge
    4.811
    Danke
    1.231
    Erhielt 1.101 Danke für 527 Beiträge

    Standard

    ich weiß ja nicht wie groß dein sr ist, aber ich halte nix davon datensätze durchzuschieben. weil es eigentlich unnötig kompliziert und später sehr unflexibel ist. auserdem wird dich die steuerung dafür hassen weil die zykluszeit stark ansteigt...

    ich würde die datensäzte lassen wo sie sind, und nur die pointer die eintragen und auslesen dynamisch machen...

    ist dann quasi ein ringspeicher

  5. #4
    Registriert seit
    21.06.2004
    Beiträge
    23
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Das SR ist "relativ" groß... ca. 10-15 kB.
    Die Daten des abgelaufenen Tages werden in einem UDT
    zusammengefasst und im SR abgelegt.

    Da die Datensätzte später ausgewertet werden (Wochenauswertung)
    dachte ich es ist (der Übersichtlichkeit wegen) einfacher die
    Datensätzte weiterzuschieben... z.B. vorgestern = 3.Datensatz

    Wie komme ich beim Ringspeicher wenn zb. aktueller Scheibezeiger
    auf 5.Datensatz und ich will die Position von "akt. Datum -7 Tage" errechnen?

    danke
    maxdo

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

    Standard

    hier mal ein fc der genau das macht was du willst.
    anzahl der blöcke, blockgrösse etc sind einstellbar

    dies ist eine quelle.
    Code:
    FUNCTION FC 98 : INT
    TITLE = FIFO für Datenblöcke V1.00 von V.Lischnewski (siehe Kommentar)
    //FIFO für Datenblöcke
    //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.0
    
    
    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; //erster zyklus
          L     #Anzahl_Bloecke; //4
          T     #schleifenindex; //4
    
    sanf: NOP   0; //schleifenanfang
    
    // quelle
          L     #schleifenindex; //4      
          L     2; 
          -I    ; //2
          L     #Blockgroesse; //2
          *I    ; //4
          L     #Quelle_Anfang; //1   Anfang der Quelle
          +I    ; //5
          T     #QAnfang_schleife; //anfang vorletzter block
    
    // ziel
          L     #schleifenindex; //4
          L     1; 
          -I    ; //3
          L     #Blockgroesse; //2
          *I    ; //6
          L     #Ziel_Anfang; //1   Anfang des Ziel
          +I    ; //7
          T     #ZAnfang_schleife; //anfang letzter block
    
    NETWORK
    TITLE =Verschieben; Zusammenstellung des Quellzeigers
    
          L     W#16#1002; //Typ BYTE
          T     LW     0; 
          L     #Blockgroesse; //Anzahl Bytes
          T     LW     2; 
          L     #Ziel_DB; //Ziel-DB
          T     LW     4; 
          L     #QAnfang_schleife; //Anfang der Quelle
          SLD   3; 
          OD    DW#16#84000000; 
          T     LD     6; 
    
    NETWORK
    TITLE =Verschieben; Zusammenstellung des Zielzeigers
    
          L     W#16#1002; //Typ BYTE
          T     LW    10; 
          L     #Blockgroesse; //Anzahl Bytes
          T     LW    12; 
          L     #Ziel_DB; //Ziel-DB
          T     LW    14; 
          L     #ZAnfang_schleife; //Anfang der Quelle
          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; //schleifenanfang
    
          L     #schleifenindex; //4
          L     1; //1
          -I    ; //3
          T     #schleifenindex; //3
    
          L     0; 
          <=I   ; 
          SPB   ndat; //schleife fertig; neue daten eintragen
    
          SPA   sanf; //schleife erneut durchlaufen
    
    NETWORK
    TITLE =Neue Daten; Zusammenstellung des Quellzeigers
    
    ndat&#58; NOP   0; 
    
          L     W#16#1002; //Typ BYTE
          T     LW     0; 
          L     #Blockgroesse; //Anzahl Bytes
          T     LW     2; 
          L     #Quelle_DB; //Quell-DB
          T     LW     4; 
          L     #Quelle_Anfang; //Anfang der Quelle
          SLD   3; 
          OD    DW#16#84000000; 
          T     LD     6; 
    
    NETWORK
    TITLE =Neue Daten;  Zusammenstellung des Zielzeigers
    
          L     W#16#1002; //Typ BYTE
          T     LW    10; 
          L     #Blockgroesse; //Anzahl Bytes
          T     LW    12; 
          L     #Ziel_DB; //Quell-DB
          T     LW    14; 
          L     #Ziel_Anfang; //Anfang der Quelle
          SLD   3; 
          OD    DW#16#84000000; 
          T     LD    16; 
    
    NETWORK
    TITLE =Neue Daten;  Datenbereich kopieren
    
          CALL SFC   20 &#40;
               SRCBLK                   &#58;= #QANY,
               RET_VAL                  &#58;= #RET_VAL,
               DSTBLK                   &#58;= #ZANY&#41;;
    
    END_FUNCTION
    Code:
    ORGANIZATION_BLOCK OB 1
    TITLE =
    VERSION &#58; 0.0
    
    
    VAR_TEMP
      OB1_EV_CLASS &#58; BYTE ;	//Bits 0-3 = 1 &#40;Coming event&#41;, Bits 4-7 = 1 &#40;Event class 1&#41;
      OB1_SCAN_1 &#58; BYTE ;	//1 &#40;Cold restart scan 1 of OB 1&#41;, 3 &#40;Scan 2-n of OB 1&#41;
      OB1_PRIORITY &#58; BYTE ;	//1 &#40;Priority of 1 is lowest&#41;
      OB1_OB_NUMBR &#58; BYTE ;	//1 &#40;Organization block 1, OB1&#41;
      OB1_RESERVED_1 &#58; BYTE ;	//Reserved for system
      OB1_RESERVED_2 &#58; BYTE ;	//Reserved for system
      OB1_PREV_CYCLE &#58; INT ;	//Cycle time of previous OB1 scan &#40;milliseconds&#41;
      OB1_MIN_CYCLE &#58; INT ;	//Minimum cycle time of OB1 &#40;milliseconds&#41;
      OB1_MAX_CYCLE &#58; INT ;	//Maximum cycle time of OB1 &#40;milliseconds&#41;
      OB1_DATE_TIME &#58; DATE_AND_TIME ;	//Date and time OB1 started
    END_VAR
    BEGIN
    NETWORK
    TITLE =
    
          U     E      0.0; //daten eintragen
          FP    M     99.0; //flanke
    
    NETWORK
    TITLE =
    
          U     M     99.0; 
          SPBNB _004; 
          CALL "FIFO_Block" &#40;
               Quelle_DB                &#58;= 10,
               Quelle_Anfang            &#58;= 1,
               Blockgroesse             &#58;= 2,
               Anzahl_Bloecke           &#58;= 3,
               Ziel_DB                  &#58;= 11,
               Ziel_Anfang              &#58;= 1,
               RET_VAL                  &#58;= MW   100&#41;;
    _004&#58; NOP   0; 
    END_ORGANIZATION_BLOCK
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation
    Zitieren Zitieren FIFO für Datenblöcke  

  7. Folgender Benutzer sagt Danke zu volker für den nützlichen Beitrag:

    SIGGI (16.04.2009)

  8. #6
    Registriert seit
    21.06.2004
    Beiträge
    23
    Danke
    0
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Besten Dank Volker,

    werd das heut Abend mal probieren...

    danke
    maxdo

Ähnliche Themen

  1. Schieberegister mit S7-300
    Von Spag im Forum Simatic
    Antworten: 15
    Letzter Beitrag: 06.08.2008, 13:06
  2. Schieberegister
    Von Schenker im Forum Simatic
    Antworten: 9
    Letzter Beitrag: 08.10.2007, 11:09
  3. Schieberegister
    Von Mütze im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 22.10.2006, 06:01
  4. Schieberegister
    Von Anonymous im Forum Simatic
    Antworten: 0
    Letzter Beitrag: 30.01.2006, 08:47
  5. Schieberegister mit S7-200
    Von Anonymous im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 14.10.2003, 15:00

Lesezeichen

Berechtigungen

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