一、基础概念:数据传输位序 当我们处理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 优先的二进制数据时,计算出的十六进制值可能会不正确。因此,当二进制数据被传输时,了解其是以递增位,还是递减位到达非常重要。
不过好在,PicoScope7的LIN总线串行译码功能会自动将二进制位置安排为LSB,因此无需额外操作。使用串行译码表中的导出功能,即可将数据导入 Excel 中进行下一步操作。
图1 导出串行译码的数据
二、计算电压设定值变化曲线将导出的数据以 CSV 格式打开,你应该会看到类似于如图2的内容。在此示例中,我只导出了一个缓冲区,但导出所有缓冲区会更有意义,这样可以提供更多可用数据。
图2 以CSV格式导出译码数据
第一步:筛选点击顶部工具栏中的“数据”,然后选择“筛选”。这将在每个列标题旁添加一个下拉菜单,你可以根据下拉菜单中的选项快速排序数据。 我们目前只对带有电压设定值的帧感兴趣,这些帧位于8字节数据字段的起始位置。点击受保护标识符列中的下拉箭头(protected identifier),然后选择包含这 8 个字节数据的ID,来筛选出这些特定的帧。这将只剩下与该 ID 相关的数据,意味着我们可以专注于整个缓冲区中的电压设定值,可以在Excel中使用公式来操作数据。 注:这里我们要筛选的是Rx(接收)帧,对应的受保护标识符为E9(十六进制),用Windows计算器将转换为二进制后应为:11101001。基于LIN格式采用的LSB优先模式进行顺序调整,得到10010111。因此,我们先筛选出受保护标识符位10010111的帧。
图3 筛选出带有电压设定值的帧
第二步:剥离出电压设定值数据正如我们所知,数据字段中的前6位是用来确定电压设定值的。为了将它们从其余数据中剥离出来,我们将使用 MID 函数。
图4 输入=MID函数
该函数将根据从左起的起始位置和之后的字符数,从单元格中返回字符。例如我们想得到数据(Data)中的前6位,我们就需从左边第1位开始,从左往右返回6个字符。我们就需要输入公式:
图5 使用MID函数剥离前6位数据
我们就能得到101010的结果,拖动这个单元格以自动填充其余单元格。 注:这一步骤也可使用LEFT函数/分列功能实现,能完整剥离前6位数字即可
第三步:导出电压设定值参考表 接下来,我们需要将AR6000文档中的第24页的表格,复制到 Excel中。 创建一个新工作表,并将表格放入其中,并将格式调整为两列:一列为二进制代码(code),一列为对应的设定值,一一对应。 注意,Excel不喜欢前导零。因此,我们必须将二进制代码开头的0删掉,否则VLOOKUP 函数将无法找到匹配项。 例如:000001,需修改为0;001011,需修改为1011;100000,则保持为100000
图6 导出电压设定值参考表
第四步:使用VLOOKUP函数进行转换 表格完成后,我们现在可以使用 VLOOKUP 函数将我们的 6 位二进制转换为可用的数值。 需要指出的是,Excel不喜欢查找由公式生成的值,因为从技术上讲,单元格的值是=MID(I2, 1, 6)。为了让 Excel 查看该值,我们必须在查找公式中插入 Value 函数。 图7 使用VLOOKUP函数进行转换
然后,我们需要告知 Excel 数据的位置,以便找到我们所选单元格中的值,并返回表格中的对应值。我们的公式应为:
=VLOOKUP(VALUE(O2),‘Voltage Set Point table’!B2:C65,2)
VALUE(O2):即剥离出的前6位数据,所在的单元格,是我们要查找的内容
‘Voltage Set Point table’!B2:C65:即电压设定值参考表中的两列数据
这里我们要求 Excel 取单元格O2 中的值,并在“Voltage Set Point table”工作表的 B2 到 C65 单元格范围内进行查找。如果找到匹配值,则返回第 2 列中的值。但我们不能像之前的公式那样直接拖动填充,因为这会改变对照表的单元格范围。为此,我们必须在表格范围前插入$符号,使其变为:
=VLOOKUP(VALUE(O2),‘Voltage Set Point table’!$B$2 C$65,2)
这意味着,当我们向其余行拖动填充时,要查找的单元格编号会变化,但要对照表范围不会变化。 图7 VLOOKUP函数返回的数值 现在,我们已经完整列出了该缓冲区的电压设定值。当然,你也可以将这MID和VLOOKUP两个函数进行合并,只使用一个公式来输出电压设定值: =VLOOKUP(VALUE(MID(I2,1,6)),'Voltage Set Point table'!$B$2 C$65,2)
当然,分阶段展示会让整个过程会更清楚。有了数据以后,就可以使用EXCEL自带的图表功能来绘制图表了,以便我们更直观地观察:主节点如何根据电压设定值控制交流发电机。
图8 生成电压设定值变化曲线
|