0

我有一个关于 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 */
}
4

1 回答 1

1

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

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

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

于 2021-08-10T18:42:50.503 回答