xbcar 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. xbcar-1.0.0/.gitignore +1 -0
  2. xbcar-1.0.0/.trae/specs/code_optimization_loguru/checklist.md +43 -0
  3. xbcar-1.0.0/.trae/specs/code_optimization_loguru/spec.md +154 -0
  4. xbcar-1.0.0/.trae/specs/code_optimization_loguru/tasks.md +120 -0
  5. xbcar-1.0.0/.trae/specs/dbc_signal_names/spec.md +24 -0
  6. xbcar-1.0.0/.trae/specs/echarts_integration/checklist.md +21 -0
  7. xbcar-1.0.0/.trae/specs/echarts_integration/spec.md +76 -0
  8. xbcar-1.0.0/.trae/specs/echarts_integration/tasks.md +86 -0
  9. xbcar-1.0.0/.trae/specs/encoding_fix/checklist.md +8 -0
  10. xbcar-1.0.0/.trae/specs/encoding_fix/spec.md +28 -0
  11. xbcar-1.0.0/.trae/specs/encoding_fix/tasks.md +20 -0
  12. xbcar-1.0.0/.trae/specs/fix_encoding_and_print/checklist.md +9 -0
  13. xbcar-1.0.0/.trae/specs/fix_encoding_and_print/spec.md +63 -0
  14. xbcar-1.0.0/.trae/specs/fix_encoding_and_print/tasks.md +38 -0
  15. xbcar-1.0.0/.trae/specs/fix_font_and_dbc/checklist.md +17 -0
  16. xbcar-1.0.0/.trae/specs/fix_font_and_dbc/spec.md +60 -0
  17. xbcar-1.0.0/.trae/specs/fix_font_and_dbc/tasks.md +34 -0
  18. xbcar-1.0.0/.trae/specs/fix_signaldata_access/checklist.md +8 -0
  19. xbcar-1.0.0/.trae/specs/fix_signaldata_access/spec.md +61 -0
  20. xbcar-1.0.0/.trae/specs/fix_signaldata_access/tasks.md +16 -0
  21. xbcar-1.0.0/.trae/specs/full_feature_enhancement/checklist.md +94 -0
  22. xbcar-1.0.0/.trae/specs/full_feature_enhancement/spec.md +128 -0
  23. xbcar-1.0.0/.trae/specs/full_feature_enhancement/tasks.md +180 -0
  24. xbcar-1.0.0/.trae/specs/gif_full_data/checklist.md +7 -0
  25. xbcar-1.0.0/.trae/specs/gif_full_data/spec.md +25 -0
  26. xbcar-1.0.0/.trae/specs/gif_full_data/tasks.md +17 -0
  27. xbcar-1.0.0/.trae/specs/html_embed_gif/checklist.md +8 -0
  28. xbcar-1.0.0/.trae/specs/html_embed_gif/spec.md +32 -0
  29. xbcar-1.0.0/.trae/specs/html_embed_gif/tasks.md +16 -0
  30. xbcar-1.0.0/.trae/specs/html_report_function/checklist.md +11 -0
  31. xbcar-1.0.0/.trae/specs/html_report_function/spec.md +38 -0
  32. xbcar-1.0.0/.trae/specs/html_report_function/tasks.md +17 -0
  33. xbcar-1.0.0/.trae/specs/interactive_default_gif/checklist.md +9 -0
  34. xbcar-1.0.0/.trae/specs/interactive_default_gif/spec.md +36 -0
  35. xbcar-1.0.0/.trae/specs/interactive_default_gif/tasks.md +16 -0
  36. xbcar-1.0.0/.trae/specs/report_title_default/checklist.md +20 -0
  37. xbcar-1.0.0/.trae/specs/report_title_default/spec.md +63 -0
  38. xbcar-1.0.0/.trae/specs/report_title_default/tasks.md +68 -0
  39. xbcar-1.0.0/.trae/specs/show_control/checklist.md +23 -0
  40. xbcar-1.0.0/.trae/specs/show_control/spec.md +34 -0
  41. xbcar-1.0.0/.trae/specs/show_control/tasks.md +50 -0
  42. xbcar-1.0.0/.trae/specs/signal_comment/checklist.md +8 -0
  43. xbcar-1.0.0/.trae/specs/signal_comment/spec.md +25 -0
  44. xbcar-1.0.0/.trae/specs/signal_comment/tasks.md +16 -0
  45. xbcar-1.0.0/.trae/specs/signal_compare/checklist.md +22 -0
  46. xbcar-1.0.0/.trae/specs/signal_compare/spec.md +75 -0
  47. xbcar-1.0.0/.trae/specs/signal_compare/tasks.md +36 -0
  48. xbcar-1.0.0/.trae/specs/signal_display_features/checklist.md +16 -0
  49. xbcar-1.0.0/.trae/specs/signal_display_features/spec.md +73 -0
  50. xbcar-1.0.0/.trae/specs/signal_display_features/tasks.md +45 -0
  51. xbcar-1.0.0/PKG-INFO +597 -0
  52. xbcar-1.0.0/PROJECT_SUMMARY.md +189 -0
  53. xbcar-1.0.0/PYPI_UPLOAD_GUIDE.md +149 -0
  54. xbcar-1.0.0/README.md +538 -0
  55. xbcar-1.0.0/build.bat +88 -0
  56. xbcar-1.0.0/pyproject.toml +91 -0
  57. xbcar-1.0.0/setup.py +102 -0
  58. xbcar-1.0.0/xbcar/__init__.py +13 -0
  59. xbcar-1.0.0/xbcar/__main__.py +8 -0
  60. xbcar-1.0.0/xbcar/sessions/2029240f6d1128be89ddc32729463129 +0 -0
  61. xbcar-1.0.0/xbcar/sessions/7d1c1f39abdd1fc2c06a13730ff209fe +0 -0
  62. xbcar-1.0.0/xbcar/signal_plotter.py +2777 -0
  63. xbcar-1.0.0/xbcar/templates/index.html +1632 -0
  64. xbcar-1.0.0/xbcar/templates/login.html +139 -0
  65. xbcar-1.0.0/xbcar/templates/static/js/echarts.min.js +45 -0
  66. xbcar-1.0.0/xbcar/web_app.py +331 -0
xbcar-1.0.0/.gitignore ADDED
@@ -0,0 +1 @@
1
+ README.md
@@ -0,0 +1,43 @@
1
+ # 代码优化 - 使用Loguru替换Print - Verification Checklist
2
+
3
+ ## 实现检查清单
4
+
5
+ ### 库管理
6
+ - [x] signal_plotter.py中导入了loguru库
7
+ - [x] 未使用的导入库已识别(sys, Rectangle, Annotation, can.io)
8
+ - [x] 未使用的导入库已移除
9
+ - [x] 所有必要的导入库保留完整
10
+
11
+ ### 日志系统配置
12
+ - [x] logger对象正确初始化
13
+ - [x] 日志格式配置合理(包含时间戳、级别、消息)
14
+ - [x] 日志级别设置正确(DEBUG/INFO/WARNING/ERROR)
15
+ - [x] --log-level参数已添加
16
+ - [x] --log-output参数已添加(注意:不是--log-file,避免与CAN日志文件参数冲突)
17
+ - [x] 日志级别参数正确生效
18
+ - [x] 日志文件输出功能正确(支持rotation、retention、compression)
19
+
20
+ ### Print语句替换
21
+ - [x] 初始化和文件加载相关的print已替换
22
+ - [x] 绘图功能相关的print已替换
23
+ - [x] 报告生成相关的print已替换
24
+ - [x] 命令行模式相关的print已替换
25
+ - [x] 使用logger.info()、logger.warning()、logger.error()、logger.success()、logger.debug()等替代
26
+
27
+ ### 功能验证
28
+ - [x] 导入成功,无语法错误
29
+ - [x] 日志输出正常显示
30
+ - [x] 命令行帮助信息正常显示
31
+ - [x] 日志输出格式清晰可读(包含时间戳和级别)
32
+ - [x] 日志级别正确(信息/警告/错误)
33
+ - [x] 代码无print语句残留(除测试文件外)
34
+
35
+ ### 新增功能
36
+ - [x] --log-level参数:支持DEBUG、INFO、WARNING、ERROR级别
37
+ - [x] --log-output参数:支持将日志输出到指定文件
38
+ - [x] 日志文件支持自动轮转(10MB)
39
+ - [x] 日志文件支持保留策略(7天)
40
+ - [x] 日志文件支持压缩
41
+
42
+ ## 完成状态
43
+ 所有主要任务已完成,代码优化成功!
@@ -0,0 +1,154 @@
1
+ # 代码优化 - 使用Loguru替换Print - Product Requirement Document
2
+
3
+ ## Overview
4
+ - **Summary**: 优化CAN信号解析工具代码,移除未使用的导入库,并将所有print语句替换为loguru日志输出,支持通过参数控制日志级别和输出位置。
5
+ - **Purpose**: 提升代码质量,增强日志可配置性,便于生产环境调试和日志管理。
6
+ - **Target Users**: 开发人员、运维人员
7
+
8
+ ## Why
9
+ 当前代码中使用了大量的print语句进行信息输出,这不利于:
10
+ - 日志级别的控制(无法区分INFO/WARNING/ERROR)
11
+ - 日志输出位置控制(控制台/文件/远程)
12
+ - 日志格式统一管理
13
+ - 生产环境的日志收集和分析
14
+
15
+ ## What Changes
16
+ - [Change-1] 移除未使用的导入库
17
+ - [Change-2] 添加loguru库导入和配置
18
+ - [Change-3] 将所有print语句替换为loguru日志输出
19
+ - [Change-4] 添加命令行参数控制日志级别和输出位置
20
+ - [Change-5] 保持现有功能和输出信息不变
21
+
22
+ ## Impact
23
+ - **Affected specs**: 无功能变更,仅代码优化
24
+ - **Affected code**: signal_plotter.py
25
+
26
+ ## ADDED Requirements
27
+
28
+ ### Requirement: 日志系统集成
29
+ 系统应集成loguru日志库,提供统一的日志输出接口。
30
+
31
+ #### Scenario: 信息日志输出
32
+ - **WHEN** 程序需要输出普通信息(如文件加载成功、信号解析完成等)
33
+ - **THEN** 使用 `logger.info()` 输出,信息前可保留 `[信息]` 前缀以保持可读性
34
+
35
+ #### Scenario: 警告日志输出
36
+ - **WHEN** 程序遇到非致命问题(如找不到指定信号、DBC文件未加载等)
37
+ - **THEN** 使用 `logger.warning()` 输出
38
+
39
+ #### Scenario: 错误日志输出
40
+ - **WHEN** 程序遇到致命错误(如文件不存在、解析失败等)
41
+ - **THEN** 使用 `logger.error()` 输出
42
+
43
+ #### Scenario: 调试日志输出
44
+ - **WHEN** 程序需要输出调试信息(如详细的技术细节)
45
+ - **THEN** 使用 `logger.debug()` 输出
46
+
47
+ #### Scenario: 日志级别控制
48
+ - **WHEN** 用户通过命令行参数 `--log-level` 指定日志级别
49
+ - **THEN** 系统仅输出该级别及以上的日志(例:设置为WARNING时,INFO日志不输出)
50
+
51
+ #### Scenario: 日志输出位置控制
52
+ - **WHEN** 用户通过命令行参数 `--log-file` 指定日志文件路径
53
+ - **THEN** 系统同时输出日志到控制台和指定文件
54
+
55
+ ### Requirement: 日志参数控制
56
+ 系统应提供命令行参数让用户控制日志输出。
57
+
58
+ #### Scenario: 设置日志级别
59
+ - **WHEN** 用户在命令行指定 `--log-level DEBUG`
60
+ - **THEN** 系统输出DEBUG及以上级别的所有日志
61
+
62
+ - **WHEN** 用户在命令行指定 `--log-level ERROR`
63
+ - **THEN** 系统仅输出ERROR级别的日志
64
+
65
+ #### Scenario: 设置日志输出文件
66
+ - **WHEN** 用户在命令行指定 `--log-file app.log`
67
+ - **THEN** 系统将日志同时输出到app.log文件和控制台
68
+
69
+ #### Scenario: 默认日志行为
70
+ - **WHEN** 用户未指定任何日志参数
71
+ - **THEN** 系统使用默认配置:级别为INFO,仅输出到控制台
72
+
73
+ ### Requirement: 库清理
74
+ 系统应移除所有未使用的导入库。
75
+
76
+ #### Scenario: 未使用库的识别
77
+ - **WHEN** 代码中存在导入但未使用的库
78
+ - **THEN** 应移除该导入语句
79
+
80
+ ## MODIFIED Requirements
81
+
82
+ ### Requirement: 日志输出替代Print
83
+ 所有现有的print语句应被loguru日志函数替代。
84
+
85
+ #### Scenario: print到logger的映射
86
+ - **WHEN** 原代码使用 `print(f"[信息] xxx")`
87
+ - **THEN** 替换为 `logger.info(xxx)` 或 `logger.info("[信息] xxx")`
88
+
89
+ - **WHEN** 原代码使用 `print(f"[警告] xxx")`
90
+ - **THEN** 替换为 `logger.warning(xxx)` 或 `logger.warning("[警告] xxx")`
91
+
92
+ - **WHEN** 原代码使用 `print(f"[错误] xxx")`
93
+ - **THEN** 替换为 `logger.error(xxx)` 或 `logger.error("[错误] xxx")`
94
+
95
+ ## REMOVED Requirements
96
+
97
+ ### Requirement: Print语句
98
+ **Reason**: print语句缺乏日志级别控制,不适合生产环境使用
99
+ **Migration**: 全部替换为loguru日志输出
100
+
101
+ ## Constraints
102
+ - **Technical**:
103
+ - 需要安装loguru库(pip install loguru)
104
+ - 保持代码风格一致性
105
+ - 日志参数应为可选,不影响现有使用方式
106
+ - **Dependencies**: loguru库
107
+
108
+ ## Assumptions
109
+ - 用户同意添加loguru作为新依赖
110
+ - 日志输出格式应保持与原有print输出相似的可读性
111
+ - 日志配置使用默认配置即可满足大多数场景
112
+ - 日志参数默认值为:级别=INFO,文件=None(仅控制台)
113
+
114
+ ## Acceptance Criteria
115
+
116
+ ### AC-1: 未使用库已移除
117
+ - **Given**: 代码审查
118
+ - **When**: 检查所有import语句
119
+ - **Then**: 所有导入的库都在代码中被使用
120
+ - **Verification**: `programmatic`
121
+
122
+ ### AC-2: loguru正确集成
123
+ - **Given**: 代码执行
124
+ - **When**: 程序启动和运行
125
+ - **Then**: loguru正确初始化,无导入错误
126
+ - **Verification**: `programmatic`
127
+
128
+ ### AC-3: print语句已替换
129
+ - **Given**: 代码审查
130
+ - **When**: 搜索print语句
131
+ - **Then**: 代码中不再有print语句(排除测试文件)
132
+ - **Verification**: `programmatic`
133
+
134
+ ### AC-4: 日志输出正常
135
+ - **Given**: 程序运行
136
+ - **When**: 执行日志输出操作
137
+ - **Then**: 日志正常输出到控制台,格式清晰可读
138
+ - **Verification**: `human-judgment`
139
+
140
+ ### AC-5: 日志级别控制生效
141
+ - **Given**: 用户指定 `--log-level WARNING`
142
+ - **When**: 程序运行
143
+ - **Then**: 仅WARNING和ERROR级别的日志输出,INFO日志不显示
144
+ - **Verification**: `programmatic`
145
+
146
+ ### AC-6: 日志文件输出生效
147
+ - **Given**: 用户指定 `--log-file app.log`
148
+ - **When**: 程序运行
149
+ - **Then**: 日志同时输出到控制台和app.log文件
150
+ - **Verification**: `programmatic`
151
+
152
+ ## Open Questions
153
+ - [ ] 是否需要添加日志轮转(log rotation)配置?
154
+ - [ ] 日志格式是否需要包含时间戳、进程ID等信息?
@@ -0,0 +1,120 @@
1
+ # 代码优化 - 使用Loguru替换Print - The Implementation Plan
2
+
3
+ ## [x] Task 1: 分析并识别未使用的导入库
4
+ - **Priority**: P0
5
+ - **Depends On**: None
6
+ - **Description**:
7
+ - 逐个检查signal_plotter.py中的导入库
8
+ - 标记哪些库在代码中被实际使用
9
+ - 列出需要移除的未使用库
10
+ - **Acceptance Criteria Addressed**: [AC-1]
11
+ - **Test Requirements**:
12
+ - `programmatic` TR-1.1: 列出所有导入的库
13
+ - `programmatic` TR-1.2: 识别未使用的库
14
+ - `programmatic` TR-1.3: 准备移除列表
15
+ - **Notes**: 已识别未使用的库:sys, Rectangle, Annotation, can.io
16
+
17
+ ## [x] Task 2: 添加loguru库导入和基础配置
18
+ - **Priority**: P0
19
+ - **Depends On**: None
20
+ - **Description**:
21
+ - 在signal_plotter.py顶部添加 `from loguru import logger`
22
+ - 创建日志配置函数,接受日志级别和输出文件参数
23
+ - 配置loguru的默认格式,保持与现有print输出相似的格式
24
+ - 支持通过参数控制日志级别和输出位置
25
+ - **Acceptance Criteria Addressed**: [AC-2, AC-5, AC-6]
26
+ - **Test Requirements**:
27
+ - `programmatic` TR-2.1: 导入loguru库无错误
28
+ - `programmatic` TR-2.2: logger对象可正常调用
29
+ - `programmatic` TR-2.3: 日志级别参数生效
30
+ - `programmatic` TR-2.4: 日志文件参数生效
31
+ - **Notes**: loguru默认配置已足够大多数场景使用,支持rotation等高级特性
32
+
33
+ ## [x] Task 3: 替换初始化和文件加载相关的print语句
34
+ - **Priority**: P0
35
+ - **Depends On**: Task 2
36
+ - **Description**:
37
+ - 替换第61行的系统平台信息输出
38
+ - 替换DBC文件加载相关的print语句
39
+ - 替换CAN消息解析的print语句
40
+ - 根据内容选择合适的日志级别(info/warning/error)
41
+ - **Acceptance Criteria Addressed**: [AC-3, AC-4]
42
+ - **Test Requirements**:
43
+ - `programmatic` TR-3.1: 所有相关 print已替换为logger调用
44
+ - `human-judgment` TR-3.2: 输出格式清晰可读
45
+ - **Notes**: 这些是程序启动和加载阶段的信息,应使用info级别
46
+
47
+ ## [x] Task 4: 替换绘图相关的print语句
48
+ - **Priority**: P0
49
+ - **Depends On**: Task 2
50
+ - **Description**:
51
+ - 替换plot_static中的print语句
52
+ - 替换plot_interactive中的print语句
53
+ - 替换plot_multi_axis中的print语句
54
+ - 替换generate_html_report中的print语句
55
+ - **Acceptance Criteria Addressed**: [AC-3, AC-4]
56
+ - **Test Requirements**:
57
+ - `programmatic` TR-4.1: 所有绘图相关print已替换
58
+ - `human-judgment` TR-4.2: 日志输出不影响图表生成
59
+ - **Notes**: 图表生成过程中的信息输出
60
+
61
+ ## [x] Task 5: 替换命令行模式的print语句
62
+ - **Priority**: P0
63
+ - **Depends On**: Task 2
64
+ - **Description**:
65
+ - 替换main函数中的所有print语句
66
+ - 包括信号列表输出、文件加载信息、成功/失败提示等
67
+ - **Acceptance Criteria Addressed**: [AC-3, AC-4]
68
+ - **Test Requirements**:
69
+ - `programmatic` TR-5.1: 命令行print全部替换
70
+ - `human-judgment` TR-5.2: 命令行输出格式保持一致
71
+ - **Notes**: 命令行界面应保持用户友好的输出格式
72
+
73
+ ## [x] Task 6: 添加日志控制命令行参数
74
+ - **Priority**: P1
75
+ - **Depends On**: Task 2
76
+ - **Description**:
77
+ - 在argparse中添加 `--log-level` 参数
78
+ - 在argparse中添加 `--log-output` 参数(注意:避免与--log-file冲突)
79
+ - 设置合理默认值(level=INFO, file=None)
80
+ - 在main函数中初始化日志配置
81
+ - **Acceptance Criteria Addressed**: [AC-5, AC-6]
82
+ - **Test Requirements**:
83
+ - `programmatic` TR-6.1: --log-level参数存在且可用
84
+ - `programmatic` TR-6.2: --log-output参数存在且可用
85
+ - `programmatic` TR-6.3: 参数值正确传递给日志配置
86
+ - **Notes**: 这些参数应该是可选的,不影响现有使用方式
87
+
88
+ ## [x] Task 7: 移除未使用的导入库
89
+ - **Priority**: P1
90
+ - **Depends On**: Task 1
91
+ - **Description**:
92
+ - 根据Task 1的分析结果
93
+ - 移除未实际使用的import语句
94
+ - 确保移除后代码仍能正常运行
95
+ - **Acceptance Criteria Addressed**: [AC-1]
96
+ - **Test Requirements**:
97
+ - `programmatic` TR-7.1: 未使用库已从import中移除
98
+ - `programmatic` TR-7.2: 代码功能不受影响
99
+ - **Notes**: 已移除:sys, Rectangle, Annotation, can.io
100
+
101
+ ## [x] Task 8: 验证和测试
102
+ - **Priority**: P1
103
+ - **Depends On**: Task 3, Task 4, Task 5, Task 6, Task 7
104
+ - **Description**:
105
+ - 运行现有测试脚本确保功能正常
106
+ - 测试命令行模式的日志输出
107
+ - 测试日志级别控制(--log-level)
108
+ - 测试日志文件输出(--log-output)
109
+ - 检查是否有遗漏的print语句
110
+ - **Acceptance Criteria Addressed**: [AC-1, AC-2, AC-3, AC-4, AC-5, AC-6]
111
+ - **Test Requirements**:
112
+ - `programmatic` TR-8.1: 无print语句残留(除测试文件)
113
+ - `programmatic` TR-8.2: 导入成功,无语法错误
114
+ - `programmatic` TR-8.3: 命令行帮助正常显示
115
+ - `programmatic` TR-8.4: 日志输出正常显示
116
+ - `human-judgment` TR-8.5: 日志输出可读性良好
117
+ - **Notes**: 确保优化不破坏现有功能
118
+
119
+ ## 完成状态
120
+ ✅ 所有任务已完成!
@@ -0,0 +1,24 @@
1
+ # DBC信号名称显示 - 产品需求文档
2
+
3
+ ## 概述
4
+ - **Summary**: 修复DBC文件加载问题,确保显示真实的信号名称而非报文字节信号
5
+ - **Purpose**: 当DBC文件存在重叠信号问题时,使用非严格模式加载,确保用户可以看到真实的信号名称
6
+ - **Target Users**: 使用CAN信号解析工具的工程师
7
+
8
+ ## 目标
9
+ - [x] 修复DBC文件加载失败问题(重叠信号)
10
+ - [x] 确保显示真实的DBC信号名称
11
+ - [x] 处理cantools返回的NamedSignalValue对象
12
+
13
+ ## 功能需求
14
+ - **FR-1**: 使用非严格模式加载DBC文件,跳过有问题的消息
15
+ - **FR-2**: 显示真实的信号名称(如ACC_AEBTargetLngRange)而非报文字节(如ID_0x180_Byte0)
16
+ - **FR-3**: 正确处理NamedSignalValue对象,提取数值
17
+
18
+ ## 验收标准
19
+ - **AC-1**: DBC文件加载成功,显示真实信号名称
20
+ - **AC-2**: 能够正确绘制信号图表
21
+
22
+ ## 开放问题
23
+ - [ ] DBC文件中的重叠信号问题需要用户手动修复
24
+
@@ -0,0 +1,21 @@
1
+ # 集成ECharts动态图表到HTML报告 - Verification Checklist
2
+
3
+ ## 实现检查清单
4
+ - [ ] generate_html_report正确收集完整信号时间序列数据
5
+ - [ ] 辅助函数正确生成ECharts配置JSON
6
+ - [ ] tooltip配置正确,鼠标悬停显示所有信号值
7
+ - [ ] 多Y轴配置正确,根据信号值范围自动分组
8
+ - [ ] HTML头部正确添加ECharts.js CDN
9
+ - [ ] img标签被替换为ECharts容器div
10
+ - [ ] JavaScript代码正确初始化和渲染ECharts
11
+ - [ ] 信号数据正确嵌入到JavaScript中
12
+ - [ ] 图表在浏览器中正确渲染
13
+ - [ ] 鼠标悬停时tooltip正确显示所有信号值
14
+ - [ ] 多Y轴场景正常工作
15
+ - [ ] 缩放、平移等交互功能正常
16
+ - [ ] 添加了配置选项控制图表类型(ECharts/matplotlib)
17
+ - [ ] 配置了美观的图例和样式
18
+ - [ ] 添加了dataZoom数据区域缩放
19
+ - [ ] 保持了向后兼容性
20
+ - [ ] HTML文件无语法错误
21
+ - [ ] 测试了不同信号组合的图表
@@ -0,0 +1,76 @@
1
+ # 集成ECharts动态图表到HTML报告 - Product Requirement Document
2
+
3
+ ## Overview
4
+ - **Summary**: 将HTML报告中的静态matplotlib图片替换为ECharts.js动态图表,支持鼠标悬停显示所有信号在当前时间的值
5
+ - **Purpose**: 提供更丰富的交互体验,让用户可以方便地查看任意时间点的所有信号值
6
+ - **Target Users**: 车载CAN信号分析工程师、测试人员
7
+
8
+ ## Goals
9
+ - [Goal-1] 使用ECharts.js替代matplotlib静态图片
10
+ - [Goal-2] 支持鼠标悬停显示tooltip,展示当前时间的所有信号值
11
+ - [Goal-3] 支持多Y轴图表(当信号值范围差异较大时)
12
+ - [Goal-4] 保持现有HTML报告的其他功能不变
13
+
14
+ ## Non-Goals (Out of Scope)
15
+ - 修改静态图、动态图、多Y轴图的生成功能
16
+ - 修改命令行模式的其他参数
17
+ - 添加PDF报告导出功能
18
+
19
+ ## Background & Context
20
+ - 现有的HTML报告使用matplotlib生成的静态PNG/GIF图片
21
+ - 参考报告使用ECharts.js实现交互式图表,体验更好
22
+ - 需要在HTML中嵌入ECharts,无需额外依赖
23
+ - 图表数据需要从已解析的信号数据中提取
24
+
25
+ ## Functional Requirements
26
+ - **FR-1**: 在HTML报告中引入ECharts.js(使用CDN或内联)
27
+ - **FR-2**: 生成ECharts配置数据,包含所有信号的时间序列数据
28
+ - **FR-3**: 支持多Y轴图表(根据信号值范围自动分组)
29
+ - **FR-4**: 配置tooltip,鼠标悬停时显示当前时间的所有信号值
30
+ - **FR-5**: 支持平滑曲线、图例、缩放等交互功能
31
+ - **FR-6**: 保留现有的信号详细信息表格和概览卡片
32
+
33
+ ## Non-Functional Requirements
34
+ - **NFR-1**: HTML报告不需要额外依赖(除了ECharts CDN)
35
+ - **NFR-2**: 图表加载速度应该在可接受范围内
36
+ - **NFR-3**: 图表应该支持响应式布局
37
+
38
+ ## Constraints
39
+ - **Technical**: 使用Python生成ECharts配置JSON,在HTML中渲染
40
+ - **Business**: 保持向后兼容,不影响现有功能
41
+ - **Dependencies**: ECharts.js(通过CDN引入)
42
+
43
+ ## Assumptions
44
+ - 用户可以访问互联网(使用CDN),或提供内联的echarts.js
45
+ - 信号数据足够小,可以在浏览器中正常渲染
46
+ - 当信号数量很多时,图表依然可读
47
+
48
+ ## Acceptance Criteria
49
+
50
+ ### AC-1: ECharts图表正确渲染
51
+ - **Given**: 用户生成HTML报告
52
+ - **When**: 报告在浏览器中打开
53
+ - **Then**: ECharts图表正确显示,包含所有选择的信号
54
+ - **Verification**: `human-judgment`
55
+
56
+ ### AC-2: Tooltip显示正确
57
+ - **Given**: 鼠标悬停在图表上
58
+ - **When**: 鼠标移动到某个时间点
59
+ - **Then**: 显示该时间点的所有信号值
60
+ - **Verification**: `human-judgment`
61
+
62
+ ### AC-3: 多Y轴支持
63
+ - **Given**: 信号值范围差异较大
64
+ - **When**: 生成图表
65
+ - **Then**: 自动创建多个Y轴,每个Y轴对应一组信号
66
+ - **Verification**: `human-judgment`
67
+
68
+ ### AC-4: 交互功能正常
69
+ - **Given**: 用户在浏览器中操作
70
+ - **When**: 用户缩放、平移图表
71
+ - **Then**: 图表正确响应用户操作
72
+ - **Verification**: `human-judgment`
73
+
74
+ ## Open Questions
75
+ - [ ] 是否需要同时支持ECharts和原来的matplotlib图片作为选项?
76
+ - [ ] 是否需要添加数据导出功能?
@@ -0,0 +1,86 @@
1
+ # 集成ECharts动态图表到HTML报告 - The Implementation Plan
2
+
3
+ ## [ ] Task 1: 修改generate_html_report收集完整信号数据
4
+ - **Priority**: P0
5
+ - **Depends On**: None
6
+ - **Description**:
7
+ - 修改generate_html_report方法,收集完整的信号时间序列数据
8
+ - 为每个信号保存timestamps和values
9
+ - 确保数据范围符合配置的time_range和value_range
10
+ - **Acceptance Criteria Addressed**: [AC-1]
11
+ - **Test Requirements**:
12
+ - `programmatic` TR-1.1: 信号数据正确收集
13
+ - `programmatic` TR-1.2: 时间和值范围正确过滤
14
+ - **Notes**: 目前report_data只包含统计信息,需要添加原始序列数据
15
+
16
+ ## [ ] Task 2: 创建ECharts配置生成函数
17
+ - **Priority**: P0
18
+ - **Depends On**: Task 1
19
+ - **Description**:
20
+ - 创建辅助函数生成ECharts配置JSON
21
+ - 配置tooltip显示所有信号值
22
+ - 配置多Y轴(根据信号值范围自动分组)
23
+ - 配置图例、缩放等交互功能
24
+ - 使用平滑曲线(smooth: true)
25
+ - **Acceptance Criteria Addressed**: [AC-1, AC-2, AC-3, AC-4]
26
+ - **Test Requirements**:
27
+ - `programmatic` TR-2.1: ECharts配置JSON正确生成
28
+ - `programmatic` TR-2.2: 多Y轴配置正确
29
+ - `programmatic` TR-2.3: tooltip配置正确
30
+ - **Notes**: 参考用户提供的报告实现
31
+
32
+ ## [ ] Task 3: 修改_generate_html_content集成ECharts
33
+ - **Priority**: P0
34
+ - **Depends On**: Task 2
35
+ - **Description**:
36
+ - 在HTML头部添加ECharts.js CDN链接
37
+ - 替换原来的img标签为ECharts容器div
38
+ - 添加JavaScript代码初始化和渲染ECharts
39
+ - 将信号数据嵌入到JavaScript中
40
+ - **Acceptance Criteria Addressed**: [AC-1]
41
+ - **Test Requirements**:
42
+ - `programmatic` TR-3.1: HTML正确包含ECharts
43
+ - `programmatic` TR-3.2: 数据正确嵌入
44
+ - `human-judgement` TR-3.3: 图表在浏览器中正确渲染
45
+ - **Notes**: 使用CDN避免本地依赖问题
46
+
47
+ ## [ ] Task 4: 添加配置选项控制图表类型
48
+ - **Priority**: P1
49
+ - **Depends On**: Task 3
50
+ - **Description**:
51
+ - 在PlotConfig中添加选项,可选择使用ECharts还是matplotlib
52
+ - 更新命令行参数支持这个选项
53
+ - 默认使用ECharts
54
+ - **Acceptance Criteria Addressed**: [AC-1]
55
+ - **Test Requirements**:
56
+ - `programmatic` TR-4.1: 配置参数正确传递
57
+ - `programmatic` TR-4.2: 两种图表模式都能正常工作
58
+ - **Notes**: 保持向后兼容
59
+
60
+ ## [ ] Task 5: 优化图表样式和交互
61
+ - **Priority**: P1
62
+ - **Depends On**: Task 3
63
+ - **Description**:
64
+ - 配置图例位置
65
+ - 优化图表配色方案
66
+ - 添加数据区域缩放(dataZoom)
67
+ - 添加提示框美化
68
+ - **Acceptance Criteria Addressed**: [AC-2, AC-4]
69
+ - **Test Requirements**:
70
+ - `human-judgement` TR-5.1: 图表样式美观
71
+ - `human-judgement` TR-5.2: 交互功能流畅
72
+ - **Notes**: 参考用户提供的报告样式
73
+
74
+ ## [ ] Task 6: 测试和验证
75
+ - **Priority**: P1
76
+ - **Depends On**: Task 3, Task 4, Task 5
77
+ - **Description**:
78
+ - 测试不同信号组合的图表
79
+ - 测试多Y轴场景
80
+ - 测试tooltip显示
81
+ - 测试交互功能
82
+ - **Acceptance Criteria Addressed**: [AC-1, AC-2, AC-3, AC-4]
83
+ - **Test Requirements**:
84
+ - `human-judgement` TR-6.1: 所有功能正常工作
85
+ - `programmatic` TR-6.2: HTML文件无语法错误
86
+ - **Notes**: 进行全面的功能测试
@@ -0,0 +1,8 @@
1
+ # HTML报告中文乱码修复 - 检查清单
2
+
3
+ - [x] Task-1: 修复中文乱码问题
4
+ - [x] DBC文件读取使用GBK编码(优先)
5
+ - [x] HTML文件写入使用UTF-8编码
6
+ - [x] HTML meta标签设置为UTF-8
7
+ - [x] 测试生成的中文没有乱码,中文注释正确显示
8
+
@@ -0,0 +1,28 @@
1
+ # HTML报告中文乱码修复 - 产品需求文档
2
+
3
+ ## 概述
4
+ - **Summary**: 修复 `generate_html_report` 生成的报告中,信号注释中文乱码问题
5
+ - **Purpose**: 确保HTML报告中的中文注释正确显示
6
+ - **Target Users**: 使用CAN信号可视化工具的工程师
7
+
8
+ ## 目标
9
+ - [x] 修复HTML报告中信号注释的中文乱码问题
10
+ - [x] 确保HTML文件使用UTF-8编码
11
+ - [x] 确保DBC文件读取使用正确的编码
12
+
13
+ ## 问题描述
14
+ 当前生成的HTML报告中,信号注释显示为乱码(如 `AEBÄ¿±ê×ÝÏò¾àÀë` 而不是 `AEB目标纵向距离`),这是因为DBC文件使用的是GBK编码,而代码优先尝试UTF-8编码导致的。
15
+
16
+ ## 解决方案
17
+ 1. 修改代码优先使用GBK编码读取DBC文件
18
+ 2. HTML meta标签设置为UTF-8
19
+ 3. HTML文件写入使用UTF-8编码
20
+
21
+ ## 验收标准
22
+
23
+ ### AC-1: 中文正确显示
24
+ - **Given**: 用户调用 `generate_html_report` 生成报告
25
+ - **When**: 生成报告
26
+ - **Then**: HTML报告中信号注释的中文正确显示,没有乱码
27
+ - **Verification**: programmatic
28
+
@@ -0,0 +1,20 @@
1
+ # HTML报告中文乱码修复 - 实施计划
2
+
3
+ ## 任务列表
4
+
5
+ ### [x] Task-1: 修复中文乱码问题
6
+ - **Priority**: P0
7
+ - **Depends On**: None
8
+ - **Description**:
9
+ - 确保DBC文件读取使用GBK编码(优先)
10
+ - 确保HTML文件写入使用UTF-8编码
11
+ - 确保HTML meta标签设置为UTF-8
12
+ - **Acceptance Criteria Addressed**: AC-1
13
+ - **Test Requirements**:
14
+ - programmatic: HTML报告中中文注释正确显示(无乱码)
15
+ - **Status**: ✅ 已完成
16
+
17
+ ## 重要发现
18
+ **问题根源**: DBC文件使用的是GBK编码,而不是UTF-8编码
19
+ **解决方案**: 修改代码优先使用GBK编码读取DBC文件
20
+
@@ -0,0 +1,9 @@
1
+ # 修复终端中文乱码和测试文件使用日志 - Verification Checklist
2
+
3
+ ## 实现检查清单
4
+ - [x] signal_plotter.py中的loguru配置在Windows下使用UTF-8编码
5
+ - [x] 日志输出在Windows终端上正确显示中文
6
+ - [x] 在非Windows平台上功能正常(代码中已经判断平台)
7
+ - [x] test_signal_plotter.py中没有print语句
8
+ - [x] test_signal_plotter.py使用loguru日志输出
9
+ - [x] 程序能够正常运行并生成报告
@@ -0,0 +1,63 @@
1
+ # 修复终端中文乱码和测试文件使用日志 - Product Requirement Document
2
+
3
+ ## Overview
4
+ - **Summary**: 解决终端输出中文乱码问题,并将所有测试文件中的print语句替换为loguru日志输出
5
+ - **Purpose**: 确保在Windows终端上能够正确显示中文,并统一整个项目的日志输出方式
6
+ - **Target Users**: 车载CAN信号分析工程师、测试人员
7
+
8
+ ## Goals
9
+ - [Goal-1] 修复Windows终端下loguru输出中文乱码问题
10
+ - [Goal-2] 将test_signal_plotter.py中的print语句替换为loguru日志
11
+ - [Goal-3] 保持代码的向后兼容性
12
+
13
+ ## Non-Goals (Out of Scope)
14
+ - 修改非测试文件(测试文件是可选的)
15
+ - 改变现有loguru的日志格式(只添加编码设置)
16
+
17
+ ## Background & Context
18
+ - Windows终端默认编码通常是GBK,而Python使用UTF-8输出会导致乱码
19
+ - loguru默认使用系统编码输出,在Windows下需要显式设置UTF-8
20
+ - 测试文件使用print语句,与主代码风格不一致
21
+
22
+ ## Functional Requirements
23
+ - **FR-1**: 配置loguru在Windows下使用UTF-8编码输出到终端
24
+ - **FR-2**: 将test_signal_plotter.py中的print语句替换为loguru日志
25
+ - **FR-3**: 保持其他测试文件可选是否替换(但推荐统一)
26
+
27
+ ## Non-Functional Requirements
28
+ - **NFR-1**: 日志输出必须在Windows终端上正确显示中文
29
+ - **NFR-2**: 不能影响Linux/macOS下的正常运行
30
+ - **NFR-3**: 代码变更必须保持向后兼容
31
+
32
+ ## Constraints
33
+ - **Technical**: 只能修改loguru的配置,不能改变日志格式
34
+ - **Business**: 需要在Windows 10/11上验证
35
+ - **Dependencies**: loguru库
36
+
37
+ ## Assumptions
38
+ - 用户主要在Windows环境下使用
39
+ - 保持日志输出的原有格式
40
+ - 测试文件是用户自己写的示例,不是强制要求
41
+
42
+ ## Acceptance Criteria
43
+
44
+ ### AC-1: 终端中文正确显示
45
+ - **Given**: 在Windows PowerShell或CMD中运行程序
46
+ - **When**: loguru输出包含中文的日志信息
47
+ - **Then**: 中文能够正确显示,没有乱码
48
+ - **Verification**: `human-judgment`
49
+
50
+ ### AC-2: test_signal_plotter.py使用日志
51
+ - **Given**: 运行test_signal_plotter.py
52
+ - **When**: 程序执行
53
+ - **Then**: 所有输出信息使用loguru日志,没有print语句
54
+ - **Verification**: `programmatic`
55
+
56
+ ### AC-3: 向后兼容
57
+ - **Given**: 在Linux/macOS环境下运行
58
+ - **When**: 程序执行
59
+ - **Then**: 日志功能正常工作,没有错误
60
+ - **Verification**: `programmatic`
61
+
62
+ ## Open Questions
63
+ - [ ] 是否需要修改所有测试文件?(建议是,但用户可以自己决定)