AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Echtzeitanwendung - Welche Struktur beim Dateizugriff?
Thema durchsuchen
Ansicht
Themen-Optionen

Echtzeitanwendung - Welche Struktur beim Dateizugriff?

Ein Thema von Matze · begonnen am 6. Nov 2010 · letzter Beitrag vom 6. Nov 2010
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

Echtzeitanwendung - Welche Struktur beim Dateizugriff?

  Alt 6. Nov 2010, 11:37
Hi zusammen,

auch wenn ich vermute, dass die meisten von euch von Echtzeitsystemen keine Ahnung haben, versuche ich dennoch mein Glück. Ich hoffe, ihr könnt mir folgen.
Ich erfasse sehr viele Messwerte und muss dieses auswerten und speichern.
.
Aktuell habe ich eine Schleife, in der Datenerfassung, Auswertung und Protokollierung erfolgen. Die Messdaten werden teils parallel, teils nacheinander eingelesen.

Aktuell habe ich das in der Schleife sequenziell so aufgebaut. Ihr müsst euch vorstellen, dass die Schleife pro Messung mehrmals durchlaufen wird:

1. Datenerfassung aller Sensoren (Daten werden gepuffert und z.B. alls 100 ms 100 Werte ausgelesen)
2. Prüfen, welche Daten relevant sind bzw. welche Sensoren auszuwerten sind
3. Pufferung der relevanten Messwerte
4. Messzeit abwarten
5. Wenn Messzeit(en) abgelaufen, Daten speichern (binär, also nicht im ASCII-Format o.ä.)
6. Schleife von vorne beginnen und erneut prüfen, ob das Messende vorliegt, eine neue Messung beginnen soll o.ä.

Es kann folgendes sein: Messzeit 5 Sekunden
Und z.B. nach 1 Sekunde beginnt die Messung von Sensor 1, nach 2 weiteren Seunden die von Sensor 2. Wenn die Messung von Sensor 1 dann zu Ende ist und die Daten protokolliert werden, läuft die Messung von Sensor 2 noch weitere 3 Sekunden und wird dann protokolliert. In der Zeit kann aber die Messung von Sensor 1 wieder beginnen.

Mein Problem ist nun, dass das Speichern der Datei sehr lange dauert (ca. 100 - 500 ms), selbst bei einer Dateigröße von 300 Bytes.
Die Messwerte werden zwar gepuffert und gehen auch bei Verzögerungen nicht verloren, aber die Messzeit variiert, da aufgrund der Verzögerungen der Schleifendurchlauf stark variieren kann.

Nun dachte ich mir, ich nehme eine Schleife für Erfassung und Bewertung (deteministisch) und eine parallele While-Schleife, die die Protokollierung übernimmt. Ich habe übrigens eine Single-Core-CPU.
In der Erfassungs-Schleife (höchste Priorität) würde ich z.B. alls 100 ms meine Messwerte auslesen und dann auswerten. In der Zeit, in der auf die Messwerte gewartet wird, könnten eventuelle Speichervorgänge in der parallelen Schleife durchgeführt werden.

Die CPU würde vermutlich in der Wartezeit der Erfassungs-Schleife die parallele Speichern-Schleife abarbeiten, sofern ich dieser Daten übergebe.

Ich hoffe, ihr konntet mir nun halbwegs folgen.
Habt ihr 'ne Ahnung, ob dieses Vorgehen sinnvoll ist der kennt ihr Alternativen?

Grüße
Matze
  Mit Zitat antworten Zitat
Benutzerbild von divBy0
divBy0

Registriert seit: 4. Mär 2007
Ort: Sponheim
1.021 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Echtzeitanwendung - Welche Struktur beim Dateizugriff?

  Alt 6. Nov 2010, 13:33
Single-Core ist etwas doof, aber vielleicht kannst du die Daten in der Messschleife ja als Memorystreams im Speicher halten und unabhängig von der Messschleife in einem Thread abspeichern.

Bei jeder Messung erzeugst du einen neuen Memorystream in einer Liste und die Liste müsste sich ja abarbeiten lassen.

Welches System wird genutzt? VxWorks? Win?
Marc
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt, die 10. summt die Melodie von Tetris... | Wenn das die Lösung ist, dann hätte ich gerne mein Problem zurück! | engbarth.es
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Echtzeitanwendung - Welche Struktur beim Dateizugriff?

  Alt 6. Nov 2010, 13:53
Hallo Marc

Single-Core ist etwas doof ...
Stimmt, aber aus Kostengründen das einzig mögliche.

Welches System wird genutzt? VxWorks? Win?
Wow, du kennst dich aus. Es ist in der Tat VxWorks.

Mir geht es da ganz allg. um ein sinnvolles Vorgehen, sprachunabhängig. Und Memorystreams würden mir nicht helfen, denn sobald ich den speichere, habe ich genau den gleichen Dateizugriff.
Die Daten habe ich in Variablen schon aufbereitet. Nur wie sie gespeichert werden können, weiß ich noch nicht.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Echtzeitanwendung - Welche Struktur beim Dateizugriff?

  Alt 6. Nov 2010, 14:03
Jeweils ein Thread pro Sensor.
Diese Thread dürften die meiste Zeit am Schlafen sein, weil sie auf das Eintreffen der Sensordaten warten.
Danach werden die Meßwerte verpackt (als binärer Datenblock) und in die Queue geschoben.

Die Threads bekommen schon mit dem Erzeugen eine (threadsichere) Queue mitgegeben.

Ein weiterer Thread prüft, ob die Queue gefüllt ist, entnimmt die Daten und schreibt sie in eine Datei (oder einen Stream).
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Echtzeitanwendung - Welche Struktur beim Dateizugriff?

  Alt 6. Nov 2010, 14:07
Hallo,

mehrere Threads bringen in meinem Falle nichts. Bei einer Single-Core-CPU wird ja alles nacheinander ausgeführt, d.h. ich habe mir Funktionen geschrieben, die in einer For-Schleife meine Sensoren durchgehen und diverse Dinge berechnen etc.

Das funktioniert soweit auch alles.

Nur das Speichern bereitet mir zur zeit Probleme. Daher dachte ich daran, dieses Teil in einen separaten Thread auszulagern.

Das ganze ich deutlich komplexer als ich es bisher dergestellt habe. Ich bekomme übers Netzwerk Daten wie z.B. ein Boolsches Array. Index 0 enspricht Sensor 1, ...
Und das Array kann ich innerhalb einer einzigen For-Schleife sehr leicht verarbeiten (Schleifen-Index = Array-Index). Daher möchte ich die Erfassung und Auswertung in einer einzigen Schleife machen.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Echtzeitanwendung - Welche Struktur beim Dateizugriff?

  Alt 6. Nov 2010, 14:32
trotz Single-CPU würde ich pro Empfangskanal auch einen Thread erzeugen.

Die meisten Threads werden ja eh schlafen, aber so braucht keiner der Empfangskanäle warten, bis dieser in der for-Schleife abgefragt wird.

Diese Threads würde ich auch NUR zum Erfassen der Daten benutzen. Die Auswertung der Daten ist ja dann nicht mehr zeitkritisch, da beim Empfang ja alle Parameter erfasst wurden (Messwert, Zeitpunkt der Messung)

Single-Core und Multi-Threading:

Es ist sicher richtig, wenn ich auf einem System mit n Kernen sehr rechenintensive Vorgänge in m Threads packe und m>n, dass die Performance nicht steigt, sondern sogar sinkt.
Hier haben wir aber nicht solch einen Fall, denn hier wartet jeder Thread eine ungewisse Zeit und somit sollte für jeden Thread genug Zeit da sein.

Wenn dem nicht so ist, dann ist auch die Single-Thread-Lösung ein nicht gangbarer Weg.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#7

AW: Echtzeitanwendung - Welche Struktur beim Dateizugriff?

  Alt 6. Nov 2010, 14:59
Hallo,

mehrere Threads bringen in meinem Falle nichts. Bei einer Single-Core-CPU wird ja alles nacheinander ausgeführt, d.h. ich habe mir Funktionen geschrieben, die in einer For-Schleife meine Sensoren durchgehen und diverse Dinge berechnen etc.
Das ist ein Irrtum. Selbst auf einem Einkern-System bieten Threads eine bessere Granularität bei der Ausführung. Zugegeben, irgendwann wird auch der Overhead zu groß, aber das dauert ne Weile.

Aber mal ne Frage. Müssen denn die Daten immer sofort geschrieben werden? Oder ginge sammeln und dann schreiben aus einem dedizierten Thread?
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Echtzeitanwendung - Welche Struktur beim Dateizugriff?

  Alt 6. Nov 2010, 15:01
Sonst würde Intel ja auch nicht auf Hyperthreading setzen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Echtzeitanwendung - Welche Struktur beim Dateizugriff?

  Alt 6. Nov 2010, 15:14
Zitat von mkinzler;:
Sonst würde Intel ja auch nicht auf Hyperthreading setzen
Und wozu gebe es sonst das TThread-Objekt, wenn es nur interessant für Multi-Cores wäre.
Den Einwand, es gibt ja auch schon lange Multi-Cores, kontere ich mit es gibt aber auch schon 64Bit Systeme nur für Delphi nicht
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#10

AW: Echtzeitanwendung - Welche Struktur beim Dateizugriff?

  Alt 6. Nov 2010, 15:21
Den Einwand, es gibt ja auch schon lange Multi-Cores, kontere ich mit es gibt aber auch schon 64Bit Systeme nur für Delphi nicht


Ich glaube ja HT ist einfach nur billiger
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz