广播命令可以接收各个从机的返回数据
This commit is contained in:
@@ -10,5 +10,6 @@
|
|||||||
广播方式升级从机成功
|
广播方式升级从机成功
|
||||||
2023.12.7
|
2023.12.7
|
||||||
批检仪检测流程验证成功
|
批检仪检测流程验证成功
|
||||||
|
2023.12.8
|
||||||
|
广播命令可以接收各个从机的返回数据,计划将所有命令转化为广播命令
|
||||||
|
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define BUILD_DATE "2023-12-07 18:27:08"
|
#define BUILD_DATE "2023-12-08 10:04:55"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"build_date": "2023-12-07 18:27:08",
|
"build_date": "2023-12-08 10:04:55",
|
||||||
"hard_version": "MHPZ2_V1.00",
|
"hard_version": "MHPZ2_V1.00",
|
||||||
"private": [
|
"private": [
|
||||||
"info.json",
|
"info.json",
|
||||||
|
@@ -25,6 +25,8 @@ void prot_slave::init()
|
|||||||
}else{
|
}else{
|
||||||
if((broadcast_!=nullptr)&&(broadcast_->busy)){
|
if((broadcast_!=nullptr)&&(broadcast_->busy)){
|
||||||
broadcast_->addr_response|=1<<(src-1);
|
broadcast_->addr_response|=1<<(src-1);
|
||||||
|
// 存储从机的数据
|
||||||
|
broadcast_->ret_data[src-1]=data;
|
||||||
if(broadcast_->check_response()==true){
|
if(broadcast_->check_response()==true){
|
||||||
// broadcast_->dolater(broadcast_->cmd,data);
|
// broadcast_->dolater(broadcast_->cmd,data);
|
||||||
emit boardcast_dolater_signal(broadcast_->cmd,data);
|
emit boardcast_dolater_signal(broadcast_->cmd,data);
|
||||||
|
@@ -102,11 +102,46 @@ signals:
|
|||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
// using namespace std::placeholders;
|
// using namespace std::placeholders;
|
||||||
|
class slave_data;
|
||||||
typedef std::function<void(int addr,int ack,myarray data)> prots_end_cbfun;
|
typedef std::function<void(int addr,int ack,slave_data data)> prots_end_cbfun;
|
||||||
typedef std::function<void(int rate,mystring data)> prots_rate_cbfun;
|
typedef std::function<void(int rate,mystring data)> prots_rate_cbfun;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct{
|
||||||
|
int addr;
|
||||||
|
myarray data;
|
||||||
|
}slave_ret;
|
||||||
|
|
||||||
|
// 定义保存从机数据的类
|
||||||
|
class slave_data{
|
||||||
|
public:
|
||||||
|
QList<slave_ret> data;
|
||||||
|
// 重载括号操作符,index为地址-1
|
||||||
|
myarray &operator [](int index){
|
||||||
|
for(int i=0;i<data.size();i++){
|
||||||
|
if(data[i].addr==(index+1)){
|
||||||
|
return data[i].data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
slave_ret r;
|
||||||
|
r.addr=index+1;
|
||||||
|
data.append(r);
|
||||||
|
return data.last().data;
|
||||||
|
}
|
||||||
|
// 清除
|
||||||
|
void clear(){
|
||||||
|
data.clear();
|
||||||
|
}
|
||||||
|
int size(){
|
||||||
|
return data.size();
|
||||||
|
}
|
||||||
|
slave_ret &at(int index){
|
||||||
|
return data[index];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class HandleBoardCast : public QObject
|
class HandleBoardCast : public QObject
|
||||||
@@ -140,18 +175,31 @@ public:
|
|||||||
int addr;
|
int addr;
|
||||||
int addr_response;
|
int addr_response;
|
||||||
int cmd;
|
int cmd;
|
||||||
|
slave_data ret_data;
|
||||||
public:
|
public:
|
||||||
// 判断是否所有从机都返回
|
// 判断是否所有从机都返回
|
||||||
bool check_response(){
|
bool check_response(){
|
||||||
return (addr^addr_response)==0?true:false;
|
return (addr^addr_response)==0?true:false;
|
||||||
}
|
}
|
||||||
// 把地址列表转化为bit
|
// 把地址列表转化为bit
|
||||||
void trun_list_to_bit(QList<int> addrs){
|
int trun_list_to_bit(QList<int> addrs){
|
||||||
addr=0;
|
addr=0;
|
||||||
foreach(int adr,addrs){
|
foreach(int adr,addrs){
|
||||||
addr|=1<<(adr-1);
|
addr|=1<<(adr-1);
|
||||||
}
|
}
|
||||||
|
return addr;
|
||||||
}
|
}
|
||||||
|
// 把bit转化为地址列表
|
||||||
|
QList<int> trun_bit_to_list(int addrs){
|
||||||
|
QList<int> l;
|
||||||
|
for(int i=0;i<32;i++){
|
||||||
|
if(addrs&(1<<i)){
|
||||||
|
l.append(i+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return l;
|
||||||
|
}
|
||||||
|
|
||||||
void set_cbfun(prots_end_cbfun end_fun,prots_rate_cbfun rate_fun){
|
void set_cbfun(prots_end_cbfun end_fun,prots_rate_cbfun rate_fun){
|
||||||
this->end_cb=end_fun;
|
this->end_cb=end_fun;
|
||||||
this->rate_cb=rate_fun;
|
this->rate_cb=rate_fun;
|
||||||
@@ -168,6 +216,7 @@ protected:
|
|||||||
this->data_send=data;
|
this->data_send=data;
|
||||||
this->times_retry=times;
|
this->times_retry=times;
|
||||||
this->addr_response=0;
|
this->addr_response=0;
|
||||||
|
this->ret_data.clear();
|
||||||
if(timer_retry_==nullptr){
|
if(timer_retry_==nullptr){
|
||||||
timer_retry_=new QTimer();
|
timer_retry_=new QTimer();
|
||||||
connect(timer_retry_,&QTimer::timeout,this,&HandleBoardCast::timeout_retry);
|
connect(timer_retry_,&QTimer::timeout,this,&HandleBoardCast::timeout_retry);
|
||||||
@@ -180,7 +229,7 @@ protected:
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
// 发送操作结束信号
|
// 发送操作结束信号
|
||||||
int end(int ack,myarray data){
|
int end(int ack,slave_data data){
|
||||||
emit end_signal(0x1f,ack,data);
|
emit end_signal(0x1f,ack,data);
|
||||||
if(end_cb!=nullptr){
|
if(end_cb!=nullptr){
|
||||||
end_cb(0x1f,ack,data);
|
end_cb(0x1f,ack,data);
|
||||||
@@ -252,12 +301,12 @@ private:
|
|||||||
QTimer *timer_;
|
QTimer *timer_;
|
||||||
QTimer *timer_retry_;
|
QTimer *timer_retry_;
|
||||||
int times_retry;
|
int times_retry;
|
||||||
myarray data_send;
|
myarray data_send;// 发送的数据
|
||||||
prots_end_cbfun end_cb;
|
prots_end_cbfun end_cb;
|
||||||
prots_rate_cbfun rate_cb;
|
prots_rate_cbfun rate_cb;
|
||||||
signals:
|
signals:
|
||||||
void send_data_signal(int addr, int cmd, myarray data);
|
void send_data_signal(int addr, int cmd, myarray data);
|
||||||
void end_signal(int addr,int ack,myarray data);
|
void end_signal(int addr,int ack,slave_data data);
|
||||||
void rate_signal(int rate,mystring str);
|
void rate_signal(int rate,mystring str);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -24,7 +24,7 @@ void rate_slot(int rate,mystring str)
|
|||||||
strs=strs.arg(rate).arg(str);
|
strs=strs.arg(rate).arg(str);
|
||||||
c->send(strs.data());
|
c->send(strs.data());
|
||||||
}
|
}
|
||||||
void end_slot(int addr,int ack,myarray data)
|
void end_slot(int addr,int ack,slave_data data)
|
||||||
{
|
{
|
||||||
command *c=command_start();
|
command *c=command_start();
|
||||||
mystring strs("ack:%1,%2");
|
mystring strs("ack:%1,%2");
|
||||||
@@ -101,7 +101,7 @@ static void mcu_cmdlines(QList<myarray> args)
|
|||||||
if(ack==false){
|
if(ack==false){
|
||||||
qWarning("handle is busy.");
|
qWarning("handle is busy.");
|
||||||
}else{
|
}else{
|
||||||
b->set_cbfun([=](int addr,int ack,myarray data){
|
b->set_cbfun([=](int addr,int ack,slave_data data){
|
||||||
end_slot(addr,!ack,data);
|
end_slot(addr,!ack,data);
|
||||||
},[=](int rate,mystring str){
|
},[=](int rate,mystring str){
|
||||||
rate_slot(rate,str);
|
rate_slot(rate,str);
|
||||||
@@ -124,7 +124,7 @@ static void mcu_cmdlines(QList<myarray> args)
|
|||||||
if(ack==false){
|
if(ack==false){
|
||||||
qWarning("handle is busy.");
|
qWarning("handle is busy.");
|
||||||
}else{
|
}else{
|
||||||
b->set_cbfun([=](int addr,int ack,myarray data){
|
b->set_cbfun([=](int addr,int ack,slave_data data){
|
||||||
end_slot(addr,!ack,data);
|
end_slot(addr,!ack,data);
|
||||||
},[=](int rate,mystring str){
|
},[=](int rate,mystring str){
|
||||||
rate_slot(rate,str);
|
rate_slot(rate,str);
|
||||||
@@ -149,7 +149,7 @@ static void mcu_cmdlines(QList<myarray> args)
|
|||||||
if(ack==false){
|
if(ack==false){
|
||||||
qWarning("handle is busy.");
|
qWarning("handle is busy.");
|
||||||
}else{
|
}else{
|
||||||
b->set_cbfun([=](int addr,int ack,myarray data){
|
b->set_cbfun([=](int addr,int ack,slave_data data){
|
||||||
end_slot(addr,!ack,data);
|
end_slot(addr,!ack,data);
|
||||||
},[=](int rate,mystring str){
|
},[=](int rate,mystring str){
|
||||||
rate_slot(rate,str);
|
rate_slot(rate,str);
|
||||||
|
@@ -272,7 +272,7 @@ void selfdev_slaveupdate::timeout(){
|
|||||||
qDebug("slave update timeout");
|
qDebug("slave update timeout");
|
||||||
}
|
}
|
||||||
|
|
||||||
void selfdev_slaveupdate::slave_end_slot(int addr,int ack, myarray data)
|
void selfdev_slaveupdate::slave_end_slot(int addr,int ack, slave_data data)
|
||||||
{
|
{
|
||||||
qDebug("slave update end,ack=%d",ack);
|
qDebug("slave update end,ack=%d",ack);
|
||||||
busy=0;
|
busy=0;
|
||||||
@@ -348,7 +348,7 @@ void selfdev_update_scheme::timeout(){
|
|||||||
qDebug("slave update timeout");
|
qDebug("slave update timeout");
|
||||||
}
|
}
|
||||||
|
|
||||||
void selfdev_update_scheme::slave_end_slot(int addr,int ack, myarray data)
|
void selfdev_update_scheme::slave_end_slot(int addr,int ack, slave_data data)
|
||||||
{
|
{
|
||||||
qDebug("slave update end,ack=%d",ack);
|
qDebug("slave update end,ack=%d",ack);
|
||||||
busy=0;
|
busy=0;
|
||||||
@@ -563,6 +563,27 @@ static myarray slave_to_bootinfo_byte(myarray data){
|
|||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//void selfdev_bootinfo::slave_end_slot(int addr,int ack, slave_data data)
|
||||||
|
//{
|
||||||
|
// if(addr<=0||addr>slave_acked.size()){
|
||||||
|
// qWarning("slave addr err:%d",addr);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// for(int i=0;i<data.size();i++){
|
||||||
|
// slave_ret slave=data.at(i);
|
||||||
|
// slave_acked.replace(slave.addr-1,slave.data);
|
||||||
|
// slave_acked_num++;
|
||||||
|
// myarray r;
|
||||||
|
// r.append(char(0));
|
||||||
|
// r+=bootinfo_fill_local();
|
||||||
|
// for(int i=0;i<slave_acked.size();i++){
|
||||||
|
// r.append(slave_to_bootinfo_byte(slave_acked[i]));
|
||||||
|
// }
|
||||||
|
// emit send_data_signal(0x34,r);
|
||||||
|
// busy=0;
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
void selfdev_bootinfo::slave_end_slot(int addr,int ack, myarray data)
|
void selfdev_bootinfo::slave_end_slot(int addr,int ack, myarray data)
|
||||||
{
|
{
|
||||||
if(addr<=0||addr>slave_acked.size()){
|
if(addr<=0||addr>slave_acked.size()){
|
||||||
@@ -583,6 +604,8 @@ void selfdev_bootinfo::slave_end_slot(int addr,int ack, myarray data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static HandlePc *get_selfdev_bootinfo(){
|
static HandlePc *get_selfdev_bootinfo(){
|
||||||
return new selfdev_bootinfo();
|
return new selfdev_bootinfo();
|
||||||
}
|
}
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "prot/prot_pc.h"
|
#include "prot/prot_pc.h"
|
||||||
#include "prot/prot_m4.h"
|
#include "prot/prot_m4.h"
|
||||||
|
#include "prot_cmd/cmd_slave.h"
|
||||||
|
|
||||||
|
|
||||||
// 检测 自研批检仪
|
// 检测 自研批检仪
|
||||||
@@ -80,7 +81,7 @@ public:
|
|||||||
int dolater(int cmd, myarray data);
|
int dolater(int cmd, myarray data);
|
||||||
void timeout();
|
void timeout();
|
||||||
public slots:
|
public slots:
|
||||||
void slave_end_slot(int addr,int ack, myarray data);
|
void slave_end_slot(int addr,int ack, slave_data data);
|
||||||
signals:
|
signals:
|
||||||
void send_to_m4_signal(myarray data);
|
void send_to_m4_signal(myarray data);
|
||||||
};
|
};
|
||||||
@@ -100,7 +101,7 @@ public:
|
|||||||
int dolater(int cmd, myarray data);
|
int dolater(int cmd, myarray data);
|
||||||
void timeout();
|
void timeout();
|
||||||
public slots:
|
public slots:
|
||||||
void slave_end_slot(int addr,int ack, myarray data);
|
void slave_end_slot(int addr,int ack, slave_data data);
|
||||||
signals:
|
signals:
|
||||||
void send_to_m4_signal(myarray data);
|
void send_to_m4_signal(myarray data);
|
||||||
};
|
};
|
||||||
@@ -147,6 +148,7 @@ public:
|
|||||||
int dolater(int cmd, myarray data);
|
int dolater(int cmd, myarray data);
|
||||||
void timeout();
|
void timeout();
|
||||||
public slots:
|
public slots:
|
||||||
|
// void slave_end_slot(int addr,int ack, slave_data data);
|
||||||
void slave_end_slot(int addr,int ack, myarray data);
|
void slave_end_slot(int addr,int ack, myarray data);
|
||||||
protected:
|
protected:
|
||||||
QList<myarray> slave_acked;
|
QList<myarray> slave_acked;
|
||||||
|
@@ -52,6 +52,54 @@ int slave_check::dolater(int cmd, myarray data)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int slave_check2::start(myarray data)
|
||||||
|
{
|
||||||
|
mycfg *cfg_=syscfg();
|
||||||
|
check_cfg *ccfg_=check_plan();
|
||||||
|
int timeout=ccfg_->get_check_time_out()*1000;
|
||||||
|
busy=1;
|
||||||
|
cmd=0x0c;
|
||||||
|
qDebug("addr %d start check,timeout=%d",addr,timeout);
|
||||||
|
send_data(cmd,myarray(),3);
|
||||||
|
timeout_start(timeout);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void slave_check2::timeout()
|
||||||
|
{
|
||||||
|
timeout_stop();
|
||||||
|
qWarning("addr %d check timeout.",addr);
|
||||||
|
end(1,ret_data);
|
||||||
|
busy=0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int slave_check2::dolater(int cmd, myarray data)
|
||||||
|
{
|
||||||
|
timeout_stop_retry();
|
||||||
|
if(cmd==0x0c){
|
||||||
|
if(data.size()<=16){
|
||||||
|
qDebug("addr %d recv first ack.",addr);
|
||||||
|
}else{
|
||||||
|
qDebug("addr %d recv secend ack.",addr);
|
||||||
|
send_data(0x14,myarray(),5);
|
||||||
|
end(0,ret_data);
|
||||||
|
timeout_stop();
|
||||||
|
}
|
||||||
|
}else if(cmd==0x14){
|
||||||
|
// 所有从机都 停止上报时取消忙状态
|
||||||
|
busy=0;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void slave_result::timeout()
|
void slave_result::timeout()
|
||||||
{
|
{
|
||||||
timeout_stop();
|
timeout_stop();
|
||||||
@@ -212,7 +260,7 @@ void boardcast_updata::timeout()
|
|||||||
{
|
{
|
||||||
timeout_stop();
|
timeout_stop();
|
||||||
qWarning("slave updata timeout.");
|
qWarning("slave updata timeout.");
|
||||||
end(1,myarray());
|
end(1,ret_data);
|
||||||
busy=0;
|
busy=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,7 +307,7 @@ int boardcast_updata::dolater(int cmd, myarray data)
|
|||||||
timeout_stop();
|
timeout_stop();
|
||||||
timeout_stop_retry();
|
timeout_stop_retry();
|
||||||
qDebug("slave updata end.");
|
qDebug("slave updata end.");
|
||||||
end(0,data);
|
end(0,ret_data);
|
||||||
busy=0;
|
busy=0;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -301,7 +349,7 @@ void boardcast_updata_scheme::timeout()
|
|||||||
{
|
{
|
||||||
timeout_stop();
|
timeout_stop();
|
||||||
qWarning("slave updata timeout.");
|
qWarning("slave updata timeout.");
|
||||||
end(1,myarray());
|
end(1,ret_data);
|
||||||
busy=0;
|
busy=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -333,7 +381,7 @@ int boardcast_updata_scheme::dolater(int cmd, myarray data)
|
|||||||
timeout_stop();
|
timeout_stop();
|
||||||
timeout_stop_retry();
|
timeout_stop_retry();
|
||||||
qDebug("slave updata scheme end.");
|
qDebug("slave updata scheme end.");
|
||||||
end(0,data);
|
end(0,ret_data);
|
||||||
busy=0;
|
busy=0;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@@ -16,6 +16,16 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 从机检测命令
|
||||||
|
class slave_check2:public HandleBoardCast
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
slave_check2():HandleBoardCast(){}
|
||||||
|
int start(myarray data);
|
||||||
|
int dolater(int cmd, myarray data);
|
||||||
|
void timeout();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 获取检测结果命令
|
// 获取检测结果命令
|
||||||
|
Reference in New Issue
Block a user