我有一个关于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号码可以是0xFFFFFF吗?我希望PGN已经被拿走了?
我之所以这么问,是因为当我在ECU更改地址和信息时,旧的信息和地址仍然存在。。。可在其他ECU上使用。我的库就像所有ECU都有关于所有ECU的相同信息一样工作。
如果你想知道我在做什么。我正在构建一个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设置为您在初始地址声明中使用的值。
我以这样一种方式实现了,我的库用于将所有地址及其名称组合存储在"中;Adress book"。在发送任何消息之前,DA已根据地址簿进行验证。如果节点发送SA为0xFE的地址声明,则会在地址簿中搜索名称并将其删除。
搜索有效地址是一种开销。