Guten Tag,
Ich muss für mein Projekt Weg-Daten aus einem Messgerät(Heidenhain
VRZ406) über eine serielle Schnittstelle auslesen.
Um Daten zu senden muss das Messgerät das Steuersignal STX (Dezimal 2)
gesendet bekommen, dies habe ich mit einem Arduino + Max232 Einheit
realisiert. Das läuft auch alles Problemlos.
Mein Problem liegt beim einlesen bzw. speichern der Daten vom Messgerät
in Matlab, eher gesagt in der Geschwindigkeit, da nicht alle vom
Messgerät übersendeten Daten erfasst werden.
Das Messgerät sendet mit einer Baudrate von 2400, 7 Databits, even
Parity und 2 Stopbits.
Über HTerm habe ich als Nachrichten vom Messgerät folgendes erhalten:
'+ 0.007?/r/n' (hinter dem '+' sind 3 Leerzeichen in der Nachricht)
Ich habe den Folgenden Code dafür rausgesucht und auf meinen
Anwendungsfall abgeändert:
1 | if ~isempty(instrfind)
|
2 | fclose(instrfind);
|
3 | end
|
4 |
|
5 | %Serielle Schnittstelle einrichten
|
6 | ser=serial('COM2');
|
7 | disp('Serialobjekt erzeugt');
|
8 | set(ser,'BaudRate',2400);
|
9 | set(ser,'DataBits',7);
|
10 | set(ser,'Parity','even');
|
11 | set(ser,'StopBits',2);
|
12 | set(ser,'ReadAsyncMode','continuous');
|
13 | set(ser,'Terminator','CR/LF');
|
14 |
|
15 | fopen(ser);
|
16 | disp('Serialobjekt geöffnet')
|
17 |
|
18 | filename = sprintf('Log%s.txt','Data');
|
19 |
|
20 | fileID = fopen(filename,'wt');
|
21 |
|
22 |
|
23 | while (1) %Abfrage
|
24 |
|
25 | disp(fgetl(ser));
|
26 |
|
27 | fprintf(fileID,fgetl(ser));
|
28 | fprintf(fileID,'\n');
|
29 | end
|
30 | fclose(fileID);
|
31 | fclose(ser);
|
Codequelle: Beitrag "Re: Serielle Schnittstelle (COM) mit MATLAB aufzeichnen/auslesen"
Dieser Code funktioniert auch soweit, bis auf dass ich die Funktion
Manuell pausieren bzw. abbrechen muss um den durchlauf zu beenden. (ist
für mich allerdings nicht allzu schlimm, da die Daten trotzdem
gespeichert sind)
Mein Problem dabei ist, dass dieser Code zu langsam ist oder irgendwie
Fehler ausweist, denn mein Messegerät gibt 2 Werte aus während der Code
nur einen aufnimmt und abspeichert, was zu einer falschen Auswertung
führt.
Bei HTerm bekomme ich auch alle Nachrichten aufgezeigt, also sollte
etwas an dem Code nicht richtig sein.
Im Anhang in nochmal ein Bild von den Nachrichten in HTerm und Die Log
datei die am Ende rauskommt.
Danke im voraus!
Gruß
Sam