信号CSV导出与重采样
outputs.signal_csv导出指定原信号的更新记录;可另外设置等间隔线性插值。它不改变分析中的积分结果。共同范围、文件发布与当前环境限制见输出配置。
完整最小例与网格扩展
export-signal-minimal.yaml从随附的quickstart.asc和teaching.dbc读取power,积分仍为38J,额外导出[0,6)内0、1、3、4秒的4条原更新。来源和信号已定义;设备标签为可选说明,省略不影响导出。
export-signal-grid.yaml增加500ms网格、max_gap=3s,输出12行网格点0~5.5秒。0.5秒线性估计为3W;4.5、5、5.5秒缺少范围内右端更新,保留missing而不外推。积分仍为38J。运行chronaxis run 文件名.yaml --output 结果目录,读取CLI返回的manifest,再按其中exports.index_file和exports.directory定位本次导出索引及original.csv或resampled.csv。
原信号CSV导出
下段是根级outputs片段,前提是signals已绑定数值信号voltage,并满足导出标签限制。若已有outputs,把signal_csv合入同一映射,不能重复outputs键。
应用位置:以dual-grid.yaml为基础,找到根级outputs,仅加入或替换其中的signal_csv子项,保留outputs下其他子项;代码中的outputs只表示位置,不重复粘贴父键。保留未展示的其他根字段,不再添加第二个同名父键。
先运行最小配置;下方扩展配置增加可选控制。两段是替换关系,不同时重复写入同一个父键。
outputs: # 选择额外导出的数据及格式;默认结果表由运行入口提供
signal_csv: # 配置额外的信号CSV导出;null表示不启用这项额外输出
signals: [voltage] # 选择要导出的分析信号名;来自前面的信号定义扩展设置
仍以同一基础文件为起点,用下面的signal_csv子项替换上面同名子项,仍保留outputs下其他子项;新增字段的默认值、适用条件见后文。
outputs: # 选择额外导出的数据及格式;默认结果表由运行入口提供
signal_csv: # 配置额外的信号CSV导出;null表示不启用这项额外输出
signals: [voltage] # 选择要导出的分析信号名;来自前面的信号定义
resampling: # 设置独立信号输出网格;不修改分析时的信号历史和积分
continuous: [voltage] # 列出可线性插值的分析信号名;仅选择物理上允许中间值的连续量
period: 250ms # 指定信号导出网格间隔;依据输出采样需求填写
max_gap: 2s # 限制用于插值的相邻记录间隔;按允许缺测程度选择下表字段相对于outputs.signal_csv,其中signals是要导出的信号名列表,不是根级signals定义列表。
| signal_csv字段 | 数据类型 | 必填 | 默认值 | 含义与填写方法 |
|---|---|---|---|---|
| signals | 字符串数组 | 是 | 无 | 选择导出哪些原信号;从signals[].name取得。1~4096个不重复的原信号别名,例如 ["voltage","current"];来自signals,不直接选择derived派生信号。 |
| scope | 字符串或对象 | 否 | session |
选择要导出的时间范围。整会话用session;单窗口用{window: context}。窗口名称来自windows[].name,见共同范围。 |
| resampling | 对象或null | 否 | null |
控制是否另排等间隔时间点并估计连续信号值。null或省略表示保留原记录;填写对象则开启下方等间隔导出。 |
不设置resampling时,original.csv逐条保存原信号更新,是“一个时间、一条信号”一行的长表;不会把不同信号强行拼成相同采样频率。无效值在value列留空,quality记录原因;同刻不同更新仍分别保留。公开执行路径的表头是time_ns,signal,value,unit,quality,不含valid、status或来源引用列。
设置resampling后,明确列入continuous的信号写入resampled.csv;其余信号按原更新写入original.csv。continuous必须是signals的子集,且是数值信号;bool、枚举、状态和计数不应当作连续物理量插值。其全部配置如下:
下表字段相对于outputs.signal_csv.resampling,例如max_gap完整写作outputs.signal_csv.resampling.max_gap。
| signal_csv.resampling字段 | 数据类型 | 必填 | 默认值 | 含义与例子 |
|---|---|---|---|---|
| continuous | 字符串数组 | 是 | 无 | 指定允许插值的信号;按物理上是否可以线性估计选择,不仅看数据是否为数字。本次可插值的原信号别名,须是signals的非空子集,且不重复。填 ["voltage"] 表示电压可按两端记录作直线估计。 |
| period | 正时长字符串或映射 | 是 | 无 | 规定网格点间隔;按输出采样需求填写固定时长,或选择DBC周期。固定周期例如250ms;读取DBC周期时填写{mode: dbc},可加driver指定continuous中的驱动信号。驱动信号须能定位到具有有效周期的DBC报文。 |
| start | 时间字符串 | 否 | "0s" |
设置网格对齐的参考时刻;根据需要对齐的统一起点填写。等间隔时间的参考起点。例如start=50ms、period=100ms,位置是50、150、250ms等;不随文件或分批重新计时。 |
| max_gap | 时长字符串 | 是 | 无 | 限制插值可跨越的实际记录间隔;按可接受缺测长度填写。大于0;用于插值的前后两条实际记录最多能相隔多久。例如2秒时,两端相隔2秒可以估计,相隔3秒则留空。 |
period若采用映射,字段填写如下。它和根级intervals独立,不能互相替代。
| 完整路径 | 控制作用与填写依据 | 允许值及省略行为 |
|---|---|---|
| outputs.signal_csv.resampling.period.mode | 选择网格周期从哪里取得;希望沿用报文周期时使用此对象 | 仅允许dbc;固定周期直接将period写为250ms,不使用mode: fixed |
| outputs.signal_csv.resampling.period.driver | 指定网格采用哪条原信号所在报文的周期;从continuous列表中选择信号名 | continuous都须来自原始CAN来源;只有一个物理报文候选可省略,多个候选须明确填写。显式null、派生信号或不在continuous中的名称不合法 |
程序按start和period排出要导出的时间点,这组时间点称为“时间网格”。每个时间点的结果分为三种:
| status | 怎样得到这个值 |
|---|---|
| observed | 该时刻恰好有一条有效的实际记录,直接采用记录值。 |
| estimated | 该时刻没有记录,但前后记录有效、间隔没有超过max_gap;按两点之间的直线估算。 |
| missing | 缺少前端或后端记录、记录无效、同刻记录冲突,或前后间隔过大。value留空,reason说明原因。 |
例如每100ms导出一次,只有第10ms和第120ms的有效记录,那么第100ms的值可以估算,第0ms缺少前端记录则不能估算。
同一信号同一时刻存在不同的记录时:若仅用于信号导出网格,error策略将冲突点及受影响的插值标记为missing,reason为same_time_conflict;若同一信号还参与普通计算或规则,分析状态在error策略下拒绝冲突并使任务失败。本页dual-grid.yaml还对voltage积分,因此属于后一种情形。显式选择 same_time_policy="last_by_sequence" 才按稳定来源序号选择最后一条,不按数值大小或线程处理先后选择。该选项填写在signals[].same_time_policy。公开重采样文件的表头是time_ns,signal,value,unit,status,reason,quality;不输出左右端点时间或来源引用。
使用DBC周期的完整导出例
下载完整配置、grid.asc和grid.dbc,三者放在同一目录,运行chronaxis run analysis.yaml --output grid-result。
本例同时导出power和voltage。DBC分别声明Power报文1000ms、Voltage报文500ms,输入在0、1、2秒更新。信号CSV只有一套网格,period.mode=dbc且driver=power明确选择1000ms;连续量涉及两个物理报文,删除driver会因多个候选而报错,不会任选一个周期。
CAN导出使用每条报文自己的DBC周期,因此period只写mode=dbc,不填driver:Power按1秒、Voltage按0.5秒生成。两类输出分别配置,选择信号网格驱动不会改变CAN各报文周期。观测范围为[0,2),范围末端及缺右侧有效样本时的处理沿各导出规则;应同时查看导出数据和manifest中的生成/跳过计数。
本例信号CSV在0、1秒分别输出power=10/20W、voltage=20/30V,共4行。重建ASC共5帧:Power在0、1秒,Voltage在0、0.5、1秒(20、25、30V)。Voltage的1.5秒网格点需要右侧2秒样本,但2秒是请求范围的排除端点,不能从范围外借该样本,因此跳过1点。两类输出行数不同是各自网格规则的结果。