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);
|
|||
|
|
|||
|
|
|||
|
|