Entwickler-Ecke
Internet / Netzwerk - Gesucht: Komponente zu IEEE 1588 Precision Time Protocol
seppl - So 03.06.07 13:11
Titel: Gesucht: Komponente zu IEEE 1588 Precision Time Protocol
Hallo,
ich habe folgendes Problem und grüble nun schon eine ganze Weile nach einer Lösung:
Problem:
In einem LAN soll auf verschiedenen Clients (10-30 Stk.) eine Applikation synchron (Delta T ~<=10ms) laufen.
Nun hatte ich bereits mit den Indy-Komponenten zur Zeitsynchronisation experimentiert. Das klappt zwar, jedoch musste bei meiner Lösung alle 10 Millisekunden der Client eine Anfrage an den Server senden. Versuche, durch eine einzige Zeitsynchronisierung irgendwie einen Client-Takt zu erzeugen, der Synchron (<=10ms) mit dem des Servers läuft, schlugen fehl.
Nun habe ich bereits recherchiert, dass zu solchen Zwecken IEEE genutzt wird, welches ermöglicht, über Ethernet Systeme zu synchronisieren (Genauigkeit 0,5 ms) - was mehr als synchron genug wäre.
Kennt jemand vielleicht eine Komponente zur Synchronisierung von Prozessen auf verschiedene Clients im LAN für Delphi? Oder vielleicht finden ja einige der hier anwesenden klugen Köpfe einen anderen Lösungsansatz?
Würde mich echt freuen.
Moderiert von
Christian S.: Topic aus VCL (Visual Component Library) verschoben am So 03.06.2007 um 14:40
MrSaint - So 03.06.07 14:33
Was möchtest du nun genau machen? Dass auf all den Rechnern eine auf 10 ms gleiche Uhrzeit läuft? Oder hast du auf jedem Client ein Programm, die alle gleichzeitig das Gleiche machen sollen? Bei Zweiterem wird das nänmlich u.U kompliziet, da heutige Rechner ja massiv Mutlithreaded sind und du wahrscheinlich nicht erzwingen kannst, dass dein Programm so oft läuft, dass du die Synchronisation so genau hinbekommst... Ich denke da dran, dass der User ein anderes Programm startet, dass irgendwelche tollen Berechnungen durchführt, eine DVD brennt oder sonst irgendwas, was den Rechner relativ kräftig beschäftigt... Auch im Speicherbereich, sprich, wenn einer anfängt ein Bildbearbeitungsprogramm zu starten und nur wenig RAM drin hat -> Swapping... da bleibt dann, wenns blöd läuft einfach nicht genug Rechenzeit für dich übrig..
MrSaint
matze - So 03.06.07 15:47
also du könntest ja die Synchronisation so machen, dass du eine Variable hast, die in einem 10 ms Intervall hochgezählt wird.
Am Anfang und dann alle 3 Sekunden wird diese mit dem Hauptserver abgeglichen.
Und anhand dieser Variable kannst du dann deine Prozesse synchron halten.
seppl - Mo 04.06.07 11:29
matze hat folgendes geschrieben: |
also du könntest ja die Synchronisation so machen, dass du eine Variable hast, die in einem 10 ms Intervall hochgezählt wird.
Am Anfang und dann alle 3 Sekunden wird diese mit dem Hauptserver abgeglichen.
Und anhand dieser Variable kannst du dann deine Prozesse synchron halten. |
Ja, diesen Weg versuchte ich bereits, wobei ich festgestellt habe, dass TTimer nicht ausreicht und ich auf genauere Timer zurückgreifen muss, da TTimer nur eine Genauigkeit von ca. 22ms hat (trotz der Auflösung von 1 ms).
MrSaint hat folgendes geschrieben: |
Was möchtest du nun genau machen? Dass auf all den Rechnern eine auf 10 ms gleiche Uhrzeit läuft? Oder hast du auf jedem Client ein Programm, die alle gleichzeitig das Gleiche machen sollen? Bei Zweiterem wird das nänmlich u.U kompliziet, da heutige Rechner ja massiv Mutlithreaded sind und du wahrscheinlich nicht erzwingen kannst, dass dein Programm so oft läuft, dass du die Synchronisation so genau hinbekommst... Ich denke da dran, dass der User ein anderes Programm startet, dass irgendwelche tollen Berechnungen durchführt, eine DVD brennt oder sonst irgendwas, was den Rechner relativ kräftig beschäftigt... Auch im Speicherbereich, sprich, wenn einer anfängt ein Bildbearbeitungsprogramm zu starten und nur wenig RAM drin hat -> Swapping... da bleibt dann, wenns blöd läuft einfach nicht genug Rechenzeit für dich übrig..
MrSaint |
Auf den Client läuft eine Art Player, der etwas (Bilder, Movies, etc) darstellt. Da die Player (Abstand ~ 5 Meter) nebeneinander stehen, soll erreicht werden, dass die Inhalte möglichst gleichzeitig angezeigt werden. Andere User oder andere größere Programme laufen nicht (CD-ROMS werden nicht gebrannt :o). Es ist auch erforderlich, dass jeder Bildschirm durch einen eigenen Client-PC angesteuert wird, da jeder zentral über einen Server ein- und ausgeschaltet werden kann. Auch kann man steuern, welcher Inhalt auf welchem Client zu sehen ist. Ein einfaches Verteilen eines VGA-Signals ist also keine Lösung.
matze - Mo 04.06.07 16:48
Wenn der Timer zu ungenau ist und du diese Rechner sowieso selber administrieren kannst, dann mach das doch an der Systemzeit fest...
Soweit ich weiß, kann man die Systemzeit auch mit Millisekunden auslesen.
Und bei den Indys sind Komponenten dabei, mit denen du die Systemzeit mit einem Server abgleichen kannst. Die Komponente, um den Server zu machen ist auch dabei.
Und die Synchronisation führst du dann einfach alle 5 Sekunden aus.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!