微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

J1939 - 对于删除 NAME 的请求,我应该使用哪个 PGN 号码?

如何解决J1939 - 对于删除 NAME 的请求,我应该使用哪个 PGN 号码?

我有一个关于 J1939 的问题。我正在寻找一个请求删除 ECU 名称的 PGN 号。

我为开源 SAE J1939 创建了一个https://github.com/DanielMartensson/Open-SAE-J1939

有两个 PGN 号码

    PGN_ADDRESS_CLaimED = 0x00EE00,PGN_COMMANDED_ADDRESS = 0x00FED8,

PGN_ADDRESS_CLaimED 询问有关 ECU(名称)的信息,而 PGN_COMMANDED_ADDRESS 不是请求,更像是用于更改有关 ECU 及其目标地址的信息的命令。

问题:

在哪里可以找到可以删除ECU信息或断开ECU的PGN号? 或者你认为我可以说PGN号可以是0xFFFFFF吗?我希望 PGN 已经被拿走了?

我之所以这么问是因为当我更改了一个 ECU 的地址和信息时,旧的信息和地址仍然存在......在其他 ECU 上可用。我的库就像所有 ECU 都有关于所有 ECU:s 的相同信息一样工作。

如果你想知道我在做什么。我正在构建一个非常易于使用且易于理解的 J1939 库。我专注于最少的代码,库的目的是让用户可以轻松实现自己的外部功能

以下是我的 J1939 库中的请求函数示例:

/* PGN 00EA00 - Request for name information about other ECU */
ENUM_J1939_STATUS_CODES J1939_User_Send_Request(J1939* j1939,uint8_t DA,uint32_t PGN_code) {
    uint8_t PGN[3];
    PGN[0] = PGN_code;                                                      /* PGN least significant bit */
    PGN[1] = PGN_code >> 8;                                                 /* Look in J1939_Enum_PGN.h */
    PGN[2] = PGN_code >> 16;                                                /* PGN most significant bit */
    uint32_t ID = (0x18EA << 16) | (DA << 8) | j1939->this_address;
    return CAN_Send_Request(ID,PGN,100);                                  /* 100 ms delay */
}

解决方法

AFAIK,J1939 不提供注销地址的功能。 但是,您可以发送地址声明消息,其中 SA 为 0xFE,NAME 设置为您在初始地址声明期间使用的值。

我的实现方式是,我的库过去将所有地址及其名称组合存储在“地址簿”中。在发送任何消息之前,DA 会根据地址簿进行验证。 如果节点发送SA为0xFE的地址声明,Name将在地址簿中搜索并删除。

搜索有效地址是一种开销。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。