自研批检仪检测命令测试成功
广播方式升级从机发现卡死现象
This commit is contained in:
@@ -3,7 +3,9 @@
|
|||||||
|
|
||||||
2023.11.26
|
2023.11.26
|
||||||
重新构建的批检仪主板程序
|
重新构建的批检仪主板程序
|
||||||
|
2023.12.4
|
||||||
|
自研批检仪检测命令测试成功
|
||||||
|
广播方式升级从机发现卡死现象
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
15
checker_app_pre.sh
Normal 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
|
||||||
|
|
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define BUILD_DATE "2023-12-01 11:08:00"
|
#define BUILD_DATE "2023-12-04 18:04:43"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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",
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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();
|
||||||
}
|
}
|
||||||
|
@@ -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));
|
||||||
|
2
main.cpp
2
main.cpp
@@ -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){
|
||||||
|
@@ -45,21 +45,28 @@ 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++)
|
||||||
{
|
{
|
||||||
// 这里size包含结尾符,要去掉
|
cb_funs.append(this->funs[i]);
|
||||||
left = funs[i].cmd.size()-1;
|
}
|
||||||
if (data.left(left) == funs[i].cmd)
|
for (int i = 0; i < cb_funs.size(); i++)
|
||||||
{
|
{
|
||||||
for(int j=0;j<funs[i].funs.size();j++){
|
// 这里size包含结尾符,要去掉
|
||||||
prot_m4_cb fun=funs[i].funs[j];
|
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<cb_funs[i].funs.size();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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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:
|
||||||
|
@@ -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.);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
};
|
};
|
||||||
|
@@ -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,6 +34,7 @@ int slave_check::dolater(int cmd, myarray data)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
timeout_stop_retry();
|
timeout_stop_retry();
|
||||||
|
if(cmd==0x0c){
|
||||||
if(data.size()<=16){
|
if(data.size()<=16){
|
||||||
qDebug("addr %d recv first ack.",addr);
|
qDebug("addr %d recv first ack.",addr);
|
||||||
}else{
|
}else{
|
||||||
@@ -43,6 +44,7 @@ int slave_check::dolater(int cmd, myarray data)
|
|||||||
busy=0;
|
busy=0;
|
||||||
timeout_stop();
|
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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user