diff --git a/ReadMe.txt b/ReadMe.txt index 0994577..e12e1a5 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -57,6 +57,13 @@ 取消一些通信日志打印 2024.1.8 V2.04 支持新的can帧协议,解决上报数据丢失的问题 +2024.1.10 + V2.05 修改赋码仪0x90,0x91指令上报格式,模块类型字段移到每个模块数据域中 + 0x90,0x91指令可以识别EJ、EQ模块类型 +2024.1.11 + 自动检测指令0x44不读取流水号 + 解决新赋码指令回复指令不对的问题 + 解决tcp不上报心跳的问题 diff --git a/complier_info.h b/complier_info.h index 850022a..253ffac 100644 --- a/complier_info.h +++ b/complier_info.h @@ -6,7 +6,7 @@ -#define BUILD_DATE "2024-01-08 10:35:57" +#define BUILD_DATE "2024-01-11 17:54:49" diff --git a/info.json b/info.json index 49a34dc..740e37f 100644 --- a/info.json +++ b/info.json @@ -1,10 +1,10 @@ { - "build_date": "2024-01-08 10:35:57", + "build_date": "2024-01-11 17:54:49", "hard_version": "MHPZ2_V1.00", "private": [ "info.json", "json.lua", "prints.lua" ], - "soft_version": "V2.04" + "soft_version": "V2.05" } diff --git a/prot_cmd/cmd_coder.cpp b/prot_cmd/cmd_coder.cpp index 106f274..f2123ea 100644 --- a/prot_cmd/cmd_coder.cpp +++ b/prot_cmd/cmd_coder.cpp @@ -71,7 +71,7 @@ static const task_def g_jq_task_table[]={ {"读取芯片代码",6,5,0,1}, {"OTP检测",7,5,3,0}, {"工厂测试检测",8,5,0,0}, -{"读取状态",9,5,1,0}, +{"读取状态",9,5,1,1}, {"写工厂信息",10,5,2,0}, {"充能统计",11,5,5,4}, {"充电电压检测",12,5,2,1}, @@ -169,11 +169,12 @@ const task_def *coder_find_task(const char *str) // 返回芯片类型 -char coder_chip_type() +char coder_chip_type(uint8_t states=0xff) { int chip=elec_extract_chip(check_plan()->get_plan_id()); - const char table[]="JXW"; - if(chip>=0&&chip<=2){ + const char table[]="JXWQ"; + if(states&&((states&0x04)==0)) chip=3; + if(chip>=0&&chip<=3){ return table[chip]; } return 0; @@ -207,6 +208,35 @@ int coder_add_task(myarray &d,const char *name,int slot_index,int task_index,uin } + +// 添加一个任务失败不报错,返回0添加成功 +int coder_add_task_noerr(myarray &d,const char *name,int slot_index,int task_index,uint16_t params[10]) +{ + const task_def *task=nullptr; + task=coder_find_task(name); + if(task==nullptr){ + qWarning("can not find task with %s.",name); + return -1; + }else{ + // qDebug("task_name:%s,task_id=%d,par_count=%d,ret_count=%d,err=%d",name,task->task_id, + // task->par_count,task->ret_count,task->errcode); + } + char *par=(char *)params; + d.append(uint8_t(slot_index)); + d.append(uint8_t(task->task_id)); + d.append(uint8_t(task->par_count)); + d.append(uint8_t(task->ret_count)); + d.append(uint8_t(0)); + d.append(uint8_t(task_index)); + if(task->par_count*2>0){ + d.append(par,task->par_count*2); + } + return 0; +} + + + + // 包装为一个小板的数据,返回0成功 // 包装前需要先添加任务 int coder_slave_pack(myarray &d,int addr) @@ -238,7 +268,7 @@ myarray coder_slave_find_ret_data(myarray data,int task_index,int size) }else{ int len=size-r.size(); r.append(len,uint8_t(0)); - qWarning("can not find data,append by 0."); + qWarning("can not find data,task_index=%d.",task_index); } return r; } @@ -307,6 +337,8 @@ myarray cmd_coder_check2::cmd_pc_to_slave(myarray data) if(chip==0){ uint16_t params[10]={20,4}; coder_add_task(d,"读OTP",1,1,params); + params[0]=0; + coder_add_task(d,"读取状态",1,2,params); }else if(chip==2){ uint16_t params[10]={9,4}; coder_add_task(d,"读MTP",1,1,params); @@ -324,19 +356,20 @@ myarray cmd_coder_check2::ret_slave_to_pc(QList data) r.append(uint8_t(addrs&0xff)); r.append(uint8_t((addrs>>8)&0xff)); r.append(uint8_t((addrs>>16)&0xff)); - r.append(uint8_t(coder_chip_type())); for (int i=0;islave_addr_start; sdata.remove(0,1); myarray sret=coder_slave_find_ret_data(sdata.mid(1),1,4); + myarray state=coder_slave_find_ret_data(sdata.mid(1),2,1); r.append(uint8_t(addr)); if(sdata.size()==0){ r.append(uint8_t(0xd0)); - r.append(8,uint8_t(0)); + r.append(9,uint8_t(0)); }else{ r.append(sdata[0]); + r.append(uint8_t(coder_chip_type(state[0]))); r.append(sret); r.append(4,uint8_t(0)); } @@ -495,6 +528,8 @@ myarray cmd_coder_code2::cmd_pc_to_slave(myarray data) if(chip_mode==0){ uint16_t params[10]={20,4}; coder_add_task(d,"读OTP",2,4,params); + params[0]=0; + coder_add_task(d,"读取状态",2,5,params); }else if(chip_mode==2){ uint16_t params[10]={9,4}; coder_add_task(d,"读MTP",2,4,params); @@ -505,7 +540,7 @@ myarray cmd_coder_code2::cmd_pc_to_slave(myarray data) // 检测模式1,返回异常代码和任务插槽数据 ret.insert(0,uint8_t(1)); qDebug("tran pc data to slave end"); - qDebug()<<"slave_data:"< data) r.append(uint8_t(addrs&0xff)); r.append(uint8_t((addrs>>8)&0xff)); r.append(uint8_t((addrs>>16)&0xff)); - r.append(uint8_t(coder_chip_type())); // coder_return_mode 1是完整模式,协议0是完整模式 if(syscfg()->coder_return_mode){ r.append(uint8_t(0)); @@ -554,6 +588,8 @@ myarray cmd_coder_code2::ret_slave_to_pc(QList data) r.append(err); // 添加工厂信息 sret=coder_slave_find_ret_data(sdata,4,4); + myarray state=coder_slave_find_ret_data(sdata,5,1); + r.append(uint8_t(coder_chip_type(state[0]))); r.append(sret); // 完整模式 if(syscfg()->coder_return_mode){ @@ -765,14 +801,37 @@ protpc_export(0x30, get_checker_check2); -int cmd_checker_check3::key_press(){ - return 1; + + +// 0x49 检测不读取流水号 +myarray cmd_checker_check3::cmd_pc_to_slave(myarray data) +{ + myarray ret; + const task_def *table=nullptr; + // 检测模式0,返回原始检测结果 + ret.insert(0,uint8_t(0)); + return ret; } static HandlePc *get_checker_check3(){ return new cmd_checker_check3(); } -protpc_export(0x44, get_checker_check3); +protpc_export(0x49, get_checker_check3); + + + + +// 0x44 自动检测不读取流水号 +int cmd_checker_check4::key_press(){ + return 1; +} + +static HandlePc *get_checker_check4(){ + return new cmd_checker_check4(); +} +protpc_export(0x44, get_checker_check4); + + diff --git a/prot_cmd/cmd_coder.h b/prot_cmd/cmd_coder.h index 30cc981..578914c 100644 --- a/prot_cmd/cmd_coder.h +++ b/prot_cmd/cmd_coder.h @@ -251,12 +251,14 @@ public: } // pc收到回复,返回0不回复 int cmd_pc_recv(){ - return 0x02; + return 0x11; } // 生成接收回复到pc myarray cmd_pc_recv_to_pc(){ myarray r; - r.append(uint8_t(addrs)); + r.append(uint8_t(addrs&0xff)); + r.append(uint8_t((addrs>>8)&0xff)); + r.append(uint8_t((addrs>>16)&0xff)); r.append(uint8_t(0)); return r; } @@ -418,7 +420,7 @@ public: -// 批检仪自动检测并读取模块流水号 +// 批检仪检测不读取流水号 class cmd_checker_check3 : public cmd_checker_check2 { Q_OBJECT @@ -428,6 +430,25 @@ public: ~cmd_checker_check3(){ } // pc收到回复,返回0不回复 + int cmd_pc_recv(){ + return 0x49; + } + // pc指令转从机 + myarray cmd_pc_to_slave(myarray data); +}; + + + +// 批检仪检测不读取流水号 +class cmd_checker_check4 : public cmd_checker_check3 +{ + Q_OBJECT +public: + cmd_checker_check4():cmd_checker_check3(){ + } + ~cmd_checker_check4(){ + } + // pc收到回复,返回0不回复 int cmd_pc_recv(){ return 0x44; } @@ -437,4 +458,5 @@ public: + #endif // CMD_CODER_H diff --git a/prot_cmd/cmd_pc.cpp b/prot_cmd/cmd_pc.cpp index 3523166..a13dac9 100644 --- a/prot_cmd/cmd_pc.cpp +++ b/prot_cmd/cmd_pc.cpp @@ -169,6 +169,7 @@ void selfdev_check::slave_end_slot(int addr,int ack, myarray data) r.append(char(0)); for(int i=0;isetInterval(30*1000); + timer_->setInterval(1*1000); timer_->start(); } } void keep_live::recv_slot() { + // qDebug("keeplive recv."); if(timer_!=nullptr){ + timer_->setInterval(30*1000); timer_->start(); } } @@ -91,6 +97,7 @@ void keep_coder::timeout_slot(){ data.append(uint8_t(0xff)); data.append(uint8_t(0x03)); pc_->send_data_slot(uint8_t(0x8a),data); + // qDebug("coder keeplive."); } @@ -106,6 +113,11 @@ keep_live *KeepLive() kp=new keep_checker(); }else if(cfg_->device_type.contains("coder",Qt::CaseInsensitive)==true){ kp=new keep_coder(); + }else{ + qWarning("device type err,not creat keeplive."); + } + if(kp!=nullptr){ + QTimer::singleShot(0, kp, &keep_live::init); } } return kp; diff --git a/quest_info.txt b/quest_info.txt index efc14c6..6ddc361 100644 --- a/quest_info.txt +++ b/quest_info.txt @@ -1 +1,2 @@ -V2.04 可以解析新的can协议帧 \ No newline at end of file + V2.05 修改赋码仪0x90,0x91指令上报格式,模块类型字段移到每个模块数据域中 + 0x90,0x91指令可以识别EJ、EQ模块类型 \ No newline at end of file