Loop

Wolflesch

Level-1
Beiträge
45
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo ich habe eine Datenauswertung mit indirekter Adressierung in einem FB
geschrieben, der erste Teil wo das Array[1..49] beschrieben wird funktioniert
aber der 2. Teil wo der erste Array Puffer auf 0 gesetzt wird und der Prozentwert ausgerechnet wird funktioniert nicht, die Schleife wird immer nur
einmal durchlaufen,
Code:
     LAR1  #adress   //setzt das AR1 wieder auf Anfang
      L     48
next: T     #HM_5  //temporär INT
      L     D [AR1,P#0.0]
      DTR   
      T     #puffer
      L     0
      T     D [AR1,P#0.0]
      L     #mittelw
      L     #puffer
      >R    
      SPBN  kom1
      -R    
      NEGR  
      SPA   kom2
kom1: TAK   
      -R    
kom2: NOP   0
      L     #mittelw
      /R    
      L     100
      *R    
      RND   
      T     #puffer_2
      L     #HM_1
      UD    DW#16#FFFFFF
      LAR1  P##Prozent
      +AR1  
      L     #puffer_2
      T     D [AR1,P#194.0]
      L     #zaehler_2
      ITD   
      SLD   5
      +AR1  
      L     #zaehler_2
      INC   1
      T     #zaehler_2
      LOOP  next
      L     0
      T     #zaehler
pro1: NOP   0
 
Zuletzt bearbeitet:
ohne jetzt groß über den Sinndes ganzen nachgedacht zu haben würde ich mal sagen, dass vor

Code:
LOOP next

Code:
L #HM_5

eingefügt werden muss

Gruß Micha
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... ich stimme SPSKiller da zu ...

was ist der Sinn von HM_5 ... und dann im gleichen Abwasch ... was ist mit HM_1 - der ist mir auch suspekt ...

Da ich weiß, dass du eigentlich auch SCL programmierst ... warum schreibst du so etwas nicht in SCL ?

Gruß
LL
 
Danke für die schnelle Hilfe, das Programm ist zur Übung von indirekter Adressierung, dabei will ich einfach das Programm das ich in SCL geschrieben habe(Auswertung eines Zufallgenerators) jetzt in AWL schreiben.
jetzt habe ich das geändert, es wird zwar bei zaehler= 314 der zaehler zurückgesetzt aber die Schleife wird nicht bearbeitet,


Code:
      TAR2  #HM_1 //sichern von AR2
      L     #zaehler
      INC   1
      T     #zaehler
      L     #Zahl
      U     #hilf
      SPB   hif1
      SET   
      S     #hilf
      T     #index1
      BEA   
hif1: T     #index2
      L     #HM_1
      UD    DW#16#FFFFFF
      LAR1  P##sortier
      +AR1  
      TAR1  #adress                     //sichern von AR1
      L     #index1
      L     1                           //Umwandlung der 2 Dimensionen
      -I                                //in eine Dimension
      L     7
      *I    
      L     #index2
      +I    
      L     4
      *I    
      L     4
      -I    
      ITD   
      SLD   3
      +AR1  
      L     D [AR1,P#0.0]
      L     0
      ==D   
      SPBN  sld1
      L     #index1
      ITD   
      SLD   16
      L     #index2
      ITD   
      SLD   24
      OD    
      T     D [AR1,P#0.0]
sld1: NOP   0
      L     D [AR1,P#0.0]
      INC   1
      T     D [AR1,P#0.0]
      L     #index2
      T     #index1
      R     #hilf
      L     #zaehler
      L     314    // Auswertung 
      <I    
      BEB   
      L     3.140000e+002
      L     4.900000e+001
      /R    
      T     #mittelw
      LAR1  #adress  //setzen von AR1 auf Anfang
      L     48
next: T     #HM_5
      L     W [AR1,P#0.0]
      DTR   
      T     #puffer
      L     W [AR1,P#2.0]
      T     #adresse
      L     0
      T     W [AR1,P#0.0]
      L     #mittelw
      L     #puffer
      >R    
      SPBN  kom1
      -R    
      NEGR  
      SPA   kom2
kom1: TAK   
      -R    
kom2: NOP   0
      L     #mittelw
      /R    
      L     1.000000e+002
      *R    
      RND   
      T     #puffer_2

      L     #puffer_2
      T     D [AR1,P#194.0]

      L     #zaehler_2 
      ITD   
      SLD   5
      +AR1  
      L     #zaehler_2
      INC   1
      T     #zaehler_2
      L     #HM_5
      LOOP  next
      L     0
      T     #zaehler
      NOP   0
 
Hallo, ich wollte ja auch nur üben, mein SCL Code war auch nicht so leicht zu durchschauen und der compilierte AWL code ist fast doppelt so lang, mich würde nur interessieren warum die Schleife nicht bearbeitet wird hat das was mit dem AR1 zu
tun, oder darf ich keinen multiinstanzfähigen FB verwenden.


Gruß
Wolfgang
 
Zuletzt bearbeitet:
Schleifentest

Hallo, hallo,

nimm doch mal den ganzen Code raus und teste bloß die Schleife.

Laß dort meinetwegen einmalig irgendwo etwas hochzählen, dann weißt Du
schon mal ob es am Schleifencode liegt oder am Programm.

Die Loop Funktion ist ja in der Hilfe schön beschrieben.
 
Wo und wie wird #zaehler_2 denn initialisiert? Das erste, was du damit machst ist

L #zaehler_2
 
der zaehler2 muss doch irgendwo wieder (wahrscheinlich hinter der Schleife, so wie der andere zaehler) auf 0 gesetzt werden, oder?
Das würde IMHO sonst nen satten Bereichlängenfehler geben - wenn die Schleife läuft
 
Hallo Ralle,

im Zähler2 steht

T #puffer_2

L #puffer_2
T D [AR1,P#194.0]

L #zaehler_2
Ergo, was im Puffer 2 steht.

Soll das so sein?


Gruß Timbo

Da kann ich dir nicht ganz folgen. Er lädt in den Akku, was in #zaehler_2 zu diesem Zeitpunkt drinsteht. Das kann eigentlich alles mögliche sein, besonders, wenn es eine Temp-var ist, aber eigentlich nicht der Inhalt von -#puffer_2.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo danke für die Antworten, wenn die Schleife nicht übersprungen wird, also bei jedem Zyklus ausgeführt wird, wird sie bearbeitet,
das gleiche passiert bei einem nicht multiinstanzfähigem FB,
 
Zurück
Oben