|
本帖最后由 TestProject 于 2020-12-15 20:37 编辑
最近有点忙,TestStand教程没来及更新,防止VIP被冻结,发一篇最近项目用到的小知识点。
LabVIEW不支持结构体,但是簇和结构体很相似。
在项目中会遇到这样的情况:
研发人员A使用C语言编写的嵌入式软件,其中通讯协议部分使用到结构体,例如:
- typedef struct{
- u8 Status;
- u32 Data;
- }xx_Data;
复制代码 结构体数据按大端或小端模式转换成字节数据,再通过串口发送。例如:
结构体数据为:
- xx_Data.Status = 0x01;
- 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周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|