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

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

Thema: INT Werte speichern bzw. verschieben

  1. #11
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.792
    Danke
    398
    Erhielt 2.416 Danke für 2.012 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hast du dir den Beitrag in der FAQ durchgelesen ?
    Ich nehme mal an : Ja ...

    Anstelle eine Variable (Datenwort) direkt zu adressieren (L DB10.DBW 12) kann du es auch indirekt (über Pointer = Zeiger) ansprechen. Hier gibt es 2 Möglichkeiten. Die eine wäre über das Adress-Register (AR1 oder AR2) wie im Beispiel in der FAQ. Eine andere direkt über den Pointer (L DBW [Pointer]).

    Der Pointer in der S7 basiert auf Bit-Adressierung. Das heißt, wenn du ein Byte ansprechen willst, dann mußt du im Pointer berücksichtigen, dass das 8 Bit beinhaltet. Hierfür wird dann gerne der SLD-Befehl herangenommen (SLD 3 bedeutet das Gleiche wie "mal 8").

    Willst du das Datenwort 4 in deinem DB ansprechen dann programmierst du :
    Code:
    Pointer : dword
     
    L 4
    SLD 3
    T Pointer
     
    L DBW [Pointer]
    Hast du das soweit verstanden ?

    In einer Schleife arbeitest du mit einer Zählvariablen, die die Anzahl der Durchläufe bestimmt und die du mit jedem Durchlauf erhöhst (oder verringerst - je nach Aufgabenstellung)

  2. #12
    Registriert seit
    27.07.2007
    Ort
    Westend Österreich
    Beiträge
    47
    Danke
    12
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Hallo

    Danke erstmal.

    Also ich habe mir den letzten Beitrag mal sehr genau angeschaut.

    Ich werde mir jetzt das ganze mal runterladen, ein neues Projektchen öffnen und das ganze mal simulieren.

    Das kann doch wohl nicht unmöglich sein, zu verstehen.

    Ich sage mal danke, und melde mich (hoffentlich mit einer Erfolgsmeldung) wieder.

    Danke und Grüsse

    Flo


  3. #13
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.792
    Danke
    398
    Erhielt 2.416 Danke für 2.012 Beiträge

    Standard

    ... guter Vorschlag ...

    Aber auch wenn du keinen Erfolg hast, dann stell auf jeden Fall dein Werk hier ein. Ich denke, dann wird dir schon geholfen ...
    Das FIFO hinzubekommen dürfte nicht das Problem sein.

  4. #14
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von steppenwolf Beitrag anzeigen
    Die Summe der geschwindigkeiten speichern (alle 5 Sekunden), und nach 2 Minuten (ebenfalls im Abstand von 5 Sekunden) in einen bereits bestehenden DB reinschreiben.
    Ich habe das Programmbeispiel für den FIFO mal an Deine Aufgabenstellung angepasst:

    - Der FIFO speichert 24 INT-Werte.

    - Alle 5 Sekunden wird ein INT-Wert in den FIFO eingelesen.

    - Nach 2 Minuten (24 Werte x 5 Sekunden) wird der erste in den FIFO eingelesene INT-Wert wieder aus dem FIFO ausgelesen.

    - Nach weiteren 5 Sekunden wird der zweite in den FIFO eingelesene INT-Wert wieder aus dem FIFO ausgelesen, usw.


    Code:
    ORGANIZATION_BLOCK OB 1
    TITLE =Hauptprogramm
    //16
    //   
    AUTHOR : KAI
    FAMILY : SPSFORUM
    NAME : FIFO
    VERSION : 1.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 ; //Priority of OB Execution
      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
      RETVAL : INT ;    
    END_VAR
    BEGIN
    NETWORK
    TITLE =Taktgeber 5 Sekunden
     
          UN    M     10.0; 
          L     S5T#5S; 
          SE    T     10; 
          NOP   0; 
          NOP   0; 
          NOP   0; 
          U     T     10; 
          =     M     10.0; 
     
    NETWORK
    TITLE =FIFO-Speicher
     
          U     M     10.0; 
          SPBNB _001; 
          CALL FC   100 (
               SPEICHER                 := DB200.FIFO,
               ANZAHL_WERTE             := 24,
               WERT_EINLESEN            := MW   100,
               WERT_AUSLESEN            := MW   102);
    _001: NOP   0; 
     
    END_ORGANIZATION_BLOCK
    Code:
    FUNCTION FC 100 : VOID
    TITLE =FIFO-Speicher
    AUTHOR : KAI
    FAMILY : SPSFORUM
    NAME : FIFO
    VERSION : 1.0
     
    VAR_INPUT
      SPEICHER : POINTER ;  
      ANZAHL_WERTE : INT ;  
      WERT_EINLESEN : INT ; 
    END_VAR
    VAR_OUTPUT
      WERT_AUSLESEN : INT ; 
    END_VAR
    VAR_TEMP
      DB_REGISTER : WORD ;  
      AR1_REGISTER : DWORD ;    
      DB_NUMMER : WORD ;    
      ZWISCHENWERT : REAL ; 
      SCHLEIFE : INT ;  
    END_VAR
    BEGIN
    NETWORK
    TITLE =DB-Register und Adressregister AR1 sichern
     
          L     DBNO; // DB-Register
          T     #DB_REGISTER; 
     
          TAR1  #AR1_REGISTER; // AR1-Register
     
    NETWORK
    TITLE =FIFO-Speicher
     
          L     P##SPEICHER; // POINTER
          LAR1  ; 
     
          L     W [AR1,P#0.0]; // DB-Nummer
          T     #DB_NUMMER; 
     
          AUF   DB [#DB_NUMMER]; 
     
          L     D [AR1,P#2.0]; // Bereichszeiger
          LAR1  ; 
     
          L     #WERT_EINLESEN; // Wert
          T     #ZWISCHENWERT; // Wert => Zwischenwert
     
          L     #ANZAHL_WERTE; // Länge
    M01:  T     #SCHLEIFE; // Schleife
     
          L     W [AR1,P#0.0]; // Wert
          L     #ZWISCHENWERT; // Zwischenwert
          T     W [AR1,P#0.0]; // Zwischenwert => Wert
          TAK   ; 
          T     #ZWISCHENWERT; // Wert => Zwischenwert 
     
          L     P#2.0; 
          +AR1  ; 
     
          L     #SCHLEIFE; // Schleife
          LOOP  M01; 
     
          L     #ZWISCHENWERT; // Zwischenwert
          T     #WERT_AUSLESEN; // Wert
     
    NETWORK
    TITLE =DB-Register und Adressregister AR1 wiederherstellen
     
          AUF   DB [#DB_REGISTER]; // DB-Register
     
          LAR1  #AR1_REGISTER; // AR1-Register
     
    END_FUNCTION
    Gruß Kai
    Angehängte Dateien Angehängte Dateien

  5. Folgender Benutzer sagt Danke zu Kai für den nützlichen Beitrag:

    character (15.10.2008)

  6. #15
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Und hier sind noch ein paar Bilder aus der Simulation mit PLCSIM.

    Gruß Kai
    Angehängte Grafiken Angehängte Grafiken

  7. #16
    Registriert seit
    27.07.2007
    Ort
    Westend Österreich
    Beiträge
    47
    Danke
    12
    Erhielt 1 Danke für 1 Beitrag

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    SUCCESS!

    Hallo zusammen!

    Danke für eure Hilfe.

    Nach langer Tüftelei im PLCSIM bin ich endlich hinter das "Geheimnis" gekommen. Ich habe es bisher nur mit drei Werten gemacht. Und es hat funktioniert. Aber ich verlängere es einfach auf 24, und dann hab ich meine 2 Minuten.

    Ich danke euch für eure Hilfe und Zeit.

    Grüsse

    Flo


Ähnliche Themen

  1. SCL: Daten Speichern/Verschieben
    Von zloyduh im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 08.08.2011, 09:38
  2. INT Werte Speichern
    Von chefren_new im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 05.05.2011, 12:51
  3. DB - Werte Speichern ?
    Von Pockebrd im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 20.12.2010, 07:57
  4. Werte in DB speichern
    Von Sash7770 im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 25.02.2009, 07:41
  5. Werte Speichern
    Von Unregistriert57 im Forum HMI
    Antworten: 2
    Letzter Beitrag: 25.06.2006, 10:35

Lesezeichen

Berechtigungen

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