14.02.2018, 16:49
|
IchSelbst
LVF-Guru
Beiträge: 3.692
Registriert seit: Feb 2005
11, 14, 15, 17, 18
-
DE
97437
Deutschland
|
RE: Programmstop
(14.02.2018 10:14 )MartinNewBee schrieb: wie programmiere ich einen quasi "Notaus" (ich weiß so was sollte nicht programmiert sondern gebaut werden).
Was willst du haben: Einen Notaus bzw. Nothalt oder nur einen ganz normalen "Ablauf sofort beenden" (es gäbe da noch "Ablauf nach Zyklus beenden").
Für beide Fälle ist es ratsam, die Ablaufsteuerung als Schrittkette zu gestalten. Arbeite die Schrittkette in einem festgelegten Raster ab, z.B. 50ms. Jeder einzelne Schritt einer Schrittkette darf nur einen Bruchteil der Rasterzeit der Schrittkette benötigen. Sollte eine definierte oder undefinierte Wartezeit benötigt werden, so muss diese Zeit eben ohne explizite Wartefunktion programmiert werden. Man könnte z.B. die Schrittkettenaufrufe zählen. Wenn du jetzt einen "Abbruch sofort" haben willst, muss du lediglich nach jedem einzelnen Schritt (also außerhalb der Case-Sequenz) die Ende-Bedingung abfragen. Ist sie eingetreten, setzt du den nächsten Schritt der Schrittkette einfach auf den Schritt "Ablauf sofort beenden".
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
|
|
|
17.02.2018, 09:15
(Dieser Beitrag wurde zuletzt bearbeitet: 17.02.2018 09:36 von Lucki.)
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: Programmstop
Ergänzung zum Beitrag von THL:
Diese Programmstruktur allein ist aber noch keine Gewähr, dass ein VI sofort beendet wird. Damit wird zwar der Stop-Knopf sofort gelesen, es wird aber nicht die Auführung eines vielleicht sekundenlangen Waits abgebrochen.
Das "Zerstückeln" eines langen Waits, wenn es im VI vorkommt, in mehrere kleinere Teile wird damit nicht überflüssig gemacht.
Vieleicht auch interessant: Die Funktionen "Occurrences" (mit Meldern ginge es auch) lassen sich als unterbrechbares "Wait" verwenden. Die Funktion "O. Warten" verhält sich exakt wie ein "Wait", läßt sich aber mit der Funktion "O. Auslösen" jederzeit abbrechen.
|
|
|
19.02.2018, 14:49
|
THL
LVF-Gelegenheitsschreiber
Beiträge: 111
Registriert seit: May 2011
2012
2009
EN
Deutschland
|
RE: Programmstop
(17.02.2018 09:15 )Lucki schrieb: Ergänzung zum Beitrag von THL:
Diese Programmstruktur allein ist aber noch keine Gewähr, dass ein VI sofort beendet wird. Damit wird zwar der Stop-Knopf sofort gelesen, es wird aber nicht die Auführung eines vielleicht sekundenlangen Waits abgebrochen.
Das "Zerstückeln" eines langen Waits, wenn es im VI vorkommt, in mehrere kleinere Teile wird damit nicht überflüssig gemacht.
Da hatte ich mich wohl missverstänlich ausgedrückt. In meinem Beispiel ersetzt das Timeout der Ereignisstruktur das Wait. Es kommt also gar kein Wait vor, auf das man warten müsste.
Mein Vorschlag ist natürlich nur für solche Fälle gedacht gewesen, wo in (langen) regelmässigen Abständen ein Ereignis ausgelöst wird (welches selbst kein Wait mehr enthält).
|
|
|
19.02.2018, 17:26
(Dieser Beitrag wurde zuletzt bearbeitet: 19.02.2018 17:28 von Lucki.)
|
Lucki
Tech.Exp.2.Klasse
Beiträge: 7.699
Registriert seit: Mar 2006
LV 2016-18 prof.
1995
DE
01108
Deutschland
|
RE: Programmstop
@THL
Ich wollte Dich nicht korrigieren, sondern nur ergänzen, denn bei andern VIs -nicht bei Deinem Beispiel - mit mehreren unterschiedlich langen Waits ist diese Struktur nicht gut ausbaufähig. Entweder man nimmt dann außerdem Wait-Funktionen - oder man verlagert das Warten nicht in den Sender der Queue, sondern in die einzelen Emfänger. (Und da aber mehrere Empfänger bei Queues nicht verwendet werden sollen, wären dann Melder - die hier gar nichts zu melden haben - zu verwenden.)
Also so:
|
|
|
| |