Daten Loggen für Anfänger

Zuviel Werbung?
-> Hier kostenlos registrieren
ein freundliches :sm18:

Code:
      L     1
      T     #Schleifen
ANF:  L     "MW100"
      SLD   3
      LAR1  
      AUF   DB   112
      L     "MW188"                     // zu speichender wert
      T     DBW [AR1,P#0.0]             //  Wert Abspeichern
      U     "M180.0"
      L     "MW100"
      L     10
      +I    
      T     "MW100"
      L     #Schleifen
      L     1
      -I    
      T     #Schleifen
      L     0
      L     #Schleifen
      ==I   
      SPB   END
      LOOP  ANF
END:  NOP   0

Meine Schleife macht was sie willlllllllllllllllllll und der pointer geht in die tausender und die CPU geht in STOP
Dirgendwie geht er nicht raus aus dem program!
Liegt es vllt. daran das es in ob1 liegt und immer wieder neu gestart wird? kam mir gerade mal so!


Okay habe es jetzt in ein FC geschrieben und habe den AUfruf mit einem Merker verknüpft! funk auch, aber wenn ich die funktion starte macht der zähler was er will, er geht nicht um 10 schnitte sondern um 1024 schritte weiter !!!
 
Zuletzt bearbeitet:
Code:
      L     [COLOR=Red][B]10[/B][/COLOR]
[COLOR=Red][B] ANF:[/B][/COLOR] T     #Schleifen
      L     "MW100"
      SLD   3
      LAR1  
      AUF   DB   112
      L     "MW188"                     // zu speichender wert
      T     DBW [AR1,P#0.0]             //  Wert Abspeichern
      U     "M180.0"
      L     "MW100"
      L     10
      +I    
      T     "MW100"
//      L     #Schleifen
//      L     1
//      -I    
//      T     #Schleifen
//      L     0
//      L     #Schleifen
//      ==I   
//      SPB   END
     [COLOR=Red][B] L     #Schleifen[/B][/COLOR]
      LOOP  ANF
END:  NOP   0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe ich so versucht, aber funkt immer noch nicht, bekomme wenn ich MW100 mit 8 vorbelege nach 1 durchlauf den Wert 1030 im MW 100 zurück, da sollte aber 18 drinne stehen!

Was vor der schleif auch schon ging!
SUB der befehl LOOP den Index um 1? habe ich nirgengs gefunden?
 
Ich wüßte gerne mal, was du mit "1 Durchlauf" meinst. Ist dir klar, daß die Schleife immer komplett durchgearbeitet wird, innerhalb von einem SPS-Zyklus. Daher ist das MW188 auch eher erstmal nur ein Versuch, oder? Es wir immer das selbe MW188 gespeichert, da es sich innerhalb der Schleife und damit des einen SPS-Zyklus ja nicht ändert. Den 1. Durchlauf kannst du nur beobachten, wenn du die CPU mit Haltepunkten stoppst, ansonsten siehst du maximal das Endergebnis nach dem Abarbeiten der Schleife.

PS: Wie belegst du das MW 100 denn vor???
Schreib vor die Schleife:

L 8
T MW100

Wenn du das in der Variablentabelle machst, wird das nichts werden, da der OB1 nach seinem Ende ja wieder von vorn beginnt! Dein MW100 wird also immer weiter hoch gezählt, bis es knallt, weil der DB nicht mehr reicht.

Wozu ist M180.0 gut???
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Vllt noch mal zum Anfang!

ICH will eine schleife die meinen Pointer immer um 10 position hochzählt wenn 1 takt kommt!

hallo,
ich denke du willst wegen M180.0 sagen, wenn du einen neuen wert hast kannst du ihn in db speichern sonst nicht
wenn das so ist denn schlag ich so vor

Code:
       L     [COLOR=red][B]10[/B][/COLOR]
[COLOR=red][B]ANF:[/B][/COLOR] T     #Schleifen
      L     "MW100"
      SLD   3
      LAR1  
      AUF   DB   112
     [SIZE=3][COLOR=magenta] U   M180.0[/COLOR][/SIZE]
[SIZE=3][COLOR=#ff00ff]     FP M190.0  // das kannst du selbt wahlen[/COLOR][/SIZE]
[SIZE=3][COLOR=#ff00ff]    = M190.1  // das kannst du selbt wahlen[/COLOR][/SIZE]
[SIZE=3][COLOR=#ff00ff]    Un M190.1[/COLOR][/SIZE]
[SIZE=3][COLOR=#ff00ff]     SPB END[/COLOR][/SIZE]
      L     "MW188"                     // zu speichender wert
      T     DBW [AR1,P#0.0]             //  Wert Abspeichern
      L     "MW100"
      L     10
      +I    
      T     "MW100"
//      L     #Schleifen
//      L     1
//      -I    
//      T     #Schleifen
//      L     0
//      L     #Schleifen
//      ==I   
//      SPB   END
     [COLOR=red][B]L     #Schleifen[/B][/COLOR]
      LOOP  ANF
END:  NOP   0
 
Ich würde es mal so probieren:

Code:
      UN    M    180.0
      SPB   END

      L     8
      T     MW   100
      L     10
ANF:  T     #Schleifen
      L     MW   100
      SLD   3
      LAR1  
      AUF   DB   112
      L     MW   188                    // zu speichender wert
      T     DBW [AR1,P#0.0]             //  Wert Abspeichern
      L     MW   100
      L     10
      +I    
      T     MW   100
      L     #Schleifen
      LOOP  ANF

      R     M    180.0
END:  NOP   0

1 Mal M180.0 setzen Arbeitet die Schleife einmalig ab, danach wird der M180.0 wieder zurückgesetzt. Allerdings auch hier, MW188 hat in der Schleife ja immer den selben Inhalt, wird also 10 Mal in den DB geschrieben. Ob du das so wolltest ???
 
Code:
         L     8                         // stellt die Start adresse da
         T     MW100                // Merkwort(INT) für den Pointer
         L     10                       // Anzahl der schleifen durchläufe
ANF:   T     #Schleifen
          L     "MW100"
           SLD   3
      LAR1  
      AUF   DB   112
      L     "MW188"                     // zu speichender wert, Daten sie sich ändern und immer abgespeichert werden sollen, wenn z.b. M180.0 kommt
      T     DBW [AR1,P#0.0]             //  Wert Abspeichern
      U     "M180.0"
      L     "MW100"                          //jetzt den pointer noch um 10 position erhöhen
      L     10
      +I    
      T     "MW100"         
      L     #Schleifen             // Warten an anfang und werte erst wieder abspeichern wenn M180 kommt
      LOOP  ANF
      NOP   0

das wäre eine
if M180.0 ==1 then speichere die Werte und erhöhe den pointer
Else do nothing

könnt ihr mir dabei helfen?
 
Zurück
Oben