192 lines
5.2 KiB
C++
192 lines
5.2 KiB
C++
#include "prot_cmd/cmd_checkself.h"
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/*
|
||
|
||
+-----------------+-------------------------+----------------------------------------+
|
||
|细分指令 |参数说明 |回复结果说明 |
|
||
+-----------------+-------------------------+----------------------------------------+
|
||
|电机归零(0x01) |无 |无 |
|
||
+-----------------+-------------------------+----------------------------------------+
|
||
|电机下降(0x02) |下降步数(2bytes,小端) |无 |
|
||
+-----------------+-------------------------+----------------------------------------+
|
||
|电机上升(0x03) |上升步数(2bytes,小端) |无 |
|
||
+-----------------+-------------------------+----------------------------------------+
|
||
|检桥丝电阻(0x04) |无 |小板地址+桥丝阻值(2bytes) |
|
||
| | |多块小板数据域追加相应数据 |
|
||
+-----------------+-------------------------+----------------------------------------+
|
||
|打开总线(0x05) |总线电压(2bytes,小端) |小板地址+总线电压(2bytes)(单位0.1V) |
|
||
| |(单位0.1V) |多块小板数据域追加相应数据 |
|
||
+-----------------+-------------------------+----------------------------------------+
|
||
|关闭总线(0x06) |无 |无 |
|
||
+-----------------+-------------------------+----------------------------------------+
|
||
|检总线电流(0x07) |无 |小板地址+总线电流(4bytes)(单位0.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);
|
||
|
||
|
||
|