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

Page 1 of 2 12 LastLast
Results 1 to 10 of 19

Thread: S7 Indirekte Adressierung

  1. #1
    Join Date
    25.01.2009
    Location
    Frankfurt
    Posts
    53
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,
    ich habe ein Problem und zwar möchte ich mit Indirekte Adressierung zahlen von 1 bis 100 in Datenbaustein DB10 schreiben

    dh:
    #Array[0]= 1
    #Array[1]= 2
    ….
    #Array[99]= 100

    DATA_BLOCK DB 10
    TITLE =
    VERSION : 0.1
    STRUCT
    Werten : ARRAY [0 .. 99 ] OF REAL ;
    END_STRUCT ;
    BEGIN
    Zum Einsatz kommt eine CPU 315
    Ein paar Tipps sind willkommen.
    MFG
    Reply With Quote Reply With Quote S7 Indirekte Adressierung  

  2. #2
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    tipp 1: 100 ist kein realwert
    tipp 2: warum die werte aus nem array nehmen, einfacher ist doch selber "berechnen"

    daraus ergibt sich tipp 3: nimm eine schleife, leg eine zählvariable an, inkrementiere sie in jedem schleifendurchlauf und shreib sie per

    Code:
    *
    T      DBD [AR1,P#0.0]
    tipp 4: erhöhe die adresse mit

    Code:
    *
    +AR1     P#4.0
    tipp 5: schau in die FAQ hier im forum zum thema pointer
    Last edited by vierlagig; 26.01.2009 at 22:19.
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    Rommani (26.01.2009)

  4. #3
    Join Date
    20.06.2003
    Location
    Sauerland.NRW.Deutschland
    Posts
    5,451
    Danke
    99
    Erhielt 923 Danke für 628 Beiträge

    Default

    oder über einen index den du mit
    sld 3
    in einen pointer wandelst

    schau mal hier das beispiel am ende
    http://www.sps-forum.de/showthread.php?t=8887
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download auf meiner HP
    zum Download im Internet (Backup nicht unbedingt aktuell)

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

    Rommani (26.01.2009)

  6. #4
    Join Date
    25.01.2009
    Location
    Frankfurt
    Posts
    53
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Default

    Hallo vierlagig
    vielen Dank für das schnelle Antworte, aber was meinst du mit "einfacher ist doch selber "berechnen" "

    kannst du ma bitte genauer erklären bzw. ein Bsp.

    nochmal danke

  7. #5
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    Quote Originally Posted by Rommani View Post
    Hallo vierlagig
    vielen Dank für das schnelle Antworte, aber was meinst du mit "einfacher ist doch selber "berechnen" "

    kannst du ma bitte genauer erklären bzw. ein Bsp.

    nochmal danke
    Code:
    *
    L     #rInc
    L     1.00
    +R
    T     #rInc
    vorher natürlich noch rInc initialisieren
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  8. #6
    Join Date
    08.08.2007
    Location
    Dresden
    Posts
    9,882
    Danke
    1,064
    Erhielt 2,056 Danke für 1,632 Beiträge

    Default

    wobei: wenn das array sowieso schon angelegt ist -> SFC20, da brauchste auch nen pointer, nen any
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

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

    Default

    Quote Originally Posted by Rommani View Post
    ich habe ein Problem und zwar möchte ich mit Indirekte Adressierung zahlen von 1 bis 100 in Datenbaustein DB10 schreiben

    dh:
    #Array[0]= 1
    #Array[1]= 2
    ….
    #Array[99]= 100

    DATA_BLOCK DB 10
    TITLE =
    VERSION : 0.1
    STRUCT
    Werten : ARRAY [0 .. 99 ] OF REAL ;
    END_STRUCT ;
    BEGIN
    Hier ist einmal ein kurzes Programmbeispiel für das Schreiben der Werte 1.0 bis 10.0 in einen Datenbaustein:

    Code:
    FUNCTION FC 100 : VOID
    TITLE =Werte in DB schreiben
    AUTHOR : KAI
    FAMILY : SPSFORUM
    NAME : WERTE
    VERSION : 1.0
     
    VAR_INPUT
      DB_WERTE : BLOCK_DB ; 
      ANZAHL_WERTE : INT ; 
      WERTE_SCHREIBEN : BOOL ; 
    END_VAR
    VAR_IN_OUT
      WERTE_SCHREIBEN_FLANKE : BOOL ; 
    END_VAR
    VAR_TEMP
      DB_REGISTER : WORD ; 
      AR1_REGISTER : DWORD ; 
      WERT : REAL ; 
      SCHLEIFE : INT ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =Werte in DB schreiben
     
          U     #WERTE_SCHREIBEN; // Werte schreiben
          FP    #WERTE_SCHREIBEN_FLANKE; // Werte schreiben Flanke
          NOT   ; 
          BEB   ; // Bausteinende
     
    NETWORK
    TITLE =Register sichern
     
          L     DBNO; // DB-Register
          T     #DB_REGISTER; 
     
          TAR1  #AR1_REGISTER; // AR1-Register
     
    NETWORK
    TITLE =Werte in DB schreiben
     
          AUF   #DB_WERTE; // DB-Werte
     
          L     1.000000e+000; 
          T     #WERT; // Wert
     
          L     P#0.0; 
          LAR1  ; 
     
          L     #ANZAHL_WERTE; // Anzahl Werte
    M01:  T     #SCHLEIFE; 
     
          L     #WERT; // Wert
          T     DBD [AR1,P#0.0]; 
     
          L     #WERT; // Wert
          L     1.000000e+000; 
          +R    ; 
          T     #WERT; // Wert
     
          L     P#4.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

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

    on69 (18.09.2010)

  11. #8
    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

  12. Folgende 2 Benutzer sagen Danke zu Kai für den nützlichen Beitrag:

    Rommani (27.01.2009),SIGGI (28.01.2009)

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

    Default

    Nach Rücksprache mit Rommani hier noch einmal ein leicht geändertes Programmbeispiel:

    Code:
    FUNCTION FC 100 : VOID
    TITLE =Werte in DB schreiben
    AUTHOR : KAI
    FAMILY : SPSFORUM
    NAME : WERTE
    VERSION : 1.0
     
    VAR_INPUT
      ARRAY_WERTE : ARRAY  [0 .. 9] OF REAL ; 
      ANZAHL_WERTE : INT ; 
      WERTE_SCHREIBEN : BOOL ; 
    END_VAR
    VAR_IN_OUT
      WERTE_SCHREIBEN_FLANKE : BOOL ; 
    END_VAR
    VAR_TEMP
      DB_REGISTER : WORD ; 
      AR1_REGISTER : DWORD ; 
      DB_NUMMER : WORD ; 
      WERT : REAL ; 
      SCHLEIFE : INT ; 
    END_VAR
    BEGIN
    NETWORK
    TITLE =Werte in DB schreiben
     
          U     #WERTE_SCHREIBEN; // Werte schreiben
          FP    #WERTE_SCHREIBEN_FLANKE; // Werte schreiben Flanke
          NOT   ; 
          BEB   ; // Bausteinende
     
    NETWORK
    TITLE =Register sichern
     
          L     DBNO; // DB-Register
          T     #DB_REGISTER; 
     
          TAR1  #AR1_REGISTER; // AR1-Register
     
    NETWORK
    TITLE =Werte in DB schreiben
     
          L     P##ARRAY_WERTE; // 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     1.000000e+000; 
          T     #WERT; // Wert
     
          L     #ANZAHL_WERTE; // Anzahl Werte
    M01:  T     #SCHLEIFE; 
     
          L     #WERT; // Wert speichern
          T     DBD [AR1,P#0.0]; 
     
          L     #WERT; // Wert erhöhen
          L     1.000000e+000; 
          +R    ; 
          T     #WERT; 
     
          L     P#4.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

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

    Default


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Und noch zwei Bilder aus der Simulation mit PLCSIM.

    Gruß Kai
    Attached Images Attached Images

Similar Threads

  1. Step 7 Indirekte Adressierung
    By firefox711 in forum Simatic
    Replies: 10
    Last Post: 16.05.2013, 07:55
  2. indirekte Adressierung
    By schneijo in forum Simatic
    Replies: 7
    Last Post: 22.10.2012, 14:42
  3. Indirekte-Adressierung
    By johnij in forum Simatic
    Replies: 2
    Last Post: 14.02.2008, 14:32
  4. Indirekte Adressierung
    By wusel220983 in forum Simatic
    Replies: 6
    Last Post: 18.05.2007, 18:19
  5. Indirekte Adressierung
    By Raab in forum Simatic
    Replies: 1
    Last Post: 20.12.2003, 12:17

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
  •