diff --git a/ReadMe.txt b/ReadMe.txt index 0e77c1b..aae1a9f 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -25,4 +25,7 @@ 2023.12.21 实现赋码仪命令 升级小板程序失败时停止 - +2023.12.22 + 添加读取电机步数命令 + 添加新赋码仪检测命令,赋码仪注码命令 + 添加检测并写入流水号命令 diff --git a/base/debug.cpp b/base/debug.cpp index 56a9f3e..6243f2b 100644 --- a/base/debug.cpp +++ b/base/debug.cpp @@ -89,7 +89,7 @@ void print_to_console(QtMsgType type, const QMessageLogContext &context, const Q QString current_date_time = QDateTime::currentDateTime().toString("hh:mm:ss.zzz"); Q_UNUSED(current_date_time); if(context.file!=0){ - fprintf(stderr, "%s | %s | %s:%u | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), &context.file[20], context.line, localMsg.constData()); + fprintf(stderr, "%s | %s | %s:%u | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), &context.file[10], context.line, localMsg.constData()); }else{ fprintf(stderr,"%s | %s | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), localMsg.constData()); } @@ -105,7 +105,7 @@ void print_to_file(QtMsgType type, const QMessageLogContext &context, const QStr { QTextStream tWrite(g_debug.file); if(context.file!=0){ - tWrite << QString::asprintf("%s | %s | %s:%u | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), &context.file[20], context.line, localMsg.constData()); + tWrite << QString::asprintf("%s | %s | %s:%u | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), &context.file[10], context.line, localMsg.constData()); }else{ tWrite << QString::asprintf("%s | %s | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), localMsg.constData()); } diff --git a/checker_host.pro b/checker_host.pro index 6a7eddb..dee4aa4 100644 --- a/checker_host.pro +++ b/checker_host.pro @@ -98,4 +98,6 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin DISTFILES += \ ReadMe.txt \ - ReadMe.txt + ReadMe.txt \ + info.json \ + info.json diff --git a/complier_info.h b/complier_info.h index ba45e65..9d826a8 100644 --- a/complier_info.h +++ b/complier_info.h @@ -6,7 +6,7 @@ -#define BUILD_DATE "2023-12-21 18:29:22" +#define BUILD_DATE "2023-12-22 18:08:01" diff --git a/elec/elec_judge.cpp b/elec/elec_judge.cpp index 0b5a2db..8b33657 100644 --- a/elec/elec_judge.cpp +++ b/elec/elec_judge.cpp @@ -392,7 +392,7 @@ int elec_extract_chip(int id) // 找到异常代码序号 int elec_report_err(elec_judge_def *e) { - static const uint8_t pro_table[]={1,3,7,8,2,4,5,6,9,20,0}; + static const uint8_t pro_table[]={1,3,7,8,2,4,5,6,9,10,20,0}; uint8_t index=0; for (int i=0;istart(300); //emit timeout_start_retry_signal(300); - timeout_start_retry_cb(1000); + timeout_start_retry_cb(2000); }else{ // timer_retry_->stop(); timeout_stop_retry(); diff --git a/prot_cmd/cmd_coder.cpp b/prot_cmd/cmd_coder.cpp index 22ff795..3d98a84 100644 --- a/prot_cmd/cmd_coder.cpp +++ b/prot_cmd/cmd_coder.cpp @@ -51,6 +51,7 @@ static const task_def g_ew_task_table[]={ {"设置电阻校准值",37,1,1,0}, {"读取流水号",38,5,2,2}, {"写入流水号",39,5,2,0}, +{"写固定延时",40,5,1,0}, {nullptr,0,0,0,0}, }; @@ -106,6 +107,7 @@ static const task_def g_jq_task_table[]={ {"设置电阻校准值",43,1,1,0}, {"写入流水号",44,5,2,0}, {"读取流水号",45,5,2,2}, +{"写固定延时",46,5,1,0}, {nullptr,0,0,0,0}, }; @@ -216,16 +218,24 @@ int coder_slave_pack(myarray &d,int addr) // 找到指定任务序号的数据 -myarray coder_slave_find_ret_data(myarray data,int task_index) +myarray coder_slave_find_ret_data(myarray data,int task_index,int size) { + myarray r; for(int i=0;i=size){ + r=r.left(size); + }else{ + int len=size-r.size(); + r.append(len,uint8_t(0)); + } + return r; } @@ -251,7 +261,8 @@ myarray cmd_coder_check::ret_slave_to_pc(QList data) for (int i=0;islave_addr_start; + int addr=sdata[0]-1+syscfg()->slave_addr_start; + sdata.remove(0,1); r.append(uint8_t(addr)); if(sdata.size()>0){ r.append(sdata[0]); @@ -286,8 +297,8 @@ protpc_export(0x01, get_coder_check); myarray cmd_coder_check2::cmd_pc_to_slave(myarray data) { myarray d; - int chip=elec_extract_chip(check_plan()->get_plan_id()); const task_def *table=nullptr; + int chip=elec_extract_chip(check_plan()->get_plan_id()); if(chip==0){ uint16_t params[10]={20,4}; coder_add_task(d,"读OTP",1,1,params); @@ -312,18 +323,16 @@ myarray cmd_coder_check2::ret_slave_to_pc(QList data) for (int i=0;islave_addr_start; - myarray sret=coder_slave_find_ret_data(sdata.mid(1),1); + int addr=sdata[0]-1+syscfg()->slave_addr_start; + sdata.remove(0,1); + myarray sret=coder_slave_find_ret_data(sdata.mid(1),1,4); r.append(uint8_t(addr)); if(sdata.size()==0){ r.append(uint8_t(0xd0)); r.append(8,uint8_t(0)); }else{ r.append(sdata[0]); - if(sret.size()<4){ - sret.append(4-sret.size(),uint8_t(0)); - } - r.append(sret.left(4)); + r.append(sret); r.append(4,uint8_t(0)); } } @@ -404,7 +413,8 @@ myarray cmd_coder_code::ret_slave_to_pc(QList data) for (int i=0;islave_addr_start; + int addr=sdata[0]-1+syscfg()->slave_addr_start; + sdata.remove(0,1); r.append(uint8_t(addr)); if(sdata.size()>0){ r.append(sdata[0]); @@ -431,6 +441,122 @@ protpc_export(0x02, get_coder_code); +// 赋码任务需要写入uid +myarray cmd_coder_code2::cmd_pc_to_slave(myarray data) +{ + myarray ret; + const task_def *table=nullptr; + uint16_t params[10]={0}; + chip_mode=elec_extract_chip(check_plan()->get_plan_id()); + char year[10]={0}; + delay=data[3]|(data[4]<<8); + // 移除前4个字节使数据对齐 + data.remove(0,4); + memcpy(year,data.mid(1,4).data(),4); + qDebug("tran pc data to slave"); + for (int i=0;i data) +{ + myarray r; + 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())); + r.append(uint8_t(!syscfg()->coder_return_mode)); + for (int i=0;islave_addr_start; + sdata.remove(0,1); + r.append(uint8_t(addr)); + if(sdata.size()>0){ + err=sdata[0]; + }else{ + err=uint8_t(0xd0); + } + // 如果延时不对,则失败 + myarray sret=coder_slave_find_ret_data(sdata.mid(1),3,2); + uint16_t sdelay=sret[0]|(sret[1]<<8); + if(sdelay!=delay){ + if(err==0){ + err=10; + } + } + r.append(err); + // 添加工厂信息 + sret=coder_slave_find_ret_data(sdata.mid(1),4,4); + r.append(sret); + // 完整模式 + if(syscfg()->coder_return_mode){ + r.append(uid_codes[i].shell,13); + if(chip_mode==0){ + r.append(uid_codes[i].uid,15); + }else{ + r.append(uid_codes[i].uid,16); + } + } + r.append(uid_codes[i].psw,8); + } + + return r; +} + + +static HandlePc *get_coder_code2(){ + return new cmd_coder_code2(); +} +protpc_export(0x11, get_coder_code2); + @@ -476,6 +602,57 @@ protpc_export(0x41, get_coder_setrtv); + + + +// 批检仪检测并写入流水号,控制电机需要重载此函数 +int cmd_checker_check::dolater(int cmd, myarray data) +{ + prot_slave *slave=protSlave(); + mycfg *cfg_=syscfg(); + prot_m4 *m4 = protM4(); + busy=1; + connect(this, &cmd_checker_check::send_to_m4_signal, m4, &prot_m4::send_data_slot); + addrs=cmd_pc_to_addrs(data); + moter_down_cb_fun=[=](myarray str) + { + m4->del_irq_fun(moter_down_cb_fun,"moter down"); + { + // 这里开始检测 + qDebug("runtask."); + HandleBoardCast *b=new slave_cmd(); + bool ack=slave->set_boardcast_handle(addrs,b); + if(ack==false){ + qWarning("handle is busy."); + busy=0; + }else{ + connect(b,&HandleBoardCast::end_signal,this,&selfdev_runtask::slave_end_slot); + // 广播设置校准值,需使用新增命令 + b->cmd=cmd_slave(); + b->start(cmd_pc_to_slave(data)); + if(cmd_pc_recv()!=0){ + emit send_data_signal(cmd_pc_recv(),cmd_pc_recv_to_pc()); + } + } + } + }; + myarray moter_cmd=moter_ctrl("down"); + if(moter_cmd.size()==0){ + busy=0; + qWarning("moter failed."); + }else{ + m4->set_irq_fun(moter_down_cb_fun,"moter down"); + emit send_to_m4_signal(moter_cmd); + } + slave_acked.clear(); + for(int i=0;i data) myarray r; r.append(char(0)); for(int i=0;islave_addr_start; + sdata.remove(0,1); + qDebug()<<"checker check ret data:"< cmd_pc_to_addrs(myarray data){ + QList addr_list; + addrs=data[0]|(data[1]<<8)|(data[2]<<16); + for(int i=0;i<20;i++){ + if((addrs&(1< data); +protected: + int addrs; + int chip_mode; + uint16_t delay; + QList uid_codes; +}; + + + + + + + + // 设置电阻校准值 @@ -276,16 +332,26 @@ class cmd_checker_check : public selfdev_runtask public: cmd_checker_check():selfdev_runtask(){ } + ~cmd_checker_check(){ + if(moter_down_cb_fun!=nullptr){ + // 取消电机下降到位回调 + prot_m4 *m4 = protM4(); + if(m4!=nullptr) { + m4->del_irq_fun(moter_down_cb_fun,"moter "); + } + } + } + int dolater(int cmd, myarray data); // pc指令转从机 myarray cmd_pc_to_slave(myarray data); // pc指令生成从机列表 QList cmd_pc_to_addrs(myarray data){ QList addr_list; - addrs=0; + // addrs=0; int len=data.size(); for(int i=0;i data); protected: - int addrs; + // int addrs; int mode; + prot_m4_cb moter_down_cb_fun; +signals: + void send_to_m4_signal(myarray data); }; diff --git a/prot_cmd/cmd_pc.cpp b/prot_cmd/cmd_pc.cpp index 48123a3..45e465a 100644 --- a/prot_cmd/cmd_pc.cpp +++ b/prot_cmd/cmd_pc.cpp @@ -277,19 +277,32 @@ int selfdev_moter::dolater(int cmd, myarray data) prot_m4 *m4 = protM4(); mycfg *cfg_=syscfg(); connect(this, &selfdev_moter::send_to_m4_signal, m4, &prot_m4::send_data_slot); - if(data[0]==0x02){ - emit send_to_m4_signal(moter_ctrl("up")); - }else if(data[0]==0x03){ - emit send_to_m4_signal(moter_ctrl("down")); - }else if(data[0]==0x01){ - if(data.size()>=3){ - int count=(data[1])|(data[2]<<8); - cfg_->moter_count=20000+count; - qDebug("moter count=%d",cfg_->moter_count); - cfg_->save(); + if(cmd==0x40) + { + if(data[0]==0x02){ + emit send_to_m4_signal(moter_ctrl("up")); + }else if(data[0]==0x03){ + emit send_to_m4_signal(moter_ctrl("down")); + }else if(data[0]==0x01){ + if(data.size()>=3){ + int count=(data[1])|(data[2]<<8); + cfg_->moter_count=20000+count; + qDebug("moter count=%d",cfg_->moter_count); + cfg_->save(); + } } + emit send_data_signal(cmd,myarray(1,char(0))); + return 0; + }else if(cmd==0x47){ + myarray r; + r.append(uint8_t(0)); + int count=cfg_->moter_count-20000; + if(count<0) count=0; + r.append(uint8_t(count&0xff)); + r.append(uint8_t((count>>8)&0xff)); + emit send_data_signal(cmd,r); + return 0; } - emit send_data_signal(0x40,myarray(1,char(0))); return 0; } @@ -302,6 +315,15 @@ static HandlePc *get_selfdev_moter(){ } protpc_export(0x40, get_selfdev_moter); +protpc_export(0x47, get_selfdev_moter); + + + + + + + + @@ -853,8 +875,13 @@ void selfdev_runtask::slave_end_slot(int addr,int ack, slave_data data) { qDebug("selfdev runtask end."); for(int i=0;i