Endlosschleife programmieren?? Wie ist das möglich?

tino2512

Level-1
Beiträge
86
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
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 ?
icon5.gif


mfg Tino
 
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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Zuletzt bearbeitet:
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.
 
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. :confused:

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

Gruß Kai
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Tino,

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

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

Gruß Kai

bin jetzt noch nicht der erfahrenste im programmieren
icon10.gif


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
 
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: :rolleyes:

Code:
     U   ein_Start
     UN  Abbruchbedingung
     SPB M01
     SPA M02
M01: R   ein_Start
     L   PEW 1
     T   AE_Norm
M02: NOP 0

Gruß Kai
 
Zurück
Oben