我有一个关于J1939的问题。我正在寻找一个PGN号码,用于请求删除ECU的名称。
我为开放源码的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号码可以是0 0xFFFFFF?我希望PGN已经被录取了?
我之所以问这个问题,是因为当我在ECU上更改地址和信息时,旧的信息和地址在其他ECU仍然是there...avaiable。我的库工作就像所有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 */
}发布于 2021-08-10 18:42:50
AFAIK,J1939不提供取消注册地址的功能。但是,您可以使用SA作为0xFE发送地址声明消息,并将名称设置为在初始地址声明期间使用的值。
我用一种方式实现了,我的图书馆过去把所有的地址和它们的名字组合存储在“进位簿”中。在发送任何消息之前,根据地址簿对DA进行验证。如果节点以SA为0xFE发送地址声明,则将在通讯簿中搜索并删除名称。
查找有效地址是一种开销。
https://stackoverflow.com/questions/68337373
复制相似问题