Files
checker_host/prot_cmd/cmd_checkself.cpp

192 lines
5.2 KiB
C++
Raw Normal View History

#include "prot_cmd/cmd_checkself.h"
/*
+-----------------+-------------------------+----------------------------------------+
| | | |
+-----------------+-------------------------+----------------------------------------+
|(0x01) | | |
+-----------------+-------------------------+----------------------------------------+
|(0x02) |2bytes | |
+-----------------+-------------------------+----------------------------------------+
|(0x03) |2bytes | |
+-----------------+-------------------------+----------------------------------------+
|(0x04) | |+2bytes |
| | | |
+-----------------+-------------------------+----------------------------------------+
|线(0x05) |线2bytes |+线2bytes0.1V |
| |0.1V | |
+-----------------+-------------------------+----------------------------------------+
|线(0x06) | | |
+-----------------+-------------------------+----------------------------------------+
|线(0x07) | |+线4bytes0.1uA|
| | | |
+-----------------+-------------------------+----------------------------------------+
*/
// 电机控制
int selfdev_checkself::dolater(int cmd, myarray data)
{
prot_m4 *m4 = protM4();
mycfg *cfg_=syscfg();
int subcmd=data[0];
if(subcmd>=1&&subcmd<=3){
connect(this, &selfdev_checkself::send_to_m4_signal, m4, &prot_m4::send_data_slot);
switch (subcmd)
{
case 0x01:
emit send_to_m4_signal("moterinit");
break;
case 0x02:
{
int count=data[1]|(data[2]<<8);
mystring s = mystring("moter %1").arg(count);
emit send_to_m4_signal(myarray(s.data()));
}
break;
case 0x03:
{
int count=data[1]|(data[2]<<8);
mystring s = mystring("moter %1").arg(-count);
emit send_to_m4_signal(myarray(s.data()));
}
break;
default:
break;
}
myarray r;
r.append(char(0));
r.append(uint8_t(subcmd));
emit send_data_signal(0,r);
return 0;
}else{
pc_ret_cmd=0x50;
return selfdev_runtask::dolater(cmd, data);
}
}
// 参数检测
myarray selfdev_checkself::cmd_pc_to_slave(myarray data)
{
myarray ret;
const task_def *table=nullptr;
uint16_t params[10]={0};
subcmd=data[0];
switch (subcmd)
{
case 0x04:
{
myarray d;
params[0]=0;
coder_add_task(d,"测量桥丝阻值",1,1,params);
coder_slave_pack(d,0x1f);
ret+=d;
// 检测模式3,只执行槽任务
ret.insert(0,uint8_t(3));
}
break;
case 0x05:
{
myarray d;
params[0]=data[1]|(data[2]<<8);
coder_add_task(d,"设置总线电压",1,1,params);
coder_slave_pack(d,0x1f);
ret+=d;
// 检测模式3,只执行槽任务
ret.insert(0,uint8_t(3));
}
break;
case 0x06:
{
myarray d;
params[0]=data[1]|(data[2]<<8);
coder_add_task(d,"关总线",1,1,params);
coder_slave_pack(d,0x1f);
ret+=d;
// 检测模式3,只执行槽任务
ret.insert(0,uint8_t(3));
}
break;
case 0x07:
{
myarray d;
params[0]=data[1]|(data[2]<<8);
coder_add_task(d,"获取总线电流",1,1,params);
coder_slave_pack(d,0x1f);
ret+=d;
// 检测模式3,只执行槽任务
ret.insert(0,uint8_t(3));
}
break;
default:
break;
}
return ret;
}
// 从机返回转pc
myarray selfdev_checkself::ret_slave_to_pc(QList<myarray> data)
{
myarray ret;
ret.append(uint8_t(0));
ret.append(uint8_t(subcmd));
switch (subcmd)
{
case 0x04:// 测量桥丝阻值
for (int i=0;i<data.size();i++)
{
myarray &sdata=data[i];
ret.append(sdata[0]);
myarray sret=coder_slave_find_ret_data(sdata.mid(2),1,2);
ret+=sret;
}
break;
case 0x05:// 设置总线电压
for (int i=0;i<data.size();i++)
{
myarray &sdata=data[i];
ret.append(sdata[0]);
myarray sret=coder_slave_find_ret_data(sdata.mid(2),1,2);
ret+=sret;
}
break;
case 0x06:// 关总线
break;
case 0x07:// 获取总线电流
for (int i=0;i<data.size();i++)
{
myarray &sdata=data[i];
ret.append(sdata[0]);
myarray sret=coder_slave_find_ret_data(sdata.mid(2),1,4);
ret+=sret;
}
break;
default:
break;
}
return ret;
}
static HandlePc *get_selfdev_checkself(){
return new selfdev_checkself();
}
protpc_export(0x50, get_selfdev_checkself);