前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Matlab]使用Simulink进行UDP通讯2

[Matlab]使用Simulink进行UDP通讯2

作者头像
祥知道
发布2020-03-10 15:04:21
1.6K0
发布2020-03-10 15:04:21
举报
文章被收录于专栏:祥的专栏

原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接:http://blog.csdn.net/humanking7/article/details/50710108


关于数据打包时的数据对齐问题

pic1
pic1

接上文 (Matlab使用Simulink进行UDP通讯1),如上图所示,在对这个4个数据进行打包的时候可以发现 uint8【即unsigned char】是占1个字节,而double是占用8个字节。

即,对应的有效数据:

  1. 数据1 uint8类型 占1个字节
  2. 数据2 double类型 占8个字节
  3. 数据3 double类型 占8个字节
  4. 数据4 uint8类型 占1个字节

在Simulink中的Pack和UnPack模块里面有“Byte alignment”参数,这个参数使用来对齐发送(接收)数据的大小,左对齐后位补齐所要的字节,补”0”

pic2
pic2


[8 字节]对齐

Byte alignment = 8 时,也就是把这个 uint8 对齐为 8个字节

得到的数据如下(多组数据,1列一组):

代码语言:javascript
复制
    41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7B 14 AE 47 E1 7A 94 3F 61 00 00 00 00 00 00 00
    41 00 00 00 00 00 00 00 9A 99 4D 85 3F A9 20 40 7B 14 AE 47 E1 7A 94 3F 61 00 00 00 00 00 00 00
    41 00 00 00 00 00 00 00 C0 74 C5 07 79 5A F6 3F 7B 14 AE 47 E1 7A 94 3F 61 00 00 00 00 00 00 00
    41 00 00 00 00 00 00 00 F8 65 C0 35 29 F8 1D C0 7B 14 AE 47 E1 7A 94 3F 61 00 00 00 00 00 00 00
    41 00 00 00 00 00 00 00 FE 91 BC 69 98 FC 22 C0 7B 14 AE 47 E1 7A 94 3F 61 00 00 00 00 00 00 00
    41 00 00 00 00 00 00 00 EE 62 07 82 34 21 06 C0 7B 14 AE 47 E1 7A 94 3F 61 00 00 00 00 00 00 00
    41 00 00 00 00 00 00 00 D8 22 9A 70 44 04 1A 40 7B 14 AE 47 E1 7A 94 3F 61 00 00 00 00 00 00 00

分析其中一列,可知

代码语言:javascript
复制
    41 00 00 00 00 00 00 00 
    58 F4 E4 FA 0B 01 22 40 
    7B 14 AE 47 E1 7A 94 3F 
    61 00 00 00 00 00 00 00

当参数“Byte alignment”“8”的时候,也就是把这个uint8对齐为8个字节(uint8本来只占1个字节,而double占8个字节)

不管你的数据类型是什么,都会将这个数据类型的大小扩展为8个字节,不够的后面补0



[2 字节]对齐

Byte alignment = 2 时,也就是把这个 uint8 对齐为 2个字节

得到的数据如下(多组数据,1列一组):

代码语言:javascript
复制
    41 00 00 00 00 00 00 00 00 00 7B 14 AE 47 E1 7A 94 3F 61 00
    41 00 39 13 17 36 BB 67 07 40 7B 14 AE 47 E1 7A 94 3F 61 00
    41 00 12 B4 0F 9A 1E 5C 16 40 7B 14 AE 47 E1 7A 94 3F 61 00
    41 00 36 80 8D 0C 0E 05 1F 40 7B 14 AE 47 E1 7A 94 3F 61 00
    41 00 11 E5 19 D9 51 74 22 40 7B 14 AE 47 E1 7A 94 3F 61 00
    41 00 95 B0 36 43 1A C0 23 40 7B 14 AE 47 E1 7A 94 3F 61 00
    41 00 2D FF AC 26 3D 48 23 40 7B 14 AE 47 E1 7A 94 3F 61 00
    41 00 BF 48 F3 85 6F 17 21 40 7B 14 AE 47 E1 7A 94 3F 61 00
    41 00 CA B9 88 56 93 BF 1A 40 7B 14 AE 47 E1 7A 94 3F 61 00
    41 00 90 7A C3 34 9B EC 10 40 7B 14 AE 47 E1 7A 94 3F 61 00

分析其中一列,可知

代码语言:javascript
复制
    41 00 
    39 13 17 36 BB 67 07 40 
    7B 14 AE 47 E1 7A 94 3F 
    61 00

当参数“Byte alignment”“2”的时候,也就是把这个uint8对齐为2个字节(uint8本来只占1个字节,而double占8个字节)



[1 字节]对齐

Byte alignment = 1 时,也就是把这个 uint8 对齐为 1个字节

得到的数据如下(多组数据,1列一组):

代码语言:javascript
复制
    41 00 00 00 00 00 00 00 00 7B 14 AE 47 E1 7A 94 3F 61
    41 39 13 17 36 BB 67 07 40 7B 14 AE 47 E1 7A 94 3F 61
    41 12 B4 0F 9A 1E 5C 16 40 7B 14 AE 47 E1 7A 94 3F 61
    41 36 80 8D 0C 0E 05 1F 40 7B 14 AE 47 E1 7A 94 3F 61
    41 11 E5 19 D9 51 74 22 40 7B 14 AE 47 E1 7A 94 3F 61
    41 95 B0 36 43 1A C0 23 40 7B 14 AE 47 E1 7A 94 3F 61
    41 2D FF AC 26 3D 48 23 40 7B 14 AE 47 E1 7A 94 3F 61
    41 BF 48 F3 85 6F 17 21 40 7B 14 AE 47 E1 7A 94 3F 61
    41 CA B9 88 56 93 BF 1A 40 7B 14 AE 47 E1 7A 94 3F 61
    41 90 7A C3 34 9B EC 10 40 7B 14 AE 47 E1 7A 94 3F 61
    41 D4 74 C5 07 79 5A F6 3F 7B 14 AE 47 E1 7A 94 3F 61

分析其中一列,可知

代码语言:javascript
复制
    41 
    39 13 17 36 BB 67 07 40 
    7B 14 AE 47 E1 7A 94 3F 
    61

当参数“Byte alignment”“1”的时候,也就是把这个uint8对齐为1个字节(uint8本来只占1个字节,而double占8个字节)



总结

一般没有特殊要求时还是将“Byte alignment”设为“1”较容易理解和操作,尤其是Matlab与非Matlab环境进行UDP通讯更要注意这个参数。


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于数据打包时的数据对齐问题
    • [8 字节]对齐
      • [2 字节]对齐
        • [1 字节]对齐
          • 总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档