Step 7 SFB4 im FB verwenden

spirit

Level-1
Beiträge
961
Reaktionspunkte
23
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich wollte gerne in einem FB (AWL) mehrere Timer verwenden. Nun könnte man das ja wie folgt machen:

T1-T4 als Datentyp "Time" deklarieren.

Frage mich nur gerade, ob es nicht eleganter wäre hier immer einen SFB4 zu verwenden?


Im Grunde werden im FB in den vier Netzwerken je ein Timer geladen. Diese Timer sollen dann in einer FC ausgewertet werden und bei Ablauf einen Ausgang schalten.

Komme da aber nicht mit der Deklaration zurecht, es gibt hier ja nicht die Möglichkeit SFB4 als Datentyp auszuwählen.

Und müsste ich die SFB4's dann als IN_OUT deklarieren?


Lieben Dank!
 
Komme da aber nicht mit der Deklaration zurecht, es gibt hier ja nicht die Möglichkeit SFB4 als Datentyp auszuwählen
Du kannst aber SFB4 als Datentyp eintippen.
Dann tippst du "Call <Instanzname>" ins AWL-Netzwerk ein und drückst auf Enter.

Sonst noch ne Möglichkeit für FUP. SFB4 reinziehn, Rechtklick drauf, Ändern in Multiinstanz, Namen vergeben. Dann fügt Step7 die Instanz selbst ins STAT ein.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo spirit.
Wenn ich dich richtig verstanden habe, brauchst du doch nur einen Multiinstanzfähigen FB anlegen, dort im 'STAT' Bereich den SFB4 anlegen und diesen dann auf einer Leerbox (Alt+F9) verschalten, oder?
SPS-Forum_SFB4.png

Gruß,
Tuffi
 
Da war RONIN schneller.
Danke für den Hinweis mit rein ziehen und rechts klick. Das wusste ich so auch noch nicht.
 
Hallo spirit.
Wenn ich dich richtig verstanden habe, brauchst du doch nur einen Multiinstanzfähigen FB anlegen, dort im 'STAT' Bereich den SFB4 anlegen und diesen dann auf einer Leerbox (Alt+F9) verschalten, oder?

Anhang anzeigen 27361

Gruß,
Tuffi

Danke Tuffi,

also es soll so aussehen:

In einem FB sind mehrere Timer programmiert --> SFB4

In einer FC werden diese Timer dann ausgwertet; d.h. wenn ein Timer abgelaufen ist, dann schaltet z.B. ein Ausgang.

Bei deinem Vorschlag kann ich aber doch nicht mit einer FC arbeiten, oder?

@RONIN:

Wenn ich SFB4 einfach als Datentyp eintippe, so erscheint TON rot!

Timer.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich SFB4 einfach als Datentyp eintippe, so erscheint TON rot!
Hast du den auch denn auch den SFB4 aus der Standard-Library in deinen Bausteinordner eingefügt?

Wo versuchst du denn die Timer zu deklarieren? FB-STAT.
In einem FB sind mehrere Timer programmiert --> SFB4
In einer FC werden diese Timer dann ausgwertet; d.h. wenn ein Timer abgelaufen ist, dann schaltet z.B. ein Ausgang.
Aus deiner Beischreibung werde ich auch nicht schlau.
Sind deine Timer-Instanzen also im FB als Multinstanz programmiert und im FC willst du nur den Ausgang davon haben?
Versuchst du grad im FC eine SFB4-Instanz zu deklarieren?
 
Zuletzt bearbeitet:
ich weiß jetzt wie meist nict in welcher Sprache du programmierst.
Wenn du in FUP oder AWL schreibst:
SFB aus der Biliothek einfügen.
Dann wird nach dem DB gefragt wird, rechte Maustaste und eine eindeutigen Namen vergeben.
Der wird dann oben als Strukt eingefügt.

Also so bei allen Multiinstanzen.
Aber "F1" hilft auch bei diesem Problem? :ROFLMAO:


bike
 
@spirit
Entweder schaltest du den Ausgang direkt im Aufrufenden FB, indem du am jeweiligen Timer an 'Q' deine Ausgänge hängst,
oder du legst die Ausgänge auf Merker und diese verwendest du dann in deinem FC,
oder du greifst direkt auf den Instanz DB des Aufrufenden FBs drauf zu:
SPS-Forum_SFB4-1.jpg
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@Tuffi. Man könnte dem FB-IDB aber auch einen symbolischen Namen verpassen.
Dann gehts auch mit "U IDB-Name.TON". Direkte Instanzdatenzugriffe sind aber Geschmackssache... ;)
 
Natürlich.
Aber ich gehe davon aus, das spirit mit dem kram noch nichts zu tun hatte, und da finde ich es zur Veranschaulichung einfacher, es erst mal 'nackt' zu zeigen.

Wo wir gerade schon dabei sind, kann man die Sache auch so aufzäumen, wenn man nicht auf den I-DB zugreifen möchte:
SPS-Forum_SFB4-2.jpg

edit: natürlich auf 'A' schreiben!
 
Zuletzt bearbeitet:
Warum richtig machen, wenn man auch basteln kann?
Es schaut toll aus, wenn ein SFB in einem Netzwerk ist, aber keinerlei EIn- oder Ausfänge sichbar verschaltet sind.:rolleyes:
Inbetriebnehmer, die nachts um drei bei einem Stillstand das Problem suchen, werden euch verfluchen.
Warum nicht eine Funktion oder Funktionsbaustein als geschlossene Einheit anschauen und alles was wo anders verwendet wird auf Merker oder DB legen?


bike
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Meine Screenshots galten spirit als einfache Veranschaulichung für seine Frage.
Über Programmierstil kann man sich hier sicher in 10 anderen Threads unterhalten und die Diskussion darüber ist in diesem Thread für mich erledigt.

Gruß,
Tuffi
 
ich weiß jetzt wie meist nict in welcher Sprache du programmierst.

bike

Habe ich doch in meinem Thread #1 geschrieben: AWL


Wo versuchst du denn die Timer zu deklarieren? FB-STAT.

Sind deine Timer-Instanzen also im FB als Multinstanz programmiert und im FC willst du nur den Ausgang davon haben?

Hatte ursprünglich versucht den Timer bei FB-IN zu deklarieren. Und dann wird eben TON rot dargestellt.

Ja, möchte jetzt den Weg von Tuffi beschreiten und habe vier Timer-Instanzen im FB als Multiinstanz programmiert und im FC will ich nur den Ausgang davon.

Tuffi hat mir ja schon den Weg dazu aufgezeigt ...

Meine Frage jetzt noch:

Ich möchte im Multiinstanz-FB gerne in AWL programmieren; wie rufe ich denn da diese vier Timer auf?
 
Die Timer im 'STAT' Bereich anlegen, und dann, ich habe meinen Timer ja "TIMER1" genannt:
Code:
call TIMER1
eintippen. Da kommt dann folgendes bei raus:
Code:
CALL  #TIMER1
       IN:=
       PT:=
       Q :=
       ET:=
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Timer im 'STAT' Bereich anlegen, und dann, ich habe meinen Timer ja "TIMER1" genannt:
Code:
call TIMER1
eintippen. Da kommt dann folgendes bei raus:
Code:
CALL  #TIMER1
       IN:=
       PT:=
       Q :=
       ET:=


Sorry Tuffi,

glaube habe mich blöd ausgedrückt.

Es soll ja in dem Multiinstanz FB sowas in der Art (nur halt mit SFB4) rauskommen:

Timer.jpg

Und da jetzt die Frage, wie ich da den SFB4-Timer integrieren kann?
 
Code:
U Eingang_0
U Eingang_1
= #TempBit   //z.B.: Bit Im TempBereich

CALL  #TIMER1
       IN:= #TempBit
       PT:= T#3s
       Q :=
       ET:=
Wenn du z.B: den Timer in FUP mit nem UND-Gatter beschaltest und dann in AWL umschaltest bekommst du das gleiche Ergebnis.

Bike hat hier nicht unrecht.
Den FB willst du doch nicht nur für die Timer verwenden, oder? Wenn doch, schreib dein Programm gleich in den FB.
Tuffi hat hier aber auch recht. Lassen wir dass mal.

@Tuffi (eins weiter unten): haha! Bin ja auch zu faul Step7 auszupacken.... 8)
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich danke euch vielmals für die Beispiele!

@RONIN:

Nein, nicht nur für die Timer. Im Multiinstanz-FB ist eine Auswertung der Schrittmerker von Schrittketten programmiert.

Wenn die Schrittkette nicht durchläuft, dann wird mittels des entspr. Timers in einem Melde-FC der Fehler angezeigt ... daher nur die Auswertung des Timer-Ausgangs in der FC!


Ich nehme an, dass ich für jeden programmierten #TIMER ein separates #TempBit programmieren muss? :confused:
 
Ich nehme an, dass ich für jeden programmierten #TIMER ein separates #TempBit programmieren muss? :confused:
Nö, nicht zwingend.
Das Temp-Bit dient nur zum Speichern des Zwischenergebnisses (wie ein Merker z.B.) das dann an den FB-Input übergeben wird.
Da das TempBit ja direkt vor dem Timeraufruf beschrieben wird kannst du dasselbe Bit auch beim nächsten Timer verwenden. Du muss es halt wieder vor dem Aufruf beschreiben.

Bei mir heißt dass Ding üblicherweise einfach bTmp (bool-Temp) und wird für alles mögliche genutzt.
 
Zurück
Oben