Files
checker_host/prot_cmd/cmd_checkself.cpp
2024-03-12 17:47:17 +08:00

192 lines
5.2 KiB
C++
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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