Chronaxis用户手册English
本页目录相关类型对象导航DecodedCANRecord属性与数据字段DecodedCANRecord.__post_init__DecodedCANRecord._from_bound_valuesDecodedCANRecord._validateCANTextDecodeReadCANTextDecodeRead.__init__CANTextDecodeRead.closedCANTextDecodeRead.exhaustedCANTextDecodeRead.metadataCANTextDecodeRead.prepare_metadataCANTextDecodeRead._startCANTextDecodeRead._decodeCANTextDecodeRead.__iter__CANTextDecodeRead._time_selectedCANTextDecodeRead.__next__CANTextDecodeRead._blf_observationCANTextDecodeRead.closeCANTextDecodeRead.__enter__CANTextDecodeRead.__exit__pack_text_records参数返回说明异常说明

chronaxis.sources.text_can_decode

按需解码新ASC/CSV原帧,并接到既有数值归一化核心。

CANTextDecodeRead消费显式CANTextSpec与本次需要的SignalDefinition,逐个交付 DecodedCANRecord;未知ID、未选中和非数据帧仍保原记录,仅所需帧调用cantools。 DBC沿用decode_choices=False/allow_truncated=True参数,但新入口先严格核已选帧长度; 已定义报文解码失败直接定位,不冒充未知ID。pack_text_records输出既有SignalSeries。 完整读取核对全部原帧时间;按需ASC仅核所需通道/ID的连续顺序,并同次统计来源范围。 文件不重读;DBC加载和临时对象先付预算。 解析文件逐个关闭,失败/取消保原错误及必要恢复owner;纯BLF串行复用显式解码政策。

这是模块参考。日常调用先查公开API索引;下划线对象和嵌套函数供维护者查阅。签名来自固定源码,公开类构造签名经实际Python接口核对。

相关类型

ASCRead、ASCSpec、BLFRead、BLFSpec、CANCSVRead、CANTextError、CANTextSourceRef、CANTextSpec、Path、RawCANRecord、ResourceBudget、ResultClosedError、SignalDefinition、_UntimedBLFRecord

对象导航

对象 用途
DecodedCANRecord 保留一条原帧及本次所需原信号值;非decoded记录的values必须为空。
DecodedCANRecord.__post_init__ 核记录冻结结构。
DecodedCANRecord._from_bound_values 用本次绑定已经解析的字段名建立内部记录,其余检查与公开构造相同。
DecodedCANRecord._validate 检查固定记录,内部已绑定键只核成员关系。
CANTextDecodeRead 拥有单次DBC和逐文件解析器;EOF后保有限元数据到显式close。
CANTextDecodeRead.__init__ 只核声明并预约固定费用。
CANTextDecodeRead.closed 查看本对象负责的资源是否已经全部关闭。
CANTextDecodeRead.exhausted 区别真实全文件EOF与提前close。
CANTextDecodeRead.metadata 取得本次读取使用的DBC及其相关记录。
CANTextDecodeRead.prepare_metadata 只初始化一次DBC,供计算在首帧前取得周期。
CANTextDecodeRead._start 一次加载并核所需定位/单位。
CANTextDecodeRead._decode 给本条原帧分类并按需解码。
CANTextDecodeRead.__iter__ 迭代同次读取。
CANTextDecodeRead._time_selected 判断此帧是否属于所需通道与ID;不解码、不改时间。
CANTextDecodeRead.__next__ 逐条返回原始报文和本次请求的解码信号值。
CANTextDecodeRead._blf_observation 接收BLF投影前已核的范围和顺序事实。
CANTextDecodeRead.close 关闭自有解析器及DBC状态,可重试。
CANTextDecodeRead.__enter__ 建立显式资源上下文。
CANTextDecodeRead.__exit__ 保原业务错误并收尾。
pack_text_records 把有限已解码原帧交给现有数值核心,不再次解码或重复DBC缩放。
导入与重导出来源(展开)
python
from dataclasses import dataclass
from decimal import Decimal
from hashlib import file_digest
from pathlib import Path
from ..dbc_loading import load_dbc_file
from ..core.binding import SignalDefinition
from ..core.validation import require_identifier
from ..execution.history import _metadata_bytes
from ..legacy.records import field_to_dict
from ..legacy.decode_policy import check_decode_length, decode_serial_frame
from ..legacy.worker import _field_metadata
from ..results.budget import ResourceBudget, _reserve_owned_ram, _release_owned_ram, _cleanup_owner
from ..results.errors import ResultClosedError
from .asc import ASCSpec, ASCRead
from .blf import BLFSpec, BLFRead, _UntimedBLFRecord
from .raw_csv import CANCSVRead
from .raw_can import RawCANRecord, CANTextError
from .can_spec import can_field_from_key
from .models import freeze_metadata
from .packing import pack_decoded
from .text_can_ref import CANTextSourceRef
from .text_can_spec import CANTextSpec

DecodedCANRecord

保留一条原帧及本次所需原信号值;非decoded记录的values必须为空。

python
class DecodedCANRecord

属性与数据字段

名称 数据类型 必填 省略时的值 用途、取值和效果
source str 是 无 当前来源名称。
input_index int 是 无 原输入列表位置。
sequence int 是 无 全部文件连续的原帧序号,不仅是参与计算的序号。
raw RawCANRecord | _UntimedBLFRecord 是 无 保留原帧;无时间需求的BLF记录明确不提供时间。
values tuple[tuple[str, int | float | bool | None], ...] 是 无 规范CAN字段键到DBC物理值。
status str 是 无 decoded:已用DBC解码;unknown:DBC中找不到该报文;unselected:本次未选择解码该报文;non_data:远程帧或错误帧,不按普通数据帧解码。解析错误会报错,不改记为unknown。
frame_values tuple[tuple[str, int | float | bool | None], ...] 否 () 显式重建所需原物理字段。
frame_layout tuple[tuple[str, int], ...] 否 () 当次复用选择器的原始码值。

源码:src/chronaxis/sources/text_can_decode.py:39(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

DecodedCANRecord.__post_init__

核记录冻结结构。

python
DecodedCANRecord.__post_init__()

参数:无显式参数。

参数说明

无。

返回说明

返回None,不返回额外的计算值。

异常说明

来源、位置、状态或值结构非法。

本函数直接报告的具体错误:

  • ValueError:解码CAN记录结构或状态非法。
  • ValueError:未解码原帧不能携带信号值。
  • ValueError:未解码原帧不能伪造重建值。
  • TypeError:解码值需要规范字段键及原生数值/None。
  • ValueError:解码CAN字段重复。
  • ValueError:重建物理值或布局结构非法。

源码:src/chronaxis/sources/text_can_decode.py:51(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

DecodedCANRecord._from_bound_values

用本次绑定已经解析的字段名建立内部记录,其余检查与公开构造相同。

python
DecodedCANRecord._from_bound_values(source, input_index, sequence, raw, values, status, frame_values, frame_layout, known_fields)

装饰器:classmethod。

参数

名称 数据类型 必填 省略时的值 用途、取值和效果
source str 是 无 位置或关键字。当前记录所属的来源名称。
input_index int 是 无 位置或关键字。原始输入文件的非负序号。
sequence int 是 无 位置或关键字。当前来源跨文件的原始记录非负序号,用于保持记录顺序。
raw RawCANRecord | _UntimedBLFRecord 是 无 位置或关键字。已读取的原始记录;无需时间的BLF逐消息任务可以传入内部无时间记录。
values tuple[tuple[str, int | float | bool | None], ...] 是 无 位置或关键字。本次所需信号的规范字段键与解码值;键必须属于known_fields且不重复,未解码状态必须为空。
status str 是 无 位置或关键字。当前记录的处理状态:decoded、unknown、unselected或non_data;非decoded状态不得携带解码值。
frame_values tuple[tuple[str, int | float | bool | None], ...] 是 无 位置或关键字。仅在请求重建报文时保留的信号名称与物理值;不需要重建时为空。
frame_layout tuple[tuple[str, int], ...] 是 无 位置或关键字。仅在请求重建报文时保留的多路复用信号名称与原始整数编码;不需要重建时为空。
known_fields frozenset[str] | set[str] 是 无 位置或关键字。当前绑定或有界批次已解析过的规范字段键集合;这里只复用键解析,仍检查成员、重复键、类型及记录结构。

返回说明

新的冻结DecodedCANRecord,不持有额外的绑定副本。

异常说明

字段不在当前绑定中、值类型或记录结构不合法时拒绝。 外部构造仍调用完整字段解析;此入口只供同次解码结果复用绑定检查。

源码:src/chronaxis/sources/text_can_decode.py:57(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

DecodedCANRecord._validate

检查固定记录,内部已绑定键只核成员关系。

python
DecodedCANRecord._validate(known_fields)

参数

名称 数据类型 必填 省略时的值 用途、取值和效果
known_fields frozenset[str] | set[str] | None 是 无 位置或关键字。内部读取或有界块中已解析的规范字段键;非None时复用键解析并核成员及重复键,None使公开构造完整解析每个键。

返回说明

None。

异常说明

非法结构、未知字段、重复键或无值状态携带数据。

源码:src/chronaxis/sources/text_can_decode.py:76(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

CANTextDecodeRead

拥有单次DBC和逐文件解析器;EOF后保有限元数据到显式close。

python
CANTextDecodeRead(spec, budget, signals, *, check_cancel=None, database_context=None, classify_unselected=True, cycle_fields=(), metadata_fields=(), integrity=True, trace=True, retain_source_time=True, selected_ids=None, time_frame_ids=None, emit_frame_ids=None, blf_time_scope='source', legacy_blf_decode=False, serial_blf_policy=None, post_decode_frame_ids=None)

源码:src/chronaxis/sources/text_can_decode.py:109(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

CANTextDecodeRead.__init__

只核声明并预约固定费用。

python
CANTextDecodeRead.__init__(spec, budget, signals, *, check_cancel=None, database_context=None, classify_unselected=True, cycle_fields=(), metadata_fields=(), integrity=True, trace=True, retain_source_time=True, selected_ids=None, time_frame_ids=None, emit_frame_ids=None, blf_time_scope='source', legacy_blf_decode=False, serial_blf_policy=None, post_decode_frame_ids=None)

参数

名称 数据类型 必填 省略时的值 用途、取值和效果
spec CANTextSpec 是 无 位置或关键字。ASC或原始CSV文本CAN来源配置,包括输入格式与DBC设置。
budget ResourceBudget 是 无 位置或关键字。当前读取共用的资源额度管理器,解码和保留数据前先预约所需资源。
signals tuple[SignalDefinition, ...] 是 无 位置或关键字。实际需要的信号定义,根据明确字段定位选择解码后的信号。
check_cancel Callable[[], None] | None 否 None 仅关键字。可选的无参取消检查函数。需要终止时由它抛出异常;None表示不额外调用取消检查。
database_context FrameDBCContext | None 否 None 仅关键字。本次已加载的DBC上下文;提供时借用数据库,None按读取流程加载所需DBC。
classify_unselected bool 否 True 仅关键字。是否检查未选报文的分类信息;关闭时在确认报文不相关后尽早跳过。
cycle_fields tuple[LegacyCANField, ...] 否 () 仅关键字。需要读取DBC周期的字段定位集合;初始化时读取元数据,不逐帧读取DBC。
metadata_fields tuple[LegacyCANField, ...] 否 () 仅关键字。仅请求驱动信号的DBC候选声明,默认空tuple;用于确认实际帧身份,不请求信号值,也不增加普通样本或值解码。
integrity bool 否 True 仅关键字。是否执行本对象的额外内容摘要或认证核验;False仍保留结构、类型、预算及必要文件变化检查。
trace bool 否 True 仅关键字。是否保存此功能的详细来源或输入追溯;False在生成处跳过,不能先构造再隐藏。
retain_source_time bool 否 True 仅关键字。是否保留导出实际需要的源时间坐标;关闭时不额外保留源时间副本。
selected_ids tuple[int, ...] | None 否 None 仅关键字。需要处理的报文ID;默认None读取全部记录。仅在不需要完整原帧和来源时间的消息分析路径使用:原始CSV先读ID,未匹配时跳过该行的时间、载荷和帧型解析;目标记录仍完整校验。ASC路径不使用此筛选。
time_frame_ids tuple[int, ...] | None 否 None 仅关键字。本次需要检查时间顺序的CAN报文ID;同时限定来源的内部通道。None检查完整序列;空元组不交付帧但仍同次统计来源范围。完整检查或原帧导出不得传选择集合。
emit_frame_ids tuple[int, ...] | None 否 None 仅关键字。限定实际交付的报文ID集合。None交付全部已解析帧;筛选不自动缩小任务要求的时间检查和观测范围。
blf_time_scope str 否 'source' 仅关键字。纯BLF按需时间范围:source检查并观测全部记录;selected只采目标时间;none明确不采时间,仅用于无需时间的逐消息累计。时间归并不能使用none。
legacy_blf_decode bool 否 False 仅关键字。默认False;规范化纯can_blf的legacy转接设True,串行与并行均保留其长度政策和DecodeError缺值行为;其他异常按各入口政策处理。
serial_blf_policy str | None 否 None 仅关键字。仅纯BLF串行使用requested或all,保留该入口的解码范围和异常政策;None采用文本/并行共用规则,不传给并行读取器。
post_decode_frame_ids tuple[int, ...] | None 否 None 仅关键字。仅串行all在每帧解码和完整值检查后筛选交付ID;None全部交付,不减少解码调用,也不下推并行。

返回说明

未开始读取的owner。

异常说明

声明/预算错误;持续清理失败附text_can_cleanup_owner。

本函数直接报告的具体错误:

  • TypeError:文本CAN读取需要静态声明、预算及所需信号定义。
  • ValueError:文本CAN别名不能重复。
  • ValueError:文本CAN字段通道与来源声明不一致。
  • ValueError:共用DBC上下文必须匹配当前文件和共享预算。

源码:src/chronaxis/sources/text_can_decode.py:112(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

CANTextDecodeRead.closed

查看本对象负责的资源是否已经全部关闭。

python
CANTextDecodeRead.closed

装饰器:property。

读取属性,不使用调用括号。

参数说明

无。

返回说明

True表示本对象的关闭已完成;False表示尚未关闭完毕。

异常说明

无。

源码:src/chronaxis/sources/text_can_decode.py:206(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

CANTextDecodeRead.exhausted

区别真实全文件EOF与提前close。

python
CANTextDecodeRead.exhausted

装饰器:property。

读取属性,不使用调用括号。

参数说明

无。

返回说明

True表示输入或结果已正常读完;False表示尚未正常读完。发生异常不等于正常读完。

异常说明

无。

源码:src/chronaxis/sources/text_can_decode.py:212(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

CANTextDecodeRead.metadata

取得本次读取使用的DBC及其相关记录。

python
CANTextDecodeRead.metadata

装饰器:property。

读取属性,不使用调用括号。

参数说明

无。

返回说明

冻结Mapping。

异常说明

未启动或已关闭时ResultClosedError。

本函数直接报告的具体错误:

  • ResultClosedError:文本CAN尚无可用的同次DBC元数据。

源码:src/chronaxis/sources/text_can_decode.py:218(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

CANTextDecodeRead.prepare_metadata

只初始化一次DBC,供计算在首帧前取得周期。

python
CANTextDecodeRead.prepare_metadata()

参数:无显式参数。

参数说明

无。

返回说明

同次冻结元数据。

异常说明

失败/关闭拒绝,启动错误交实际owner清理。 不打开原始文件,不改变EOF状态。

源码:src/chronaxis/sources/text_can_decode.py:225(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

CANTextDecodeRead._start

一次加载并核所需定位/单位。

python
CANTextDecodeRead._start()

参数:无显式参数。

参数说明

无。

返回说明

返回None,不返回额外的计算值。

异常说明

原DBC/I/O/预算或单位不符。

本函数直接报告的具体错误:

  • ValueError:加载期间DBC内容发生变化。

源码:src/chronaxis/sources/text_can_decode.py:242(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

CANTextDecodeRead._decode

给本条原帧分类并按需解码。

python
CANTextDecodeRead._decode(raw)

参数

名称 数据类型 必填 省略时的值 用途、取值和效果
raw RawCANRecord 是 无 位置或关键字。raw为本次实际RawCANRecord。

返回说明

(values,status)。

异常说明

所选政策的长度检查或非DBC解码错误。文本legacy遇DecodeError停止; strict/partial及明确的纯BLF legacy转接将其记为本条无值,缺失信号不沿用前值。

源码:src/chronaxis/sources/text_can_decode.py:301(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

CANTextDecodeRead.__iter__

迭代同次读取。

python
CANTextDecodeRead.__iter__()

参数:无显式参数。

参数说明

无。

返回说明

返回当前对象本身。后续迭代或with语句使用的仍是同一个对象。

异常说明

无。

源码:src/chronaxis/sources/text_can_decode.py:354(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

CANTextDecodeRead._time_selected

判断此帧是否属于所需通道与ID;不解码、不改时间。

python
CANTextDecodeRead._time_selected(frame)

参数

名称 数据类型 必填 省略时的值 用途、取值和效果
frame LegacyRawFrame 是 无 位置或关键字。已经解析的当前原帧;只读取其内部通道和报文ID,判断是否属于本次所需时间序列。

返回说明

bool;None选择全部帧。

异常说明

无。 纯BLF串行按ID沿用旧时间范围,其他来源同时匹配通道;同ID帧型交绑定解析器核对。

源码:src/chronaxis/sources/text_can_decode.py:359(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

CANTextDecodeRead.__next__

逐条返回原始报文和本次请求的解码信号值。

python
CANTextDecodeRead.__next__()

参数:无显式参数。

参数说明

无。

返回说明

DecodedCANRecord。

异常说明

EOF/定位数据错/原I/O、预算、取消。

源码:src/chronaxis/sources/text_can_decode.py:368(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

CANTextDecodeRead._blf_observation

接收BLF投影前已核的范围和顺序事实。

python
CANTextDecodeRead._blf_observation()

参数:无显式参数。

参数说明

无。

返回说明

None。

异常说明

无。

文件尾部只有无关帧时也更新来源结束;这些事实不能当成已消费水位。

源码:src/chronaxis/sources/text_can_decode.py:466(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

CANTextDecodeRead.close

关闭自有解析器及DBC状态,可重试。

python
CANTextDecodeRead.close()

参数:无显式参数。

参数说明

无。

返回说明

返回None,不返回额外的计算值。

异常说明

原关闭/预算错误。

源码:src/chronaxis/sources/text_can_decode.py:482(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

CANTextDecodeRead.__enter__

建立显式资源上下文。

python
CANTextDecodeRead.__enter__()

参数:无显式参数。

参数说明

无。

返回说明

返回当前对象本身。后续迭代或with语句使用的仍是同一个对象。

异常说明

无。

源码:src/chronaxis/sources/text_can_decode.py:501(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

CANTextDecodeRead.__exit__

保原业务错误并收尾。

python
CANTextDecodeRead.__exit__(exception_type, error, traceback)

参数

名称 数据类型 必填 省略时的值 用途、取值和效果
exception_type type[BaseException] | None 是 无 位置或关键字。with代码块抛出的异常类型;正常离开时为None,由Python传入。
error BaseException | None 是 无 位置或关键字。with代码块抛出的异常对象;正常离开时为None,由Python传入。
traceback TracebackType | None 是 无 位置或关键字。异常发生时的调用栈;正常离开时为None,由Python传入,供异常继续传播。

返回说明

False。

异常说明

正常退出时的关闭错误。

源码:src/chronaxis/sources/text_can_decode.py:506(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

pack_text_records

把有限已解码原帧交给现有数值核心,不再次解码或重复DBC缩放。

python
pack_text_records(definition, records, session_id, backend)

参数

名称 数据类型 必填 省略时的值 用途、取值和效果
definition SignalDefinition 是 无 位置或关键字。definition为SignalDefinition
records tuple 是 无 位置或关键字。records为有限DecodedCANRecord tuple
session_id str 是 无 位置或关键字。session_id会话
backend str 是 无 位置或关键字。"reference"使用独立参考计算;"numpy"使用NumPy数组计算。须明确选择一种。

返回说明

SignalSeries,保精确纳秒、同一时刻原序号和CANTextSourceRef;调用方负责批次数组的长期预算。

异常说明

来源/声明/记录类型不符,或既有pack_decoded类型、数值转换错误。

本函数直接报告的具体错误:

  • TypeError:文本CAN归一化需要定义及有限解码记录tuple。
  • ValueError:文本CAN记录与信号来源不一致。

源码:src/chronaxis/sources/text_can_decode.py:516(行号属于 8904c2f744951857659abd40aaa3535d57faf53c)。

Chronaxis 用户手册 · 离线阅读