Nach einem weiteren Tag des Testens ist mein Kenntnissstand nun folgender:
LabVIEW ist schon in der Standardeinstellung gut.
Ich gebe jetzt mein Wissen zum Multithreading mit LabVIEW kund, und bitte um Richtigstellung falls ich etwas falsch sehe.
In LV 8.61 ist die Standardeinstellung bei VI-Eigenschaften-->Ausführung "Ablaufinvariant aus" und Bevorzugtes System "Wie Aufrufer" und im CodeInterfaceNode "In UI-Thread ausführen".
Selbst damit laufen meine 4 Sub-VIs Gerät1-Gerät4 parallel (ja, ich staune selber
).
Weil nämlich meine DLL-Aufrufe jedes Gerätes (open.vi send.vi read.vi close.vi) in SUB-VIs verpackt sind, macht damit das LabVIEW System im Prinzip folgendes:
Gerät1-open, dann Wechsel zu Gerät2-open, dann wechsel zu Gerät3-open usw.
Die Laufen zwar nicht wirklich parallel, aber LV wechselt durch die VIs durch, und zwar so schnell dass es für mich wie parallel aussieht.
Echt parallel wirds, wenn ich im CodeInterfaceNode "In beliebigen Thread ausführen" wähle.
Aber mein Problem ändert sich dadurch nicht, weil, ja weil: der Fehler ist nicht LV oder meine DLL, das Problem sitzt in dem SerialDeviceServer, der eben 4 serielle Schnittstellen an TCP/IP bringt. Dieses Teil sendet zwar auf allen 4 Ports gleichzeitig aus, aber die gleichzeitig über RS232/485 eintreffenden Antworten queued das Mistding, und legt diese dann 300ms nacheinander aufs Netz, so dass selbst meine Parallele Empfangerei die Antwort des 4. Gerätes erst nach 300ms*4=1200ms in LabVIEW anzeigen kann.
Ich hätt das nie für möglich gehalten, und hatte LV oder meine DLL im Verdacht.
Der Hersteller des Gerätes ist informiert und ich warte auf Antwort.
Danke für eure Hilfe.
Werner