INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Dieses Thema hat akzeptierte Lösungen:

Rechnen von Zeitdifferenzen



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!

18.11.2013, 14:42 (Dieser Beitrag wurde zuletzt bearbeitet: 18.11.2013 14:56 von che-salih.)
Beitrag #1

che-salih Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 55
Registriert seit: May 2013

2012
2013
DE



Rechnen von Zeitdifferenzen
Guten Tag zusammen,

wie oben kurz geschrieben, möchte ich mit meine Daten die ich auslese auswerten. Dabei möchte ich in erster Linie die Zeitdifferenz von mehreren Messungen ermitteln. Es dient einer Laufveranstaltungmessung mit Rundenzeiten. Kleines Beispiel wie meine Daten vorliegen:
Messung Transponder ID (String Hex) | Zeit (Timestamp)
1 | 300005982312004 | 14:06:21,255
300005982312005 | 14:06:28,255
.................... 06 | .................
.....................07 | .................
. .
. .
. .
2 | 300005982312005 | 14:09:28:255
300005982312004 | 14:10:21:255
......................10 | ....................
.......................15 | ....................
. .
. .

Die Daten befinden sich jeweils in einem 1D Array. Die Reihenfolge der ID`s kann nach der 1. Messung sich willkürlich ändern. Je nach welcher Transponder erkannt wird. Es werden n Messungen durchgeführt, abhängig vom Rundenzahl. An der Stelle möchte ich jetzt die Zeiten des jeweiligen Transponders miteinander verrechnen. Das heißt, ich möchte die Zeit des 2. Messung von der des 1. Messung abziehen. Und danach die Zeit des 3. Messung von der des 1. Messung abziehen usw. Damit habe ich immer die Rundenzeit/Gesamtlaufzeit eines Läufers.

Ich komme leider nicht dadrauf, wie ich das lösen kann. Im Anhang noch mein Unterprogramm, wo sich die Daten befinden.

Am Ende soll es dann in etwa so aussehen:

Transponder ID - Runde 1 - Runde 2 - Letzt Runde
300005982312005 -- 00:03:00,000 -- 00:06:00,00 -- 00:09:00,00
300005982312004 -- 00:04:00,000 -- 00:08:00,00 -- 00:12:00,00
.
.
.
.

Dieses möchte ich dann als Tdms speichern und in Excel öffnen.

Gruss

Che



Die Formatierung habe ich leider nicht so gut hinbekommen. Ich hoffe, dass es trotz noch verständlich ist.


Angehängte Datei(en)
10.0 .vi  sub_READ_TCP.vi (Größe: 30,48 KB / Downloads: 206)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
18.11.2013, 14:57 (Dieser Beitrag wurde zuletzt bearbeitet: 18.11.2013 14:58 von GerdW.)
Beitrag #2

GerdW Offline
______________
LVF-Team

Beiträge: 17.412
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Rechnen von Zeitdifferenzen
Hallo che,

Zitat:wie oben kurz geschrieben
Wenn man einen neuen Thread anfängt, ist es ungünstig, auf etwas "weiter oben" zu verweisen...

Zitat:Im Anhang noch mein Unterprogramm, wo sich die Daten befinden.
In diesem VI gibt es eine TCP-Leseroutine und eine TDMS-Schreibroutine - aber keine (Beispiel-)Daten!

Also gibt es eine allgemeine Antwort:
- Du musst die Daten jeweils eines Transponders zusammensammeln und kannst dann die gesammelten Daten bequem auswerten (z.B. durch Berechnen der Differenzen von Arrayelementen)...
- Um Die Daten zu sortieren, bietet sich ein Array of Cluster(TransponderID, Timestamp, Value(s)) an. Dieses befüllen, sortieren lassen und nach TransponderID auftrennen. (Fast) fertig!

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.11.2013, 15:31 (Dieser Beitrag wurde zuletzt bearbeitet: 18.11.2013 15:53 von che-salih.)
Beitrag #3

che-salih Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 55
Registriert seit: May 2013

2012
2013
DE



RE: Rechnen von Zeitdifferenzen
Danke Gerd,

Ich hab eine Messung gemacht. So sehen die Daten aus.

Also Transponder ID´s kann ich mit String suchen extrahieren oder? Mir fällt es aber schwer, die zugehörigen Zeiten zusammenzuführen.

Gruß

Che

Meine Beispiel Daten sind fehlerhaft. Ein Moment bitte

Ich kann die Daten leider nicht als 1 zu 1 in dem Programm wiedergeben. Man kann nur ein Wert als Standard einstellen. Die ID Nummern sind immer verschieden. Die letzten beiden Ziffern ändern sich immer. Die Zeiten ebenso. immer aufsteigend.


Angehängte Datei(en)
11.0 .vi  Beispiel Daten.vi (Größe: 8,21 KB / Downloads: 185)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.11.2013, 17:07
Beitrag #4

che-salih Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 55
Registriert seit: May 2013

2012
2013
DE



RE: Rechnen von Zeitdifferenzen
(18.11.2013 14:57 )GerdW schrieb:  Also gibt es eine allgemeine Antwort:
- Du musst die Daten jeweils eines Transponders zusammensammeln und kannst dann die gesammelten Daten bequem auswerten (z.B. durch Berechnen der Differenzen von Arrayelementen)...

- Um Die Daten zu sortieren, bietet sich ein Array of Cluster(TransponderID, Timestamp, Value(s)) an. Dieses befüllen, sortieren lassen und nach TransponderID auftrennen. (Fast) fertig!

Wie kann ich mein Cluster dann nach TransponderID auftrennen? Welcher Funktion ist da nützlich? Also mein Cluster steht und ist aufsteigend sortiert mit 1D Array sortieren.

Gruss

Che
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.11.2013, 17:15
Beitrag #5

GerdW Offline
______________
LVF-Team

Beiträge: 17.412
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Rechnen von Zeitdifferenzen
Hallo che,

es wäre schön, wenn du ein VI anhängen würdest, wo alle Array-Inputs "schöne" Werte anzeigen. Es gibt da einen passenden Punkt im Edit-Menü von LabVIEW...

Zitat:Wie kann ich mein Cluster dann nach TransponderID auftrennen?
Es gibt die Funktionen Unbundle(ByName)...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.11.2013, 18:44 (Dieser Beitrag wurde zuletzt bearbeitet: 19.11.2013 08:05 von Lucki.)
Beitrag #6

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Rechnen von Zeitdifferenzen
(18.11.2013 15:31 )che-salih schrieb:  Man kann nur ein Wert als Standard einstellen.
Wer sagt denn so was, stimmt überhaupt nicht! Außerdem hast Du ja nicht mal einen Wert gespeichert, sondern rein gar nichts.
Standardwerte speichern: Kontextmenü / Datenoperationen / aktuellen Wert als Standard.

Edit: Deine Frage lt. Überschrift, wie man Zeitdifferenen berechnet, ist ja noch gar nicht beantwortet.
In Deinem Fall würde ich gar keine Zeitempel verwenden, sondern das normale numerische DBL-Fomat mit der Anzeigeeigenschaft "Relative Zeit"
Beispiel:
   
(Ich verwende in meinem System Punkte als Dezimalzeichen)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
19.11.2013, 10:28 (Dieser Beitrag wurde zuletzt bearbeitet: 19.11.2013 10:32 von che-salih.)
Beitrag #7

che-salih Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 55
Registriert seit: May 2013

2012
2013
DE



RE: Rechnen von Zeitdifferenzen
Guten Morgen,

ich habe versucht gehabt, die Werte über Datenoperation/aktuellen Wert als Standard einzeln zu speichern. Man kann das Array direkt als Standardwert speichern. Ich habe es korrigiert. Das Sortieren von meinem Cluster ist schon mal ganz hilfreich. Das zerlegen wieder in Transponder ID ist etwas unverständlich. Mit der Unbundle(ByName) bekomme ich mein sortiertes TR ID Array. Ich möchte aber mein Array nach ID Nummern zerlegen. Zum Beispiel: Mein ID mit der Nummer 3000300833B2DDD906C000000005 und die dazugehörige Zeit möchte ich dann in jeweils 1D Array oder in 2D Array haben. So kann ich dann die Rechenoperation durchführen. Mache ich irgendwo ein Gedankenfehler? Ich denke, dass wäre am einfachsten.

Zitat:Wer sagt denn so was, stimmt überhaupt nicht! Außerdem hast Du ja nicht mal einen Wert gespeichert, sondern rein gar nichts.
Standardwerte speichern: Kontextmenü / Datenoperationen / aktuellen Wert als Standard.

Edit: Deine Frage lt. Überschrift, wie man Zeitdifferenen berechnet, ist ja noch gar nicht beantwortet.
In Deinem Fall würde ich gar keine Zeitempel verwenden, sondern das normale numerische DBL-Fomat mit der Anzeigeeigenschaft "Relative Zeit"
Beispiel:

(Ich verwende in meinem System Punkte als Dezimalzeichen)

Danke fürs Beispiel. Ich denke auch, dass DBL Format besser geeignet ist. Ich kann ja mein TimeStamps in DBL konvertieren.

Gruss

Che


Angehängte Datei(en)
10.0 .vi  Beispiel Daten.vi (Größe: 7,93 KB / Downloads: 181)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2013, 11:44
Beitrag #8

GerdW Offline
______________
LVF-Team

Beiträge: 17.412
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Rechnen von Zeitdifferenzen

Akzeptierte Lösung

Hallo Che,

anbei mal ein Beispiel-VI mit einer Lösung, mit der die einzelnen ID-Daten in jeweils eigene Cluster gepackt werden...


Angehängte Datei(en)
11.0 .vi  Beispiel Daten.vi (Größe: 16,91 KB / Downloads: 213)

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2013, 13:35
Beitrag #9

che-salih Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 55
Registriert seit: May 2013

2012
2013
DE



RE: Rechnen von Zeitdifferenzen
Hi,

vielen vielen Dank Gerd. Das funktioniert perfekt. Alle meine Daten sind ID basiert segmentiert.

Ich möchte aber genau wissen, wie du es programmiert hast. Deswegen werde ich kurz schreiben was ich von deinem Programm verstanden habe. Falls ich falsch liege, würde ich dich bitten mich kurz zu korrigieren.

Also, du schlüsselst das sortierte Array Cluster nach Namen auf und fragst an der ID Ausgang zeilenweise, ob die ID mit der nächsten Iteration ungleich ist. Die Abfrage geschieht dann über die Schieberegister. Wenn die ID gleich ist, werden die Daten (Zeit, Value) zusammen in ein Clusterarray geschrieben. Fall der ID ungleich mit der nächsten Iteration ist, wird ein neue Cluster eröffnet usw.

Den False Case habe ich nur bedingt verstanden. Es ist klar, dass die Daten in den Clustern hinzugefügt werden aber ich sehr leider nicht ganz wie. Wenn du mir da einpaar Stichwörter geben würdest, wäre ich dankbar. Danke für deine Mühe.

Gruss

Che
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2013, 13:47 (Dieser Beitrag wurde zuletzt bearbeitet: 19.11.2013 13:49 von GerdW.)
Beitrag #10

GerdW Offline
______________
LVF-Team

Beiträge: 17.412
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Rechnen von Zeitdifferenzen
Hallo Che,

Zitat:Also, du schlüsselst das sortierte Array Cluster nach Namen auf und fragst an der ID Ausgang zeilenweise, ob die ID mit der nächsten Iteration ungleich ist. Die Abfrage geschieht dann über die Schieberegister.
- Das sortierte Array enthält Cluster aus [ID, timestamp, value]. Du willst diese Elemente nach ID gruppieren. Dafür lege ich eine Datenstruktur an, die aus einem Array of Cluster of [ID, array of timestamps, array of values] besteht.
- Der Vergleich findet mit der ID der vorigen Iteration statt. Wenn die IDs ungleich sind, wird ein neuer Cluster (für die neue ID) angelegt.

Zitat:Wenn die ID gleich ist, werden die Daten (Zeit, Value) zusammen in ein Clusterarray geschrieben. Fall der ID ungleich mit der nächsten Iteration ist, wird ein neue Cluster eröffnet usw.
Genau: Wenn die ID gleich geblieben ist, werden die neuen Timestamp/Value-Werte zu den schon vorhandenen hinzugefügt.

Zitat:Den False Case habe ich nur bedingt verstanden. Es ist klar, dass die Daten in den Clustern hinzugefügt werden aber ich sehr leider nicht ganz wie.
Der Einfachheit halber werden neue Cluster (für neue IDs) immer als erstes Element ins Array geschrieben. Im FALSE-Case wird also:
- das erste Arrayelement indiziert
- im erhaltenen Cluster werden die Arrays für Timestamp und Value "unbundled"
- zu diesen Arrays die neuen Werte hinzugefügt
- die Arrays wieder in den Cluster eingetragen
- der Cluster im "Ober"-Array eingetragen
Für solche Operationen bietet sich die verwendete Inplace-Struktur an...

Edit:
Im VI oben ist noch ein kleiner Bug: es wird immer ein leerer Cluster mit (ID "") erzeugt. Schau mal, ob du die Lösung, um dieses Verhalten zu umgehen, selbst findest...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Rechnen mit dem Datum meb2323 2 3.173 11.11.2019 21:05
Letzter Beitrag: meb2323
  mit txt.daten rechnen? nini0803 6 4.537 27.10.2011 10:14
Letzter Beitrag: dimitri84
  spaltenweise Mittelwert rechnen! tiko 53 31.906 22.04.2010 23:40
Letzter Beitrag: Lecojon
  Mit Werten aus einem 1D-String-Array rechnen syntec 6 8.488 04.06.2009 20:22
Letzter Beitrag: jg
  Rechnen mit Zeitstempeln computerdigitec 3 8.070 23.12.2007 11:21
Letzter Beitrag: Lucki
  Rechnen mit Arrays labcross 2 4.988 19.11.2007 11:37
Letzter Beitrag: labcross

Gehe zu: