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

Seite 22 von 26 ErsteErste ... 122021222324 ... LetzteLetzte
Ergebnis 211 bis 220 von 253

Thema: Online Lehrgang bei SPS-Forum oder Hausaufgabe

  1. #211
    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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von PhilippL Beitrag anzeigen
    Die Position wird doch durch das Decrementieren der Schleife erneuert oder versteh ich da was falsch?
    deine schleife funktioniert so nicht, weil sie nicht richtig aufgebaut ist, wäre sie es, könntest du mit dem schleifenindex natürlich weiterarbeiten, allerdings mußt du aus diesem dann die pointeradresse berechnen und wie wir gestern gesehen haben ist diese bei der adressierung über MW[#Merker] genauso aufgebaut wie bei einem pointer (ist ja auch einer ) also du mußt die byteadresse mal 8 (SLD 3) nehmen um das richtige format zu erreichen, also insgesamt sehr umständlich, daraus eine adresse zu berechnen und das ganze dann noch für die schleife zu benutzen ...

    zum Schleifenaufbau:

    Code:
    *
          L     #durchlaeufe                //Anzahl der Durchläufe gesamt
    next: T     #schleifenzaehler           //in den Zaehler transferieren
    
          //Anweisungsteil der Schleife
    
          L     #schleifenzaehler           //Zaehler aufrufen
          LOOP  next                        //um ihn um eins verringern zu können und an den Einstiegspunkt der Schleife zu springen
    im anweisungsteil kannst du #schleifenzaehler natürlich verwenden, aber wenn möglich nicht beeinflußen, zu schnell befindet man sich in einer endlosschleife und die zykluszeitüberwachung schlägt zu...

    zur addierschleife: nimm dir noch eine TEMP-variable dazu, in der du das zwischenergebnis speicherst (setz sie vor der schleife sicherheitshalber auf null) und dann addierst du in 8 durchläufen jeweils ein element des arrays zu dieser TEMP-variablen ... macht die summe aller elemente
    Geändert von vierlagig (29.08.2008 um 13:28 Uhr)
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  2. #212
    Registriert seit
    02.08.2007
    Ort
    BW im Ostalbkreis
    Beiträge
    249
    Danke
    32
    Erhielt 27 Danke für 25 Beiträge

    Standard

    Um dann mal dein Muster aufzugreifen sollte das ganze doch in etwa so ausschauen

    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

  3. #213
    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

    Zitat Zitat von PhilippL Beitrag anzeigen
    Um dann mal dein Muster aufzugreifen sollte das ganze doch in etwa so ausschauen
    sehr schön ... das sollte sogar funktionieren... schön wäre, auch wenn es anders funktioniert, wenn du eine REAL 8, also 8.00 zur division benutzt

    ich hatte mir grad beim kaffee überlegt: es wäre doch ganz schön, wenn man den wertepuffer löschen könnte. also ich hätt da jetzt noch gern ein RESET, dass den puffer mit 0.00 lädt ...

    und dann mal den kompletten baustein zusammenbauen ...
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  4. #214
    Registriert seit
    02.08.2007
    Ort
    BW im Ostalbkreis
    Beiträge
    249
    Danke
    32
    Erhielt 27 Danke für 25 Beiträge

    Standard

    Dann versuch ichs doch mal...

    Code:
    U     #Trigger
          FP    #Flanke
          SPBN  M001
          L     12                          //Startadresse des Arrays
          SLD   3                           //Pointererzeugen
          LAR1                              //und ins Adressregister laden
          L     7                           //Anzahl der Schiebevorgänge laden
    nex1: T     #Position
          L     DID [AR1,P#4.0]             //Startadresse + 1 DW
          T     DID [AR1,P#0.0]             //in Startadresse schreiben
          +AR1  P#4.0                       //und das AR1 um 4.0 erhöhen = neue Startadresse
          L     #Position                   //Schleifenzähler laden
          LOOP  nex1                        //um ihn zu dekrementieren und zurückzuspringen
          L     #IN_Wert                    //und den aktuellen Wert
          T     #Register[7]                //ins Real-ARRAY schubsen
     
          L     12                          //Startadresse des Arrays
          SLD   3                           //Pointer erzeugen
          LAR1                              // ins AR1 laden
          L     0.000000e+000               //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.000000e+000               //Anzahl Elemente des Arrays
          /R                                //teilen
          T     #Mittelwert                 //Speichern in Mittelwert
     
    M001: U     #Reset
          FP    #Flanke2
          SPBN  end
          L     12
          SLD   3
          LAR1  
          L     7
    nex3: T     #Position
          L     0.000000e+000               //Lösche aktuelle Position im Array
          T     DID [AR1,P#4.0]             //Aktuelle Position im Array
          +AR1  P#4.0                       //Adressregister erhöhen
          L     #Position
          LOOP  nex3
    end:  NOP   0
    EDIT: Irgendwie frag ich mich ob nicht die beiden letzten Schleifen einmal zuwenig laufen?ß?
    Geändert von PhilippL (29.08.2008 um 14:47 Uhr)

  5. #215
    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

    Zitat Zitat von PhilippL Beitrag anzeigen
    EDIT: Irgendwie frag ich mich ob nicht die beiden letzten Schleifen einmal zuwenig laufen?ß?
    ja, das tun sie (hab ich doch glatt übersehen, sorry)


    aber ansonsten: das sieht doch gut aus ...

    nur das NOP 0 am ende ist nicht was wir wollen, aber dazu gibt es jetzt hier exklusiv eine erläuterung:

    gilt für Bausteinaufrufe in KOP und FUP

    Wenn du den Baustein mit einem NOP 0 beendest wird der Ausgang EN0 nicht 1 ... dabei ist es doch eigentlich eine interessante Möglichkeit der Auswertung, denn so kannst du mehrere Bausteine hintereinanderschalten, die sich bedingen. Also ist im ersten Baustein irgendetwas schief gelaufen kannst du den EN0 bewußt null lassen und der darauffolgende Baustein wird nicht ausgeführt oder ein Bit am EN0 zeit dir an, dass ein Fehler aufgetreten ist. Um den EN0 auf eins zu setzen fügst du in die letzte sprungmarke folgenden code ein

    Code:
    *
    end:  SET   
          SAVE
    schon weißt du, dass alles in ordnung war.

    ... jetzt könnte man natrürlich im vorliegenden Baustein den EN0 nur eins setzen, wenn getriggert wurde und über den EN0 einmalig mitteilen "hallo, ich hab einen neuen wert berechnet"

    also insgesamt dann in etwa so:

    Code:
    *
    //------- RESET ------//
          U     #xReset
          FP    #xHelpFlag1
          SPBN  nore
    
          L     12                          //Startadresse des Arrays
          SLD   3                           //Pointererzeugen
          LAR1                              //und ins Adressregister laden
          L     8
    nex1: T     #iLoopCounter
          L     0.000000e+000               //alle acht Fächer
          T     DID [AR1,P#0.0]             //mit 0.00 besetzen
          +AR1  P#4.0
          L     #iLoopCounter
          LOOP  nex1
    
    //------ TRIGGER -----//
    nore: U     #xTrigger                   //Trigger
          FP    #xHelpFlag2                 //Auswertung
          SPBN  end
    
    //------ SHIFTER -----//
          L     12                          //Startadresse des Arrays
          SLD   3                           //Pointererzeugen
          LAR1                              //und ins Adressregister laden
          L     7                           //Anzahl der Schiebevorgänge laden
    nex2: T     #iLoopCounter
          L     DID [AR1,P#4.0]             //Startadresse + 1 DW
          T     DID [AR1,P#0.0]             //in Startadresse schreiben
          +AR1  P#4.0                       //und das AR1 um 4.0 erhöhen
          L     #iLoopCounter               //Schleifenzähler laden
          LOOP  nex2                        //um ihn zu dekrementieren und zurückzuspringen
    
          L     #rInput                     //und den aktuellen Wert
          T     #aRealArray[7]              //ins Real-ARRAY schubsen
    
    //--- SUMMING UNIT ---//
          L     12
          SLD   3
          LAR1  
          L     8
    nex3: T     #iLoopCounter
          L     DID [AR1,P#0.0]
          L     #rTemp
          +R    
          T     #rTemp
          +AR1  P#4.0
          L     #iLoopCounter
          LOOP  nex3
    
    //--- AVERAGE CALC ---//
          L     #rTemp
          L     8.000000e+000
          /R    
          T     #rAverage
    
    //---- EN0 = TRUE ----//
          SET   
          SAVE  
          BEA   
    
    //--- EN0 = FALSE ---//
    end:  CLR   
          SAVE
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  6. #216
    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

    so, wieder eine aufgabe geschafft ... war doch eigentlich gar nicht so schwer, oder?

    mal was zum nachdenken:

    ein tank mit einem flüssigen medium. es wird kontinuierlich befüllt und bei erreichen des grenzstandes max ein ventil geöffnet. der tank wird bis auf den grenzstand min abgelassen und das ventil wieder geschlossen.

    leider sind die grenzstände nur als bool-signal verfügbar, so dass eine füllstandsanzeige nicht möglich ist außer und jetzt kommt der teil zum nachdenken, man errechnet sich auf grund von erfahrungswerten einen füllstand, mißt also die zeit zum ablassen und die zeit zum befüllen und ermöglicht somit eine berechnung zwischen zwei einstellbaren füllständen, also z.b. zwischen 30 und 70% oder was man gerne hat ...

    problem verstanden?
    [SIGNATUR]
    Ironie setzt Intelligenz beim Empfänger voraus.
    [/SIGNATUR]

  7. #217
    Registriert seit
    02.08.2007
    Ort
    BW im Ostalbkreis
    Beiträge
    249
    Danke
    32
    Erhielt 27 Danke für 25 Beiträge

    Daumen hoch

    Jep, Problem verstanden und ich mach mir da mal meine Gedanken dazu!

  8. #218
    Avatar von waldy
    waldy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2003
    Beiträge
    1.425
    Danke
    297
    Erhielt 104 Danke für 69 Beiträge

    Standard

    also, nimm nochmal alle unterlagen und hilfen zur hand und mach ne erklärung fertig, wie du denn nun an die 16 taktmerker rankommst!
    Hi, ich versuche es beantworten , wenn ich habe die frage Richtig verstanden .

    UND Zählt nur bei neue Impuls von M100.5 ( CPU Generator ) , und zählt nach Positive Flanke
    U M 100.5
    FP M 0.0
    L MW 10
    + 1
    T MW 10
    ODER


    UND ( in andere Falle , wird nicht gezählt )
    U M 100.5
    FP M 0.0
    SPBN M001
    M001: = A 0.0
    Ich hoffe, das habe ich verständlich meine Gedanke erkläret, wie habe ich das Programm programmiert ?


    gruß waldy
    Geändert von waldy (30.08.2008 um 00:18 Uhr)

  9. #219
    Avatar von waldy
    waldy ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    25.10.2003
    Beiträge
    1.425
    Danke
    297
    Erhielt 104 Danke für 69 Beiträge

    Standard

    gruß waldy

  10. #220
    Registriert seit
    07.07.2004
    Beiträge
    3.285
    Danke
    38
    Erhielt 584 Danke für 382 Beiträge

    Unglücklich


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    Zitat Zitat von waldy
    Ich hoffe, das habe ich verständlich meine Gedanke erkläret, wie habe ich das Programm programmiert ?
    Also waldy, eigentlich hast Du nur verständlich erklärt, dass Du nichts verstanden hast ...

    Gruß

    Question_mark
    ''Ich habe wirklich keine Vorurteile.
    Meine Meinung ist nur die Summe der Erfahrungen" ... (Question_mark)
    Zitieren Zitieren Nix verstehn ...  

Ähnliche Themen

  1. Antworten: 10
    Letzter Beitrag: 10.03.2011, 14:58
  2. Neuer Online-Lehrgang
    Von diabolo150973 im Forum Stammtisch
    Antworten: 58
    Letzter Beitrag: 01.04.2010, 14:06
  3. Aufgaben und Lösungen aus dem Online-Lehrgang
    Von vierlagig im Forum Stammtisch
    Antworten: 7
    Letzter Beitrag: 29.08.2008, 18:07
  4. Schulung, Lehrgang oder Crashkurs für Step5
    Von diabolo150973 im Forum Suche - Biete
    Antworten: 4
    Letzter Beitrag: 19.06.2008, 19:42
  5. Forum wieder Online
    Von Markus im Forum Stammtisch
    Antworten: 1
    Letzter Beitrag: 21.03.2005, 21:49

Lesezeichen

Berechtigungen

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