Step 7 TEMP im FC

S7Anfänger

Level-1
Beiträge
262
Reaktionspunkte
2
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Leute,

Sicher eine blöde Frage.

Ich habe einen FC erstellt und habe darin eine TEMP geschrieben, um ein Signal von einem Netzwerk zum anderen zu bekommen.
Kann ich die TEMP mehrmals abrufen? Oder nur einmal schreiben und einmal lesen?

Würde die TEMP nämlich gern in mehreren Netzwerken wieder verarbeiten.

Oder gibt es dafür etwas anderes?

Vielen Dank

Hagen
 
Nö, den Temp kannst du innerhalb des FCs so oft verwenden wie du willst. Der Wert der drin steht ist solange gültig, bis der FC verlassen wird.

Bedenke nur dass du vor der ersten "lesenden" Verwendung des Temp-Wert, einen Wert zuweisen musst. Wenn das Programm den FC beginnt ist der Temp-Wert nicht mit 0 initialisiert sonder mir "zufälligen" Werten.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das würde bedeuten, das ich den TEMP im NW 1 schreiben muss und in den danach folgenden lesen kann.

Wenn ich ihn im NW 3 schreibe und in NW 1 lesen will klappt es nicht.

So richtig?
 
Genau, das hast du richtig verstanden.

Temp ist eben tempörär, bedeuted wiederum dass der Wert beim Beginn des Bausteins ohne Gültigen Wert ist und der Wert beim Verlassen des FCs wieder verworfen wird.

Ist also ideal um sich Zwischenergebnisse zu merken die man nur im aktuellen FC-Durchlauf braucht.
 
Dann habe ich wohl jetzt ein Problem.

Habe nämlich den Fall das ich im NW 1 den TEMP1 lese und verarbeite. Daraus wird dann der TEMP2. Diesen TEMP2 lese ich wiederum in NW 2. Im NW 2 wird aber der TEMP1 erst geschrieben.
Was mache ich denn jetzt?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Dann habe ich wohl jetzt ein Problem.

Habe nämlich den Fall das ich im NW 1 den TEMP1 lese und verarbeite. Daraus wird dann der TEMP2. Diesen TEMP2 lese ich wiederum in NW 2. Im NW 2 wird aber der TEMP1 erst geschrieben.
Was mache ich denn jetzt?

Temp1 im NW1 lesen ist ja schon mal nichts, da zufällig 0 oder 1 drin stehen kann.
Also müsste Temp1 eine globale Variable sein (M,DBX, IN, INOUT usw.., oder eine Stat im FB)
 
Woher kommt denn der Wert des Temp1?

So wie du schreibst möchstest du dir den Wert über einen Progammzyklus hinweg merken. Dafür ist Temp (wegen seiner Definition) nicht geeignet.

Dafür gibt es andere Möglichkeiten.
Wen ich dir zu einer raten soen musst du mir aber mehr sage. Was genau hast du denn vor? Versuchst du eine wiederverwendbare Funktion zu schreiben? Zeig vieeleicht auch mal deine beiden Netzwerke her.
 
Hier mal drei Bilder dazu.

Die Gelb markierten sind TEMP.
 

Anhänge

  • TEMP2.PNG
    TEMP2.PNG
    13,6 KB · Aufrufe: 30
  • TEMP3.PNG
    TEMP3.PNG
    12,8 KB · Aufrufe: 27
  • TEMP1.PNG
    TEMP1.PNG
    14,8 KB · Aufrufe: 25
Zuviel Werbung?
-> Hier kostenlos registrieren
Hier mußt du einen anderen Weg als deine Temp´s finden (Merker, Global-DB). Die 2 Temp´s die du im NW4 liest werden ja erst im NW5+6 beschrieben. Diese Werte sind aber beim erneuten Durchlauf durch den FC nicht mehr verwendbar, da sie halt nur temporär sind, d.h. nur zur Bearbeitung des FC´s auch Werte von diesem führen.

Gruß Mike
 
OK, deinen Bildern nach handelt es sich anscheinend um keinen wiederverwendbaren FC da du ja globale Recourcen (S5-Timer / Flankenmerker) verwendest.
Damit das in einem FC funktioniert musst du, da der FC sich ja nichts merken kann
  • Die gelb markierten Werte global (Datenbaustein/Merker) definieren
  • Die Netzwerke innerhalb des FC passend anordnen (wird aber schwierig sein, da sehr viel Temp)

Für deine Art der Programmierung, sieht so aus als hättest du versucht so viel wie möglich lokal und nicht global zu definieren, würde ich dir eigentlich empfehlen einen FB anstatt eines FC zu verwenden
und dann deine Werte anstatt des Temp-Bereichs im Stat-Bereich des FB zu deklarieren.

Also einfach einen FB erzeugen, deinen Code rüberkopieren und dann die Temp-Werte aus dem FC im Stat-Bereich des FB einfügen.
Es reicht auch wenn du nur die gelb markierten Werte im Stat deklarierst und den Rest wieder ins Temp nimmst.

Dann kannst du genau so programmieren wie du es da vorhast. Du kannst dann auf die Flankenmerker im Stat deklarieren und eventuell auch S7-Timer verwenden.
Bist du im Umgang mit FBs und dessen STAT-Bereich, sowie den dazugehörigen Instanz-DBs vertraut?
 
Zuletzt bearbeitet:
Hallo Ronin,

Also um genau zu sein habe ich eine 3 Tage einweisung von einem Selbstständigen S7 Programmierer bekommen. Das projetzt das ich jetzt gemacht habe war das erste. Läuft auch gut das Programm.

Sollte ich in zukunft dann lieber FB´s anstatt Fc´s nehmen? Die programme sind eigentlich nicht sehr groß bei uns. Wir werden sie durch die ProfiNet funktion jetzt auch öter nutzen da wir damit auch unsere FU's ansteuern können.

Ich habe mein Programm immer in einzelne Abschnittu unterteilt und diese dann in FC's Programmiert, damit die OB's später schön übersichtlich sind.
Ist es also besser FB's zu nehmen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
diese Frage läßt sich nicht pauschal beantworten, da es auch ein bißchen Geschmackssache ist.
Grundsätzlich kann man aber das Folgende sagen :
- Braucht dein Baustein ein "Gedächtnis" (er soll sich also Dinge,Werte,Zustände von Zyklus zu Zyklus oder von Aufruf zu Aufruf merken) dann ist ein FB IMMER die bessere Wahl. Du kannst dann so alles schön zusammen halten, was zusammen gehört. Dazu können in dem Fall dann sogar Zeiten (bei Verwendung der IEC-Timer SFB3 .. 5) gehören.
- Soll dein Baustein aus den Daten seiner Schnittstelle (IN,IN_OUT,OUT) nur etwas zusammenfassen/errechnen dann ist hier möglicherweise ein FC die bessere Wahl. Das könnte auch gelten, wenn der Baustein einer Art Aufruf-Strukturierung dienen soll.

Ansonsten mußt du es von Fall zu Fall für dich entscheiden. Du wirst im Laufe des "damit Arbeiten" deinen Stil sowieso verändern / entwickeln ...

Gruß
Larry
 
Zurück
Oben