Parsing data from serial port
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Daniel
el 11 de Abr. de 2016
Comentada: Daniel
el 19 de Abr. de 2016
Hi,
I communicate with a DsPIC
i have a constant format for a message:
HEADER1 HEADER2 OPCODE DATA CHECKSUM (no spaces)
in my MATLAB GUI i want to read the incoming message, chk if i get the HEADER1 I EXPCT, then chk to see i get HEADER2 i expect , if so: get OPCODE and DATA and do with that something
how can i split my message?
thought about switch;case
wanted to know if there is something more "elegant"
Thanks
2 comentarios
Walter Roberson
el 11 de Abr. de 2016
Is that a text format or a numeric format? are the headers variable length? How can you tell when HEADER1 stops and HEADER2 begins?
Respuesta aceptada
Walter Roberson
el 11 de Abr. de 2016
You need a Finite State Machine. The Mathworks tools for that are http://www.mathworks.com/discovery/finite-state-machine.html but you probably do not need anywhere near the full power of that.
current_state = 0;
while true
this_input = fread(s, 1, 'uint8');
if feof(s); break; end
if state == 0 && this_input == 88 %0x55
current_state = 1;
elseif current_state == 1 && this_input == 170 %0xAA
current_state = 2;
now read the opcode and data and so on.
When you are through with it
current_state = 0;
else
current_state = 0;
end
end
6 comentarios
Walter Roberson
el 14 de Abr. de 2016
"persistent". Or a shared variable if you need to be able to reset the state.
Más respuestas (0)
Ver también
Categorías
Más información sobre Properties en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!