Send a hex block of data Serial port from matlab

44 visualizaciones (últimos 30 días)
Michael Mathew
Michael Mathew el 7 de Oct. de 2013
Comentada: Ferran Gonzalez el 8 de Nov. de 2022
Hi,
I have a problem, I have a serial device which should addressed using a block of data in specific format. The data I am trying to send is [7E 00 12 10 00 00 13 A2 00 40 8B 63 85 08 59 00 00 00 00 00 1A 0C], all in hexadecimal. How to send it in a single go? The command is correct since I am able to send the same via a serial terminal program and the device responds.
I can do the same using a arduino by the following command: Serial.write(array,sizeof(array));
How to do the same kind in matlab?
Kindly please help.
Thanks in advance, Mike

Respuesta aceptada

Walter Roberson
Walter Roberson el 7 de Oct. de 2013
fwrite(fid, array)
  3 comentarios
Walter Roberson
Walter Roberson el 8 de Oct. de 2013
You do NOT want to transmit hex. You want to transmit 8 bit binary. The hex you see is from the monitoring program displaying the binary that way.
fwrite(s, h)
Have you set the serial port Terminator property to no terminator, and the BytesAvailableFcnMode to 'byte' ? And possibly the InputBufferSize as well?
Michael Mathew
Michael Mathew el 8 de Oct. de 2013
Thanks, it worked, plus I found some suggestions in the below link.
Now the device responds.

Iniciar sesión para comentar.

Más respuestas (2)

Jan
Jan el 7 de Oct. de 2013
"All in hexadecimal" is not clear. You cannot store values in hexadecimal format like e.g.:
a = [7E 00 12 10 00 00 13 A2 00 40 8B 63 85 08 59 00 00 00 00 00 1A 0C]; % ERROR!
You would need e.g. a string (char vector):
a = ['7E', '00', '12', ...
But to send this, you would convert it to UINT8 values at first, most likely. So please explain this detail.
  2 comentarios
Michael Mathew
Michael Mathew el 8 de Oct. de 2013
Editada: Michael Mathew el 8 de Oct. de 2013
Hi Simon, Yup I did the same, following is the code I am trying to execute:
clc; clear all;
serial('COM14','BaudRate',9600);
set(s,'OutputBufferSize',88);
fopen(s);
toNode1={'7E' '00' '12' '10' '01' '00' '13' 'A2' '00' '40' '8B' '63' '85' '08' '59' '00' '00' '00' '00' '00' '1A' '1F'};
h=hex2dec(toNode1);
h1=(dec2hex(h)); %just making sure its hex itself; because none was working
binblockwrite(s,h1); %tried fwrite(s,h) but didn't work
b=fscanf(s);
fclose(s);
but it doesn't work. I want something like in the attachment. Please see the image attached.
Jan
Jan el 8 de Oct. de 2013
"It does not work" is not useful to explain the occurring problems. Please tell us, what happens.

Iniciar sesión para comentar.


Michael Mathew
Michael Mathew el 8 de Oct. de 2013
Hey all,
Thanks for the suggestions:
I got my answer in the following link:
  3 comentarios
Kritika Vashishtha
Kritika Vashishtha el 8 de Mayo de 2020
Hey Michael, Can you post the answer. The link that you shared no more exists.

Iniciar sesión para comentar.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by