LabVIEWForum.de - Server-Multiclient mit SV

LabVIEWForum.de

Normale Version: Server-Multiclient mit SV
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich habe mir jetzt schon seit einigen Monaten die vielen verschiedenen Ansätze für eine Server-Multiclientlösung im Forum durchgelesen. Da ich (leider) nicht ständig mit LabVIEW arbeite waren mir die TCP/IP Ansätze zu streng und blieb lieber bei den Lösungen mit SV.
Dabei habe ich folgendes berücksichtigt: Initialisierung von Server und Clients, Kommunikation von den Clients zum Server und umgekehrt. Leider habe ich ein Problem.Der Server wird von einem Client aktualisiert, wenn es am FP des Client eine Änderung gegeben hat. Diese Änderung stelle ich durch Schieberegistern der einzelnen Elemente fest, indem ich einfach jeden Wert mit dem vorherigen Wert (Zyklus vorher) vergleiche. Hat eine Änderung stattgefunden, so wird mittels Notifier in einer anderen Schleife die neuen Werte an den Server weitergereicht (aufwendiges Prinzip mit SV im Client setzen und im Server wieder zurücksetzen, so wie M.Weippert das irgendwo im Forum beschrieben hat). Leider funktioniert das Ganze nicht, wenn ich schnell hintereinander mehrmals z.B. ein numerisches Bedienelement inkrementiere oder dekrementiere. Es kommt dann zu einer Situation, wo der Server einen anderen Wert anzeigt als der Client.
Kann mir jemand vielleicht einen Lösungsansatz geben.
Dankend
montanaro
Am besten registriere die Änderungen am FP des Clients durch Event-Struktur, damit wirst du keine Zwischenänderungen verlieren, denn die werden automatisch gepuffert. Zweitens wäre in dem Fall ein Kommunikations-Echo sehr nützlich.
' schrieb:Am besten registriere die Änderungen am FP des Clients durch Event-Struktur, damit wirst du keine Zwischenänderungen verlieren_ denn die werden automatisch gepuffert. Zweitens wäre in dem Fall ein Kommunikations-Echo sehr nützlich.

Was ist eigentlich SV?

Danke eg für deine schnelle Antwort. SV=shared variable.
Deine (eg) Forumeinträge habe ich wochenlang durchgekaut, aber leider nicht kontinuierlich genug (muss leider andere Termine einhalten) und deshalb habe ich mich für die Kommunikation mit Umgebungsvariablen entschieden, weil für mich leichter verständlich (bringen aber viel mehr ärger!!).
Ich werde jetzt die Änderungen mal mit der Eventstruktur testen.(ich glaub das hatte ich schon probiert).
Danke
montanaro
[quote]
weil für mich leichter verständlich (bringen aber viel mehr ärger!!).
[/quotе]

Genau so sehe ich das auchBig Grin
Ich habe nun meine Änderung angebracht. Die Event-Struktur hört auf Änderungen am FP, gibt die Kommunikationsschleife zum Server frei und sendet die Werte einmalig anhand shared variable. Der Server versteht die Schreibanfrage durch einen Kommunikationsboolean und informiert alle anderen Client indem er zuerst das Kommunikationsbit zu den einzelnen Clients setzt und jenes vom Client, der zum Server schrieb zurücksetzt. Die einzelnen Clients erhalten die Informationen und setzen das Kommunikationsbit zurück. Ist nicht ganz so sauber, weil eben eine Fehlkommunikation vom Client zum Server nicht wiederholt wird.
Wenn ich auf meinem Rechner das ganze teste, so stelle ich fest, dass z.B. im Variablen Manager eine shared variable einen unterschiedlichen Wert hat, wie gerade vom Client gelesen wurde?? Auch bei der Initialisierung setze ich einen Enum auf den Wert "Initialisierung" und in der Schleife lest er mir das erste Mal einen anderen Wert!
Entweder mein Rechner spinnt oder hier ist etwas faul!
Hatte jemand schon so was ähnliches?
Danke
montanaro
Ich würde hier sagen, dass du pro Client einen Kommunikationsbit brauchst, dann wartet der Server nach dem Absenden bis alle Clients ihre Kommunikationsbits gezetzt haben (=Nachricht gelesen) und schickt erst dann die nächste Nachricht.
Ja, das hatte ich. Ich verstehe nur nicht weshalb LabVIEW einen falschen Wert einer sv zuweist, wenn doch im variable manager ein anderer Wert steht.
montanaro
Vielleicht schreibst du zu schnell rein oder hast Fehler vornedran. Was ist eigentlich mit Fehler Ein und Ausgängen? Warum sind die nicht verbunden?
Referenz-URLs