自研批检仪检测命令测试成功
广播方式升级从机发现卡死现象
This commit is contained in:
@@ -3,7 +3,10 @@
|
||||
#include "QNetworkConfigurationManager"
|
||||
#include "QTimer"
|
||||
#include "QtNetwork"
|
||||
|
||||
#include "prot/prot_slave.h"
|
||||
#include "prot_cmd/cmd_slave.h"
|
||||
#include "QFile"
|
||||
#include "base/base.h"
|
||||
|
||||
|
||||
|
||||
@@ -46,3 +49,45 @@ cmdline_export(whos, whos, print device base info.);
|
||||
|
||||
|
||||
|
||||
|
||||
// mcu 相关
|
||||
static void mcu_cmdlines(QList<myarray> args)
|
||||
{
|
||||
command *c=command_start();
|
||||
if(args.size()<2){
|
||||
c->send("cmd len too less.");
|
||||
return ;
|
||||
}
|
||||
if((args.size()>=4)&&(args[1]=="updata")){
|
||||
QList<int> addrs=str_to_nums<int>(args[2],',');
|
||||
HandleBoardCast *b=new boardcast_updata();
|
||||
prot_slave *slave=protSlave();
|
||||
mycfg *cfg_=syscfg();
|
||||
bool ack=slave->set_boardcast_handle(addrs,b);
|
||||
if(ack==false){
|
||||
qWarning("handle is busy.");
|
||||
}else{
|
||||
// connect(b,&HandleBoardCast::end_signal,nullptr,[=](int addr,int ack, myarray data){
|
||||
// if(ack==0)
|
||||
// c->send("slave updata success.");
|
||||
// else
|
||||
// c->send("slave updata failed.");
|
||||
// });
|
||||
QFile file;
|
||||
file.setFileName(args[3]);
|
||||
if(file.open(QIODevice::ReadOnly)){
|
||||
myarray data=file.readAll();
|
||||
b->start(data);
|
||||
file.close();
|
||||
}else{
|
||||
qWarning("open file failed.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
cmdline_export(mcu, mcu_cmdlines, mcu cmdlines` input [mcu help] to detail.);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
@@ -77,23 +77,32 @@ int selfdev_check::dolater(int cmd, myarray data)
|
||||
connect(this, &selfdev_check::send_to_m4_signal, m4, &prot_m4::send_data_slot);
|
||||
moter_down_cb_fun=[=](myarray data)
|
||||
{
|
||||
m4->del_irq_fun(moter_down_cb_fun,"moter ");
|
||||
if(data=="down"){
|
||||
m4->del_irq_fun(moter_down_cb_fun,"moter down");
|
||||
{
|
||||
// 这里开始检测
|
||||
qDebug("start check.");
|
||||
emit send_data_signal(cmd,myarray(1,0));
|
||||
QList<int> addrs=cfg->calc_slave_addrs();
|
||||
HandleSlave *s=new slave_check();
|
||||
foreach(int addr, addrs){
|
||||
HandleSlave *s=new slave_check();
|
||||
bool ack=slave->set_slave_handle(addr,s);
|
||||
if(ack==false){
|
||||
qWarning("addr %d handle is busy.",addr);
|
||||
}else{
|
||||
connect(s,&HandleSlave::end_signal,this,&selfdev_check::slave_end_slot);
|
||||
s->start(myarray());
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
m4->set_irq_fun(moter_down_cb_fun,"moter ");
|
||||
emit send_to_m4_signal(moter_ctrl("down"));
|
||||
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<cfg->slave_num;i++){
|
||||
slave_acked.append(myarray());
|
||||
@@ -104,7 +113,7 @@ int selfdev_check::dolater(int cmd, myarray data)
|
||||
|
||||
void selfdev_check::timeout()
|
||||
{
|
||||
|
||||
busy=0;
|
||||
}
|
||||
|
||||
// 把小板的返回数据转化为自研批检仪上位机的格式
|
||||
@@ -136,8 +145,10 @@ static myarray tran_slave_to_selfdev_check(myarray &data)
|
||||
void selfdev_check::slave_end_slot(int addr,int ack, myarray data)
|
||||
{
|
||||
if(addr<=0||addr>slave_acked.size()){
|
||||
slave_acked.replace(addr-1,data);
|
||||
qWarning("slave addr err:%d",addr);
|
||||
return;
|
||||
}
|
||||
slave_acked.replace(addr-1,data);
|
||||
slave_acked_num++;
|
||||
if(slave_acked_num>=slave_acked.size()){
|
||||
myarray r;
|
||||
@@ -160,7 +171,33 @@ protpc_export(0x30, get_selfdev_check);
|
||||
|
||||
|
||||
|
||||
// 检测结束 电机上升
|
||||
int selfdev_checkend::dolater(int cmd, myarray data)
|
||||
{
|
||||
prot_m4 *m4 = protM4();
|
||||
connect(this, &selfdev_checkend::send_to_m4_signal, m4, &prot_m4::send_data_slot);
|
||||
emit send_to_m4_signal(moter_ctrl("up"));
|
||||
return 0;
|
||||
}
|
||||
|
||||
void selfdev_checkend::timeout(){
|
||||
|
||||
}
|
||||
|
||||
static HandlePc *get_selfdev_checkend(){
|
||||
return new selfdev_checkend();
|
||||
}
|
||||
|
||||
protpc_export(0x31, get_selfdev_checkend);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// 电机控制
|
||||
int selfdev_moter::dolater(int cmd, myarray data)
|
||||
{
|
||||
prot_m4 *m4 = protM4();
|
||||
@@ -189,17 +226,34 @@ protpc_export(0x40, get_selfdev_moter);
|
||||
|
||||
|
||||
|
||||
|
||||
// 从机升级
|
||||
int selfdev_slaveupdate::dolater(int cmd, myarray data)
|
||||
{
|
||||
prot_m4 *m4 = protM4();
|
||||
connect(this, &selfdev_slaveupdate::send_to_m4_signal, m4, &prot_m4::send_data_slot);
|
||||
if(data[0]==0x02){
|
||||
emit send_to_m4_signal(moter_ctrl("up"));
|
||||
}else if(data[0]==0x03){
|
||||
emit send_to_m4_signal(moter_ctrl("down"));
|
||||
myarray r;
|
||||
int len_filename=data[0];
|
||||
mystring name=data.mid(1,len_filename);
|
||||
prot_slave *slave=protSlave();
|
||||
mycfg *cfg_=syscfg();
|
||||
qInfo()<<"slave_app name:"<<name<<endl;
|
||||
data.remove(0,len_filename+1);
|
||||
|
||||
// TODO 校验小板程序
|
||||
|
||||
r.append(uint8_t(0));
|
||||
cfg_->save_file(name,data);
|
||||
emit send_data_signal(0xfe,myarray(1,char(0)));
|
||||
|
||||
// 自动给小板升级
|
||||
// start_updata_mcu(cfg_->config_path+name,slave_addrs);
|
||||
HandleBoardCast *b=new boardcast_updata();
|
||||
bool ack=slave->set_boardcast_handle(cfg_->calc_slave_addrs(),b);
|
||||
if(ack==false){
|
||||
qWarning("handle is busy.");
|
||||
}else{
|
||||
connect(b,&HandleBoardCast::end_signal,this,&selfdev_slaveupdate::slave_end_slot);
|
||||
b->start(data);
|
||||
}
|
||||
emit send_data_signal(0x40,myarray(1,char(0)));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -207,11 +261,16 @@ void selfdev_slaveupdate::timeout(){
|
||||
|
||||
}
|
||||
|
||||
void selfdev_slaveupdate::slave_end_slot(int addr,int ack, myarray data)
|
||||
{
|
||||
qDebug("slave update end,ack=%d",ack);
|
||||
}
|
||||
|
||||
static HandlePc *get_selfdev_slaveupdate(){
|
||||
return new selfdev_slaveupdate();
|
||||
}
|
||||
|
||||
protpc_export(0x41, get_selfdev_slaveupdate);
|
||||
protpc_export(0xfe, get_selfdev_slaveupdate);
|
||||
|
||||
|
||||
|
||||
|
@@ -37,6 +37,22 @@ signals:
|
||||
|
||||
|
||||
|
||||
// 检测结束 自研批检仪
|
||||
class selfdev_checkend : public HandlePc
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
selfdev_checkend() : HandlePc() {}
|
||||
~selfdev_checkend() {}
|
||||
int dolater(int cmd, myarray data);
|
||||
void timeout();
|
||||
signals:
|
||||
void send_to_m4_signal(myarray data);
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
// 电机 自研批检仪
|
||||
class selfdev_moter : public HandlePc
|
||||
{
|
||||
@@ -63,6 +79,8 @@ public:
|
||||
~selfdev_slaveupdate() {}
|
||||
int dolater(int cmd, myarray data);
|
||||
void timeout();
|
||||
public slots:
|
||||
void slave_end_slot(int addr,int ack, myarray data);
|
||||
signals:
|
||||
void send_to_m4_signal(myarray data);
|
||||
};
|
||||
|
@@ -10,7 +10,7 @@ int slave_check::start(myarray data)
|
||||
{
|
||||
mycfg *cfg_=syscfg();
|
||||
check_cfg *ccfg_=check_plan();
|
||||
int timeout=ccfg_->get_check_time_out();
|
||||
int timeout=ccfg_->get_check_time_out()*1000;
|
||||
busy=1;
|
||||
cmd=0x0c;
|
||||
qDebug("addr %d start check,timeout=%d",addr,timeout);
|
||||
@@ -34,14 +34,16 @@ int slave_check::dolater(int cmd, myarray data)
|
||||
return 1;
|
||||
}
|
||||
timeout_stop_retry();
|
||||
if(data.size()<=16){
|
||||
qDebug("addr %d recv first ack.",addr);
|
||||
}else{
|
||||
qDebug("addr %d recv secend ack.",addr);
|
||||
send_data(0x14,myarray(),1);
|
||||
end(0,data);
|
||||
busy=0;
|
||||
timeout_stop();
|
||||
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(),1);
|
||||
end(0,data);
|
||||
busy=0;
|
||||
timeout_stop();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -209,27 +211,28 @@ int slave_resvalue::dolater(int cmd, myarray data)
|
||||
void boardcast_updata::timeout()
|
||||
{
|
||||
timeout_stop();
|
||||
qWarning("addr %d updata timeout.",addr);
|
||||
qWarning("slave updata timeout.");
|
||||
end(1,myarray());
|
||||
busy=0;
|
||||
}
|
||||
|
||||
int boardcast_updata::start(myarray data)
|
||||
{
|
||||
int timeout=5000;
|
||||
int timeout=50000;
|
||||
busy=1;
|
||||
qWarning()<<"addr "<<addr<<" updata start.";
|
||||
timeout_start(timeout);
|
||||
// 擦除
|
||||
step=0;
|
||||
send_data(0xfe,data,10);
|
||||
this->data=data;
|
||||
send_data(0xfe,myarray(),10);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int boardcast_updata::dolater(int cmd, myarray data)
|
||||
{
|
||||
timeout_stop_retry();
|
||||
timeout_start(5000);
|
||||
timeout_start(50000);
|
||||
if(step==0){
|
||||
if(send_packet()==true){
|
||||
step=1;
|
||||
@@ -254,6 +257,7 @@ int boardcast_updata::dolater(int cmd, myarray data)
|
||||
send_data(0xfb,s,10);
|
||||
step=2;
|
||||
}else if(step==2){
|
||||
qDebug("slave updata end.");
|
||||
end(0,data);
|
||||
busy=0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user