Step 7 FB-Aufruf innerhalb einer Schleife [SCL]

WenDeLuxe

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

für die Auswertung eines digitalen Signals (Alarm) verwende ich einen FB.
Der FB hat verschiedene Funktionen wie z.B. Zeitverzögerungen usw.

Ich muss 300 verschiedene Alarme erfassen. Damit ich nicht jeden Alarm einzeln versorgen muss, wollte ich eine Schleife programmieren.
Gibt es eine Möglichkeit, den FB in einer Schleife 300 Mal aufzurufen?
Welche "Hilfsfunktionen/Systemfunktionen" sind dazu notwendig?

FOR i := 0 TO 299 DO
// Lade FB Gedächnis (Instanz von i)
// Lade Aktualparameter
// FB ausführen
// speichere FB Gedächnis (Instanz von i)
END_FOR;



STEP 7 V5.5 + SP4 / S7-SCL V5.3 + SP6 + Upd2
Bin ich mit meinen Überlegungen auf dem "richtigen" Weg?
 
Moin WenDeLuxe,

prinzipiell kann man das machen.
Ich würde einen DB mit einem Array[0..n] of FBxy anlegen.
Dann im Schleifendurchlauf den IDB mit den Daten des Array zu diesem Schleifendurchlauf laden.
FB aufrufen und anschließend das Array-Element wieder mit den Informationen des IBN laden.

Vielleicht ist es sinnvoll nur die Datenstruktur der statischen Variablen (STATIC) in ein array abzulegen. Alles andere wird ja beim Aufruf übergeben bzw. ist nur bei dem jeweiligen FB-Durchlauf aktuell (TEMP).
Oder man könnte die INPUT und INPUT/OUTPUT Variablen schon vorher zuweisen (dem jeweiligen Array-Element). Dann macht man keine Übergabe innerhalb der Schleife.

VG

MFreiberger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Gibt es, falls Deine SPS FB-Instanz-Arrays kann und Du TIA verwendest. In Step7 V5.x geht das nicht (höchstens über höchst undurchsichtiges Gebastel in AWL).
Dazu müssten dann auch sämtliche FB-In/Out-Beschaltungsvariablen indizierbar sein (in Arrays liegen). Schon allein das kopieren in/aus die Arrays kann aufwendiger sein als 300 konventionell einzeln hingetippte FB-Aufrufe.

Viel Spaß bei eventueller Störungsanalyse - solch ein "tippfauler ;) Programmierer"-Konstrukt läßt sich kaum finden und beobachten.

Harald
 
Harald, es soll tatsächlich Leute geben, für die Zeit und Effektivität wichtige Aspekte sind :ROFLMAO: .
Warum soll man sich das Leben nicht leichter machen und Routinen automatisieren? Je weniger man tippen muss, um so weniger fabriziert man Schreibfehler. Die Störungsanalyse muss dadurch nicht zwangsweise schlechter werden. Eine Störung ist letzten Endes nur das Generieren eines Events. Die ganze "Nachbehandlung" wie z.Bsp. das Verzögern, Speichern und Quittieren sind immer die selben Routinen.

@WenDeLuxe,
wie übergibst du denn deine 300 Meldungen an den FB? Kannst du die gewünschten Funktionen etwas genauer beschreiben?
 
Vielen Dank für eure Inputs.

Ich habe einen FB für die Auswertung eines Alarms. Dieser hat verschiedene Funktionen für einen Alarm (z.B. Verzögerungszeit, Quittierfunktion, Handsteuermöglichkeit und Schnittstelle zum Leitsystem).
Ich muss 300 verschiedene Alarme auswerten. Die 300 Aufrufe habe ich in einer Quelle generiert und funktionieren soweit.

Weil ich aber eine universelle Lösung einsetzen möchte, hätte ich gerne eine Schleife im SCL programmiert.
Es geht mir nicht primär um Speicheroptimierung, jedoch möchte ich verhindern, dass Tippfehler bei der Programmierung zu Fehler führen.

Ich lese mich noch zum Thema BLKMOV (SFC 20) ein. Könnte ich auch mit Pointern arbeiten?
(Weil ein Move-Befehl ja auch Systemressourcen braucht...)
 
Zurück
Oben