From fe11c522533ba00b17d1c903cbd48ae68aba9bc9 Mon Sep 17 00:00:00 2001 From: ranchuan Date: Sat, 9 Dec 2023 10:37:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B9=BF=E6=92=AD=E5=91=BD=E4=BB=A4=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E6=8E=A5=E6=94=B6=E5=90=84=E4=B8=AA=E4=BB=8E=E6=9C=BA?= =?UTF-8?q?=E7=9A=84=E8=BF=94=E5=9B=9E=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ReadMe.txt | 3 +- complier_info.h | 2 +- info.json | 2 +- prot/prot_slave.cpp | 2 ++ prot/prot_slave.h | 61 ++++++++++++++++++++++++++++++++++++---- prot_cmd/cmd_cmdline.cpp | 8 +++--- prot_cmd/cmd_pc.cpp | 27 ++++++++++++++++-- prot_cmd/cmd_pc.h | 6 ++-- prot_cmd/cmd_slave.cpp | 56 +++++++++++++++++++++++++++++++++--- prot_cmd/cmd_slave.h | 10 +++++++ 10 files changed, 156 insertions(+), 21 deletions(-) diff --git a/ReadMe.txt b/ReadMe.txt index 25de325..9cb67ac 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -10,5 +10,6 @@ 广播方式升级从机成功 2023.12.7 批检仪检测流程验证成功 - +2023.12.8 + 广播命令可以接收各个从机的返回数据,计划将所有命令转化为广播命令 diff --git a/complier_info.h b/complier_info.h index c9cc723..647a15f 100644 --- a/complier_info.h +++ b/complier_info.h @@ -6,7 +6,7 @@ -#define BUILD_DATE "2023-12-07 18:27:08" +#define BUILD_DATE "2023-12-08 10:04:55" diff --git a/info.json b/info.json index 1bf1d1a..3f77825 100644 --- a/info.json +++ b/info.json @@ -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", "private": [ "info.json", diff --git a/prot/prot_slave.cpp b/prot/prot_slave.cpp index 56286a2..c41728c 100644 --- a/prot/prot_slave.cpp +++ b/prot/prot_slave.cpp @@ -25,6 +25,8 @@ void prot_slave::init() }else{ if((broadcast_!=nullptr)&&(broadcast_->busy)){ broadcast_->addr_response|=1<<(src-1); + // 存储从机的数据 + broadcast_->ret_data[src-1]=data; if(broadcast_->check_response()==true){ // broadcast_->dolater(broadcast_->cmd,data); emit boardcast_dolater_signal(broadcast_->cmd,data); diff --git a/prot/prot_slave.h b/prot/prot_slave.h index be714c9..5d2fad9 100644 --- a/prot/prot_slave.h +++ b/prot/prot_slave.h @@ -102,11 +102,46 @@ signals: using namespace std; // using namespace std::placeholders; - -typedef std::function prots_end_cbfun; +class slave_data; +typedef std::function prots_end_cbfun; typedef std::function prots_rate_cbfun; +typedef struct{ + int addr; + myarray data; +}slave_ret; + +// 定义保存从机数据的类 +class slave_data{ +public: + QList data; + // 重载括号操作符,index为地址-1 + myarray &operator [](int index){ + for(int i=0;i addrs){ + int trun_list_to_bit(QList addrs){ addr=0; foreach(int adr,addrs){ addr|=1<<(adr-1); } + return addr; } + // 把bit转化为地址列表 + QList trun_bit_to_list(int addrs){ + QList l; + for(int i=0;i<32;i++){ + if(addrs&(1<end_cb=end_fun; this->rate_cb=rate_fun; @@ -168,6 +216,7 @@ protected: this->data_send=data; this->times_retry=times; this->addr_response=0; + this->ret_data.clear(); if(timer_retry_==nullptr){ timer_retry_=new QTimer(); connect(timer_retry_,&QTimer::timeout,this,&HandleBoardCast::timeout_retry); @@ -180,7 +229,7 @@ protected: return 0; } // 发送操作结束信号 - int end(int ack,myarray data){ + int end(int ack,slave_data data){ emit end_signal(0x1f,ack,data); if(end_cb!=nullptr){ end_cb(0x1f,ack,data); @@ -252,12 +301,12 @@ private: QTimer *timer_; QTimer *timer_retry_; int times_retry; - myarray data_send; + myarray data_send;// 发送的数据 prots_end_cbfun end_cb; prots_rate_cbfun rate_cb; signals: 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); }; diff --git a/prot_cmd/cmd_cmdline.cpp b/prot_cmd/cmd_cmdline.cpp index dacc6ad..19dd97f 100644 --- a/prot_cmd/cmd_cmdline.cpp +++ b/prot_cmd/cmd_cmdline.cpp @@ -24,7 +24,7 @@ void rate_slot(int rate,mystring str) strs=strs.arg(rate).arg(str); 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(); mystring strs("ack:%1,%2"); @@ -101,7 +101,7 @@ static void mcu_cmdlines(QList args) if(ack==false){ qWarning("handle is busy."); }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); },[=](int rate,mystring str){ rate_slot(rate,str); @@ -124,7 +124,7 @@ static void mcu_cmdlines(QList args) if(ack==false){ qWarning("handle is busy."); }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); },[=](int rate,mystring str){ rate_slot(rate,str); @@ -149,7 +149,7 @@ static void mcu_cmdlines(QList args) if(ack==false){ qWarning("handle is busy."); }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); },[=](int rate,mystring str){ rate_slot(rate,str); diff --git a/prot_cmd/cmd_pc.cpp b/prot_cmd/cmd_pc.cpp index 5beb8da..ea6e5e8 100644 --- a/prot_cmd/cmd_pc.cpp +++ b/prot_cmd/cmd_pc.cpp @@ -272,7 +272,7 @@ void selfdev_slaveupdate::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); busy=0; @@ -348,7 +348,7 @@ void selfdev_update_scheme::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); busy=0; @@ -563,6 +563,27 @@ static myarray slave_to_bootinfo_byte(myarray 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;islave_acked.size()){ @@ -583,6 +604,8 @@ void selfdev_bootinfo::slave_end_slot(int addr,int ack, myarray data) } } + + static HandlePc *get_selfdev_bootinfo(){ return new selfdev_bootinfo(); } diff --git a/prot_cmd/cmd_pc.h b/prot_cmd/cmd_pc.h index 44624fa..997c32b 100644 --- a/prot_cmd/cmd_pc.h +++ b/prot_cmd/cmd_pc.h @@ -3,6 +3,7 @@ #include "prot/prot_pc.h" #include "prot/prot_m4.h" +#include "prot_cmd/cmd_slave.h" // 检测 自研批检仪 @@ -80,7 +81,7 @@ public: int dolater(int cmd, myarray data); void timeout(); public slots: - void slave_end_slot(int addr,int ack, myarray data); + void slave_end_slot(int addr,int ack, slave_data data); signals: void send_to_m4_signal(myarray data); }; @@ -100,7 +101,7 @@ public: int dolater(int cmd, myarray data); void timeout(); public slots: - void slave_end_slot(int addr,int ack, myarray data); + void slave_end_slot(int addr,int ack, slave_data data); signals: void send_to_m4_signal(myarray data); }; @@ -147,6 +148,7 @@ public: int dolater(int cmd, myarray data); void timeout(); public slots: +// void slave_end_slot(int addr,int ack, slave_data data); void slave_end_slot(int addr,int ack, myarray data); protected: QList slave_acked; diff --git a/prot_cmd/cmd_slave.cpp b/prot_cmd/cmd_slave.cpp index a4ca836..d429498 100644 --- a/prot_cmd/cmd_slave.cpp +++ b/prot_cmd/cmd_slave.cpp @@ -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() { timeout_stop(); @@ -212,7 +260,7 @@ void boardcast_updata::timeout() { timeout_stop(); qWarning("slave updata timeout."); - end(1,myarray()); + end(1,ret_data); busy=0; } @@ -259,7 +307,7 @@ int boardcast_updata::dolater(int cmd, myarray data) timeout_stop(); timeout_stop_retry(); qDebug("slave updata end."); - end(0,data); + end(0,ret_data); busy=0; } return 0; @@ -301,7 +349,7 @@ void boardcast_updata_scheme::timeout() { timeout_stop(); qWarning("slave updata timeout."); - end(1,myarray()); + end(1,ret_data); busy=0; } @@ -333,7 +381,7 @@ int boardcast_updata_scheme::dolater(int cmd, myarray data) timeout_stop(); timeout_stop_retry(); qDebug("slave updata scheme end."); - end(0,data); + end(0,ret_data); busy=0; } return 0; diff --git a/prot_cmd/cmd_slave.h b/prot_cmd/cmd_slave.h index bfdd5a7..ea42069 100644 --- a/prot_cmd/cmd_slave.h +++ b/prot_cmd/cmd_slave.h @@ -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(); +}; + // 获取检测结果命令