添加读取电机步数命令
添加新赋码仪检测命令,赋码仪注码命令 添加检测并写入流水号命令
This commit is contained in:
@@ -25,4 +25,7 @@
|
|||||||
2023.12.21
|
2023.12.21
|
||||||
实现赋码仪命令
|
实现赋码仪命令
|
||||||
升级小板程序失败时停止
|
升级小板程序失败时停止
|
||||||
|
2023.12.22
|
||||||
|
添加读取电机步数命令
|
||||||
|
添加新赋码仪检测命令,赋码仪注码命令
|
||||||
|
添加检测并写入流水号命令
|
||||||
|
@@ -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");
|
QString current_date_time = QDateTime::currentDateTime().toString("hh:mm:ss.zzz");
|
||||||
Q_UNUSED(current_date_time);
|
Q_UNUSED(current_date_time);
|
||||||
if(context.file!=0){
|
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{
|
}else{
|
||||||
fprintf(stderr,"%s | %s | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), localMsg.constData());
|
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);
|
QTextStream tWrite(g_debug.file);
|
||||||
if(context.file!=0){
|
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{
|
}else{
|
||||||
tWrite << QString::asprintf("%s | %s | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), localMsg.constData());
|
tWrite << QString::asprintf("%s | %s | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), localMsg.constData());
|
||||||
}
|
}
|
||||||
|
@@ -98,4 +98,6 @@ else: unix:!android: target.path = /opt/$${TARGET}/bin
|
|||||||
|
|
||||||
DISTFILES += \
|
DISTFILES += \
|
||||||
ReadMe.txt \
|
ReadMe.txt \
|
||||||
ReadMe.txt
|
ReadMe.txt \
|
||||||
|
info.json \
|
||||||
|
info.json
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define BUILD_DATE "2023-12-21 18:29:22"
|
#define BUILD_DATE "2023-12-22 18:08:01"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -392,7 +392,7 @@ int elec_extract_chip(int id)
|
|||||||
// 找到异常代码序号
|
// 找到异常代码序号
|
||||||
int elec_report_err(elec_judge_def *e)
|
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;
|
uint8_t index=0;
|
||||||
for (int i=0;i<sizeof(pro_table);i++){
|
for (int i=0;i<sizeof(pro_table);i++){
|
||||||
for(int j=0;j<ERR_LIST_LEN;j++){
|
for(int j=0;j<ERR_LIST_LEN;j++){
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"build_date": "2023-12-21 18:29:22",
|
"build_date": "2023-12-22 18:08:01",
|
||||||
"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.00"
|
"soft_version": "V2.01"
|
||||||
}
|
}
|
||||||
|
@@ -291,7 +291,7 @@ private:
|
|||||||
emit send_data_signal(0x1f,cmd,s);
|
emit send_data_signal(0x1f,cmd,s);
|
||||||
// timer_retry_->start(300);
|
// timer_retry_->start(300);
|
||||||
//emit timeout_start_retry_signal(300);
|
//emit timeout_start_retry_signal(300);
|
||||||
timeout_start_retry_cb(1000);
|
timeout_start_retry_cb(2000);
|
||||||
}else{
|
}else{
|
||||||
// timer_retry_->stop();
|
// timer_retry_->stop();
|
||||||
timeout_stop_retry();
|
timeout_stop_retry();
|
||||||
|
@@ -51,6 +51,7 @@ static const task_def g_ew_task_table[]={
|
|||||||
{"设置电阻校准值",37,1,1,0},
|
{"设置电阻校准值",37,1,1,0},
|
||||||
{"读取流水号",38,5,2,2},
|
{"读取流水号",38,5,2,2},
|
||||||
{"写入流水号",39,5,2,0},
|
{"写入流水号",39,5,2,0},
|
||||||
|
{"写固定延时",40,5,1,0},
|
||||||
{nullptr,0,0,0,0},
|
{nullptr,0,0,0,0},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -106,6 +107,7 @@ static const task_def g_jq_task_table[]={
|
|||||||
{"设置电阻校准值",43,1,1,0},
|
{"设置电阻校准值",43,1,1,0},
|
||||||
{"写入流水号",44,5,2,0},
|
{"写入流水号",44,5,2,0},
|
||||||
{"读取流水号",45,5,2,2},
|
{"读取流水号",45,5,2,2},
|
||||||
|
{"写固定延时",46,5,1,0},
|
||||||
{nullptr,0,0,0,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<data.size();)
|
for(int i=0;i<data.size();)
|
||||||
{
|
{
|
||||||
if(data[i]==task_index){
|
if(data[i]==task_index){
|
||||||
return data.mid(i+2,data[i+1]);
|
r=data.mid(i+2,data[i+1]);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
i+=2+data[i+1];
|
i+=2+data[i+1];
|
||||||
}
|
}
|
||||||
return myarray();
|
if(r.size()>=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<myarray> data)
|
|||||||
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=i+syscfg()->slave_addr_start;
|
int addr=sdata[0]-1+syscfg()->slave_addr_start;
|
||||||
|
sdata.remove(0,1);
|
||||||
r.append(uint8_t(addr));
|
r.append(uint8_t(addr));
|
||||||
if(sdata.size()>0){
|
if(sdata.size()>0){
|
||||||
r.append(sdata[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 cmd_coder_check2::cmd_pc_to_slave(myarray data)
|
||||||
{
|
{
|
||||||
myarray d;
|
myarray d;
|
||||||
int chip=elec_extract_chip(check_plan()->get_plan_id());
|
|
||||||
const task_def *table=nullptr;
|
const task_def *table=nullptr;
|
||||||
|
int chip=elec_extract_chip(check_plan()->get_plan_id());
|
||||||
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);
|
||||||
@@ -312,18 +323,16 @@ myarray cmd_coder_check2::ret_slave_to_pc(QList<myarray> data)
|
|||||||
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=i+syscfg()->slave_addr_start;
|
int addr=sdata[0]-1+syscfg()->slave_addr_start;
|
||||||
myarray sret=coder_slave_find_ret_data(sdata.mid(1),1);
|
sdata.remove(0,1);
|
||||||
|
myarray sret=coder_slave_find_ret_data(sdata.mid(1),1,4);
|
||||||
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(8,uint8_t(0));
|
||||||
}else{
|
}else{
|
||||||
r.append(sdata[0]);
|
r.append(sdata[0]);
|
||||||
if(sret.size()<4){
|
r.append(sret);
|
||||||
sret.append(4-sret.size(),uint8_t(0));
|
|
||||||
}
|
|
||||||
r.append(sret.left(4));
|
|
||||||
r.append(4,uint8_t(0));
|
r.append(4,uint8_t(0));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -404,7 +413,8 @@ myarray cmd_coder_code::ret_slave_to_pc(QList<myarray> data)
|
|||||||
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=i+syscfg()->slave_addr_start;
|
int addr=sdata[0]-1+syscfg()->slave_addr_start;
|
||||||
|
sdata.remove(0,1);
|
||||||
r.append(uint8_t(addr));
|
r.append(uint8_t(addr));
|
||||||
if(sdata.size()>0){
|
if(sdata.size()>0){
|
||||||
r.append(sdata[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<addrs;i++){
|
||||||
|
myarray d;
|
||||||
|
uid_code uid={{0},{0},{0},{0}};
|
||||||
|
memcpy(uid.shell,data.mid(5+i*14+1,13).data(),13);
|
||||||
|
if(check_shell_code(uid.shell)==1){
|
||||||
|
// 只有管壳码验证通过时才计算uid和密码
|
||||||
|
if(chip_mode!=0){
|
||||||
|
coder_shell_to_uid(year,uid.shell,uid.uid);
|
||||||
|
// 生成存储码
|
||||||
|
coder_uid_to_save(uid.uid,(uint8_t *)uid.uid_psw);
|
||||||
|
// 生成密码
|
||||||
|
GetPasswordByUidCode((uint8_t *)uid.uid,(uint8_t *)&uid.uid_psw[8]);
|
||||||
|
// 生成密码字符串
|
||||||
|
sprintf(uid.psw,"%02X%02X%02X%02X",uid.uid_psw[8],
|
||||||
|
uid.uid_psw[9],uid.uid_psw[10],uid.uid_psw[11]);
|
||||||
|
}else{
|
||||||
|
coder_shell_to_uid_jq(year,uid.shell,uid.uid);
|
||||||
|
// 生成存储码
|
||||||
|
UidCode_YM2JQ((PST_JQUID_TYPEDEF)uid.uid_psw,(PST_YMUID_TYPEDEF)uid.uid);
|
||||||
|
// 生成密码
|
||||||
|
JQ_GetPasswordByUidCode((uint8_t *)uid.uid,(uint8_t *)&uid.uid_psw[8]);
|
||||||
|
// 生成密码字符串
|
||||||
|
sprintf(uid.psw,"%02X%02X%02X%02X",uid.uid_psw[11],
|
||||||
|
uid.uid_psw[10],uid.uid_psw[9],uid.uid_psw[8]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
uid_codes.append(uid);
|
||||||
|
params[0]=(8)|(4<<8);
|
||||||
|
memcpy(¶ms[1],uid.uid_psw,12);
|
||||||
|
coder_add_task(d,"配置三码数据到小板",1,1,params);
|
||||||
|
params[0]=delay;
|
||||||
|
coder_add_task(d,"写固定延时",1,2,params);
|
||||||
|
coder_add_task(d,"读延时",2,3,params);
|
||||||
|
if(chip_mode==0){
|
||||||
|
uint16_t params[10]={20,4};
|
||||||
|
coder_add_task(d,"读OTP",2,4,params);
|
||||||
|
}else if(chip_mode==2){
|
||||||
|
uint16_t params[10]={9,4};
|
||||||
|
coder_add_task(d,"读MTP",2,4,params);
|
||||||
|
}
|
||||||
|
coder_slave_pack(d,i+1);
|
||||||
|
ret+=d;
|
||||||
|
}
|
||||||
|
// 检测模式1,返回异常代码和任务插槽数据
|
||||||
|
ret.insert(0,uint8_t(1));
|
||||||
|
qDebug("tran pc data to slave end");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 把从机回复的数据转化为上位机能理解的格式
|
||||||
|
myarray cmd_coder_code2::ret_slave_to_pc(QList<myarray> 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;i<data.size();i++)
|
||||||
|
{
|
||||||
|
myarray &sdata=data[i];
|
||||||
|
uint8_t err=0;
|
||||||
|
int addr=sdata[0]-1+syscfg()->slave_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<addrs.size();i++){
|
||||||
|
slave_acked.append(myarray());
|
||||||
|
}
|
||||||
|
slave_acked_num=0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 批检仪检测并写入流水号
|
// 批检仪检测并写入流水号
|
||||||
myarray cmd_checker_check::cmd_pc_to_slave(myarray data)
|
myarray cmd_checker_check::cmd_pc_to_slave(myarray data)
|
||||||
{
|
{
|
||||||
@@ -495,6 +672,7 @@ myarray cmd_checker_check::cmd_pc_to_slave(myarray data)
|
|||||||
|
|
||||||
// 检测模式0,返回原始检测结果
|
// 检测模式0,返回原始检测结果
|
||||||
ret.insert(0,uint8_t(0));
|
ret.insert(0,uint8_t(0));
|
||||||
|
// qDebug()<<"checker check pack data:"<<ret.toHex(' ');
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -504,7 +682,11 @@ myarray cmd_checker_check::ret_slave_to_pc(QList<myarray> data)
|
|||||||
myarray r;
|
myarray r;
|
||||||
r.append(char(0));
|
r.append(char(0));
|
||||||
for(int i=0;i<data.size();i++){
|
for(int i=0;i<data.size();i++){
|
||||||
r.append(tran_slave_to_selfdev_check(data[i]));
|
myarray &sdata=data[i];
|
||||||
|
int addr=sdata[0]-1+syscfg()->slave_addr_start;
|
||||||
|
sdata.remove(0,1);
|
||||||
|
qDebug()<<"checker check ret data:"<<sdata.toHex(' ');
|
||||||
|
r.append(tran_slave_to_selfdev_check(sdata));
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@@ -219,6 +219,62 @@ protected:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 赋码仪新赋码命令
|
||||||
|
class cmd_coder_code2 : public selfdev_runtask
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
cmd_coder_code2():selfdev_runtask(){
|
||||||
|
delay=0;
|
||||||
|
}
|
||||||
|
// pc指令转从机
|
||||||
|
myarray cmd_pc_to_slave(myarray data);
|
||||||
|
// pc指令生成从机列表
|
||||||
|
QList<int> cmd_pc_to_addrs(myarray data){
|
||||||
|
QList<int> addr_list;
|
||||||
|
addrs=data[0]|(data[1]<<8)|(data[2]<<16);
|
||||||
|
for(int i=0;i<20;i++){
|
||||||
|
if((addrs&(1<<i))!=0){
|
||||||
|
addr_list.append(i+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return addr_list;
|
||||||
|
}
|
||||||
|
// 从机发起命令
|
||||||
|
int cmd_slave(){
|
||||||
|
return 0x20;
|
||||||
|
}
|
||||||
|
// pc收到回复,返回0不回复
|
||||||
|
int cmd_pc_recv(){
|
||||||
|
return 0x02;
|
||||||
|
}
|
||||||
|
// 生成接收回复到pc
|
||||||
|
myarray cmd_pc_recv_to_pc(){
|
||||||
|
myarray r;
|
||||||
|
r.append(uint8_t(addrs));
|
||||||
|
r.append(uint8_t(0));
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
// pc回复命令,返回0不回复
|
||||||
|
int cmd_pc_ret(){
|
||||||
|
return 0x82;
|
||||||
|
}
|
||||||
|
// 从机返回转pc
|
||||||
|
myarray ret_slave_to_pc(QList<myarray> data);
|
||||||
|
protected:
|
||||||
|
int addrs;
|
||||||
|
int chip_mode;
|
||||||
|
uint16_t delay;
|
||||||
|
QList<uid_code> uid_codes;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 设置电阻校准值
|
// 设置电阻校准值
|
||||||
@@ -276,16 +332,26 @@ class cmd_checker_check : public selfdev_runtask
|
|||||||
public:
|
public:
|
||||||
cmd_checker_check():selfdev_runtask(){
|
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指令转从机
|
// pc指令转从机
|
||||||
myarray cmd_pc_to_slave(myarray data);
|
myarray cmd_pc_to_slave(myarray data);
|
||||||
// pc指令生成从机列表
|
// pc指令生成从机列表
|
||||||
QList<int> cmd_pc_to_addrs(myarray data){
|
QList<int> cmd_pc_to_addrs(myarray data){
|
||||||
QList<int> addr_list;
|
QList<int> addr_list;
|
||||||
addrs=0;
|
// addrs=0;
|
||||||
int len=data.size();
|
int len=data.size();
|
||||||
for(int i=0;i<len;i+=5){
|
for(int i=0;i<len;i+=5){
|
||||||
addr_list.append(data[i]);
|
addr_list.append(data[i]);
|
||||||
addrs|=1<<(data[i]-1);
|
// addrs|=1<<(data[i]-1);
|
||||||
}
|
}
|
||||||
return addr_list;
|
return addr_list;
|
||||||
}
|
}
|
||||||
@@ -310,8 +376,11 @@ public:
|
|||||||
// 从机返回转pc
|
// 从机返回转pc
|
||||||
myarray ret_slave_to_pc(QList<myarray> data);
|
myarray ret_slave_to_pc(QList<myarray> data);
|
||||||
protected:
|
protected:
|
||||||
int addrs;
|
// int addrs;
|
||||||
int mode;
|
int mode;
|
||||||
|
prot_m4_cb moter_down_cb_fun;
|
||||||
|
signals:
|
||||||
|
void send_to_m4_signal(myarray data);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -277,19 +277,32 @@ int selfdev_moter::dolater(int cmd, myarray data)
|
|||||||
prot_m4 *m4 = protM4();
|
prot_m4 *m4 = protM4();
|
||||||
mycfg *cfg_=syscfg();
|
mycfg *cfg_=syscfg();
|
||||||
connect(this, &selfdev_moter::send_to_m4_signal, m4, &prot_m4::send_data_slot);
|
connect(this, &selfdev_moter::send_to_m4_signal, m4, &prot_m4::send_data_slot);
|
||||||
if(data[0]==0x02){
|
if(cmd==0x40)
|
||||||
emit send_to_m4_signal(moter_ctrl("up"));
|
{
|
||||||
}else if(data[0]==0x03){
|
if(data[0]==0x02){
|
||||||
emit send_to_m4_signal(moter_ctrl("down"));
|
emit send_to_m4_signal(moter_ctrl("up"));
|
||||||
}else if(data[0]==0x01){
|
}else if(data[0]==0x03){
|
||||||
if(data.size()>=3){
|
emit send_to_m4_signal(moter_ctrl("down"));
|
||||||
int count=(data[1])|(data[2]<<8);
|
}else if(data[0]==0x01){
|
||||||
cfg_->moter_count=20000+count;
|
if(data.size()>=3){
|
||||||
qDebug("moter count=%d",cfg_->moter_count);
|
int count=(data[1])|(data[2]<<8);
|
||||||
cfg_->save();
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,6 +315,15 @@ static HandlePc *get_selfdev_moter(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
protpc_export(0x40, 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.");
|
qDebug("selfdev runtask end.");
|
||||||
for(int i=0;i<data.size();i++){
|
for(int i=0;i<data.size();i++){
|
||||||
|
qDebug("index=%d",i);
|
||||||
slave_ret slave=data.at(i);
|
slave_ret slave=data.at(i);
|
||||||
slave_acked.replace(slave.addr-1,slave.data);
|
qDebug("index=%d end",i);
|
||||||
|
// 数据的第一位是来源的地址
|
||||||
|
slave.data.insert(0,slave.addr);
|
||||||
|
slave_acked.replace(i,slave.data);
|
||||||
|
// qDebug("index=%d end 2",i);
|
||||||
slave_acked_num++;
|
slave_acked_num++;
|
||||||
}
|
}
|
||||||
if(cmd_pc_ret()!=0){
|
if(cmd_pc_ret()!=0){
|
||||||
|
@@ -9,7 +9,8 @@
|
|||||||
// 把小板的返回数据转化为自研批检仪上位机的格式
|
// 把小板的返回数据转化为自研批检仪上位机的格式
|
||||||
myarray tran_slave_to_selfdev_check(myarray &data);
|
myarray tran_slave_to_selfdev_check(myarray &data);
|
||||||
|
|
||||||
|
// 电机控制
|
||||||
|
myarray moter_ctrl(myarray op);
|
||||||
|
|
||||||
// 检测 自研批检仪
|
// 检测 自研批检仪
|
||||||
class selfdev_check : public HandlePc
|
class selfdev_check : public HandlePc
|
||||||
|
@@ -0,0 +1 @@
|
|||||||
|
V2.00 重构主板程序,添加检测并写入流水号命令,只支持V2.09及以上的小板程序
|
Reference in New Issue
Block a user