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_ 扩展范围

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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