-> Hier kostenlos registrieren
Hallo zusammen,
bis heute habe ich mich immer schön vor den FBs gedrückt, aber jetzt will es auch wissen.
Also habe ich mir einen FB geschrieben, der mich von den Timern erlösen soll, bei denen es eine ON und eine OFF zeit geben soll, einstellbar über ein TP. Da werden dann die ON und OFF zeiten als INT Werte eingegeben und im FB schön mit dem CPU-Takt runtergezählt.
Im FB habe ich folgendes hinterlegt :
IN var
1Hz Takt der CPU
Sollwert ON zeit (INT ) aus dem TP
Sollwert OFF zeit (INT ) aus dem TP
Freigabesignal
OUT var
Der Ausgang, der getaktet werden soll
INOUT var
Aktualwert der ON zeit (INT)
Aktualwert der OFF zeit (INT)
STATvar
BOOL ob die ON zeit abgelaufen ist
BOOL ob die OFF zeit abgelaufen ist
TEMPvar
BOOL Hilfsmerker für Flanke Takt 1s
BOOL Flankenmerker für Takt 1s
BOOL Hilfsmerker für Flanke Freigabe
BOOL Flankenmerker Freigabe
Programm läuft prima. Die Sollwerte sowie die Aktualwerte hole / schreibe ich in einen DB (hier199)
Aufgerufen wird der FB wie folgt :
CALL FB 200 , DB200
TAKT_5_CPU :=M100.5
SOLLWERT_T_ON :=DB199.DBW2
SOLLWERT_T_OFF :=DB199.DBW4
FREIGABE_TIMER :=DB199.DBX0.0
TAKTAUSGANG :=DB199.DBX0.1
AKTUALWERT_T_ON :=DB199.DBW6
AKTUALWERT_T_OFF:=DB199.DBW8
Soweit, so gut ( oder schlecht ? )
Jetzt muss ich den FB ja mit einem Instanzdatenbaustein (hier 200) aufrufen. Wenn ich den FB jetzt 10* aufrufen will, muss ich ja 10 verschieden DBs angeben. Das finde ich blöd und habe hier auch gelesen, dass es anders geht, Stichwort Multiinstanz ? Habe jetzt aber auch gar keine Idee, wie das gehen soll. Ich weiss nicht wo und an welcher Stelle ich diesen ominösen Pointer einsetzen soll, um dem FB zu sagen an welcher Stelle des Db er die Daten ablegen / aktualisieren soll.
Könnte mir mal bitte jemand auf die Sprünge helfen.
Habe den DB extra schon so strukturiert, dass man da einigermassen übersichtlich hinspringen könnte, wenn man weiß wie es geht.
Adr. 0.0: Freigabe_T01 BOOL
Adr. 0.1: Ausgang_T01 BOOL
Adr. 2: Sollwert_TON_T01 INT
Adr. 4: Sollwert_TOFF_T01 INT
Adr. 6: Aktualwert_TON_T01 INT
Adr. 8: Aktualwert_TOFF_T01 INT
Adr. 10.0: Freigabe_T02 BOOL
etc. für beliebig viele Timer
Danke für nen Tipp.
Gruß Wilhelm
bis heute habe ich mich immer schön vor den FBs gedrückt, aber jetzt will es auch wissen.
Also habe ich mir einen FB geschrieben, der mich von den Timern erlösen soll, bei denen es eine ON und eine OFF zeit geben soll, einstellbar über ein TP. Da werden dann die ON und OFF zeiten als INT Werte eingegeben und im FB schön mit dem CPU-Takt runtergezählt.
Im FB habe ich folgendes hinterlegt :
IN var
1Hz Takt der CPU
Sollwert ON zeit (INT ) aus dem TP
Sollwert OFF zeit (INT ) aus dem TP
Freigabesignal
OUT var
Der Ausgang, der getaktet werden soll
INOUT var
Aktualwert der ON zeit (INT)
Aktualwert der OFF zeit (INT)
STATvar
BOOL ob die ON zeit abgelaufen ist
BOOL ob die OFF zeit abgelaufen ist
TEMPvar
BOOL Hilfsmerker für Flanke Takt 1s
BOOL Flankenmerker für Takt 1s
BOOL Hilfsmerker für Flanke Freigabe
BOOL Flankenmerker Freigabe
Programm läuft prima. Die Sollwerte sowie die Aktualwerte hole / schreibe ich in einen DB (hier199)
Aufgerufen wird der FB wie folgt :
CALL FB 200 , DB200
TAKT_5_CPU :=M100.5
SOLLWERT_T_ON :=DB199.DBW2
SOLLWERT_T_OFF :=DB199.DBW4
FREIGABE_TIMER :=DB199.DBX0.0
TAKTAUSGANG :=DB199.DBX0.1
AKTUALWERT_T_ON :=DB199.DBW6
AKTUALWERT_T_OFF:=DB199.DBW8
Soweit, so gut ( oder schlecht ? )
Jetzt muss ich den FB ja mit einem Instanzdatenbaustein (hier 200) aufrufen. Wenn ich den FB jetzt 10* aufrufen will, muss ich ja 10 verschieden DBs angeben. Das finde ich blöd und habe hier auch gelesen, dass es anders geht, Stichwort Multiinstanz ? Habe jetzt aber auch gar keine Idee, wie das gehen soll. Ich weiss nicht wo und an welcher Stelle ich diesen ominösen Pointer einsetzen soll, um dem FB zu sagen an welcher Stelle des Db er die Daten ablegen / aktualisieren soll.
Könnte mir mal bitte jemand auf die Sprünge helfen.
Habe den DB extra schon so strukturiert, dass man da einigermassen übersichtlich hinspringen könnte, wenn man weiß wie es geht.
Adr. 0.0: Freigabe_T01 BOOL
Adr. 0.1: Ausgang_T01 BOOL
Adr. 2: Sollwert_TON_T01 INT
Adr. 4: Sollwert_TOFF_T01 INT
Adr. 6: Aktualwert_TON_T01 INT
Adr. 8: Aktualwert_TOFF_T01 INT
Adr. 10.0: Freigabe_T02 BOOL
etc. für beliebig viele Timer
Danke für nen Tipp.
Gruß Wilhelm
Zuletzt bearbeitet: