Pico汽车示波器论坛(广州虹科)

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 175|回复: 0

LIN译码后使用MID和VLOOKUP函数计算电压设定值变化曲线

[复制链接]
发表于 2025-8-8 11:03:52 | 显示全部楼层 |阅读模式
一、基础概念:数据传输位序
当我们处理LIN数据时,通常最好查看二进制数据,因为LIN格式采用最低有效位(LSB)位序:
最低有效位(LSB)是对应最低潜在值的位(即它的值为0或1),而最高有效位(MSB)是对应最高潜在值的位(例如在无符号字节中为255或FF)。

数据传输时的位序决定了如何正确解析数值:
LSB优先模式(LIN协议采用):从权重最小的位开始传输,接收方需要从左到右读取数据(递增位)
MSB优先模式(如CAN协议):从权重最大的位开始传输,接收方需要从右到左读取数据(递减位)
例如:Windows计算器将 1F 转换为二进制,结果为 00011111。MSB优先模式,首先读取的是第 7 位值为 0 LSB首先读取 0 位 1。为了符合 LIN协议格式,我们就必须将顺序反转,变为 11111000
如果没有正确调整位序,那在处理 LSB 优先的二进制数据时,计算出的十六进制值可能会不正确。因此,当二进制数据被传输时,了解其是以递增位,还是递减位到达非常重要。

不过好在,PicoScope7LIN总线串行译码功能会自动将二进制位置安排为LSB,因此无需额外操作使用串行译码表中的导出功能,即可将数据导入 Excel 中进行下一步操作。


图片13.png
1 导出串行译码的数据

二、计算电压设定值变化曲线
将导出的数据以 CSV 格式打开,你应该会看到类似于如图2的内容。在此示例中,我只导出了一个缓冲区,但导出所有缓冲区会更有意义,这样可以提供更多可用数据。

图片14.png
2 以CSV格式导出译码数据



第一步:筛选
点击顶部工具栏中的“数据”,然后选择“筛选”。这将在每个列标题旁添加一个下拉菜单,你可以根据下拉菜单中的选项快速排序数据。
我们目前只对带有电压设定值的帧感兴趣,这些帧位于8字节数据字段的起始位置。点击受保护标识符列中的下拉箭头(protected identifier),然后选择包含这 8 个字节数据的ID,来筛选出这些特定的帧。这将只剩下与该 ID 相关的数据,意味着我们可以专注于整个缓冲区中的电压设定值,可以在Excel中使用公式来操作数据
注:这里我们要筛选的是Rx(接收)帧,对应的受保护标识符E9(十六进制),用Windows计算器将转换为二进制后应为:11101001。基于LIN格式采用的LSB优先模式进行顺序调整,得到10010111。因此,我们先筛选出受保护标识符位10010111的帧。

图片15.png
3 筛选出带有电压设定值的帧



第二步:剥离出电压设定值数据
正如我们所知,数据字段中的前6位是用来确定电压设定值的。为了将它们从其余数据中剥离出来,我们将使用 MID 函数。

图片16.png
4 输入=MID函数

该函数将根据从左起的起始位置和之后的字符数,从单元格中返回字符。例如我们想得到数据(Data)中的前6位,我们就需从左边第1位开始,从左往右返回6个字符。我们就需要输入公式:

=MID(I2, 1, 6)
I2:数据所在的单元格为第i列第2行
1:从左边第1个数字开始
6:返回6个字符
图片17.png
5 使用MID函数剥离前6位数据

我们就能得到101010的结果,拖动这个单元格以自动填充其余单元格。
注:这一步骤也可使用LEFT函数/分列功能实现,能完整剥离前6位数字即可

第三步:导出电压设定值参考表
接下来,我们需要将AR6000文档中的第24页的表格,复制到 Excel中
创建一个新工作表,并将表格放入其中,并将格式调整为两列:一列为二进制代码(code),一列为对应的设定值,一一对应。
注意,Excel不喜欢前导零。因此,我们必须将二进制代码开头的0删掉,否则VLOOKUP 函数将无法找到匹配项。
例如:000001,需修改为0;001011,需修改为1011;100000,则保持为100000

图片18.png
6 导出电压设定值参考表





第四步:使用VLOOKUP函数进行转换
表格完成后,我们现在可以使用 VLOOKUP 函数将我们的 6 位二进制转换为可用的数值。
需要指出的是,Excel不喜欢查找由公式生成的值,因为从技术上讲,单元格的值是=MID(I2, 1, 6)。为了让 Excel 查看该值,我们必须在查找公式中插入 Value 函数。
图片19.png
7 使用VLOOKUP函数进行转换

然后,我们需要告知 Excel 数据的位置,以便找到我们所选单元格中的值,并返回表格中的对应值。我们的公式应为


=VLOOKUP(VALUE(O2),‘Voltage Set Point table’!B2:C65,2)

VALUE(O2):即剥离出的前6位数据,所在的单元格,是我们要查找的内容

‘Voltage Set Point table’!B2:C65:即电压设定值参考表中的两列数据
2:返回第二列的值


这里我们要求 Excel 取单元格O2 中的值,并在“Voltage Set Point table”工作表的 B2 到 C65 单元格范围内进行查找。如果找到匹配值,则返回第 2 列中的值。但我们不能像之前的公式那样直接拖动填充,因为这会改变对照表的单元格范围。为此,我们必须在表格范围前插入$符号,使其变为

=VLOOKUP(VALUE(O2),‘Voltage Set Point table’!$B$2C$65,2)



这意味着,当我们向其余行拖动填充时,要查找的单元格编号会变化,但要对照表范围不会变化。
图片20.png
7 VLOOKUP函数返回的数值
现在,我们已经完整列出了该缓冲区的电压设定值。当然,你也可以将这MID和VLOOKUP两个函数进行合并,只使用一个公式来输出电压设定值:
=VLOOKUP(VALUE(MID(I2,1,6)),'Voltage Set Point table'!$B$2C$65,2)



当然,分阶段展示会让整个过程会更清楚。有了数据以后,就可以使用EXCEL自带的图表功能来绘制图表了,以便我们更直观地观察:主节点如何根据电压设定值控制交流发电机。

图片21.png
8 生成电压设定值变化曲线

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|Pico汽车示波器论坛(广州虹科)

GMT+8, 2025-8-23 12:58 , Processed in 0.222466 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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