Abtastzeit für Messwerte

Anni
2007-09-18
2007-09-20
  • Anni - 2007-09-18

    Hallo,

    ich habe ein Programm geschrieben, dass mir alle X Sekunden einen Messwert in ein Array schreiben soll, indem ich über einen Timer alle X Sekunden den Index erhöhe. Nebenbei habe ich eine Webvisualisierung laufen und einige Programme in der Taskkonfiguration.

    Das Problem ist, dass die Zeitabstände zwichen den Messwerten Stark varriieren.

    Z.B bei 5 Sec bekomme ich Werte mit 3,4,5 und 6 sec Abständen.

    Hat jemand ne idee wie ich das einigermaßen in den Griff bekommen könnte?

    Gruß Annika

     
  • debug - 2007-09-18

    Hallo Annika,

    hast Du einmal versucht das Programm in der Taskkonfiguration über einen zyklischen Task alle 5 Sekunden zu starten?

     
  • hugo - 2007-09-18

    schau dir mal die funktionen

    SH_1 und sh_2 an die machen genau das was du wisst und tasten in exacten zeitabständen das eingangsignal ab, auch in einer free running task.

    ein trigger ausgang sagt dir wass ein neuer wert vorliegt.

    du findest die funktionsblöcke in der freien lib unter w www.oscat.de w

    oscat is open source und steht auch im source code zur verfügung.

     
  • Anni - 2007-09-19

    Hallo,

    leider besteht mein Problem immer noch,

    Die Funktion SH_R erschien mit eigentlich sinvoll.

    Ich habe die Funktion in den Baustein eingebunden, in dem das Array gefüllt wird. Die Zeiten die an mein Array übergeben werden sind jedoch nicht exakt. Um das zu testen übergebe ich die Systemzeit an mein Array.

    Ich habe wieder 5 sec eingestellet. die Werte die ich erhalte haben folgendes Spektrum.

    6.248s 4.684s 5.786s 5.113s 5.275s 5.489s 5.516s 5.319s 5.416s 4.552s

    Vielleicht hat es damit zu tun, das mehrere Programme in der Taskkonfiguration vorhanden sind, die irgendwie unkoordiniert ablaufen?

    Ich möchte hauptsächlich verstehen warum die Zeitabstände so stark variieren.

    Quelltext.zip [2.07 KiB]

     
  • hugo - 2007-09-19

    die funktion sh_r gibts in oscat gar nicht,

    wir haben folgende funktionen:

    1. SH sample and hold, der wird extern getaktet, die samples hängen also vom externen clkock ab

    2. sh_1 greift alle PT sekunden einen sample und liefert ihn an ein nachgeschaltetes modul zur weiterverarbeitung oder in deinem fall zum abspeichern in ein array

    3. sh_2 ist identisch mit sh_1 nur macher er auch gleich statistiken wie avg über mehrere samples usw mit.

    4. sh_t ist ein transparent sample and hold, für deine anwendung nicht geeignet

    ich schlage vor nimm sh_1 und speichere die daten danach in das array.

     
  • hugo - 2007-09-19

    wenn du deine task alle 5 sekunden aufruft musst du sicherstellen das keine höher priorisierte task das timing deiner task beeinflusst.

    idealer wäre hier eine freilaufende task oder eine fixe task die alle 10 bis 50 ms drankommt, dann erreichst du auch die genauigkeit von 5s plus minus 10 -50 ms

     
  • Anni - 2007-09-20

    Hallo,

    sorry ich hatte mich nur verschrieben, ich habe SH_1 gemeint.

    und in der Taskonfiguration sind wegen der Webvisualisierung mehrere Tasks eingebunden, jedoch keine länger als 200ms.

     
  • debug - 2007-09-20

    Hallo hugo,

    da stimme ich Dir zu.

    In diesem Fall würde ich den 5 Sekunden Task mit höherer Prio laufen lassen als die anderen. Dann sollte es aber auch klappen.

    Eine freilaufender Task behindert wieder die Visu.

     

Log in to post a comment.