自研批检仪检测命令测试成功
广播方式升级从机发现卡死现象
This commit is contained in:
@@ -3,7 +3,9 @@
|
||||
|
||||
2023.11.26
|
||||
重新构建的批检仪主板程序
|
||||
|
||||
2023.12.4
|
||||
自研批检仪检测命令测试成功
|
||||
广播方式升级从机发现卡死现象
|
||||
|
||||
|
||||
|
||||
|
@@ -4,15 +4,15 @@
|
||||
#include "QList"
|
||||
|
||||
// 字符串转化为数字列表
|
||||
template <typename T>
|
||||
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;
|
||||
}
|
||||
//template <typename T>
|
||||
//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)
|
||||
|
@@ -102,7 +102,14 @@ protected:
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
|
@@ -95,10 +95,10 @@ void check_cfg::scheme_json_to_struct()
|
||||
QList<check_range> rangs = ct.get_ranges();
|
||||
int rangs_num = rangs.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++)
|
||||
{
|
||||
qDebug("\ti=%d", i);
|
||||
// qDebug("\ti=%d", i);
|
||||
if (rangs_num > i)
|
||||
{
|
||||
st->range[i].err = 0;
|
||||
|
@@ -91,7 +91,7 @@ void print_to_console(QtMsgType type, const QMessageLogContext &context, const Q
|
||||
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());
|
||||
}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();
|
||||
}
|
||||
@@ -107,7 +107,7 @@ void print_to_file(QtMsgType type, const QMessageLogContext &context, const QStr
|
||||
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());
|
||||
}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();
|
||||
|
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",
|
||||
"private": [
|
||||
"info.json",
|
||||
|
@@ -71,8 +71,9 @@ myarray CodecYm::decode(int &srcAddr, int &dstAddr, int &cmd, myarray data)
|
||||
Q_UNUSED(srcAddr);
|
||||
Q_UNUSED(dstAddr);
|
||||
myarray r;
|
||||
if (packCheck(data) == true)
|
||||
if (packCheck(data) >0)
|
||||
{
|
||||
qDebug("offset=%d",offset);
|
||||
cmd = this->cmd;
|
||||
if (is_big_data == false)
|
||||
r = data.mid(offset+7, len - 3);
|
||||
@@ -100,7 +101,7 @@ int CodecYm::packCheck(myarray data)
|
||||
if (data.size() < 9)
|
||||
{
|
||||
// 主机一帧数据至少9字节
|
||||
qWarning("recv data len too less");
|
||||
// qWarning("recv data len too less");
|
||||
return ack;
|
||||
}
|
||||
|
||||
@@ -118,7 +119,7 @@ int CodecYm::packCheck(myarray data)
|
||||
if (len + 6 > data.size())
|
||||
{
|
||||
// 如果长度不相等则产生了数据丢失
|
||||
qWarning("recv data have lossed");
|
||||
// qWarning("recv data have lossed");
|
||||
return ack;
|
||||
}
|
||||
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 = data[4];
|
||||
// 数据负载
|
||||
return len+offset;
|
||||
return len+offset+6;
|
||||
}
|
||||
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()));
|
||||
}
|
||||
}
|
||||
qDebug()<<"can recv from:"<<slave_addr<<slave.get_data().toHex(' ');
|
||||
}
|
||||
else if (seg_flag == 0x01)
|
||||
{
|
||||
@@ -213,6 +214,7 @@ void can_host::recv_data_cb()
|
||||
irq_fun(myarray(slave.get_data()));
|
||||
}
|
||||
}
|
||||
qDebug()<<"can recv from:"<<slave_addr<<slave.get_data().toHex(' ');
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -227,6 +229,7 @@ void can_host::recv_data_cb()
|
||||
|
||||
int can_host::write(int dst,myarray data)
|
||||
{
|
||||
qDebug()<<"can send to:"<<dst<<data.toHex(' ');
|
||||
append(dst, 1, data);
|
||||
return data.size();
|
||||
}
|
||||
|
@@ -48,7 +48,7 @@ int if_uart::write(myarray data)
|
||||
void if_uart::ready_read_cb()
|
||||
{
|
||||
QByteArray data = serial_->readAll();
|
||||
qDebug("uart recv:%s", data.toHex(' ').data());
|
||||
// qDebug("uart recv:%s", data.toHex(' ').data());
|
||||
if (irq_fun)
|
||||
{
|
||||
irq_fun(myarray(data));
|
||||
|
2
main.cpp
2
main.cpp
@@ -35,6 +35,8 @@ int main(int argc, char *argv[])
|
||||
protPc();
|
||||
protSlave();
|
||||
command_start();
|
||||
// 注册信号数据类型
|
||||
qRegisterMetaType<myarray>("myarray");
|
||||
|
||||
// 获取m4的编译时间
|
||||
m4->set_irq_fun([=](myarray data){
|
||||
|
@@ -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:
|
||||
|
@@ -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