Matlab Simulink 串口通讯之float数据到字节数组(uint8)的相互转化
2017-08-22 16:00
1371 查看
(1)数据类型与字节数组之间的相互转化
串口中直接传输的数据是字节数组ByteArray,也就是uint8型的数组。
一个float型的数据可由4个字节表示,double型的数据8个字节表示,等等每种类型的数据都有对应的字节数组表示。
我们要实现的是将要传输的float型数据转化为对应的uint8数组,通过串口传输uint8数组。 将接收到的字节数组转化为对应的float型数据。
(2).m文件中的方法:使用MATLAB中的typecast方法
1.将字节数组转化为float型数据
2.将float型数据转化为对应的uint8数组,也就是字节数组。
(3)Simulink中的方法:使用Simulink->MATLAB Function模块,在Matlab Function 模块中调用typecast函数,下面的例子将四个float型的数据转化为字节数组,加上数据的开始位,通过串口通讯发送到COM3。
Data Processing 函数:
问题原因是Output类型不匹配,需要在MATLAB Function模块中设置Output的Size为所需要的固定值。
方法:右键点击Function模块,选择Explore,设置输入的Size属性(默认为-1,对于这个函数ByteArray的Size应该为[1 18],Head的Size应该设置为[1 2])
这样,程序就运行成功了。
串口中直接传输的数据是字节数组ByteArray,也就是uint8型的数组。
一个float型的数据可由4个字节表示,double型的数据8个字节表示,等等每种类型的数据都有对应的字节数组表示。
我们要实现的是将要传输的float型数据转化为对应的uint8数组,通过串口传输uint8数组。 将接收到的字节数组转化为对应的float型数据。
(2).m文件中的方法:使用MATLAB中的typecast方法
1.将字节数组转化为float型数据
MyByteArray = [1 2 3 4]; MyByteArray = uint8(MyByteArray); MySingle = typecast(MyByteArray,'single');
2.将float型数据转化为对应的uint8数组,也就是字节数组。
MySingle=single(3.24); MyByteArray=typecast(MySingle,'uint8');
(3)Simulink中的方法:使用Simulink->MATLAB Function模块,在Matlab Function 模块中调用typecast函数,下面的例子将四个float型的数据转化为字节数组,加上数据的开始位,通过串口通讯发送到COM3。
Data Processing 函数:
function ByteArray = DataProcessing(Head,Velocity,X,Y,Angular_velocity) Head=uint8(Head); Velocity=single(Velocity); X=single(X); Y=single(Y); Angular_velocity=single(Angular_velocity); MyByteArray1=typecast(Velocity,'uint8'); MyByteArray2=typecast(X,'uint8'); MyByteArray3=typecast(Y,'uint8'); MyByteArray4=typecast(Angular_velocity,'uint8'); ByteArray = [Head MyByteArray1 MyByteArray2 MyByteArray3 MyByteArray4];出现的问题:这个程序直接运行会出现很多问题:
问题原因是Output类型不匹配,需要在MATLAB Function模块中设置Output的Size为所需要的固定值。
方法:右键点击Function模块,选择Explore,设置输入的Size属性(默认为-1,对于这个函数ByteArray的Size应该为[1 18],Head的Size应该设置为[1 2])
这样,程序就运行成功了。
相关文章推荐
- 串口通讯中接收和发送float类型数据
- String与Float类型的相互转换/number数据前面丢失零
- C# Matlab数据类型转化
- CString/string/char*/char[]/int/float相互转化
- C# double float int string 与 byte数组 相互转化
- java 二进制数据与16进制字符串相互转化
- Ardunio mpu6050 dmp 数据通过串口实现与matlab(mac)实时绘图 学习过程 【2014-9-7】
- 利用memcpy函数实现float到QByteArray的相互转化
- C# 转换uint,byte[],char[],string, short[]<->byte[] 结构体和字节数组转化
- 字节数据与结构的相互转化
- JAVA-串口或者Socket发送16进制指令数据(硬件通讯)
- Matlab/Simulink 中枚举类数据的定义
- 关于字符串数据转化为float类型的问题
- 用matlab实时读取串口数据并动态显示曲线
- 数据重塑,以及长宽数据的相互转化
- Java中long数据类型转化为float疑问解答
- JSON格式数据相互转化
- 使用MATLAB模糊数据工具箱和simulink实现单交叉路口交通灯实时配时算法(一)
- MATLAB利用串口接收数据,并实时显示图形
- Qt中int 、byte、Qbytearray、QString间的相互转化与网络数据传输