硬汉嵌入式论坛

 找回密码
 立即注册
查看: 563|回复: 3
收起左侧

[CAN助手] 制作个简易的H7-TOOL CANFD助手区分不同ID,在不同窗口展示的脚本

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2023-8-4 01:23:28 | 显示全部楼层 |阅读模式
【问题描述】

比如目标板发送了两种ID,0x111和0x222,正常情况下,TOOL的接收情况是这样的:

下载.png

我们希望在窗口0和窗口1分别显示ID 0x111和0x222的数据,TOOL的上位机支持16个窗口,从窗口0到窗口15:

12.png

【实现方法】

当前TOOL自动的脚本已经支持了,在软件包目录:

12.png

比如打开文件STM32_V7_CANFD_decoder.lua,解释如下,大家可以根据需要修改:

12.png

TOOL上位机加载此脚本:

13.png

动态效果如下:

14.gif


当前支持16个窗口,大家可以根据需要添加:

[Lua] 纯文本查看 复制代码
------------------------------------------------------------------
-- 空解码器。 记事本可编辑,txt后缀实际就是lua脚本文件
------------------------------------------------------------------

--分窗标志定义
WIN_0 = 0x0001
WIN_1 = 0x0002
WIN_2 = 0x0004
WIN_3 = 0x0008
WIN_4 = 0x0010
WIN_5 = 0x0020
WIN_6 = 0x0040
WIN_7 = 0x0080
WIN_8 =  0x0100
WIN_9 =  0x0200
WIN_10 = 0x0400
WIN_11 = 0x0800
WIN_12 = 0x1000
WIN_13 = 0x2000
WIN_14 = 0x4000
WIN_15 = 0x8000

--CAN 解码函数,返回的字符串将展示到数据窗口
--id 帧ID
--std_ext 0表示标准帧, 1表示扩展帧
--data_remote 0表示数据帧, 1表示远程帧
--datalen 数据长度,字节
--data_bin 二进制数据
--函数返回: ret1解码字符串 , ret2分窗控制字, 波形数据字符串
function can_decoder(id, std_ext, data_remote, datalen, data_bin)
        local ret1 = ""                --返回值1 解码显示结果
        local ret2 = 0          --返回值2 分窗标志
        local str_wave = ""        

        --逻辑与 and,逻辑或 or,不等于 ~=
        if (id == 0x07E8) then
                ret2 = ret2 | WIN_0
        elseif (id == 0x07DF) then
                ret2 = ret2 | WIN_1
        elseif (id == 0x0002) then
                ret2 = ret2 | WIN_2
        elseif (id == 0x0003) then
                ret2 = ret2 | WIN_3
        elseif (id == 0x0004) then
                ret2 = ret2 | WIN_4
        elseif (id == 0x0005) then
                ret2 = ret2 | WIN_5
        elseif (id == 0x0006) then
                ret2 = ret2 | WIN_6
        elseif (id == 0x0007) then
                ret2 = ret2 | WIN_7
        elseif (id == 0x0008) then
                ret2 = ret2 | WIN_8
        elseif (id == 0x0009) then
                ret2 = ret2 | WIN_9
        elseif (id == 0x000A) then
                ret2 = ret2 | WIN_10
        elseif (id == 0x000B) then
                ret2 = ret2 | WIN_11
        elseif (id == 0x000C) then
                ret2 = ret2 | WIN_12
        elseif (id == 0x000D) then
                ret2 = ret2 | WIN_13
        elseif (id == 0x000E) then
                ret2 = ret2 | WIN_14
        elseif (id == 0x000F) then
                ret2 = ret2 | WIN_15        
        end

        return ret1, ret2, str_wave
end



回复

使用道具 举报

1

主题

92

回帖

100

积分

初级会员

积分
100
发表于 2023-8-4 09:02:23 | 显示全部楼层
逗号分隔又去掉了?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2023-8-4 10:08:50 | 显示全部楼层
nnqtdf 发表于 2023-8-4 09:02
逗号分隔又去掉了?

逗号还在,楼主位是临时贴了个之前版本的图。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
 楼主| 发表于 2023-8-4 11:23:53 | 显示全部楼层
更新完毕。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-28 13:52 , Processed in 0.289901 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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