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

Page 2 of 5 FirstFirst 1234 ... LastLast
Results 11 to 20 of 43

Thread: Arbeiten mit Integer-Werten ?!?

  1. #11
    Jackjackson's Avatar
    Jackjackson is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    17.09.2008
    Posts
    156
    Danke
    97
    Erhielt 6 Danke für 5 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke für die schnellen Antworten... das hilft mir ein bisschen weiter

  2. #12
    Join Date
    30.03.2005
    Posts
    2,134
    Danke
    0
    Erhielt 679 Danke für 545 Beiträge

    Default

    Quote Originally Posted by Jackjackson View Post
    ich will in STEP7 ein Programm schreiben, das über ein Signal einen Zähler hochzählt und jedesmal, wenn der hochzählt, den Wert als Integer-Wert speichert.... Frage ist, wo soll ich die Werte reinspeichern bzw. wie kann ich auf diese dann zugreifen?
    Quote Originally Posted by Jackjackson View Post
    Es sind 10 Eingangssignale gekommen, der Zähler ist auf 10...
    ich will dass die Werte 10, 9, 8, 7, 6, 5 irgendwo gespeichert werden, so dass ich auf die zugreifen kann... bei 11 wärn dann eben 11, 10, 9, 8, 7, 6...
    Hier ist einmal ein Programmbeispiel für die Speicherung von Werten in einen FIFO-Speicher.

    Die letzten 10 Zählwerte eines Zählers werden als INT-Werte in einem Datenbaustein als FIFO-Speicher gespeichert.

    Code:
    RGANIZATION_BLOCK "OB_HAUPTPROGRAMM"
    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
    END_VAR
    BEGIN
    NETWORK
    TITLE =Zaehler
     
          U     "SIGNAL"; 
          ZV    "ZAEHLER"; 
          BLD   101; 
          NOP   0; 
          NOP   0; 
          U     "ZAEHLER_RUECKSETZEN"; 
          R     "ZAEHLER"; 
          NOP   0; 
          LC    "ZAEHLER"; 
          T     "ZAEHLER_ZAEHLWERT_BCD"; 
          NOP   0;
     
    NETWORK
    TITLE =Zaehler
     
          L     "ZAEHLER_ZAEHLWERT_BCD"; 
          BTI   ; 
          T     "ZAEHLER_ZAEHLWERT_INT"; 
          NOP   0; 
     
    NETWORK
    TITLE =FIFO Zaehler
     
          U     "SIGNAL"; 
          FP    "SIGNAL_FLANKE"; 
          SPBNB _001; 
          CALL "FC_FIFO_ZAEHLER" (
               DB_ZAEHLER               := "DB_ZAEHLER",
               ANZAHL_ZAEHLWERTE        := 10,
               ZAEHLWERT                := "ZAEHLER_ZAEHLWERT_INT");
    _001: NOP   0; 
     
    END_ORGANIZATION_BLOCK
    Code:
    TITLE =FIFO Zaehler
    AUTHOR : KAI
    FAMILY : SPSFORUM
    NAME : FIFO
    VERSION : 1.0
     
    VAR_INPUT
      DB_ZAEHLER : BLOCK_DB ; 
      ANZAHL_ZAEHLWERTE : INT ; 
      ZAEHLWERT : INT ; 
    END_VAR
    VAR_TEMP
      DB_REGISTER : WORD ; 
      AR1_REGISTER : DWORD ; 
      SCHLEIFE : INT ; 
      ZWISCHENWERT : INT ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =Register sichern
     
          L     DBNO; // DB-Register
          T     #DB_REGISTER; 
     
          TAR1  #AR1_REGISTER; // AR1-Register
     
    NETWORK
    TITLE =FIFO Zaehler
     
          AUF   #DB_ZAEHLER; // DB Zaehler
     
          L     P#0.0; 
          LAR1  ; 
     
          L     #ZAEHLWERT; // Zaehlwert
          T     #ZWISCHENWERT; // Zwischenwert
     
          L     #ANZAHL_ZAEHLWERTE; // Anzahl Zaehlwerte
    M01:  T     #SCHLEIFE; 
     
          L     DBW [AR1,P#0.0]; // Zaehlwert
          L     #ZWISCHENWERT; // Zwischenwert
          T     DBW [AR1,P#0.0]; // Zwischenwert => Zaehlwert
          TAK   ; 
          T     #ZWISCHENWERT; // Zaehlwert => Zwischenwert
     
          L     P#2.0; 
          +AR1  ; 
     
          L     #SCHLEIFE; 
          LOOP  M01; 
     
    NETWORK
    TITLE =Register wiederherstellen
     
          AUF   DB [#DB_REGISTER]; // DB-Register
     
          LAR1  #AR1_REGISTER; // AR1-Register
     
    END_FUNCTION
    Gruß Kai
    Attached Files Attached Files

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

    Jackjackson (04.02.2009)

  4. #13
    Join Date
    30.03.2005
    Posts
    2,134
    Danke
    0
    Erhielt 679 Danke für 545 Beiträge

    Default

    Und noch zwei Bilder aus der Simulation mit PLCSIM.

    Gruß Kai
    Attached Images Attached Images

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

    Jackjackson (04.02.2009)

  6. #14
    Join Date
    27.11.2005
    Location
    im Osten
    Posts
    1,186
    Danke
    141
    Erhielt 271 Danke für 248 Beiträge

    Default

    Ich glaub Gebs- und Kai´s Lösung schiesst da etwas übers Ziel hinaus, warum so umständlich ???

    Ich würd sagen das Peter(R) lösung für die simple Aufgabe wirklich ausreichend ist.
    Es ist nicht schwierig, mit noch nicht erreichten Zielen zu Leben; schwierig ist, ohne Ziele zu Leben !
    (Günther Kraftschik)

  7. #15
    Jackjackson's Avatar
    Jackjackson is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    17.09.2008
    Posts
    156
    Danke
    97
    Erhielt 6 Danke für 5 Beiträge

    Default

    Danke .... hat mir sehr weitergeholfen!!
    Wie müsste man eigentlich den OB1 bzw FC ändern, dass statt einem zählerhochzählenden Eingangssignal zufällige Int-Werte ins Programm gespeist werden?
    Last edited by Jackjackson; 04.02.2009 at 11:49.

  8. #16
    Join Date
    08.04.2008
    Location
    Köln
    Posts
    846
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Default

    Hallo Jackjackson,

    die einfachste Möglichkeit wäre die Millisekunden aus dem OB1_Date_Time zu nehmen.

    Grüße
    Gebs

  9. #17
    Jackjackson's Avatar
    Jackjackson is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    17.09.2008
    Posts
    156
    Danke
    97
    Erhielt 6 Danke für 5 Beiträge

    Default

    Meinst du OB1_PREV_CYCLE, OB1_MIN_CYCLE und OB1_MAX_CYCLE?
    Muss man am Programm nichts ändern?

  10. #18
    Join Date
    08.04.2008
    Location
    Köln
    Posts
    846
    Danke
    39
    Erhielt 244 Danke für 199 Beiträge

    Default

    Hallo Jackjackson,

    ich meine schon OB1_DATE_TIME! AB L 12.0 im OB1. Im LW 18 stehen die ms der Systemuhr und der aktuelle Tag.

    Mit
    Code:
    L LW 18
    SRW 4
    T MW xy
    hast Du dann im MW xy die ms stehen.
    Das MW xy setzt Du dann einfach an die Stelle des Zählwertes.

    Grüße
    Gebs

  11. Folgender Benutzer sagt Danke zu Gebs für den nützlichen Beitrag:

    Jackjackson (04.02.2009)

  12. #19
    Jackjackson's Avatar
    Jackjackson is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    17.09.2008
    Posts
    156
    Danke
    97
    Erhielt 6 Danke für 5 Beiträge

    Default

    ich verstehs zwar nicht, aber probiern kann ichs ja mal....

  13. #20
    Jackjackson's Avatar
    Jackjackson is offline Erfahrener Benutzer
    Themenstarter
    Join Date
    17.09.2008
    Posts
    156
    Danke
    97
    Erhielt 6 Danke für 5 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das zählt nur automatisch MW1 hoch und runter...
    ich will nur die Werte nacheinander in MW1 setzen und speichern ...
    L LW 18
    SRW 4
    T MW1

    L MW1
    BTI
    T "Z_INT"
    NOP 0



    (An die SPS werden die IDs der Fördergüter gesendet, welches die 10 IDs speichert, auf die man zugreifen kann...)
    Last edited by Jackjackson; 04.02.2009 at 15:00.

Similar Threads

  1. Step 5 S5 Vergleich von Integer Werten
    By Holle-52499 in forum Simatic
    Replies: 10
    Last Post: 21.03.2016, 18:06
  2. integer 32Bit in integer 16 Bit wandeln
    By slk230-power in forum Simatic
    Replies: 11
    Last Post: 09.11.2009, 22:35
  3. Replies: 2
    Last Post: 10.02.2009, 12:07
  4. Replies: 11
    Last Post: 19.08.2005, 21:16
  5. Umwandlung Integer(32bit) in Integer(16bit)
    By Kojote in forum Simatic
    Replies: 4
    Last Post: 18.08.2005, 10:56

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •