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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 21

Thema: Frage zum Programmcode

  1. #1
    Registriert seit
    01.02.2010
    Beiträge
    345
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Zusammen,

    ich bin neu hier - und leider noch ziemlich blutige Anfängerin.

    Naja, wie auch immer. Trotz allem habe ich im Forum nach einer Art Mittelwertbildung gesucht und bin auch fündig geworden:

    Code:
     
    L     12                       //Startadresse des Arrays
          SLD   3                 //Pointer erzeugen
          LAR1                   // ins AR1 laden
     
          L     0.0               //Temp-Variable Summe auf 0 setzen
          T     #Summe
     
          L     7
    nex2: T     #Position
     
          L     DID [AR1,P#4.0] //Aktuelle Position im Array
          L     #Summe           //Temp-Variable
          +R                         //Addieren der Werte und in
          T     #Summe          //Summe abspeichern
          +AR1 P#4.0            //Adressregister erhöhen
     
          L     #Position
          LOOP  nex2            //Sprung zu Schleife
     
          L     #Summe         //Temp-Variable durch
          L     8                  //Anzahl Elemente des Arrays
          /R                       //teilen
          T     #Mittelwert   //Speichern in Mittelwert
    Allerdings ist auch schon eine Frage aufgetaucht, ich glaube die könnt ihr mir ganz sicher beantworten:

    So wie ich es verstanden habe, soll doch ein Array mit den Feldern 0 bis 7 aufgefüllt werden und aus diesen acht Werten dann anschließend ein Mittelwert gebildet werden.

    Müsste es dazu in Zeile 8 nicht folgendermaßen heißen?

    L DID [AR1,P#0.0]

    Dieser Befehl würde doch dann das erste Feld füllen, während die originale Programmzeile doch einen Wert in das zweite Feld ablegt - oder irre ich mich da?

    Lieben Dank für eine Antwort.

    Grüße
    anne

    PS: Super Forum hier!
    Zitieren Zitieren Frage zum Programmcode  

  2. #2
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    schau mal hier: http://sps-forum.de/showthread.php?t=33100

    aber bis zum ende lesen! dann sollte einiges klarer werden
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  3. #3
    anne ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.02.2010
    Beiträge
    345
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Danke für den Link vierlagig, aber so richtig schlauer bin ich noch immer nicht - ganz im Gegenteil...

    1) Irgendwie vermisse ich in meinem dargestellten Code die Stelle, an der der aktuelle Wert in ein Array-Feld geladen wird. Fehlt das hier, oder an welcher Stelle passiert das?

    2) Mittels der Anweisungen

    L DID [AR1,P#4.0]
    L #Summe
    +R
    T #Summe
    +AR1 P#4.0

    sollen doch die gespeicherten Werte der einzelnen Felder addiert und nach #Summe transferiert werden, um anschließend eine Mittelwertbildung vorzunehmen.

    Der Befehl

    L DID [AR1,P#4.0]

    lädt aber doch das 2. Feld.

    Beim nächsten Schleifendurchlauf wird dann das dritte Feld geladen, usw.

    Wo aber wird das 1. Feld geladen?

    Oder verstehe ich das gänzlich falsch?

    Danke!

  4. #4
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.367
    Danke
    457
    Erhielt 696 Danke für 521 Beiträge

    Standard

    Zu 1: Ich muss sagen die Stelle vermisse ich auch...

    Zu 2 Sofern ... "L 12 //Startadresse des Arrays" wirklich die Startadresse des Arays ist spricht DID [AR1,P#4.0] das Doppelwort mit Adresse 16 an.

    Ach und nochwas...

    Code:
    nex2: T     #Position  //hier schreibst du nach dem Rücksprung noch ein weiteres mal die Varaible Position. Funktioniert zwar da du sie vor dem Rücksprung lädst ist aber irgendwie unschön.
    
             L     DID [AR1,P#4.0] // Ich würde das nex2 eher hier setzen
             L     #Position
             LOOP  nex2            
     
            L     #Summe       
            L     8                
            /R                       
            T     #Mittelwert
    Geändert von RONIN (01.02.2010 um 19:53 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  5. #5
    anne ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.02.2010
    Beiträge
    345
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard

    Zitat Zitat von RONIN Beitrag anzeigen
    Sofern ...
    L 12 //Startadresse des Arrays
    Sofern das wirklich die Startadresse des Arays ist spricht DID [AR1,P#4.0] das Doppelwort mit Adresse 16 an.
    Ja, genau!
    Und es sollte doch so sein, dass die Startadresse dem ersten Array-Feld zugeordnet ist. Demnach spricht dann der Befehl

    L DID [AR1,P#4.0]

    doch das zweite Array-Feld an.

    Wo aber wird das erste Feld angesprochen?

  6. #6
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.367
    Danke
    457
    Erhielt 696 Danke für 521 Beiträge

    Standard

    In diesem Codeschnipsel anscheinen nicht
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  7. #7
    Registriert seit
    03.01.2006
    Ort
    Im sonnigen Süden von Österreich!
    Beiträge
    1.377
    Danke
    227
    Erhielt 183 Danke für 168 Beiträge

    Standard

    Hallo anne!

    Zeig mal den Bausteinkopf her.
    Besonders die Adressen vom array, summe und mittelwert.
    Vielleicht überschneiden die sich ja irgendwo mit der indirekten Adressierung.

  8. #8
    Registriert seit
    26.01.2010
    Beiträge
    181
    Danke
    5
    Erhielt 30 Danke für 25 Beiträge

    Standard

    ..................
    Sorry, falsch gelesen. Den Offset verstehe ich auch nicht. Ist eigentlich unnötig.


    Oder kann es sein, daß da noch was fehlt? Wenn du den neuen Wert direkt in 12.0 schreibst, macht das Sinn. Dann fehlt auch noch das Weiterschieben.
    Hier werden momentan nur Werte verarbeitet die schon im Array stehn.

    Gruß Dr.M
    Geändert von Dr.M (01.02.2010 um 22:47 Uhr)

  9. #9
    Registriert seit
    08.08.2007
    Ort
    Dresden
    Beiträge
    9.648
    Danke
    1.059
    Erhielt 2.046 Danke für 1.627 Beiträge

    Standard

    hätte man den verlinkten beitrag sorgfältig gelesen, wäre man auf die adressproblematik gestoßen, weswegen mehrfach auch das direkte laden der anfangsadresse hingewiesen wurde, aber mittlerweile bin ich offensichtlich auch nur noch eine gebetsmühle...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  10. #10
    anne ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    01.02.2010
    Beiträge
    345
    Danke
    0
    Erhielt 2 Danke für 2 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Nun, in dem verlinkten Beitrag wird aufgezeigt, dass es sinnvoller ist, die Startadresse des Arrays über den Befehl

    LAR1 P##aRealArray //Startadresse des Arrays ins Adressregister laden

    zu laden.

    Habe das jetzt mal in den Programmcode eingeflochten - hoffe das stimmt!

    Offensichtlich fehlte in dem von mir dargestellten Code noch das Laden der Werte in die einzelnen Array-Felder - habe da noch etwas gefunden...

    U #Trigger
    FP #Flanke
    SPBN END

    // ---- Laden der Werte in die einzelnen Array-Felder --- //

    LAR1 P##Register // Laden der Startadresse des Arrays

    L 7
    nex1: T #Position

    L DID [AR1,P#4.0]
    T DID [AR1,P#0.0]
    +AR1 P#4.0

    L #Position
    LOOP nex1

    L #IN_Wert
    T #Register[7]

    // --- Mittelwertbildung --- //

    LAR1 P##Register // Laden der Startadresse des Arrays

    L 0.0
    T #Summe

    L 7
    nex2: T #Position

    L DID [AR1,P#4.0]
    L #Summe
    +R
    T #Summe
    +AR1 P#4.0

    L #Position
    LOOP nex2

    L #Summe
    L 8
    /R
    T #Mittelwert

    END: NOP 0


    So, somit wäre das Laden der Werte in die einzelnen Array-Felder geklärt.

    Was mir aber noch immer nicht klar ist:

    L DID [AR1,P#4.0] //Aktuelle Position im Array
    L #Summe //Temp-Variable

    Hier müsste doch im ersten Schleifendurchlauf das 1. Feld des Arrays geladen werden. Passiert das auch?

    Danke, anne
    Geändert von anne (02.02.2010 um 08:20 Uhr)

Ähnliche Themen

  1. Wie Setze ich Programmcode in Step 7 um
    Von Björn im Forum Programmierstrategien
    Antworten: 4
    Letzter Beitrag: 25.02.2010, 11:22
  2. Übersetzung des S+ Programmcode
    Von TiNa_cb im Forum Programmierstrategien
    Antworten: 3
    Letzter Beitrag: 19.11.2009, 12:55
  3. Frage zu Programmcode!
    Von bastler im Forum Simatic
    Antworten: 11
    Letzter Beitrag: 20.09.2009, 19:14
  4. S7-317-2 per Programmcode neu starten
    Von marac im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 22.01.2007, 18:05
  5. SCL-Programmcode
    Von hobel im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 17.07.2006, 22:03

Lesezeichen

Berechtigungen

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