首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Matlab]使用Simulink进行UDP通讯2

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

作者头像
祥知道
发布2020-03-10 15:04:21
1.4K0
发布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列一组):

    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

分析其中一列,可知

    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列一组):

    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

分析其中一列,可知

    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列一组):

    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

分析其中一列,可知

    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 归档