' schrieb:i2dx hast du es auch mal mit anderen Methoden probiert die Daten vom RT Host zum PC Host zu transportieren - gab es, wenn ja, eine erfolgversprechende darunter? Ich habe nämlich gestern mal durch die Beispiele geguckt und bin da auch auf deine TCP/IP-Geschichte getroffen. Das wirkt mir so kompliziert und ich habe gar nicht erkannt ob da was zwischen gepuffert wird. Hast du es schon mal mit den RT FIFOs probiert, die mir freedive vorgeschlagen hat?
Gunni
So, ich hab ein vorläufiges Endergebnis:
die Erkenntnis dabei ist 1. - es ist manchmal wirklich hilfreich beim Programmieren, wenn man rechnen kann
ok, zu den Fakten: in meinem Speed Test war ein Bug, ich hab multipliziert anstatt zu dividieren. Ich hab ihn nochmal umgeschrieben und komme zu dem Ergebnis, dass man ca. 1200 kB pro Sekunde vom RT-Host zum PC übertragen kann (rote Kurve). Mein Aufbau: PC mit GB Ethernet, 100 MBit Switch full duplex, cRIO 9004 Controler.
man muss beim Versenden der Daten schwer darauf achten, dass das Versenden nicht zu lange dauert. Ich habe keine RT-Fifos oder dergleichen ausprobiert, weil die Daten ja sowieso übers Netz müssen. UDP fällt aus, weil die max. Paketgröße von 8192 Bytes pro Datagramm bei der anfallenden Datenmenge überschritten wird, also bleibt nur TCP. Da die einzige Verbindung zwischen RT-Host und PC das Netzwerkkabel ist, müssen die Daten ja irgendwie da durch. Egal welche wie auch immer geartete Funktionalität man nun nutzt, sei es Shared Variables oder sonstiges, die Daten müssen durch dieses Kabel. Um Rechenzeit zu sparen hab ich den niedrigsten mir zur Verfügung stehenden Level gewählt, der mir zur Verfügung steht, und das ist TCP.
Im speziellen muss man sein Timing explizit austüfteln und da wird die blaue Kurve interessant:
Wenn man eine Loop Time auf dem RT-Host von ca. 100 ms anstrebt, dann hat man die Qual der Wahl zwischen einer Paketgröße von 32, 64 oder 128 kByte bei annähernd gleichem Durchsatz. Das beißt sich aber mit der anfallenden Datenmenge die vom FPGA kommt. In meinen Tests habe ich rausgefunden, dass ich ein 2 x 2048 Double Array (=32 kB) bei einer Loop-Time von 100 ms sicher zum PC übertragen kann, wobei vom FPGA aber erstmal die vierfache Menge an Daten reinkommt. Man muss hier also reduzieren und da der Controler sowieso schon genug mit Abholen und Verschicken zu tun hat, bleibt einem da eigentlich nur, die Daten bereits auf dem FPGA zu reduzieren.
Das deckt sich im Übrigen auch wieder mit meiner ersten Erkenntnis, dass man bis zu einer Samplerate von 25 kHz 2 Kanäle vom FPGA über den RT-Host zum PC Schaufeln kann
[und wenn man bedenkt, dass eine Schaufel ein manuell betriebenes Arbeitsgerät ist, dann ist das schon relativ schnell - als wir vor einem Jahr den Estrich gemacht haben hab ich den Beton mit höchstens 0,1 Hz geschaufelt
]
Wie du nun die Daten reduzierst - kann ich dir auch nicht sagen, dazu müsste man wissen wie du die Daten auf dem PC verarbeiten musst. Mein Problem ist erstmal gelöst;)bzw. ich hab aus der Geschichte das gelernt, was ich wissen wollte / das war auch der Grund warum ich mich so intensiv damit beschäftigt habe.
crio_01.zip (Größe: 485,38 KB / Downloads: 330)