新增了装置重启命令的校验和执行流程。

This commit is contained in:
2026-03-05 15:38:21 +08:00
parent 852245f8ac
commit bf1eccf436
5 changed files with 109 additions and 3 deletions

View File

@@ -93,6 +93,9 @@ void process_received_message(string mac, string id,const char* data, size_t len
//装置登录成功
ClientManager::instance().set_cloud_status(id, 1); //设置了云前置登录状态为已登录
ClientManager::instance().read_devversion_action_to_device(id);//主动触发,读取装置版本配置信息,仅在装置登录后执行一次,当前获取版本信息确认对时报文结构。
//ClientManager::instance().set_ctrl_action_to_device(id,0x01,0x00);//尝试装置重启指令!第一步校验
//ClientManager::instance().set_ctrl_action_to_device(id, 0x01, 0x01);//尝试装置重启指令!校验完毕后尝试执行重启指令
//ClientManager::instance().get_dev_status(id);//设备在线情况判断 ture在线 false离线
//ClientManager::instance().set_real_state_count("D002", 1,1);//登录后测试实时
@@ -410,6 +413,7 @@ void process_received_message(string mac, string id,const char* data, size_t len
// 接收心跳报文错误,调整为空闲状态,处理下一项工作。
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
break;
case DeviceState::READING_STATS:
// 读取统计数据状态
@@ -2232,6 +2236,39 @@ void process_received_message(string mac, string id,const char* data, size_t len
}
break;
case DeviceState::SET_CTRL:
//装置控制命令
if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_Ctrl)) {
//第一次接收到控制命令应答,尝试校验命令是否合法!
if (udata[9] == 0x01) {
//当前仅检查0x01复位指令其余控制指令全部依照不合法处理
std::cout << "***ctrl do next" << mac << std::endl;
//控制命令校验合法,调整为空闲,处理后续工作。
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
else {
std::cout << "***ctrl fail" << mac << std::endl;
//控制命令校验不合法,调整为空闲,处理后续工作。
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
}
else if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_NewACK)) {
std::cout << "***ctrl success" << mac << std::endl;
//控制命令执行完毕,调整为空闲,处理后续工作。
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
else if (udata[8] == static_cast<unsigned char>(MsgResponseType::Response_NewNACK)) {
std::cout << "***ctrl fail" << mac << std::endl;
//控制命令执行失败,调整为空闲,处理后续工作。
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
else {
// 装置答非所问异常
// 控制命令失败,调整为空闲状态,处理下一项工作。
ClientManager::instance().change_device_state(id, DeviceState::IDLE);
}
break;
case DeviceState::CUSTOM_ACTION:
// 自定义动作状态
std::cout << "CUSTOM_ACTION state: Processing custom response from " << mac << std::endl;