Laden...

Programmieren eines Timers bzw. Code, der nach Ablauf einer Zeit ausgeführt wird

Erstellt von rasswet vor 7 Jahren Letzter Beitrag vor 7 Jahren 2.641 Views
R
rasswet Themenstarter:in
3 Beiträge seit 2016
vor 7 Jahren
Programmieren eines Timers bzw. Code, der nach Ablauf einer Zeit ausgeführt wird

Hallo alle zusammen,
bin C#-Einsteiger, soeben ein wenig klargekommen, was Klassen sind, was Methoden sind, hier zum ersten mal. Falls falscher Themenstrang - sorry. Zum Problem: von einem Unterprogramm aus einer selbsterstellten Klasse aufgerufen, sollte ab "TRUE-Werden" einer bool-Freigabe-Variable eine Zeitverzögerung gestartet werden. Am besten sollte es möglich sein über eine Int-Variable? die Zeitdauer einstellen zu können. Ist die Zeit abgelaufen, so sollte eine andere Ausgangs- bool-Variable den Wert "TRUE" annehmen und zwar solange die Freigabe besteht, sonst "FALSE". Erlischt die Freigabe während die Zeit noch läuft, so sollte der Ausgang gar nicht "Wahr" werden, es sei denn die Zeit wird durch erneute Freigabe irgendwann wieder gestartet und abläuft.
Ich habe mich sonst lange Zeit mit SPS-Programmieren beschäftigt, in einer SPS-Programmierumgebung hätte ich so ein Anliegen in wenigen Minuten gelöst, heute fing ich an mich mit dem Thema "Zeiten in C#" auseinanderzusetzen, der Tag ist um, viele Artikel aufgeschlagen - nichts Passendes, in der endlos verlinkten MSDN-Hilfe bin ich voll verwirrt, die ganzen Beispiele im Netz sind mit Bezug auf Consolle, und ich habe noch nicht ein Consollen-Projekt angelegt (was ist Consolle überhaupt?), also sagt mir "ConsoleWriteLine" auch nicht viel und mein Ergebnis ist NULL. Das Projekt mache ich unter "Windows-Forms", der Code wird zycklisch durchlaufen durch den "Timer1", den ich vom "Werkzeugkasten" hergezogen habe (Enabled auf "TRUE" festgesetzt).
Ich würde mich auf jede anliegenbezogene Hilfe freuen, am besten Code-Abschnitt, wenn möglich kurz auskommentiert mit Vermerk "Freigabe-bool", "Ausgangs-bool", "Zeiteinstellung". Habt auch Verstendnis dafür, dass mir die ganzen "members", "Delegate", Schlüsselwörter in deren Bedeutung auch nicht viel sagen. M.f.G. rasswet

3.003 Beiträge seit 2006
vor 7 Jahren

Öffne die Toolbox. (Strg + Alt + X)
Ziehe ein Timer-Control aus der Toolbox in dein Form.
Stelle im Eigenschaftenfenster das Interval des Timers ein.

Doppelklick auf den Timer. Trag den Code ein, der ausgeführt werden soll, wenn der Timer abgelaufen ist. Zum Anhalten oder neu Starten existieren die Methoden Start() und Stop() des Timers.

LaTino
schwer zu glauben, dass du dich mehr als 2 Minuten mit dem Windows-Forms-Designer aufgehalten hast.

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

5.299 Beiträge seit 2008
vor 7 Jahren

Zum Problem: von einem Unterprogramm aus einer selbsterstellten Klasse aufgerufen, sollte ab "TRUE-Werden" einer bool-Freigabe-Variable eine Zeitverzögerung gestartet werden. Am besten sollte es möglich sein über eine Int-Variable? die Zeitdauer einstellen zu können. Ist die Zeit abgelaufen, so sollte eine andere Ausgangs- bool-Variable den Wert "TRUE" annehmen und zwar solange die Freigabe besteht, sonst "FALSE". Erlischt die Freigabe während die Zeit noch läuft, so sollte der Ausgang gar nicht "Wahr" werden, es sei denn die Zeit wird durch erneute Freigabe irgendwann wieder gestartet und abläuft. Tja, so eine Problembeschreibung ist ziemlich untauglich.
Kein Mensch (ausser du) kann sich unter "TRUE-Werden" oder "bool-Freigabe" etwas vorstellen. Und wenn doch, dann höchstwahrscheinlich etwas anderes als du.


Imo gibt es 2 Arten, wie man ein Problem beschreibt:1.unter Verwendung definierter Fachbegriffe - das taugt meist nur, um über optimale, spezielle Algorithmen zu reden 1.Frei vonne Leber weg den Sinn und Zweck erläutern, also im Grunde, was der User erlebt, wenn er vorm fertigen Programm sitzt.. Hierbei sollten og. Fachbegriffe grad nicht auftauchen.


Also was ich mir zusammenreime aus deim Geschreibsel ist folgendes:
Es gibt iwie ein Dingens, das hat 2 bool-Werte, "Ausgänge", die können true/false annehmen. Ich nenne die Ausgänge mal "IsDelayRunnig" und "Open".
Im Urzustand sind beide false.
Wenn gestartet, wird zunächstmal IsDelayRunnig auf true gesetzt.
Wenn die Delay-Zeit abgelaufen ist, wird IsDelayRunnig false, dafür aber Open true.

Soweit korrekt?

Falls ja, hätte ich noch weitere Fragen, weil das Konzept ist so unfertig, bzw. sogar fragwürdig (imo sollte man statt des Open-Ausganges ein Event verwenden)
Ohne diese "soweit korrekt?" - Frage zu beantworten kanns imo also garnet vorangehen mit der Problemlösung


Aber ich sag gleich:

Habt auch Verstendnis dafür, dass mir die ganzen "members", "Delegate", Schlüsselwörter in deren Bedeutung auch nicht viel sagen. Das funktioniert mittelfristig nicht.
Wenn du c# programmieren willst/musst, dann musst du die Fachbegriffe erlernen, ansonsten ist gar keine Kommunikation möglich.

Hier habich mal eine schlampige Zusammenstellung von Fachbegriffen gemacht, von denen ich gemerkt hab, dass sie oft unbekannt sind: [Edit: Link entfernt - besteht wohl kein Interesse]
Die Erklärungen sind in vb.net erläutert, aber Gültigkeit haben sie auch in c#.
Und wie gesagt: es ist schlampig und kann das Lesen eines Fachbuches bei weitem nicht ersetzen.

Der frühe Apfel fängt den Wurm.

R
rasswet Themenstarter:in
3 Beiträge seit 2016
vor 7 Jahren

Danke La Tino,

deine Variante ist easy - gefällt mir. Ausprobiert habe ich die noch nicht, aber nachdem ich das Thema gestartet habe, habe ich ein Hilfsprojekt angelegt und genau mit dem zweitem Timer, parametriert aus dem Eigenschaften-Editor (wo "kaum zu glauben, dass ich mich da länger als 2 Minuten angehalten hab") und angesteuert über

 if(bla bla==true) {Timer2.Enabled=true;} else {Timer2.Enabled=false;}

vom Timer1 aus, wo das Programm zyklisch durflaufen wird, habe ich das Anliegen (sonst kleine Teilaufgabe) gelöst.
Wie schon gesagt - für die Hilfsbereitschaft DANKE - deine Variante mit direkt nach gesteuertem Ablauf der Zeit da auch direkt im Teimer2 den Ausgang zu setzen scheint mir a)der beschriebenen Aufgabestellung zu entscprechen b) einfacher und eleganter sein als die meine.
Aber dafür habe auch ich C#-Einsteiger nach Rat von euch C#-Experten gefragt.

M.F.G. rasswet

Bei mir geht es jetzt hauptsächlich um die "geschachtelte" Arbeitsweise, Unterprogramme ("Methoden") erstellen und aufrufen zu können, das habe ich mir selber durch Internet-Suche beigebracht, dafür ein kleines Übungsprojekt angelegt, wo abhängig von einem Analogsignal (IO-Modul) 2 unterschiedliche Ablaufketten die dig. Ausgänge unterschiedlich ansteuern sollen, für die Schritt-Merker dieser Ketten breuchte ich die Zeitverzögerungen. Dass ich dabei auf Problemme kommen werde, habe ich mir nicht gedacht.

R
rasswet Themenstarter:in
3 Beiträge seit 2016
vor 7 Jahren

Ihre Hochheit herr der Erfinder des Rades,

Tausend mal Pardonne, dass ich Sie durch meine eußerst C# - untaugliche Begriffe, Ausdrucke und schon gar nicht mal C# - taugliches Denken zum Glühen gebracht habe. Aber ich bin Automatisierer (SPS). Die SPS-Umgebung stellt fertige IEC-Timer bereit. Die zu bedienen ist easy-leicht, wie viele Sachen im vergleich zu C#. C# haben wir jetzt als Nebenkurs. Genau so "neben" wird unterrichtet. Ich bin am Anfang, wollte mich selber über das vermittelte hinaus etwas voran schieben. Meine Zeit dafür ist aber sehr knapp - Nebensache. Falls ich den Geist nicht aufgebe, werde ich Stück für Stück die Fachbegriffe von C# beherrschen - fest versprochen.
Bis dahin können wir die weitere Unterhaltung einstellen.

rasswet

5.299 Beiträge seit 2008
vor 7 Jahren

Bis dahin können wir die weitere Unterhaltung einstellen. Wie du wolle.
Ist ja egal, ob du mich blöd, arrogant oder sonstwas findest, es wird sich einfach erweisen, obs stimmt, was ich bezüglich Begrifflichkeiten, Kommunikation und Konzeption gesagt hab.

Der frühe Apfel fängt den Wurm.

3.003 Beiträge seit 2006
vor 7 Jahren

"geschachtelte" Arbeitsweise[..], Unterprogramme[..] Analogsignal (IO-Modul) [..]Ablaufketten [..] dig. Ausgänge[..]Schritt-Merker [..] Zeitverzögerungen

Ich hab' mal aus deinen Sätzen nur das herausgezogen, was schon rein von den Begifflichkeiten mehr als deutlich macht, dass du versuchst, in .NET eine Art SPS-"Programmierung" [1] zu etablieren. Das wird schief gehen, weil die Konzepte völlig verschieden sind. Tut mir leid, du wirst nur weiterkommen, wenn du erst einmal komplett vergisst, was du über Programmierung zu wissen glaubst, und von vorn anfängst. Insofern hat der ErfinderdesRades durchaus Recht.

Wenn ich dich richtig verstehe (und da bin ich mir wegen der, ich nenn sie mal "SPS-Ausdrücke" in deinen Fragen absolut nicht sicher), dann bist du mit deiner Vorgehensweise auf dem Holzweg. Ich wüsste aber auch nicht, wie ich das korrekte Vorgehen in Worte fassen könnte, ohne OOP-spezifische Begriffe zu verwenden. Wir haben hier nun einmal Konzepte, die es in der Welt, aus der du kommst, gar nicht gibt. Das Vorgehen kann man dir nur erläutern, wenn du diese Konzepte kennst. Ansonsten werden wir gnadenlos aneinander vorbei reden.

LaTino
[1] ich habe genug eigene Erfahrung mit SPS-"Programmierung", und auch, wenn ich damit die Leute aus dem Bereich (inkl. dir) verärgere, hat das aus meiner Sicht eher mit geskripteten Abläufen als mit Programmierung zu tun.

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

16.807 Beiträge seit 2008
vor 7 Jahren

Ihre Hochheit herr der Erfinder des Rades,

Wenn Du meinst hier ins Forum zu kommen, die Leute mit Deiner arroganten Art doof von der Seite anzumachen - dann bitte ich Dich einen anderen Spielplatz zu suchen.

Hier benimmt sich jeder, soll sich jeder benehmen - auch Du.
Ansonsten kannste Hilfe knicken. Keiner hilft, wenn er annehmen muss, dass er nur angepampt wird - zurecht.
Und ja, Dein Post ist alles andere als gut.

Wir erwarten hier auch ein gewissen Grad an Eigeninitiative.
Die Hoffnung, dass Du hier einen Lehrer findest, der Dich an der Hand nimmt, um die Begrifflichkeiten zu klären; das ist nicht Sinn und Zweck eines Forums.
Das steht in [Hinweis] Wie poste ich richtig?, was Du zu mal (bei der Registrierung und vor der Erstellung Deines ersten Threads) gelesen und akzeptiert hast.

5.299 Beiträge seit 2008
vor 7 Jahren

Also ich für mein Teil würde diese Meta-Diskussion eiglich lieber beenden.
Ich war wohl bisserl krass in meiner Kritik der Fragestellung, insbesondere fürs "Geschreibsel" möcht ich mich entschuldigen.
rasswet, du hast vmtl. noch nicht das dicke Fell, oder die Taktik, kleinere Entgleisungen zu ignorieren, ja und wenn man immer feste zurück-feuert, dann schaukelt sich das schnell auf, und die Inhaltlichkeit geht gänzlich unter.
Also meine Form bitte ich zu entschuldigen, täte aber empfehlen zu versuchen, meine Inhalte trotzdem aufzufassen - ich hab ja ziemlich viel geschrieben, zu 4 verschiedenen Themenbereichen.

Der frühe Apfel fängt den Wurm.

H
523 Beiträge seit 2008
vor 7 Jahren

Mich hat ehrlichgesagt gewundert, dass überhaupt irgendwer geantwortet hat. Der Eingangspost ist dank fehlender Formatierung ziemlich schlecht zu lesen.

@rasswet:
Auch wenn Deine Zeit knapp ist wirst Du nicht drumherum kommen Dich mit den Grundlagen von c# zu beschäftigen. Das man von unbekannten Begriffen und Funktionalitäten erschlagen wird ist normal und da muss jeder Anfänger durch.

Poste doch einfach mal Deinen bisherigen Code und formuliere Deine Frage/Aufgabenstellung nochmal klar und deutlich, dann ist sicher auch jemand bereit Dir zu helfen.