Hallo,
ein Netzwerkstream macht mir derzeit Ärger - das Problem habe ich momentan umgangen, doch würde mich interessieren, was dahinter steckt:
- Ich habe einen Standardaufbau mit einem VI das nur über einen Sendeendpunkt verfügt und die Daten in den Stream schreibt und ein anderes VI, welches nur über einen Empfangsendpunkt verfügt und die Daten vom Stream holt. Beide VIs laufen derzeit auf dem selben Rechner (Entwicklungsphase), sollen später aber auf getrennten Maschinen laufen.
- Beim Sendeendpunkt ist nur der Sendername eingetragen 'TX - Kanal X',
der Empfangsendpunkt trägt die Bezeichnung 'RX - Kanal X' und die Sende-URL ist komplett angegegen, mit IP und Sendernamen.
- Die VIs stecken im selben Projekt, dort habe ich auch eine Typendefinition erstellt, welche aus einem Cluster mit verschiedenen Unterelementen besteht, dies soll das Datenpaket darstellen, welches über den Stream übertragen werden soll. Nebst einigen, relativ wenig speicher verbrauchenden, Einzelvariablen ist auch ein Array enthalten, welches - dynamisch, je nach Einstellungen - bis zu 16MB groß werden kann: 2^22 (= 4.194.304) U32-Variablen.
Momentan reize ich die größe des Arrays allerdings nicht aus, testweise übertrage ich derzeit 2^10 (= 1024) bis 2^16 (= 65.536) der U32 Variablen. Evtl. migriere ich gar noch von U32 zu DBL, sollte die größe problematisch werden (dann ja bis zu 32MB pro Paket), könnte es auch SGL werden - Das ist aber eine andere Geschichte und in der Umsetzung wohl unproblematisch, es könnte nur zu Performanceproblemen kommen.
Das eigentliche Problem:
Führe ich nun diese Datenstruktur nun direkt in Sende- und Empfangsendpunkt als Datentyp, nehmen sie dies auch an, es gibt keinen Fehler in der Entwicklungsumgebung. Das schreiben in den Stream (VI: 'Ein Element in Stream schreiben') wie auch das holen der Daten vom Stream (VI: 'Mehrere Elemente aus Stream auslesen') geschieht jeweils in einer zeitgesteuerten Schleife.
Der Empfangsendpunkt liefert übrigens den selben Fehlercode - dort ist nur keine Fehlerbeschreibung dazu angegeben!
Beim ausführen liefert nun schon das erstellen des Sendeendpunktes folgenden Fehler:
Zitat:Fehler -314304 ist bei Sendeendpunkt für Netzwerk-Stream erstellen in Datenquelle.vi aufgetreten
Mögliche Ursachen:
LabVIEW: Der Datentyp des Netzwerkendpunkt entspricht nicht dem Typ des lokalen Endpunkts. Die Datentypen der Endpunkte müssen übereinstimmen.
...dies kam nun beim Nachstellen der Situation heraus, vor meinem Workaround, als der Fehler zum ersten mal auftrat, war da ein anderer Fehler, des irgendentwas mit dem Verbindungsaufbau anklagte - ich erinnere mich aber nicht mehr genauer.
Zur auswertung der Meldung: Es ist ja schon irgendwie ersichtlich, was sie sagen will, doch habe ich an jeder relevanten Stelle (so viele gibt es ja gar nicht) die Datenstruktur als Datentyp angegeben, das müsste also Konsistent sein!
Meine Lösung:
Bei Sende- und Empfangsendpunkt gebe ich nun Variant als Datentyp an und Caste meine aus der Typendefinition abgeleiteten Datensätze vor dem schreiben in den Sendeknoten bzw. dem lesen des Empfangsknotens, auf/von Variant.
...so funktioniert alles. Doch: Ist dies unbedingt nötig - oder begehe ich einen grundlegenden Fehler (vllt. ja auch an ganz anderer Stelle als ich vermute)?!
Vielen dank schon einmal für das lesen des Pamphlets - mein Haupt-VI ist leider sehr groß und die entsprechenden Passagen lassen sicht schlecht extrahieren, ansonsten würde ich es ja auch mal anhängen. Sollte dies jemandem weiterhelfen, würde ich eine kleines Demo-VI erstellen, mit den entsprechendem G-Code.
Grüße
Sascha