自动检测指令0x44不读取流水号
解决新赋码指令回复指令不对的问题 解决tcp不上报心跳的问题
This commit is contained in:
@@ -57,6 +57,13 @@
|
|||||||
取消一些通信日志打印
|
取消一些通信日志打印
|
||||||
2024.1.8
|
2024.1.8
|
||||||
V2.04 支持新的can帧协议,解决上报数据丢失的问题
|
V2.04 支持新的can帧协议,解决上报数据丢失的问题
|
||||||
|
2024.1.10
|
||||||
|
V2.05 修改赋码仪0x90,0x91指令上报格式,模块类型字段移到每个模块数据域中
|
||||||
|
0x90,0x91指令可以识别EJ、EQ模块类型
|
||||||
|
2024.1.11
|
||||||
|
自动检测指令0x44不读取流水号
|
||||||
|
解决新赋码指令回复指令不对的问题
|
||||||
|
解决tcp不上报心跳的问题
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define BUILD_DATE "2024-01-08 10:35:57"
|
#define BUILD_DATE "2024-01-11 17:54:49"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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",
|
"hard_version": "MHPZ2_V1.00",
|
||||||
"private": [
|
"private": [
|
||||||
"info.json",
|
"info.json",
|
||||||
"json.lua",
|
"json.lua",
|
||||||
"prints.lua"
|
"prints.lua"
|
||||||
],
|
],
|
||||||
"soft_version": "V2.04"
|
"soft_version": "V2.05"
|
||||||
}
|
}
|
||||||
|
@@ -71,7 +71,7 @@ static const task_def g_jq_task_table[]={
|
|||||||
{"读取芯片代码",6,5,0,1},
|
{"读取芯片代码",6,5,0,1},
|
||||||
{"OTP检测",7,5,3,0},
|
{"OTP检测",7,5,3,0},
|
||||||
{"工厂测试检测",8,5,0,0},
|
{"工厂测试检测",8,5,0,0},
|
||||||
{"读取状态",9,5,1,0},
|
{"读取状态",9,5,1,1},
|
||||||
{"写工厂信息",10,5,2,0},
|
{"写工厂信息",10,5,2,0},
|
||||||
{"充能统计",11,5,5,4},
|
{"充能统计",11,5,5,4},
|
||||||
{"充电电压检测",12,5,2,1},
|
{"充电电压检测",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());
|
int chip=elec_extract_chip(check_plan()->get_plan_id());
|
||||||
const char table[]="JXW";
|
const char table[]="JXWQ";
|
||||||
if(chip>=0&&chip<=2){
|
if(states&&((states&0x04)==0)) chip=3;
|
||||||
|
if(chip>=0&&chip<=3){
|
||||||
return table[chip];
|
return table[chip];
|
||||||
}
|
}
|
||||||
return 0;
|
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成功
|
// 包装为一个小板的数据,返回0成功
|
||||||
// 包装前需要先添加任务
|
// 包装前需要先添加任务
|
||||||
int coder_slave_pack(myarray &d,int addr)
|
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{
|
}else{
|
||||||
int len=size-r.size();
|
int len=size-r.size();
|
||||||
r.append(len,uint8_t(0));
|
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;
|
return r;
|
||||||
}
|
}
|
||||||
@@ -307,6 +337,8 @@ myarray cmd_coder_check2::cmd_pc_to_slave(myarray data)
|
|||||||
if(chip==0){
|
if(chip==0){
|
||||||
uint16_t params[10]={20,4};
|
uint16_t params[10]={20,4};
|
||||||
coder_add_task(d,"读OTP",1,1,params);
|
coder_add_task(d,"读OTP",1,1,params);
|
||||||
|
params[0]=0;
|
||||||
|
coder_add_task(d,"读取状态",1,2,params);
|
||||||
}else if(chip==2){
|
}else if(chip==2){
|
||||||
uint16_t params[10]={9,4};
|
uint16_t params[10]={9,4};
|
||||||
coder_add_task(d,"读MTP",1,1,params);
|
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&0xff));
|
||||||
r.append(uint8_t((addrs>>8)&0xff));
|
r.append(uint8_t((addrs>>8)&0xff));
|
||||||
r.append(uint8_t((addrs>>16)&0xff));
|
r.append(uint8_t((addrs>>16)&0xff));
|
||||||
r.append(uint8_t(coder_chip_type()));
|
|
||||||
for (int i=0;i<data.size();i++)
|
for (int i=0;i<data.size();i++)
|
||||||
{
|
{
|
||||||
myarray &sdata=data[i];
|
myarray &sdata=data[i];
|
||||||
int addr=sdata[0]-1+syscfg()->slave_addr_start;
|
int addr=sdata[0]-1+syscfg()->slave_addr_start;
|
||||||
sdata.remove(0,1);
|
sdata.remove(0,1);
|
||||||
myarray sret=coder_slave_find_ret_data(sdata.mid(1),1,4);
|
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));
|
r.append(uint8_t(addr));
|
||||||
if(sdata.size()==0){
|
if(sdata.size()==0){
|
||||||
r.append(uint8_t(0xd0));
|
r.append(uint8_t(0xd0));
|
||||||
r.append(8,uint8_t(0));
|
r.append(9,uint8_t(0));
|
||||||
}else{
|
}else{
|
||||||
r.append(sdata[0]);
|
r.append(sdata[0]);
|
||||||
|
r.append(uint8_t(coder_chip_type(state[0])));
|
||||||
r.append(sret);
|
r.append(sret);
|
||||||
r.append(4,uint8_t(0));
|
r.append(4,uint8_t(0));
|
||||||
}
|
}
|
||||||
@@ -495,6 +528,8 @@ myarray cmd_coder_code2::cmd_pc_to_slave(myarray data)
|
|||||||
if(chip_mode==0){
|
if(chip_mode==0){
|
||||||
uint16_t params[10]={20,4};
|
uint16_t params[10]={20,4};
|
||||||
coder_add_task(d,"读OTP",2,4,params);
|
coder_add_task(d,"读OTP",2,4,params);
|
||||||
|
params[0]=0;
|
||||||
|
coder_add_task(d,"读取状态",2,5,params);
|
||||||
}else if(chip_mode==2){
|
}else if(chip_mode==2){
|
||||||
uint16_t params[10]={9,4};
|
uint16_t params[10]={9,4};
|
||||||
coder_add_task(d,"读MTP",2,4,params);
|
coder_add_task(d,"读MTP",2,4,params);
|
||||||
@@ -505,7 +540,7 @@ myarray cmd_coder_code2::cmd_pc_to_slave(myarray data)
|
|||||||
// 检测模式1,返回异常代码和任务插槽数据
|
// 检测模式1,返回异常代码和任务插槽数据
|
||||||
ret.insert(0,uint8_t(1));
|
ret.insert(0,uint8_t(1));
|
||||||
qDebug("tran pc data to slave end");
|
qDebug("tran pc data to slave end");
|
||||||
qDebug()<<"slave_data:"<<ret.toHex(' ');
|
// qDebug()<<"slave_data:"<<ret.toHex(' ');
|
||||||
return ret;
|
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&0xff));
|
||||||
r.append(uint8_t((addrs>>8)&0xff));
|
r.append(uint8_t((addrs>>8)&0xff));
|
||||||
r.append(uint8_t((addrs>>16)&0xff));
|
r.append(uint8_t((addrs>>16)&0xff));
|
||||||
r.append(uint8_t(coder_chip_type()));
|
|
||||||
// coder_return_mode 1是完整模式,协议0是完整模式
|
// coder_return_mode 1是完整模式,协议0是完整模式
|
||||||
if(syscfg()->coder_return_mode){
|
if(syscfg()->coder_return_mode){
|
||||||
r.append(uint8_t(0));
|
r.append(uint8_t(0));
|
||||||
@@ -554,6 +588,8 @@ myarray cmd_coder_code2::ret_slave_to_pc(QList<myarray> data)
|
|||||||
r.append(err);
|
r.append(err);
|
||||||
// 添加工厂信息
|
// 添加工厂信息
|
||||||
sret=coder_slave_find_ret_data(sdata,4,4);
|
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);
|
r.append(sret);
|
||||||
// 完整模式
|
// 完整模式
|
||||||
if(syscfg()->coder_return_mode){
|
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(){
|
static HandlePc *get_checker_check3(){
|
||||||
return new cmd_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);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -251,12 +251,14 @@ public:
|
|||||||
}
|
}
|
||||||
// pc收到回复,返回0不回复
|
// pc收到回复,返回0不回复
|
||||||
int cmd_pc_recv(){
|
int cmd_pc_recv(){
|
||||||
return 0x02;
|
return 0x11;
|
||||||
}
|
}
|
||||||
// 生成接收回复到pc
|
// 生成接收回复到pc
|
||||||
myarray cmd_pc_recv_to_pc(){
|
myarray cmd_pc_recv_to_pc(){
|
||||||
myarray r;
|
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));
|
r.append(uint8_t(0));
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
@@ -418,7 +420,7 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 批检仪自动检测并读取模块流水号
|
// 批检仪检测不读取流水号
|
||||||
class cmd_checker_check3 : public cmd_checker_check2
|
class cmd_checker_check3 : public cmd_checker_check2
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@@ -428,6 +430,25 @@ public:
|
|||||||
~cmd_checker_check3(){
|
~cmd_checker_check3(){
|
||||||
}
|
}
|
||||||
// pc收到回复,返回0不回复
|
// 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(){
|
int cmd_pc_recv(){
|
||||||
return 0x44;
|
return 0x44;
|
||||||
}
|
}
|
||||||
@@ -437,4 +458,5 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // CMD_CODER_H
|
#endif // CMD_CODER_H
|
||||||
|
@@ -169,6 +169,7 @@ void selfdev_check::slave_end_slot(int addr,int ack, myarray data)
|
|||||||
r.append(char(0));
|
r.append(char(0));
|
||||||
for(int i=0;i<slave_acked.size();i++){
|
for(int i=0;i<slave_acked.size();i++){
|
||||||
r.append(tran_slave_to_selfdev_check(slave_acked[i]));
|
r.append(tran_slave_to_selfdev_check(slave_acked[i]));
|
||||||
|
r.append(4,uint8_t(0));
|
||||||
}
|
}
|
||||||
emit send_data_signal(0x31,r);
|
emit send_data_signal(0x31,r);
|
||||||
busy=0;
|
busy=0;
|
||||||
@@ -178,7 +179,7 @@ void selfdev_check::slave_end_slot(int addr,int ack, myarray data)
|
|||||||
static HandlePc *get_selfdev_check(){
|
static HandlePc *get_selfdev_check(){
|
||||||
return new 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;
|
memcpy(d,&temp32,4);d+=4;
|
||||||
myarray arry((char *)d_free,sizeof(local_bootinfo));
|
myarray arry((char *)d_free,sizeof(local_bootinfo));
|
||||||
free(d_free);
|
free(d_free);
|
||||||
qDebug()<<"local data="<<arry.toHex(' ');
|
// qDebug()<<"local data="<<arry.toHex(' ');
|
||||||
return arry;
|
return arry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -35,7 +35,10 @@ void keep_live::init()
|
|||||||
mycfg *cfg_=syscfg();
|
mycfg *cfg_=syscfg();
|
||||||
if_tcp *tcp=static_cast<if_tcp *>(if_tcp_get());
|
if_tcp *tcp=static_cast<if_tcp *>(if_tcp_get());
|
||||||
if(cfg_->tcp_enable!=true){
|
if(cfg_->tcp_enable!=true){
|
||||||
|
qDebug("keeplive not init.");
|
||||||
return;
|
return;
|
||||||
|
}else{
|
||||||
|
qDebug("keeplive init.");
|
||||||
}
|
}
|
||||||
if(timer_==nullptr){
|
if(timer_==nullptr){
|
||||||
timer_=new QTimer();
|
timer_=new QTimer();
|
||||||
@@ -50,15 +53,18 @@ void keep_live::init()
|
|||||||
|
|
||||||
void keep_live::connected_slot()
|
void keep_live::connected_slot()
|
||||||
{
|
{
|
||||||
|
// qDebug("keeplive connected.");
|
||||||
if(timer_!=nullptr){
|
if(timer_!=nullptr){
|
||||||
timer_->setInterval(30*1000);
|
timer_->setInterval(1*1000);
|
||||||
timer_->start();
|
timer_->start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void keep_live::recv_slot()
|
void keep_live::recv_slot()
|
||||||
{
|
{
|
||||||
|
// qDebug("keeplive recv.");
|
||||||
if(timer_!=nullptr){
|
if(timer_!=nullptr){
|
||||||
|
timer_->setInterval(30*1000);
|
||||||
timer_->start();
|
timer_->start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -91,6 +97,7 @@ void keep_coder::timeout_slot(){
|
|||||||
data.append(uint8_t(0xff));
|
data.append(uint8_t(0xff));
|
||||||
data.append(uint8_t(0x03));
|
data.append(uint8_t(0x03));
|
||||||
pc_->send_data_slot(uint8_t(0x8a),data);
|
pc_->send_data_slot(uint8_t(0x8a),data);
|
||||||
|
// qDebug("coder keeplive.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -106,6 +113,11 @@ keep_live *KeepLive()
|
|||||||
kp=new keep_checker();
|
kp=new keep_checker();
|
||||||
}else if(cfg_->device_type.contains("coder",Qt::CaseInsensitive)==true){
|
}else if(cfg_->device_type.contains("coder",Qt::CaseInsensitive)==true){
|
||||||
kp=new keep_coder();
|
kp=new keep_coder();
|
||||||
|
}else{
|
||||||
|
qWarning("device type err,not creat keeplive.");
|
||||||
|
}
|
||||||
|
if(kp!=nullptr){
|
||||||
|
QTimer::singleShot(0, kp, &keep_live::init);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return kp;
|
return kp;
|
||||||
|
@@ -1 +1,2 @@
|
|||||||
V2.04 可以解析新的can协议帧
|
V2.05 修改赋码仪0x90,0x91指令上报格式,模块类型字段移到每个模块数据域中
|
||||||
|
0x90,0x91指令可以识别EJ、EQ模块类型
|
Reference in New Issue
Block a user