Ich steuere mehrere TOF-Timer an mit mehreren Triggern (R_TRIG) an.
Also, wenn das Signal zum Starten kommt gibt mir der Trigger einen kurzen Impuls und aktiviert somit
den abschaltverzögerten Timer, der gleich zum herunterzählen beginnt.
Das funktioniert ansich alles wunderbar, nur möchte ich nach Ende des Programmes ohne einen Onlinereset das Ganze nochmal durchlaufen.
Doch das Problem ist die Merker der Trigger (also R_TRIG.M) sind noch auf TRUE.
Mehrmaliges ändern der Eingangsvariable (R_TRIG.CLK) ändert am Zustand von R_TRIG.M nichts.
Einerseits sollten die Triggermerker zurückgesetzt werden können sobald der dazugehörige Timer fertig ist mit runterzählen, andererseits soll dies auch über einen externen Reset-Taster möglich sein.
Den Taster setzt alles zurück, nur mit den Triggermerkern komme ich nicht auf das gewünschte Ergebnis.
Vielleicht habe ich auch nur einen Denkfehler begangen.
Ich bitte um eure Hilfe zur Lösung meines Problemes!
Ihr würdet mir damit eine sehr große Freude bereiten!
Falls ihr noch mehr Infos dazu braucht fragt mich einfach und ich werde so schnell wie möglich antworten!
Danke schon im Vorraus!
Mfg Stefan
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
wenn du den Trigger im nächsten zyklus gleich wieder mit CLK := TRUE aufrufst wird der Merker natürlich soffort wieder TRUE.
wenn du nur einen timer haben willst, der immer eine bestimmte zeitspanne abläuft und dann einen Impuls erzeugt geht das auch nur mit einem TOF-Timer:
Ja die Trigger (Trigger.CLK) werden gleich danach wieder auf FALSE gesetzt, hab ich vergessen zum erwähnen.
Und dann fällt aber der Ausgang des Triggers komischerweise nicht auf FALSE und somit wird der Timereingang nicht FALSE und bleibt der Ausgang dauerhaft auf TRUE.
Nein, ich brauche mehrere Timer, 24 sind es genau.
Aber ich habe deine Idee trotzdem ausprobiert, leider ohne Erfolg.
Mfg
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Bei Variante 1
rtrigj
Rufst du die Funktion auf und die Funktion wird den gesetzten Parameter CLK sofort verarbeiten.
Wenn du aber z.B.
rtrig[j].CLK:=FALSE;
rtrigj;
Schreibst, dann wird in Zeile 1 zwar der Paramter gesetzt, aber die Funktion rtrig[j] NICHT aufgerufen.
In Zeile 2 wird dann CLK überschrieben mit TRUE und Zeile 1 war damit komplett wirkungslos...
Wenn also eine Input-Variable einer Funktion (oder FB oder PRG) gesetzt wird, dann sollte diese früher oder später auch aufgerufen werden,
damit der Parameter auch irgendeine Wirkung zeigt.
Gruß Erik
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hey Leute!
Sorry, war die letzten Tage schulisch verhindert --> schriftliches Abitur!
Es geht darum:
Ich soll ein Midifile mit der SPS (einer ABB AC500-eCo) einlesen und auswerten, sodass eine Blockflöte dieses Lied dann automatisch spielt!
Es funktioniert mit meiner bisherigen Methode auch wunderbar, nur will ich einen Reset-Taster einbauen und da möchte ich meine Trigger zurücksetzen, damit ich nach dem Reset wieder Starten kann ohne in CoDeSys eingreifen zu müssen.
Doch bisher hab ich das noch nicht geschafft.
Ich möchte sobald ich eine Note, oder Pause, gespielt habe den Trigger für die Note wieder zurücksetzen, damit er sobald die Note wieder kommt, wieder verwendet werden kann. Bisher hab ich eine Array von momentan 300 Trigger und verwende jeden Trigger nur einmal, also quasi ein Wegwerftrigger!
also man sollte grundsätzlich Trigger oder TON Zyklisch frei laufen lassen, das bedeutet die sollten nicht in irgend welchen Schleifen, Case OF oder in sonstigen Bedingugen liegen,
weil Trigger oder TON sind auch FB Instanzen, wenn die nicht zyklisch mitlaufen erhalten die Ihren Zustand innerhalb vom FB und man erhält natürlich besondere effekte die man nabsolut nicht haben will.
MacToolz
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo liebe Forumsgemeinde!
Ich steuere mehrere TOF-Timer an mit mehreren Triggern (R_TRIG) an.
Also, wenn das Signal zum Starten kommt gibt mir der Trigger einen kurzen Impuls und aktiviert somit
den abschaltverzögerten Timer, der gleich zum herunterzählen beginnt.
Das funktioniert ansich alles wunderbar, nur möchte ich nach Ende des Programmes ohne einen Onlinereset das Ganze nochmal durchlaufen.
Doch das Problem ist die Merker der Trigger (also R_TRIG.M) sind noch auf TRUE.
Mehrmaliges ändern der Eingangsvariable (R_TRIG.CLK) ändert am Zustand von R_TRIG.M nichts.
Einerseits sollten die Triggermerker zurückgesetzt werden können sobald der dazugehörige Timer fertig ist mit runterzählen, andererseits soll dies auch über einen externen Reset-Taster möglich sein.
Den Taster setzt alles zurück, nur mit den Triggermerkern komme ich nicht auf das gewünschte Ergebnis.
Vielleicht habe ich auch nur einen Denkfehler begangen.
Ich bitte um eure Hilfe zur Lösung meines Problemes!
Ihr würdet mir damit eine sehr große Freude bereiten!
Falls ihr noch mehr Infos dazu braucht fragt mich einfach und ich werde so schnell wie möglich antworten!
Danke schon im Vorraus!
Mfg Stefan
hallo zinedine
wie änderst du die Eingangsvariable CLK? um den Trigger zurückzusetzen musst du ihn auch aufrufen also ungefähr so:
rtrigj;
wenn du den Trigger im nächsten zyklus gleich wieder mit CLK := TRUE aufrufst wird der Merker natürlich soffort wieder TRUE.
wenn du nur einen timer haben willst, der immer eine bestimmte zeitspanne abläuft und dann einen Impuls erzeugt geht das auch nur mit einem TOF-Timer:
Tj;
Ja die Trigger (Trigger.CLK) werden gleich danach wieder auf FALSE gesetzt, hab ich vergessen zum erwähnen.
Und dann fällt aber der Ausgang des Triggers komischerweise nicht auf FALSE und somit wird der Timereingang nicht FALSE und bleibt der Ausgang dauerhaft auf TRUE.
Nein, ich brauche mehrere Timer, 24 sind es genau.
Aber ich habe deine Idee trotzdem ausprobiert, leider ohne Erfolg.
Mfg
Mir scheint, du setzt zwar den CLK auf FALSE, rufst dann aber die Funktion nicht mehr auf.
Du machst also
rtrig[j].CLK:= FALSE;
anstatt
rtrigj;
Kann das sein ?
Gruß Erik
Ich habe bereits beide Varianten ausprobiert und es funktioniert bei keiner.
Wo liegt eigentlich der Unterschied ob ich schreibe
rtrigj oder rtrig[j].CLK:=FALSE ?
Mfg
Das ist ganz einfach.
Bei Variante 1
rtrigj
Rufst du die Funktion auf und die Funktion wird den gesetzten Parameter CLK sofort verarbeiten.
Wenn du aber z.B.
rtrig[j].CLK:=FALSE;
rtrigj;
Schreibst, dann wird in Zeile 1 zwar der Paramter gesetzt, aber die Funktion rtrig[j] NICHT aufgerufen.
In Zeile 2 wird dann CLK überschrieben mit TRUE und Zeile 1 war damit komplett wirkungslos...
Wenn also eine Input-Variable einer Funktion (oder FB oder PRG) gesetzt wird, dann sollte diese früher oder später auch aufgerufen werden,
damit der Parameter auch irgendeine Wirkung zeigt.
Gruß Erik
Hey Leute!
Sorry, war die letzten Tage schulisch verhindert --> schriftliches Abitur!
Es geht darum:
Ich soll ein Midifile mit der SPS (einer ABB AC500-eCo) einlesen und auswerten, sodass eine Blockflöte dieses Lied dann automatisch spielt!
Es funktioniert mit meiner bisherigen Methode auch wunderbar, nur will ich einen Reset-Taster einbauen und da möchte ich meine Trigger zurücksetzen, damit ich nach dem Reset wieder Starten kann ohne in CoDeSys eingreifen zu müssen.
Doch bisher hab ich das noch nicht geschafft.
Ich möchte sobald ich eine Note, oder Pause, gespielt habe den Trigger für die Note wieder zurücksetzen, damit er sobald die Note wieder kommt, wieder verwendet werden kann. Bisher hab ich eine Array von momentan 300 Trigger und verwende jeden Trigger nur einmal, also quasi ein Wegwerftrigger!
So sieht es aktuell aus. Das sind die ersten beiden Noten.
Und im Idealfall sollen die Trigger auch so wie die Timer sein.
Bei weiteren Fragen, nicht zögern! =)
Ich hoffe ihr könnt mir mit meinem Problem helfen!
Danke schon im Voraus!
mfg
Related
Talk.ru: 1
Hallo,
also man sollte grundsätzlich Trigger oder TON Zyklisch frei laufen lassen, das bedeutet die sollten nicht in irgend welchen Schleifen, Case OF oder in sonstigen Bedingugen liegen,
weil Trigger oder TON sind auch FB Instanzen, wenn die nicht zyklisch mitlaufen erhalten die Ihren Zustand innerhalb vom FB und man erhält natürlich besondere effekte die man nabsolut nicht haben will.
MacToolz