Servus zusammen,
ich verzweifel hier gerade.. Ich bin dabei eine Software von ILA per Remote zu steuern, es handelt sich dabei um ein Laser-Doppler-Velocimeter.
Soweit bekomme ich das Meiste hin, auch wenn die Doku dazu recht sparsam ist, kann ich aktuell per try and error immer mal wieder testen und direkt vergleichen/korrigieren.
Problem habe ich bei der "Binary Data Transfer" von Messdaten, da werden ganze Dateien übertragen, unbekannter Größe (aktuell ist die Datei ca. 33 KB groß).
Anbei mal ein Zusammenschnitt, wie diese Datei aufgebaut ist, wobei '...' mehr Daten sind.
Code:
TransferedFileName;0;C:\LDA_DATA\ProjectA\ProjectA_a.ldv<CRLF>
1 0.000 0.000 0.000 6.602446e+00 5.841750e-01 6.603106e+04 22696 9.999000e+01 1.320417e+03 5.537910e+01 1.320549e+07 22696 9.999000e+01 07/23/20 13:53:35 07/23/20 13:53:55
...
276 0.000 0.000 0.000 0.000000e+00 0.000000e+00 0.000000e+00 0 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0 0.000000e+00 02/02/21 07:41:07 02/02/21 07:41:17
FinishSendFile<CRLF>
TransferedFileName;0;C:/LDA_DATA/ProjectA/ProjectA_a.csv<CRLF>
Nr.;X[mm];Y[mm];Z[mm];Vx[m/s];Tux[%];fDx[Hz];NrBurstsx;Fringe_dx[um];Vy[m/s];Tuy[%];fDy[Hz];NrBurstsy;Fringe_dy[um];Start;End;Vz[m/s];Tuz[%];fDz[Hz];NrBurstsz;Fringe_dz[um];Va[m/s];Tua[%];fDa[Hz];NrBurstsa;Fringe_da[um]
1;0.000;0.000;0.000;6.602446e+00;5.841750e-01;6.603106e+04;22696;9.999000e+01;1.320417e+03;5.537910e+01;1.320549e+07;22696;9.999000e+01;07/23/20 13:53:35;07/23/20 13:53:55
...
276;0.000;0.000;0.000;0.000000e+00;0.000000e+00;0.000000e+00;0;0.000000e+00;0.000000e+00;0.000000e+00;0.000000e+00;0;0.000000e+00;02/02/21 07:41:07;02/02/21 07:41:17
FinishSendFile<CRLF>
<CRLF> das sind die einzigen Zeilen mit \r\n als Abschluss, darauf zu warten, bei unbekannter Dateigröße, sehe ich aber als riskant.
Es sind 2 Dateien, starten mit
"TransferedFileName";0; <Dateipfad> (wobei die 2te Datei / die erste \ Ordner trennt, das habe ich schon abgefangen)
<Daten>
"FinishSendFile"
Meine Versuche waren:
-kleine Häppchen abfragen und Zeilenweise in die Datei schreiben, dabei kam mir aber der time out vom TCP lesen immer weider in den Weg. Entweder hat er alles ausgebremst oder ich habe nicht alles gelesen.
-Größere Häppchen lesen und direkt wegschreiben, da hat er dann teilweise die nächste Datei nicht erkannt (Endmarker abgeschnitten? oder Daten kommen zu langsam rein?)
-(Als Bild anbei) große Datenmengen lesen und wegschreiben. Da hatte ich dann Schwierigkeiten mit den Bedingungen für die nächste Datei, Daten kamen zu langsam rein
und mein Kopf ist nun voll (und ich bitte hier um Hilfe) -.-'
Das ganze ist mit DQMH geschrieben, im Case "Next File" wird geprüft ob "TransferedFileName" anliegt und übergibt dann neue Parameter zu diesem Case, wenn nicht, ist er fertig.
Es gibt noch 2 andere Dateien, die empfangen werden können, die übertragen je nur eine Datei.
Ich würde gerne wenig Zeit mit der Datenübertragung verschwenden, also lange timeouts vermeiden.
Welchen schritt würdet Ihr gehen, gibt es eine (einfache) Möglichkeit zu prüfen ob da noch was am Port kommt?
Ich habe TCP bisher nur für ASCII Befehle benutzt mit CRLF als Modus.
Ich bin wie immer für jeden Tipp dankbar.
Timo