首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建由MF4 DBC - asammdf解码的J1939

创建由MF4 DBC - asammdf解码的J1939
EN

Stack Overflow用户
提问于 2021-03-15 00:35:41
回答 1查看 633关注 0票数 0

我正在尝试创建一个MF4文件,以便按照与CSS电子学相同的方式被'J1939.dbc‘解码

生成示例文件的代码如下所示:

代码语言:javascript
运行
复制
from asammdf import MDF, SUPPORTED_VERSIONS, Signal
import numpy as np

sigs = []
mdf = MDF()

samples = [
    np.array([1,1,1,1,1], dtype=np.uint32),
    np.array([217056256,217056256,217056256,217056256,217056256], dtype=np.uint32),
    np.array([1,1,1,1,1], dtype=np.uint32),
    np.array([1,1,1,1,1], dtype=np.uint32),
    np.array([1,1,1,1,1], dtype=np.uint32),
    np.ones(5, dtype=np.dtype('(8,)u1'))*111,
    np.array([1,1,1,1,1], dtype=np.uint32),
    np.array([1,1,1,1,1], dtype=np.uint32),
    np.array([1,1,1,1,1], dtype=np.uint32)
]   

types = [('CAN_DataFrame.BusChannel', 'u1'),
        ('CAN_DataFrame.ID', '<u4'), 
        ('CAN_DataFrame.IDE', 'u1'), 
        ('CAN_DataFrame.DLC', 'u1'), 
        ('CAN_DataFrame.DataLength', 'u1'),
        ('CAN_DataFrame.DataBytes', 'u1', (8,)), 
        ('CAN_DataFrame.Dir', 'u1'),
        ('CAN_DataFrame.EDL', 'u1'), 
        ('CAN_DataFrame.BRS', 'u1')]

t = np.arange(5, dtype=np.float64)

sig = Signal(
    np.core.records.fromarrays(samples, dtype=np.dtype(types)),
    t+10,
    name='Channel_structure_composition',
    comment='Structure channel composition',
)
sigs.append(sig)

mdf.append(sigs, comment='arrays', common_timebase=True)

mdf.save('demo.mf4', overwrite=True)
print('save')

在图片上:

1)生成的文件如下

2) CAN日志是禁用的--当我使用来自https://canlogger.csselectronics.com/canedge-getting-started/log-file-tools/的文件时,可以启用“CAN日志记录”-

但是,如果尝试手动生成解码,则返回一个空白文件。

代码语言:javascript
运行
复制
import numpy as np
from asammdf import MDF, SUPPORTED_VERSIONS, Signal


mdf = MDF(r'demo.mf4')
databases = {
     "CAN": ["j1939.dbc"]
    }
extracted = mdf.extract_bus_logging(database_files=databases)
extracted.save('sorted.mf4')

可能需要为解码指定ID和DataByte列,但我已经尝试过许多事情,但没有工作。

我能做什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-17 22:07:19

总线日志记录的元数据也必须添加到新的通道组中:

代码语言:javascript
运行
复制
from asammdf import MDF, SUPPORTED_VERSIONS, Signal
import numpy as np
from asammdf.blocks.source_utils import Source

sigs = []
mdf = MDF()

samples = [
    np.array([1,1,1,1,1], dtype=np.uint32),
    np.array([217056256,217056256,217056256,217056256,217056256], dtype=np.uint32),
    np.array([1,1,1,1,1], dtype=np.uint32),
    np.array([1,1,1,1,1], dtype=np.uint32),
    np.array([1,1,1,1,1], dtype=np.uint32),
    np.ones(5, dtype=np.dtype('(8,)u1'))*111,
    np.array([1,1,1,1,1], dtype=np.uint32),
    np.array([1,1,1,1,1], dtype=np.uint32),
    np.array([1,1,1,1,1], dtype=np.uint32)
]

types = [('CAN_DataFrame.BusChannel', 'u1'),
        ('CAN_DataFrame.ID', '<u4'),
        ('CAN_DataFrame.IDE', 'u1'),
        ('CAN_DataFrame.DLC', 'u1'),
        ('CAN_DataFrame.DataLength', 'u1'),
        ('CAN_DataFrame.DataBytes', 'u1', (8,)),
        ('CAN_DataFrame.Dir', 'u1'),
        ('CAN_DataFrame.EDL', 'u1'),
        ('CAN_DataFrame.BRS', 'u1')]

t = np.arange(5, dtype=np.float64)

sig = Signal(
    np.core.records.fromarrays(samples, dtype=np.dtype(types)),
    t+10,
    name='Channel_structure_composition',
    comment='Structure channel composition',
    source=Source(
        source_type=Source.SOURCE_BUS,
        bus_type=Source.BUS_TYPE_CAN,
        name="CAN bus",
        path="CAN bus",
        comment="",
    )
)
sigs.append(sig)

mdf.append(sigs, comment='arrays', common_timebase=True)

mdf.save('demo.mf4', overwrite=True)
print('save')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66630991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档