diff --git a/ReadMe.txt b/ReadMe.txt index 818d812..0994577 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -55,4 +55,9 @@ 2024.1.5 异常判定在出错时才打印,检测时通信异常蜂鸣器响一声 取消一些通信日志打印 +2024.1.8 + V2.04 支持新的can帧协议,解决上报数据丢失的问题 + + + diff --git a/complier_info.h b/complier_info.h index 0e08788..850022a 100644 --- a/complier_info.h +++ b/complier_info.h @@ -6,7 +6,7 @@ -#define BUILD_DATE "2024-01-05 17:19:53" +#define BUILD_DATE "2024-01-08 10:35:57" diff --git a/info.json b/info.json index 45c54b9..49a34dc 100644 --- a/info.json +++ b/info.json @@ -1,10 +1,10 @@ { - "build_date": "2024-01-05 17:19:53", + "build_date": "2024-01-08 10:35:57", "hard_version": "MHPZ2_V1.00", "private": [ "info.json", "json.lua", "prints.lua" ], - "soft_version": "V2.03" + "soft_version": "V2.04" } diff --git a/interface/if_can.cpp b/interface/if_can.cpp index fd88252..0a21732 100644 --- a/interface/if_can.cpp +++ b/interface/if_can.cpp @@ -10,6 +10,8 @@ #define QT_NO_DEBUG_OUTPUT + + typedef struct { uint32_t Reserve1 : 3; @@ -20,12 +22,26 @@ typedef struct uint32_t FunClass : 6; uint32_t SegFlag : 2; uint32_t SegNum : 8; +} YeCanID_st_old; + + +typedef struct +{ + uint32_t SegNum : 8; + uint32_t Reserve0 : 2; + uint32_t ACK : 1; + uint32_t FunClass : 6; + uint32_t SegFlag : 2; + uint32_t destMACID : 5; + uint32_t srcMACID : 5; + uint32_t Reserve1 : 3; } YeCanID_st; typedef union { uint32_t Exide; YeCanID_st yecanid; + YeCanID_st_old yecanid_old; } YeCanID_un; can_slave::can_slave() @@ -173,10 +189,21 @@ void can_host::recv_data_cb() if (frame_id.Exide == 0x000000) return; QByteArray payload = frame.payload(); - uint8_t slave_addr = frame_id.yecanid.srcMACID; - uint8_t dst_addr = frame_id.yecanid.destMACID; - uint8_t seg_flag = frame_id.yecanid.SegFlag; - int seg_num = frame_id.yecanid.SegNum; + uint8_t slave_addr; + uint8_t dst_addr; + uint8_t seg_flag; + int seg_num; + if(frame_id.yecanid.Reserve0==0){ + slave_addr = frame_id.yecanid_old.srcMACID; + dst_addr = frame_id.yecanid_old.destMACID; + seg_flag = frame_id.yecanid_old.SegFlag; + seg_num = frame_id.yecanid_old.SegNum; + }else{ + slave_addr = frame_id.yecanid.srcMACID; + dst_addr = frame_id.yecanid.destMACID; + seg_flag = frame_id.yecanid.SegFlag; + seg_num = frame_id.yecanid.SegNum; + } can_slave &slave = get_slave_by_addr(slave_addr); if (seg_flag == 0x00){ // 不分段 @@ -249,17 +276,18 @@ void can_host::append(uint8_t addr, uint8_t fun_class, QByteArray data) { YeCanID_un frameId; frameId.Exide = 0; - frameId.yecanid.destMACID = addr; - frameId.yecanid.srcMACID = 0; - frameId.yecanid.FunClass = fun_class; - frameId.yecanid.SegFlag = 0; - frameId.yecanid.SegNum = 0; + frameId.yecanid_old.destMACID = addr; + frameId.yecanid_old.srcMACID = 0; + frameId.yecanid_old.FunClass = fun_class; + frameId.yecanid_old.SegFlag = 0; + frameId.yecanid_old.SegNum = 0; + // frameId.yecanid.Reserve0=1;// 使用新协议 // 单包发送 if (data.size() <= 8) { - frameId.yecanid.SegFlag = 0x0; - frameId.yecanid.SegNum = 0; + frameId.yecanid_old.SegFlag = 0x0; + frameId.yecanid_old.SegNum = 0; QCanBusFrame frame = QCanBusFrame(frameId.Exide, data.left(8)); while (can_->writeFrame(frame) != true) { @@ -273,17 +301,17 @@ void can_host::append(uint8_t addr, uint8_t fun_class, QByteArray data) { if (i == 0) { - frameId.yecanid.SegFlag = 0x1; + frameId.yecanid_old.SegFlag = 0x1; } else if (data.size() > 8) { - frameId.yecanid.SegFlag = 0x2; + frameId.yecanid_old.SegFlag = 0x2; } else { - frameId.yecanid.SegFlag = 0x3; + frameId.yecanid_old.SegFlag = 0x3; } - frameId.yecanid.SegNum = (uint8_t)i; + frameId.yecanid_old.SegNum = (uint8_t)i; QCanBusFrame frame = QCanBusFrame(frameId.Exide, data.left(8)); while (can_->writeFrame(frame) != true) { diff --git a/quest_info.txt b/quest_info.txt index bf3b87f..efc14c6 100644 --- a/quest_info.txt +++ b/quest_info.txt @@ -1 +1 @@ -V2.03 批检仪检测命令本地错误码为0时使用小板的错误码 \ No newline at end of file +V2.04 可以解析新的can协议帧 \ No newline at end of file