搜索
bottom↓
回复: 3

LabVIEW-簇与结构体相互转换

[复制链接]

出0入22汤圆

发表于 2020-12-15 20:35:55 | 显示全部楼层 |阅读模式
本帖最后由 TestProject 于 2020-12-15 20:37 编辑

最近有点忙,TestStand教程没来及更新,防止VIP被冻结,发一篇最近项目用到的小知识点。

LabVIEW不支持结构体,但是簇和结构体很相似。
在项目中会遇到这样的情况:
研发人员A使用C语言编写的嵌入式软件,其中通讯协议部分使用到结构体,例如:
  1. typedef struct{
  2.     u8 Status;   
  3.     u32 Data;
  4. }xx_Data;
复制代码
结构体数据按大端或小端模式转换成字节数据,再通过串口发送。例如:
结构体数据为:
  1. xx_Data.Status = 0x01;
  2. xx_Data.Data = 0x02030405;
复制代码
大端模式发送的数据为:0x01,0x02,0x03,0x04,0x05
小端模式发送的数据为:0x01,0x05,0x04,0x03,0x02
研发人员B使用LabVIEW开发上位机,通过串口与硬件通讯,需要进行协议解析。解析结果保存到簇中:
最差的方法
按字节解析即可

该方法存在两个缺点:
  • 结构体内容多的情况下,程序复杂,万一有100个变量,得连上百根线
  • 不通用、不智能,万一写好的程序需要调整,线得重新连

优秀的解决方案
使用Unflatten From String进行解析,同样也可以使用Flatten to String将簇转换成协议所需的字符串。



注意
当簇有字符串或数组时,目标字符串中需要添加字符串或数组长度。
下图中02 00 00 00指的是String长度为2。

这个很好理解,LabVIEW数组或字符变量保存内存中时需要知道长度才能正确运行,所以Flatten to String(平面化至字符串)时带有长度。


声明:本文原创,码字不容易,未经允许,禁止转载。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2020-12-15 21:09:31 | 显示全部楼层
平化 这个很好用

出0入0汤圆

发表于 2020-12-15 23:09:20 | 显示全部楼层
这个方法还可以用来保存.ini配置文件,比一个一个键的保存方便多了。

出0入22汤圆

 楼主| 发表于 2020-12-17 09:21:27 | 显示全部楼层
tiny13 发表于 2020-12-15 23:09
这个方法还可以用来保存.ini配置文件,比一个一个键的保存方便多了。

簇中参数多时会出现修改一个参数,所有参数都要重新写入文件。
如果想保存方便,也可以使用OpenG中OpenG Variant Configuration File,支持簇、变体、前面板直接保存到配置文件。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 17:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表