Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Hallo,
also ich entwickel gerade eine Anwendung, der ein oder andere kennt sie vielleicht teilweise. Ich erfasse kontinuierlich Messdaten von einem OPC Server. Die Verbindung hierfür wird außerhalb einer while-schleife geöffnet, dann werden die Daten kontinuierlich innerhalb der Schleife erfasst und am Ende mache ich wieder alles zu. Jetzt möchte ich aber ein Logfile schreiben. Dieses soll alle 1-2 Sekunden einen Messwert speichern, damit ich am Ende eventuelle Störungen besser analysieren kann. Das Logfile soll mit einem Kopf angelegt werden und danach durch anhängen immer weiter ergänzt werden. Da ich soetwas noch nie programmiert habe weiß ich nicht so recht wie ich anfangen soll. Mein Grundkonzept wäre eine Forschleife, jedoch weiß ich nicht wieviele Schleifendurchläufe ich brauchen werde. Im Zweifelsfall, soviele, bis der "Protokoll Start"-Schalter wieder umgelegt wird. Zudem müsste ich diese Forschleife ja auch noch irgendwie zeitgesteuert aufrufen (vielleicht eine Eventstruktur mit einem Timer?). Weil Verzögerungen innerhalb der Schleife würden ja wieder mein kontinuierliches Programm stören...
Hab dir auf die Schnelle mal was zusammengeklickt.
Setzt die Wartezeit mal hoch, bis der Zähler der Queue hochgeht, dann reduzierst du die Wartezeit schrittweise. Damit kannst du sehen, wie schnell deine Log-Schleife laufen muss, damit die Queue nicht zu voll wird oder überläuft (falls du eine Größe festlegst).
Schau dir am Besten auch mal die Hilfe dazu an... an der Ausführung kann man bestimmt noch feilen
Gruß SeBa
EDIT:
:DTimestamp im Log-True Case nicht vergessen...
Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.
Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.
Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
Hallo SeBa :-)
Danke für die schnelle Antwort. Das sieht eigentlich schon ziemlich genau nach dem aus was ich vorhabe. Super, dass du mein altes Beispiel ausgekramt hast, so fällt das Verständis leichter und wir reden über die gleichen Dinge :-D
Schade, dass man Danke nur einmal drücken kann.
' schrieb:... Schade, dass man Danke nur einmal drücken kann.
Du darft mir gerne auch woanders danken...
Gruß SeBa
Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.
Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.
Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
Hallo,
habe das alles jetzt mehrfach durchprobiert, aber ich habe immer noch ein Problem....
Wie kann ich denn erreichen, dass in die Queue jeweils nur ein Wert pro Sekunde angefügt wird? Im Moment läuft es so, dass ich die Schlange jede Sekunde abfrage und einen Wert entnehme, dieser sollte aber der aktuelle sein. Ich müsste also aus der Queue Werte entnehmen und immer nur den letzten behalten (was das Warteschlangenprinzip irgendwie sinnlos macht), bzw. müsste dafür sorgen, dass sie immer nur einen Wert pro Sekunde bekommt, den ich dann (wann auch immer) abholen kann (zusammen mit allen anderen). Wenn ich mein Hauptprogramm mit einem Timer künstlich auf 1 Sekunde stelle geht mir die quasiechtzeit verloren.
Dieser Beitrag soll weder nützlich, informativ noch lesbar sein.
Er erhebt lediglich den Anspruch dort wo er ungenau ist, wenigstens eindeutig ungenau zu sein.
In Fällen größerer Abweichungen ist es immer der Leser, der sich geirrt hat.
Rette einen Baum!
Diesen Beitrag nur ausdrucken, wenn unbedingt nötig!
So... habe das jetzt mal eingebaut. Interessanterweise funktioniert das bei mir so nicht. Ich nehme zweimal die Zeit: Außerhalb und innerhalb der Schleife. Die Zeit wird einmal als initwert an das Schieberegister gegeben, danach wird immer der Wert vom Ausgang des Registers/letzter Durchlauf übernommen. Wenn ich das Logintervall hochsetze zum Beispiel 10, wird erst dann in die Warteschlange geschrieben, wenn der Wert der Zeit größer oder gleich dem des Registereingangs ist. Mein Problem ist dann die Verdrahtung. Ich kann den Ausgang des Vergleichsoperators nicht gleichzeitig mit dem Logschalter und den beiden Eingängen der Caseschleifen verbinden, wie du es gemacht hast. Was läuft außerdem im FALSE Fall ab? Ich verstehe nur
Erklärst du es mir?
Gruß Thomas