swt中styledtext中获取光标位置_总线51讲,如何获取CAN报文中,特定位置的数据?...

我获取了八字节的报文数据区,还知道startbit、length和编码类型,如何方便地把数据拿出来呢?

一般而言,这项工作不需要用户自己做,毕竟现在的成熟工具,基本上都能自己实现,比如TSMaster、PCAN Explorer、CANoe等等。 但是,特定情况下,这个技能还是非常有用的,特别是牵涉到诊断、自定义工具、基于数据库的控制等等,成熟工具可能买不到,就需要自己动动手了。

01

挖取数据

确定输入参数

师子一号掐指一算,觉得只需要4个参数就行了,如下图所示:

2587a73927f0209309d37c4b18d8bc3d.png

在上图中,payload中的位值,应该是布尔,但是布尔不好区分,本文为了方便讲解,直接用互不相同的数值(这些数值实际上是该bit的表示位置)替换这些布尔,等文章讲到最后,再替换回来。

缩小目标

根据上图示例中的参数值,我们的目标是,把下图所示区域的序列值拿出来。

666e0c3eee24fd440e1ba5e2a92d7899.png

拼接成下图所示的序列:

b001cf8dd6f7ab7414cd47a8233e52db.png

然后根据该位置的实际布尔值,将其转换成整形数据即可。

师子一号见过形形色色的挖数据的方法,有移位法,有切割拼接法,还有其他的多种方法,但是,如果论哪个效率最高、最简单,还数接下来我给大家演示的这个办法。

程序框图第一步,拼成长数组

acbf5c172b1996ef0fd554db60a9b969.png

拼接长数组的目的是,把二维变一维。

拼接之后您会发现,我们的目标数据区,变成了一段连续的数据了a09d3470928886f42b96760f5ec3965f.pnga09d3470928886f42b96760f5ec3965f.pnga09d3470928886f42b96760f5ec3965f.png,如上图蓝色圆圈所示。

接下来呢,因为目前的startbit指的是最右边的“34”,所以我们还要做个“索引变换”,把它变成最左边的“22”,然后用常规的数组索引方式就可以获取数据了,如下图所示:

78d0a84917532fb5deee7a3cff3f6327.png

ok,点一下run,数据就出来啦,非常简单!

咦?好像哪里不对

额,上面的例子没有用到“编码类型”参数,我们只考虑了motorola编码格式,那intel编码格式应该怎么办呢?

如果payload、startbit、length均不变,只是把编码类型从motorola改成了intel,那么,我们的目标数据区应该是如下图所示:

3af059855eb3ec214f6f2aca1f6e844d.png

目标数据序列应该为:

988a521c75e20620f97b4dd404a85bca.png 咋办呢? 好办,看我略施法术,对程序框图进行修改。。。 d4d46b96c2f7fb72752bc2a26e7254a6.gif 如下图所示,run一下,结果就出来了,跟期望完全一样。 07d14220a14b76baf3f372e4148e8f46.png 数据大变身 我们已经讲明白了数据的挖取过程,还是非常简单的,现在我们把字符序列切换回来,换成正常的“布尔数组”,如下图所示。 1e57cd36341641e98b735042f5293694.png 调用演示 我们把这个VI封装成子VI,用 广州虹科 (划重点83f586e277ad46a197e4f7226ba50f30.png) 的PCAN设备调用一下,预期的结果就愉快地出现啦。 e9b9fa2d42c3c6f31902ca7e1f37882a.png 当然,您也可以把DATA转换成布尔数组、物理值计算部分,全部封装进子VI中,以形参的方式传进去即可,随意。

02

填充数据

有时候,我们需要的不仅是读取数据,还需要写入填充数据,把某个序列填充到特定的位置,该咋办呢?

非常简单,把第一章节的过程逆过来就行了。

先根据物理值计算出布尔序列,然后替换掉DATA所转换的布尔长数组目标区域,再转换成二维布尔数组,再转换成DATA的数据就可以了。

大家可以自己尝试下,真的不难的~

03

小结

文章到了末尾,还是建议大家使用现成的成熟工具,能用现成的就用现成的,节省时间,更能出成绩、多干活,比如上海同星的TSMaster,广州虹科的进口产品等等。

如果没有现成工具,那么,如果能拿到源码,就尽可能在别人的基础上做,可以节省不少时间。如果拿不到源代码,那么,照着别人的经验讲解来做,也是个不错的选择!

如果有朋友需要本文的源码(包括intel、motorola的读取和写入),欢迎在本文留言,然后邀请朋友对您的留言点赞,文章推送当天需要20个赞,以后每天增加5个。

【推荐阅读】 6a4425a24597d93dcefb66fcb91b0ccf.gif

40bd1912b036bf9c905274505a37af31.gifae41f5f99184d5b1a71c31724234ccf8.gif

0b2a9dfa026119f0a47bdff0653d6a13.png

8ee21a8c5b48c9da7f5bf9e8308cfd3b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值