#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 data) { myarray ret; ret.append(uint8_t(0)); ret.append(uint8_t(subcmd)); switch (subcmd) { case 0x04:// 测量桥丝阻值 for (int i=0;i