自研批检仪检测命令测试成功

广播方式升级从机发现卡死现象
This commit is contained in:
ranchuan
2023-12-04 18:15:37 +08:00
parent 66b9453255
commit 2451c5dfc5
19 changed files with 256 additions and 69 deletions

View File

@@ -3,7 +3,9 @@
2023.11.26 2023.11.26
重新构建的批检仪主板程序 重新构建的批检仪主板程序
2023.12.4
自研批检仪检测命令测试成功
广播方式升级从机发现卡死现象

View File

@@ -4,15 +4,15 @@
#include "QList" #include "QList"
// 字符串转化为数字列表 // 字符串转化为数字列表
template <typename T> //template <typename T>
QList<T> str_to_nums(mystring str, char c) //QList<T> str_to_nums(mystring str, char c)
{ //{
QStringList snums = str.split(c); // QStringList snums = str.split(c);
QList<T> nums; // QList<T> nums;
for (int i = 0; i < snums.size(); i++) // for (int i = 0; i < snums.size(); i++)
nums.append(T(snums[i].toInt(nullptr, 10))); // nums.append(T(snums[i].toInt(nullptr, 10)));
return nums; // return nums;
} //}
// 字符串转化为数组 // 字符串转化为数组
myarray str_to_data(mystring str, char c) myarray str_to_data(mystring str, char c)

View File

@@ -102,7 +102,14 @@ protected:
}; };
template <typename T> template <typename T>
QList<T> str_to_nums(mystring str, char c); QList<T> str_to_nums(mystring str, char c)
{
QStringList snums = str.split(c);
QList<T> nums;
for (int i = 0; i < snums.size(); i++)
nums.append(T(snums[i].toInt(nullptr, 10)));
return nums;
}
myarray str_to_data(mystring str, char c); myarray str_to_data(mystring str, char c);

View File

@@ -95,10 +95,10 @@ void check_cfg::scheme_json_to_struct()
QList<check_range> rangs = ct.get_ranges(); QList<check_range> rangs = ct.get_ranges();
int rangs_num = rangs.size(); int rangs_num = rangs.size();
int err_num = ret_errs.size(); int err_num = ret_errs.size();
qDebug("st,err,item_num=%d,taskid=%d,taskindex=%d", st->item_num, st->taskid, st->taskindex); // qDebug("st,err,item_num=%d,taskid=%d,taskindex=%d", st->item_num, st->taskid, st->taskindex);
for (int i = 0; i < st->item_num; i++) for (int i = 0; i < st->item_num; i++)
{ {
qDebug("\ti=%d", i); // qDebug("\ti=%d", i);
if (rangs_num > i) if (rangs_num > i)
{ {
st->range[i].err = 0; st->range[i].err = 0;

View File

@@ -91,7 +91,7 @@ void print_to_console(QtMsgType type, const QMessageLogContext &context, const Q
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[20], context.line, localMsg.constData());
}else{ }else{
fprintf(stderr,"%s | %s | %s:%u | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), context.file, context.line, localMsg.constData()); fprintf(stderr,"%s | %s | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), localMsg.constData());
} }
g_debug.mutex.unlock(); g_debug.mutex.unlock();
} }
@@ -107,7 +107,7 @@ void print_to_file(QtMsgType type, const QMessageLogContext &context, const QStr
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[20], context.line, localMsg.constData());
}else{ }else{
tWrite << QString::asprintf("%s | %s | %s:%u | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), context.file, context.line, localMsg.constData()); tWrite << QString::asprintf("%s | %s | %s\n", msgHead[type], current_date_time.toLocal8Bit().constData(), localMsg.constData());
} }
} }
g_debug.mutex.unlock(); g_debug.mutex.unlock();

15
checker_app_pre.sh Normal file
View File

@@ -0,0 +1,15 @@
#! /bin/bash
#ifconfig eth0 up
#sleep 1
#效果将设备号eth0对应的物理端口设置为速率为100Mbps全双工工作模式同时关闭自动协商
#ethtool -s eth0 speed 100 duplex full autoneg off
#sleep 2
#ifconfig eth0 up
# 加载m4固件
echo stop > /sys/class/remoteproc/remoteproc0/state
echo checker_m4.axf > /sys/class/remoteproc/remoteproc0/firmware
echo start > /sys/class/remoteproc/remoteproc0/state
echo Prapare_OK

View File

@@ -6,7 +6,7 @@
#define BUILD_DATE "2023-12-01 11:08:00" #define BUILD_DATE "2023-12-04 18:04:43"

View File

@@ -1,5 +1,5 @@
{ {
"build_date": "2023-12-01 11:08:00", "build_date": "2023-12-04 18:04:43",
"hard_version": "MHPZ2_V1.00", "hard_version": "MHPZ2_V1.00",
"private": [ "private": [
"info.json", "info.json",

View File

@@ -71,8 +71,9 @@ myarray CodecYm::decode(int &srcAddr, int &dstAddr, int &cmd, myarray data)
Q_UNUSED(srcAddr); Q_UNUSED(srcAddr);
Q_UNUSED(dstAddr); Q_UNUSED(dstAddr);
myarray r; myarray r;
if (packCheck(data) == true) if (packCheck(data) >0)
{ {
qDebug("offset=%d",offset);
cmd = this->cmd; cmd = this->cmd;
if (is_big_data == false) if (is_big_data == false)
r = data.mid(offset+7, len - 3); r = data.mid(offset+7, len - 3);
@@ -100,7 +101,7 @@ int CodecYm::packCheck(myarray data)
if (data.size() < 9) if (data.size() < 9)
{ {
// 主机一帧数据至少9字节 // 主机一帧数据至少9字节
qWarning("recv data len too less"); // qWarning("recv data len too less");
return ack; return ack;
} }
@@ -118,7 +119,7 @@ int CodecYm::packCheck(myarray data)
if (len + 6 > data.size()) if (len + 6 > data.size())
{ {
// 如果长度不相等则产生了数据丢失 // 如果长度不相等则产生了数据丢失
qWarning("recv data have lossed"); // qWarning("recv data have lossed");
return ack; return ack;
} }
uint8_t chk_a = 0, chk_b = 0; uint8_t chk_a = 0, chk_b = 0;
@@ -133,7 +134,7 @@ int CodecYm::packCheck(myarray data)
cmd_no = data[5] | (data[6] << 8); cmd_no = data[5] | (data[6] << 8);
cmd = data[4]; cmd = data[4];
// 数据负载 // 数据负载
return len+offset; return len+offset+6;
} }
myarray CodecYm::encode(int srcAddr, int dstAddr, int cmd, myarray data) myarray CodecYm::encode(int srcAddr, int dstAddr, int cmd, myarray data)
{ {

View File

@@ -189,6 +189,7 @@ void can_host::recv_data_cb()
irq_fun(myarray(slave.get_data())); irq_fun(myarray(slave.get_data()));
} }
} }
qDebug()<<"can recv from:"<<slave_addr<<slave.get_data().toHex(' ');
} }
else if (seg_flag == 0x01) else if (seg_flag == 0x01)
{ {
@@ -213,6 +214,7 @@ void can_host::recv_data_cb()
irq_fun(myarray(slave.get_data())); irq_fun(myarray(slave.get_data()));
} }
} }
qDebug()<<"can recv from:"<<slave_addr<<slave.get_data().toHex(' ');
} }
else else
{ {
@@ -227,6 +229,7 @@ void can_host::recv_data_cb()
int can_host::write(int dst,myarray data) int can_host::write(int dst,myarray data)
{ {
qDebug()<<"can send to:"<<dst<<data.toHex(' ');
append(dst, 1, data); append(dst, 1, data);
return data.size(); return data.size();
} }

View File

@@ -48,7 +48,7 @@ int if_uart::write(myarray data)
void if_uart::ready_read_cb() void if_uart::ready_read_cb()
{ {
QByteArray data = serial_->readAll(); QByteArray data = serial_->readAll();
qDebug("uart recv:%s", data.toHex(' ').data()); // qDebug("uart recv:%s", data.toHex(' ').data());
if (irq_fun) if (irq_fun)
{ {
irq_fun(myarray(data)); irq_fun(myarray(data));

View File

@@ -35,6 +35,8 @@ int main(int argc, char *argv[])
protPc(); protPc();
protSlave(); protSlave();
command_start(); command_start();
// 注册信号数据类型
qRegisterMetaType<myarray>("myarray");
// 获取m4的编译时间 // 获取m4的编译时间
m4->set_irq_fun([=](myarray data){ m4->set_irq_fun([=](myarray data){

View File

@@ -45,19 +45,26 @@ void prot_m4::send_data_slot(myarray data)
bool prot_m4::exe_cb_fun(myarray data) bool prot_m4::exe_cb_fun(myarray data)
{ {
int left; int left;
QList<HandleM4_def> cb_funs;
for (int i = 0; i < funs.size(); i++) for (int i = 0; i < funs.size(); i++)
{
cb_funs.append(this->funs[i]);
}
for (int i = 0; i < cb_funs.size(); i++)
{ {
// 这里size包含结尾符要去掉 // 这里size包含结尾符要去掉
left = funs[i].cmd.size()-1; left = qstrlen(cb_funs[i].cmd.data());
if (data.left(left) == funs[i].cmd) // 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++){ for(int j=0;j<cb_funs[i].funs.size();j++){
prot_m4_cb fun=funs[i].funs[j]; prot_m4_cb fun=cb_funs[i].funs[j];
if(fun!=nullptr){ if(fun!=nullptr){
fun(data.mid(left)); fun(data.mid(left));
return true;
} }
} }
return true;
} }
} }
return false; return false;

View File

@@ -40,6 +40,7 @@ void ProtPc::init()
qDebug("host recv:%s",recv_data.toHex(' ').data()); qDebug("host recv:%s",recv_data.toHex(' ').data());
myarray data=codec_->decode(src,dst,cmd,recv_data); myarray data=codec_->decode(src,dst,cmd,recv_data);
recv_data.remove(0,pack_len); recv_data.remove(0,pack_len);
// qDebug("host recv removed:%s",recv_data.toHex(' ').data());
if(handle_!=nullptr){ if(handle_!=nullptr){
if(handle_->busy==0){ if(handle_->busy==0){
disconnect(handle_,&HandlePc::send_data_signal,this,&ProtPc::send_data_slot); disconnect(handle_,&HandlePc::send_data_signal,this,&ProtPc::send_data_slot);

View File

@@ -33,7 +33,7 @@ public:
public: public:
virtual int start(myarray data) = 0; virtual int start(myarray data) = 0;
virtual int dolater(int cmd, myarray data) = 0; virtual int dolater(int cmd, myarray data) = 0;
virtual void timeout(){timer_->stop();}; virtual void timeout(){timer_->stop();}
int busy; int busy;
int addr; int addr;
int cmd; int cmd;
@@ -45,9 +45,9 @@ protected:
this->times_retry=times; this->times_retry=times;
if(timer_retry_==nullptr){ if(timer_retry_==nullptr){
timer_retry_=new QTimer(); 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; return 0;
} }
// 发送操作结束信号 // 发送操作结束信号
@@ -82,7 +82,9 @@ private:
void timeout_retry(){ void timeout_retry(){
if(times_retry>0){ if(times_retry>0){
times_retry--; times_retry--;
qDebug("send to slave:%d",addr);
emit send_data_signal(addr,cmd,data_send); emit send_data_signal(addr,cmd,data_send);
timer_retry_->start(60);
}else{ }else{
timer_retry_->stop(); timer_retry_->stop();
} }
@@ -126,7 +128,7 @@ public:
public: public:
virtual int start(myarray data) = 0; virtual int start(myarray data) = 0;
virtual int dolater(int cmd, myarray data) = 0; virtual int dolater(int cmd, myarray data) = 0;
virtual void timeout(){timer_->stop();}; virtual void timeout(){timer_->stop();}
int busy; int busy;
int addr; int addr;
int addr_response; int addr_response;
@@ -143,6 +145,11 @@ public:
addr|=1<<(adr-1); 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: protected:
// 发送数据到从机 // 发送数据到从机
int send_data(int cmd,myarray data,int times){ int send_data(int cmd,myarray data,int times){
@@ -152,8 +159,11 @@ protected:
if(timer_retry_==nullptr){ if(timer_retry_==nullptr){
timer_retry_=new QTimer(); timer_retry_=new QTimer();
connect(timer_,&QTimer::timeout,this,&HandleBoardCast::timeout_retry); 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; return 0;
} }
// 发送操作结束信号 // 发送操作结束信号
@@ -163,29 +173,39 @@ protected:
} }
// 开始超时计时器,此计时器用于整个操作的超时 // 开始超时计时器,此计时器用于整个操作的超时
void timeout_start(int ms){ void timeout_start(int ms){
qDebug("handle_board:start timeout");
if(timer_==nullptr){ if(timer_==nullptr){
timer_=new QTimer(); timer_=new QTimer();
connect(timer_,&QTimer::timeout,this,&HandleBoardCast::timeout); 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); timer_->start(ms);
} }
void timeout_start_retry_cb(int ms){
timer_retry_->start(ms);
}
// 停止超时计时器,此方法同时停止重发计时器 // 停止超时计时器,此方法同时停止重发计时器
void timeout_stop(){ void timeout_stop(){
if(timer_!=nullptr){ qDebug("handle_board:stop timeout");
timer_->stop(); emit timeout_stop_signal();
}
timeout_stop_retry(); timeout_stop_retry();
} }
// 停止数据回复超时重试计时器 // 停止数据回复超时重试计时器
void timeout_stop_retry(){ void timeout_stop_retry(){
if(timer_retry_!=nullptr){ qDebug("handle_board:stop retry");
timer_retry_->stop(); emit timeout_stop_retry_signal();
}
times_retry=0; times_retry=0;
} }
private: private:
// 重试回调 // 重试回调
void timeout_retry(){ void timeout_retry(){
qDebug("in retry.");
if(times_retry>0){ if(times_retry>0){
times_retry--; times_retry--;
myarray s; myarray s;
@@ -196,8 +216,11 @@ private:
s.append((addr_retry>>16)&0xff); s.append((addr_retry>>16)&0xff);
s.append(data_send); s.append(data_send);
emit send_data_signal(0x1f,cmd,s); emit send_data_signal(0x1f,cmd,s);
// timer_retry_->start(300);
emit timeout_start_retry_signal(300);
}else{ }else{
timer_retry_->stop(); // timer_retry_->stop();
emit timeout_stop_retry_signal();
} }
} }
private: private:

View File

@@ -3,7 +3,10 @@
#include "QNetworkConfigurationManager" #include "QNetworkConfigurationManager"
#include "QTimer" #include "QTimer"
#include "QtNetwork" #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.);

View File

@@ -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); connect(this, &selfdev_check::send_to_m4_signal, m4, &prot_m4::send_data_slot);
moter_down_cb_fun=[=](myarray data) moter_down_cb_fun=[=](myarray data)
{ {
m4->del_irq_fun(moter_down_cb_fun,"moter "); m4->del_irq_fun(moter_down_cb_fun,"moter down");
if(data=="down"){ {
// 这里开始检测 // 这里开始检测
qDebug("start check.");
emit send_data_signal(cmd,myarray(1,0));
QList<int> addrs=cfg->calc_slave_addrs(); QList<int> addrs=cfg->calc_slave_addrs();
HandleSlave *s=new slave_check();
foreach(int addr, addrs){ foreach(int addr, addrs){
HandleSlave *s=new slave_check();
bool ack=slave->set_slave_handle(addr,s); bool ack=slave->set_slave_handle(addr,s);
if(ack==false){ if(ack==false){
qWarning("addr %d handle is busy.",addr); qWarning("addr %d handle is busy.",addr);
}else{ }else{
connect(s,&HandleSlave::end_signal,this,&selfdev_check::slave_end_slot); connect(s,&HandleSlave::end_signal,this,&selfdev_check::slave_end_slot);
s->start(myarray());
} }
} }
} }
}; };
m4->set_irq_fun(moter_down_cb_fun,"moter "); myarray moter_cmd=moter_ctrl("down");
emit send_to_m4_signal(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(); slave_acked.clear();
for(int i=0;i<cfg->slave_num;i++){ for(int i=0;i<cfg->slave_num;i++){
slave_acked.append(myarray()); slave_acked.append(myarray());
@@ -104,7 +113,7 @@ int selfdev_check::dolater(int cmd, myarray data)
void selfdev_check::timeout() 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) void selfdev_check::slave_end_slot(int addr,int ack, myarray data)
{ {
if(addr<=0||addr>slave_acked.size()){ 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++; slave_acked_num++;
if(slave_acked_num>=slave_acked.size()){ if(slave_acked_num>=slave_acked.size()){
myarray r; 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) int selfdev_moter::dolater(int cmd, myarray data)
{ {
prot_m4 *m4 = protM4(); prot_m4 *m4 = protM4();
@@ -189,17 +226,34 @@ protpc_export(0x40, get_selfdev_moter);
// 从机升级
int selfdev_slaveupdate::dolater(int cmd, myarray data) int selfdev_slaveupdate::dolater(int cmd, myarray data)
{ {
prot_m4 *m4 = protM4(); myarray r;
connect(this, &selfdev_slaveupdate::send_to_m4_signal, m4, &prot_m4::send_data_slot); int len_filename=data[0];
if(data[0]==0x02){ mystring name=data.mid(1,len_filename);
emit send_to_m4_signal(moter_ctrl("up")); prot_slave *slave=protSlave();
}else if(data[0]==0x03){ mycfg *cfg_=syscfg();
emit send_to_m4_signal(moter_ctrl("down")); 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; 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(){ static HandlePc *get_selfdev_slaveupdate(){
return new selfdev_slaveupdate(); return new selfdev_slaveupdate();
} }
protpc_export(0x41, get_selfdev_slaveupdate); protpc_export(0xfe, get_selfdev_slaveupdate);

View File

@@ -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 class selfdev_moter : public HandlePc
{ {
@@ -63,6 +79,8 @@ public:
~selfdev_slaveupdate() {} ~selfdev_slaveupdate() {}
int dolater(int cmd, myarray data); int dolater(int cmd, myarray data);
void timeout(); void timeout();
public slots:
void slave_end_slot(int addr,int ack, myarray data);
signals: signals:
void send_to_m4_signal(myarray data); void send_to_m4_signal(myarray data);
}; };

View File

@@ -10,7 +10,7 @@ int slave_check::start(myarray data)
{ {
mycfg *cfg_=syscfg(); mycfg *cfg_=syscfg();
check_cfg *ccfg_=check_plan(); check_cfg *ccfg_=check_plan();
int timeout=ccfg_->get_check_time_out(); int timeout=ccfg_->get_check_time_out()*1000;
busy=1; busy=1;
cmd=0x0c; cmd=0x0c;
qDebug("addr %d start check,timeout=%d",addr,timeout); qDebug("addr %d start check,timeout=%d",addr,timeout);
@@ -34,14 +34,16 @@ int slave_check::dolater(int cmd, myarray data)
return 1; return 1;
} }
timeout_stop_retry(); timeout_stop_retry();
if(data.size()<=16){ if(cmd==0x0c){
qDebug("addr %d recv first ack.",addr); if(data.size()<=16){
}else{ qDebug("addr %d recv first ack.",addr);
qDebug("addr %d recv secend ack.",addr); }else{
send_data(0x14,myarray(),1); qDebug("addr %d recv secend ack.",addr);
end(0,data); send_data(0x14,myarray(),1);
busy=0; end(0,data);
timeout_stop(); busy=0;
timeout_stop();
}
} }
return 0; return 0;
} }
@@ -209,27 +211,28 @@ int slave_resvalue::dolater(int cmd, myarray data)
void boardcast_updata::timeout() void boardcast_updata::timeout()
{ {
timeout_stop(); timeout_stop();
qWarning("addr %d updata timeout.",addr); qWarning("slave updata timeout.");
end(1,myarray()); end(1,myarray());
busy=0; busy=0;
} }
int boardcast_updata::start(myarray data) int boardcast_updata::start(myarray data)
{ {
int timeout=5000; int timeout=50000;
busy=1; busy=1;
qWarning()<<"addr "<<addr<<" updata start."; qWarning()<<"addr "<<addr<<" updata start.";
timeout_start(timeout); timeout_start(timeout);
// 擦除 // 擦除
step=0; step=0;
send_data(0xfe,data,10); this->data=data;
send_data(0xfe,myarray(),10);
return 0; return 0;
} }
int boardcast_updata::dolater(int cmd, myarray data) int boardcast_updata::dolater(int cmd, myarray data)
{ {
timeout_stop_retry(); timeout_stop_retry();
timeout_start(5000); timeout_start(50000);
if(step==0){ if(step==0){
if(send_packet()==true){ if(send_packet()==true){
step=1; step=1;
@@ -254,6 +257,7 @@ int boardcast_updata::dolater(int cmd, myarray data)
send_data(0xfb,s,10); send_data(0xfb,s,10);
step=2; step=2;
}else if(step==2){ }else if(step==2){
qDebug("slave updata end.");
end(0,data); end(0,data);
busy=0; busy=0;
} }