- Beiträge
- 7.015
- Reaktionspunkte
- 2.700
-> Hier kostenlos registrieren
Hab' Dir mal eine SBR rausgesucht, die einen mehrfach verwendbaren Timer mit Einschaltverzögerung darstellt:
Die Funktion ist genauso, wie die systeminterne Funktion TON. Der Unterschied ist, das die Speicherung der Zwischendaten über den Ein-/Ausgang Memory in einer selbst gewählten Variable erfolgt (die Ausgänge natürlich auch), anstatt die Systemvariable Tx zu verwenden. Damit kann man die auch mit einer lokalen Variable belegen und so über die Schnittstelle der SBR nach außen weiter geben.
Wenn Du den Code in einer Textdatei mit der Endung .awl speicherst und diese Datei dann in Dein Projekt importierst, kannst Du ja ein bißchen damit herum experimentieren.
Ich hab' extra eine hohe SBR-Nummer gewählt, damit solltest Du keine Probleme mit vlt. schon vorhandenen SBRs bekommen.
Die Ansicht oben ist in AWL. Ich hab' die originalen Netzwerke so umgestaltet/aufgetrennt, dass Du über das Menü Ansicht diese auch auf KOP oder FUP umstellen kannst, je nachdem, was Du bevorzugst.
Code:
[FONT=courier new]SUBROUTINE_BLOCK SBR_TON:SBR61
TITLE=Mehrfach verwendbarer Timer mit Einschaltverzögerung (TON)
VAR_INPUT
Start:BOOL; // L0.0
PT:INT; // LW1, in ms
END_VAR
VAR_IN_OUT
Memory:DINT; // LD3
END_VAR
VAR_OUTPUT
Ausgang:BOOL; // L7.0
CV:INT; // LW8
END_VAR
VAR
Diff:DINT; // LD10
END_VAR
BEGIN
Network 1 // Start = Low
// Bei inaktivem Start-Eingang den Speicher mit 0 beschreiben
LDN L0.0
UD<> LD3, 0
MOVD 0, LD3
Network 2 // Start = High
// Bei Aktivierung des Start-Eingang den Speicher mit der aktuellen Systemzeit beschreiben.
LD L0.0
UD= LD3, 0
BITIM LD3
Network 3 // Gespeicherte Zeit erkennbar machen
// Ist die so gespeicherte Systemzeit zufällig gerade = 0, dann im Speicher um 1 ms erhöhen, damit die Speicherung erkannt wird
LD L0.0
UD= LD3, 0
INCD LD3
Network 4 // Timerwert
// Ist die gespeicherte Systemzeit <>0, dann mit der aktuellen Systemzeit vergleichen und die Differenz als Timerwert ausgeben
LDD<> LD3, 0
CITIM LD3, LD10
UENO
DTI LD10, LW8
Network 5 // Ausgang
// Das Timerbit setzen, wenn der Timerwert >= dem Vorgabewert.
LD L0.0
UW> LW1, 0
UW>= LW8, LW1
= L7.0
END_SUBROUTINE_BLOCK[/FONT]
Wenn Du den Code in einer Textdatei mit der Endung .awl speicherst und diese Datei dann in Dein Projekt importierst, kannst Du ja ein bißchen damit herum experimentieren.
Ich hab' extra eine hohe SBR-Nummer gewählt, damit solltest Du keine Probleme mit vlt. schon vorhandenen SBRs bekommen.
Die Ansicht oben ist in AWL. Ich hab' die originalen Netzwerke so umgestaltet/aufgetrennt, dass Du über das Menü Ansicht diese auch auf KOP oder FUP umstellen kannst, je nachdem, was Du bevorzugst.
Zuletzt bearbeitet: