V2.04 支持新的can帧协议,解决上报数据丢失的问题

This commit is contained in:
ranchuan
2024-01-08 18:02:07 +08:00
parent b76c04d072
commit 84bbe6ed3e
5 changed files with 52 additions and 19 deletions

View File

@@ -55,4 +55,9 @@
2024.1.5 2024.1.5
异常判定在出错时才打印,检测时通信异常蜂鸣器响一声 异常判定在出错时才打印,检测时通信异常蜂鸣器响一声
取消一些通信日志打印 取消一些通信日志打印
2024.1.8
V2.04 支持新的can帧协议解决上报数据丢失的问题

View File

@@ -6,7 +6,7 @@
#define BUILD_DATE "2024-01-05 17:19:53" #define BUILD_DATE "2024-01-08 10:35:57"

View File

@@ -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", "hard_version": "MHPZ2_V1.00",
"private": [ "private": [
"info.json", "info.json",
"json.lua", "json.lua",
"prints.lua" "prints.lua"
], ],
"soft_version": "V2.03" "soft_version": "V2.04"
} }

View File

@@ -10,6 +10,8 @@
#define QT_NO_DEBUG_OUTPUT #define QT_NO_DEBUG_OUTPUT
typedef struct typedef struct
{ {
uint32_t Reserve1 : 3; uint32_t Reserve1 : 3;
@@ -20,12 +22,26 @@ typedef struct
uint32_t FunClass : 6; uint32_t FunClass : 6;
uint32_t SegFlag : 2; uint32_t SegFlag : 2;
uint32_t SegNum : 8; 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; } YeCanID_st;
typedef union typedef union
{ {
uint32_t Exide; uint32_t Exide;
YeCanID_st yecanid; YeCanID_st yecanid;
YeCanID_st_old yecanid_old;
} YeCanID_un; } YeCanID_un;
can_slave::can_slave() can_slave::can_slave()
@@ -173,10 +189,21 @@ void can_host::recv_data_cb()
if (frame_id.Exide == 0x000000) if (frame_id.Exide == 0x000000)
return; return;
QByteArray payload = frame.payload(); QByteArray payload = frame.payload();
uint8_t slave_addr = frame_id.yecanid.srcMACID; uint8_t slave_addr;
uint8_t dst_addr = frame_id.yecanid.destMACID; uint8_t dst_addr;
uint8_t seg_flag = frame_id.yecanid.SegFlag; uint8_t seg_flag;
int seg_num = frame_id.yecanid.SegNum; 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); can_slave &slave = get_slave_by_addr(slave_addr);
if (seg_flag == 0x00){ if (seg_flag == 0x00){
// 不分段 // 不分段
@@ -249,17 +276,18 @@ void can_host::append(uint8_t addr, uint8_t fun_class, QByteArray data)
{ {
YeCanID_un frameId; YeCanID_un frameId;
frameId.Exide = 0; frameId.Exide = 0;
frameId.yecanid.destMACID = addr; frameId.yecanid_old.destMACID = addr;
frameId.yecanid.srcMACID = 0; frameId.yecanid_old.srcMACID = 0;
frameId.yecanid.FunClass = fun_class; frameId.yecanid_old.FunClass = fun_class;
frameId.yecanid.SegFlag = 0; frameId.yecanid_old.SegFlag = 0;
frameId.yecanid.SegNum = 0; frameId.yecanid_old.SegNum = 0;
// frameId.yecanid.Reserve0=1;// 使用新协议
// 单包发送 // 单包发送
if (data.size() <= 8) if (data.size() <= 8)
{ {
frameId.yecanid.SegFlag = 0x0; frameId.yecanid_old.SegFlag = 0x0;
frameId.yecanid.SegNum = 0; frameId.yecanid_old.SegNum = 0;
QCanBusFrame frame = QCanBusFrame(frameId.Exide, data.left(8)); QCanBusFrame frame = QCanBusFrame(frameId.Exide, data.left(8));
while (can_->writeFrame(frame) != true) 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) if (i == 0)
{ {
frameId.yecanid.SegFlag = 0x1; frameId.yecanid_old.SegFlag = 0x1;
} }
else if (data.size() > 8) else if (data.size() > 8)
{ {
frameId.yecanid.SegFlag = 0x2; frameId.yecanid_old.SegFlag = 0x2;
} }
else 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)); QCanBusFrame frame = QCanBusFrame(frameId.Exide, data.left(8));
while (can_->writeFrame(frame) != true) while (can_->writeFrame(frame) != true)
{ {

View File

@@ -1 +1 @@
V2.03 批检仪检测命令本地错误码为0时使用小板的错误码 V2.04 可以解析新的can协议帧