# Endlosschleife programmieren?? Wie ist das möglich?



## tino2512 (24 August 2006)

Hi,

ich habe folgendes Problem. 
ich möchte eine Schleife programmieren. habe ein Start_Signal, welches den Schleifendurchlauf starten soll. in dieser schleife wird dieses Signal rückgesetzt. nun soll wieder zurückgesprungen werden und das Start_Signal abgefragr werden, welches dann die schleife erneut startet.
Die Abfrage vom Start_Signal und der Schleifendurchlauf sollen nur durch E0.0 gestopt werden und der nächste programmschritt bearbeitet werden.

Bei den versuchen, welche ich gestartet habe, hat die CPU beim übergang von stop zu run immer wieder einen laufzeitfehler angegeben.

Wer hat einen Tip für mich ?
	

	
	
		
		

		
			





mfg Tino


----------



## sps-concept (24 August 2006)

*Schleife*

Hallo,

wenn du die Schleife durch einen Eingang stoppen willst dann solltest du je Zyklus einen Durchlauf machen. Wie soll er sonst auf einen Signalwechsel reagieren? Evtl noch das PEB einlesen. Aber is für mich irgendwie unsauber.

MfG
André Räppel


----------



## Martin007 (24 August 2006)

*Endlosschleife*

Hallo

dein Problem ist das Ansprechen der Zykluszeitüberwachung.
Abhilfe:
in der Schleife die Zykluszeitüberwachung nachtriggern mit der SFC 43 "RE_TRIGR"
Mit der SFC 43 "RE_TRIGR" (retrigger watchdog) starten Sie die Zykluszeitüberwachung der CPU neu.
Dann solte der Laufzeitfehler nicht mehr auftreten. 

Aber da sich der Zustand von E0.0 nicht ändert (Prozeßabbild der Eingänge wird nich neu eingelesen), wird das Verlassen der Schleife ein Problem sein.

Vieleicht nützt es, das Prozeßabbild der Eingänge in der Schleife mit der SFC 26 "UPDAT_PI" zu aktualisieren.
Mit der SFC 26 "UPDAT_PI" (update process image) aktualisieren Sie das OB 1-Prozeßabbild (=Teilprozeßabbild 0) der Eingänge oder ein mit STEP 7 definiertes Teilprozeßabbild der Eingänge.

Martin


----------



## MSB (24 August 2006)

Hört sich jetzt zwar blöd an,
aber die SPS arbeitet das Programm als Endlosschleife ab.

Vielleicht solltest du dir da nochmal grundsätzlich Gedanken machen?

Weil mir fällt jetzt auf Anhieb nichts ein, wofür man eine Endlosschleife in deinem Sinn
benötigen könnte.


----------



## Kai (24 August 2006)

tino2512 schrieb:


> ich möchte eine Schleife programmieren. habe ein Start_Signal, welches den Schleifendurchlauf starten soll. in dieser schleife wird dieses Signal rückgesetzt. nun soll wieder zurückgesprungen werden und das Start_Signal abgefragr werden, welches dann die schleife erneut startet.
> Die Abfrage vom Start_Signal und der Schleifendurchlauf sollen nur durch E0.0 gestopt werden und der nächste programmschritt bearbeitet werden.


 

Hallo Tino,

also irgendwie verstehe ich noch nicht so ganz, was Du hier programmieren willst.  

Vielleicht kannst Du ja mal Deinen bisherigen Programmcode hier ins Forum stellen, vieleicht wird das Problem dann etwas klarer.

Gruß Kai


----------



## tino2512 (25 August 2006)

Kai schrieb:


> Hallo Tino,
> 
> also irgendwie verstehe ich noch nicht so ganz, was Du hier programmieren willst.
> 
> ...


 
bin jetzt noch nicht der erfahrenste im programmieren 
	

	
	
		
		

		
		
	


	




also mein erster Versuch sah so aus:

M000: CLR
         L einl_Start
         L +1
         ==I
         SPB M001
         SPA M000

M001: R einl_Start
         L PEW 1            
         T AE_Norm
         CLR
         L Abbruchbedingung
         L +1
         ==I
         SPBN M000
         SPA M002

M002: NOP 0


----------



## Kai (25 August 2006)

Ich gehe mal davon aus. dass es sich bein den bei den Variablen "ein_Start" und "Abbruchbedingung" um einzelne Bitvariablen handelt, also z.B um E0.0 oder um M0.0.

Dann sollte der Programmcode eigentlich folgendermaßen lauten:  


```
U   ein_Start
     UN  Abbruchbedingung
     SPB M01
     SPA M02
M01: R   ein_Start
     L   PEW 1
     T   AE_Norm
M02: NOP 0
```
 
Gruß Kai


----------

