自动检测指令0x44不读取流水号

解决新赋码指令回复指令不对的问题
  解决tcp不上报心跳的问题
This commit is contained in:
ranchuan
2024-01-13 11:48:21 +08:00
parent 84bbe6ed3e
commit f00a2b79f0
8 changed files with 124 additions and 22 deletions

View File

@@ -57,6 +57,13 @@
取消一些通信日志打印
2024.1.8
V2.04 支持新的can帧协议解决上报数据丢失的问题
2024.1.10
V2.05 修改赋码仪0x900x91指令上报格式模块类型字段移到每个模块数据域中
0x900x91指令可以识别EJ、EQ模块类型
2024.1.11
自动检测指令0x44不读取流水号
解决新赋码指令回复指令不对的问题
解决tcp不上报心跳的问题

View File

@@ -6,7 +6,7 @@
#define BUILD_DATE "2024-01-08 10:35:57"
#define BUILD_DATE "2024-01-11 17:54:49"

View File

@@ -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"
}

View File

@@ -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<myarray> 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;i<data.size();i++)
{
myarray &sdata=data[i];
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);
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:"<<ret.toHex(' ');
// qDebug()<<"slave_data:"<<ret.toHex(' ');
return ret;
}
@@ -516,7 +551,6 @@ myarray cmd_coder_code2::ret_slave_to_pc(QList<myarray> 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<myarray> 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);

View File

@@ -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

View File

@@ -169,6 +169,7 @@ void selfdev_check::slave_end_slot(int addr,int ack, myarray data)
r.append(char(0));
for(int i=0;i<slave_acked.size();i++){
r.append(tran_slave_to_selfdev_check(slave_acked[i]));
r.append(4,uint8_t(0));
}
emit send_data_signal(0x31,r);
busy=0;
@@ -178,7 +179,7 @@ void selfdev_check::slave_end_slot(int addr,int ack, myarray data)
static HandlePc *get_selfdev_check(){
return new selfdev_check();
}
//protpc_export(0x30, get_selfdev_check);
// protpc_export(0x49, get_selfdev_check);
@@ -685,7 +686,7 @@ myarray bootinfo_fill_local(void)
memcpy(d,&temp32,4);d+=4;
myarray arry((char *)d_free,sizeof(local_bootinfo));
free(d_free);
qDebug()<<"local data="<<arry.toHex(' ');
// qDebug()<<"local data="<<arry.toHex(' ');
return arry;
}

View File

@@ -35,7 +35,10 @@ void keep_live::init()
mycfg *cfg_=syscfg();
if_tcp *tcp=static_cast<if_tcp *>(if_tcp_get());
if(cfg_->tcp_enable!=true){
qDebug("keeplive not init.");
return;
}else{
qDebug("keeplive init.");
}
if(timer_==nullptr){
timer_=new QTimer();
@@ -50,15 +53,18 @@ void keep_live::init()
void keep_live::connected_slot()
{
// qDebug("keeplive connected.");
if(timer_!=nullptr){
timer_->setInterval(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;

View File

@@ -1 +1,2 @@
V2.04 可以解析新的can协议帧
V2.05 修改赋码仪0x900x91指令上报格式模块类型字段移到每个模块数据域中
0x900x91指令可以识别EJ、EQ模块类型