Skip to content

DbcGenerator changes nested multiplexor marker m0M to m0 #9

Description

@PengjiangXiao

问题描述

扩展多路复用中,m0M 表示一个信号同时具有两种角色:

  • 它属于上一级选择器的分支 0
  • 它本身还是下一级选择器

DbcGenerator 当前会先调用 MultiplexingInfo() 解析标记,然后只根据 RoleGroup 重新生成标记。

由于 m0M 被解析为普通 Multiplexed,生成结果只保留 m0,末尾的 M 丢失。

确认环境:

  • 分支:master
  • 提交:a736f3b850bb454268093b8c1a409627649393e8
  • 文件:EasyDbc/Generators/DbcGenerator.cs

最小复现内容

BO_ 1 Example: 8 ECU
 SG_ Root M : 0|4@1+ (1,0) [0|15] "" ECU
 SG_ Nested m0M : 8|4@1+ (1,0) [0|15] "" ECU

复现步骤

  1. 解析包含 SG_ Nested m0M 的 DBC。
  2. 使用 DbcGenerator 重新生成 DBC。
  3. 检查 Nested 信号的标记。

实际结果

生成器输出:

SG_ Nested m0 :

M 被删除,信号不再表示下一级选择器。

期望结果

生成器应保留:

SG_ Nested m0M :

一轮解析和生成不应改变多路复用拓扑。

建议修复方式

如果 Signal.Multiplexing 已由解析器验证,生成器可以直接保留原始标记:

string multiplexorIndicator =
    string.IsNullOrWhiteSpace(signal.Multiplexing)
        ? string.Empty
        : $" {signal.Multiplexing}";

同时建议增加以下往返测试:

  • M
  • m0
  • m0M
  • SG_MUL_VAL_ 扩展范围

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions