自研批检仪检测命令测试成功
广播方式升级从机发现卡死现象
This commit is contained in:
@@ -45,19 +45,26 @@ void prot_m4::send_data_slot(myarray data)
|
||||
bool prot_m4::exe_cb_fun(myarray data)
|
||||
{
|
||||
int left;
|
||||
QList<HandleM4_def> cb_funs;
|
||||
for (int i = 0; i < funs.size(); i++)
|
||||
{
|
||||
cb_funs.append(this->funs[i]);
|
||||
}
|
||||
for (int i = 0; i < cb_funs.size(); i++)
|
||||
{
|
||||
// 这里size包含结尾符,要去掉
|
||||
left = funs[i].cmd.size()-1;
|
||||
if (data.left(left) == funs[i].cmd)
|
||||
left = qstrlen(cb_funs[i].cmd.data());
|
||||
// qDebug()<<"cmp m4 str:"<<data.left(left)<<cb_funs[i].cmd;
|
||||
// if (data.left(left) == funs[i].cmd)
|
||||
if (qstrncmp(data.data(),cb_funs[i].cmd.data(),left)==0)
|
||||
{
|
||||
for(int j=0;j<funs[i].funs.size();j++){
|
||||
prot_m4_cb fun=funs[i].funs[j];
|
||||
for(int j=0;j<cb_funs[i].funs.size();j++){
|
||||
prot_m4_cb fun=cb_funs[i].funs[j];
|
||||
if(fun!=nullptr){
|
||||
fun(data.mid(left));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
@@ -40,6 +40,7 @@ void ProtPc::init()
|
||||
qDebug("host recv:%s",recv_data.toHex(' ').data());
|
||||
myarray data=codec_->decode(src,dst,cmd,recv_data);
|
||||
recv_data.remove(0,pack_len);
|
||||
// qDebug("host recv removed:%s",recv_data.toHex(' ').data());
|
||||
if(handle_!=nullptr){
|
||||
if(handle_->busy==0){
|
||||
disconnect(handle_,&HandlePc::send_data_signal,this,&ProtPc::send_data_slot);
|
||||
|
@@ -33,7 +33,7 @@ public:
|
||||
public:
|
||||
virtual int start(myarray data) = 0;
|
||||
virtual int dolater(int cmd, myarray data) = 0;
|
||||
virtual void timeout(){timer_->stop();};
|
||||
virtual void timeout(){timer_->stop();}
|
||||
int busy;
|
||||
int addr;
|
||||
int cmd;
|
||||
@@ -45,9 +45,9 @@ protected:
|
||||
this->times_retry=times;
|
||||
if(timer_retry_==nullptr){
|
||||
timer_retry_=new QTimer();
|
||||
connect(timer_,&QTimer::timeout,this,&HandleSlave::timeout_retry);
|
||||
connect(timer_retry_,&QTimer::timeout,this,&HandleSlave::timeout_retry);
|
||||
}
|
||||
timer_retry_->start(60);
|
||||
timeout_retry();
|
||||
return 0;
|
||||
}
|
||||
// 发送操作结束信号
|
||||
@@ -82,7 +82,9 @@ private:
|
||||
void timeout_retry(){
|
||||
if(times_retry>0){
|
||||
times_retry--;
|
||||
qDebug("send to slave:%d",addr);
|
||||
emit send_data_signal(addr,cmd,data_send);
|
||||
timer_retry_->start(60);
|
||||
}else{
|
||||
timer_retry_->stop();
|
||||
}
|
||||
@@ -126,7 +128,7 @@ public:
|
||||
public:
|
||||
virtual int start(myarray data) = 0;
|
||||
virtual int dolater(int cmd, myarray data) = 0;
|
||||
virtual void timeout(){timer_->stop();};
|
||||
virtual void timeout(){timer_->stop();}
|
||||
int busy;
|
||||
int addr;
|
||||
int addr_response;
|
||||
@@ -143,6 +145,11 @@ public:
|
||||
addr|=1<<(adr-1);
|
||||
}
|
||||
}
|
||||
signals:
|
||||
void timeout_stop_retry_signal();
|
||||
void timeout_stop_signal();
|
||||
void timeout_start_signal(int ms);
|
||||
void timeout_start_retry_signal(int ms);
|
||||
protected:
|
||||
// 发送数据到从机
|
||||
int send_data(int cmd,myarray data,int times){
|
||||
@@ -152,8 +159,11 @@ protected:
|
||||
if(timer_retry_==nullptr){
|
||||
timer_retry_=new QTimer();
|
||||
connect(timer_,&QTimer::timeout,this,&HandleBoardCast::timeout_retry);
|
||||
connect(this,&HandleBoardCast::timeout_stop_retry_signal,timer_retry_,&QTimer::stop);
|
||||
connect(this,&HandleBoardCast::timeout_start_retry_signal,this,&HandleBoardCast::timeout_start_retry_cb);
|
||||
}
|
||||
timer_retry_->start(300);
|
||||
qDebug("handle_board:start retry");
|
||||
timeout_retry();
|
||||
return 0;
|
||||
}
|
||||
// 发送操作结束信号
|
||||
@@ -163,29 +173,39 @@ protected:
|
||||
}
|
||||
// 开始超时计时器,此计时器用于整个操作的超时
|
||||
void timeout_start(int ms){
|
||||
qDebug("handle_board:start timeout");
|
||||
if(timer_==nullptr){
|
||||
timer_=new QTimer();
|
||||
connect(timer_,&QTimer::timeout,this,&HandleBoardCast::timeout);
|
||||
connect(this,&HandleBoardCast::timeout_stop_signal,timer_,&QTimer::stop);
|
||||
connect(this,&HandleBoardCast::timeout_start_signal,this,&HandleBoardCast::timeout_start_cb);
|
||||
}else{
|
||||
emit timeout_start_signal(ms);
|
||||
// timer_->start(ms);
|
||||
}
|
||||
}
|
||||
void timeout_start_cb(int ms){
|
||||
timer_->start(ms);
|
||||
}
|
||||
void timeout_start_retry_cb(int ms){
|
||||
timer_retry_->start(ms);
|
||||
}
|
||||
// 停止超时计时器,此方法同时停止重发计时器
|
||||
void timeout_stop(){
|
||||
if(timer_!=nullptr){
|
||||
timer_->stop();
|
||||
}
|
||||
qDebug("handle_board:stop timeout");
|
||||
emit timeout_stop_signal();
|
||||
timeout_stop_retry();
|
||||
}
|
||||
// 停止数据回复超时重试计时器
|
||||
void timeout_stop_retry(){
|
||||
if(timer_retry_!=nullptr){
|
||||
timer_retry_->stop();
|
||||
}
|
||||
qDebug("handle_board:stop retry");
|
||||
emit timeout_stop_retry_signal();
|
||||
times_retry=0;
|
||||
}
|
||||
private:
|
||||
// 重试回调
|
||||
void timeout_retry(){
|
||||
qDebug("in retry.");
|
||||
if(times_retry>0){
|
||||
times_retry--;
|
||||
myarray s;
|
||||
@@ -196,8 +216,11 @@ private:
|
||||
s.append((addr_retry>>16)&0xff);
|
||||
s.append(data_send);
|
||||
emit send_data_signal(0x1f,cmd,s);
|
||||
// timer_retry_->start(300);
|
||||
emit timeout_start_retry_signal(300);
|
||||
}else{
|
||||
timer_retry_->stop();
|
||||
// timer_retry_->stop();
|
||||
emit timeout_stop_retry_signal();
|
||||
}
|
||||
}
|
||||
private:
|
||||
|
Reference in New Issue
Block a user