完善待机工况及相关逻辑
This commit is contained in:
@@ -238,7 +238,7 @@ bool LowerCommManager::listenThreadFunc()
|
||||
try
|
||||
{
|
||||
int nRead = m_udpComm->udpScoket->iRecieveMessage(Buff, sizeof(Buff));
|
||||
cout<<MOOS::ConsoleColours::yellow()<< "RECEVE DATA COUNT:" << nRead << MOOS::ConsoleColours::reset() << endl;
|
||||
//cout<<MOOS::ConsoleColours::yellow()<< "RECEVE DATA COUNT:" << nRead << MOOS::ConsoleColours::reset() << endl;
|
||||
if(nRead > 0)
|
||||
{
|
||||
try {
|
||||
|
||||
@@ -9,71 +9,25 @@ PowerManger* PowerManagerFsm::pm = nullptr;
|
||||
// InitState实现
|
||||
void InitState::entry() {
|
||||
PowerManagerFsm::entry();
|
||||
std::cout << "===========================" << std::endl;
|
||||
// PowerManagerFsm::pm->m_pmEvent = "初始化状态";
|
||||
PowerManagerFsm::pm->printState("InitState", "进入初始化状态");
|
||||
}
|
||||
|
||||
void InitState::react(InitEvent const &) {
|
||||
// double StartTime = PowerManagerFsm::pm->GetAppStartTime();
|
||||
std::cout << "开始初始化" << std::endl;
|
||||
double StartTime = 0;
|
||||
while (PowerManagerFsm::pm->connectState < 5) {
|
||||
MOOSPause(1000);
|
||||
PowerManagerFsm::pm->updateTime();
|
||||
double dft = abs(PowerManagerFsm::pm->m_current_time - StartTime);
|
||||
if(dft > 10) {
|
||||
transit<FaultState>();
|
||||
PowerManagerFsm::pm->m_faultNum = 1;
|
||||
return;
|
||||
}
|
||||
string desp = "等待复合管控消息 : " + to_string(10-dft);
|
||||
PowerManagerFsm::pm->printState("InitState", desp);
|
||||
}
|
||||
|
||||
if(PowerManagerFsm::pm->checkError() < 0) {
|
||||
transit<FaultState>();
|
||||
PowerManagerFsm::pm->m_faultNum = 2;
|
||||
return;
|
||||
}
|
||||
|
||||
PowerManagerFsm::pm->initControlCmd();
|
||||
|
||||
while (true) {
|
||||
if(PowerManagerFsm::pm->m_currentDisBreakerState.bus3Breaker.unit4InstrumentDC48VCircuitBreaker == 1 ||
|
||||
PowerManagerFsm::pm->m_currentDisBreakerState.bus4Breaker.unit5CircuitBreaker == 1 ||
|
||||
PowerManagerFsm::pm->m_currentDisBreakerState.bus4Breaker.unit2CircuitBreaker == 1 ||
|
||||
PowerManagerFsm::pm->m_currentDisBreakerState.bus4Breaker.unit3CircuitBreaker == 1 ||
|
||||
PowerManagerFsm::pm->m_currentDisBreakerState.bus4Breaker.unit1CircuitBreaker == 1) {
|
||||
transit<StandbyState>();
|
||||
return;
|
||||
}
|
||||
PowerManagerFsm::pm->m_pmEvent = "等待关键断路器闭合";
|
||||
MOOSPause(1000);
|
||||
PowerManagerFsm::pm->printState("InitState", PowerManagerFsm::pm->m_pmEvent);
|
||||
}
|
||||
std::cout << "InitState: 初始化完成" << std::endl;
|
||||
//转换到待机状态
|
||||
std::cout << "初始化配电指令" << std::endl;
|
||||
pm->initControlCmd();
|
||||
// PowerManagerFsm::pm->printState("InitState", "进入初始化状态");
|
||||
transit<StandbyState>();
|
||||
}
|
||||
|
||||
// StandbyState实现
|
||||
void StandbyState::entry() {
|
||||
PowerManagerFsm::entry();
|
||||
PowerManagerFsm::pm->printState("StandbyState", "进入待机状态");
|
||||
pm->m_driver.getSTANDBYTable(&pm->m_subDisSysCmd);
|
||||
pm->m_CcuColCmd.fcuCmd = FcuCommand::Stop;
|
||||
pm->m_CcuColCmd.powerBatCmd = BatteryCommand::Stop;
|
||||
}
|
||||
|
||||
void StandbyState::react(StandbyEvent const &) {
|
||||
while (true) {
|
||||
if(PowerManagerFsm::pm->checkError() < 0) {
|
||||
transit<FaultState>();
|
||||
return;
|
||||
}
|
||||
handlePowerCommands();
|
||||
MOOSPause(1000);
|
||||
}
|
||||
transit<StandbyState>();
|
||||
}
|
||||
|
||||
|
||||
void StandbyState::handlePowerCommands() {
|
||||
switch (PowerManagerFsm::pm->m_msCmd.powerCMD) {
|
||||
case 0: PowerManagerFsm::pm->m_pmEvent = "收到上位机控制指令:关机"; break;
|
||||
@@ -90,6 +44,7 @@ void StandbyState::handlePowerOn() {
|
||||
|
||||
// FaultState实现
|
||||
void FaultState::entry() {
|
||||
PowerManagerFsm::entry();
|
||||
PowerManagerFsm::pm->printState("FaultState", "进入故障状态");
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,12 @@
|
||||
#define POWER_MANAGER_FSM_HPP
|
||||
#include "tinyfsm.hpp"
|
||||
#include <iostream>
|
||||
|
||||
#include <chrono> // 新增头文件
|
||||
#include <iomanip> // 新增头文件
|
||||
#include <ctime> // 新增头文件,用于localtime函数
|
||||
#include <cxxabi.h> // 新增头文件,用于demangle功能
|
||||
#include "pmSysvariable.h"
|
||||
#include "driver.h"
|
||||
// 前向声明
|
||||
class PowerManger;
|
||||
|
||||
@@ -12,7 +17,6 @@ enum class PowerSystemState {
|
||||
FAULT,
|
||||
};
|
||||
|
||||
// 定义事件类型
|
||||
//==================状态切换事件=============================
|
||||
struct InitEvent : tinyfsm::Event { };
|
||||
struct StandbyEvent : tinyfsm::Event { };
|
||||
@@ -21,18 +25,16 @@ struct FaultEvent : tinyfsm::Event {
|
||||
FaultEvent(unsigned int code) : faultCode(code) {}
|
||||
};
|
||||
//==================状态流程事件============================
|
||||
struct MasterCommandEvent : tinyfsm::Event { };
|
||||
struct MasterCommandEvent : tinyfsm::Event {};
|
||||
struct TaskStart : tinyfsm::Event { };
|
||||
// struct
|
||||
struct DeviceCmd : tinyfsm::Event { };
|
||||
|
||||
|
||||
// 定义状态机基类
|
||||
class PowerManagerFsm : public tinyfsm::Fsm<PowerManagerFsm> {
|
||||
protected:
|
||||
static PowerManger* pm;
|
||||
static DriverTable m_currentDriver;
|
||||
|
||||
public:
|
||||
// 初始化状态机
|
||||
static void init(PowerManger* powerManager) {
|
||||
pm = powerManager;
|
||||
}
|
||||
@@ -43,30 +45,52 @@ public:
|
||||
virtual void react(FaultEvent const &) {};
|
||||
virtual void react(MasterCommandEvent const &) {};
|
||||
virtual void react(TaskStart const &) {};
|
||||
virtual void react(DeviceCmd const &) {};
|
||||
|
||||
// 状态机生命周期方法
|
||||
virtual void entry() {std::cout << "[ Enter state ] : " << typeid(*this).name() << std::endl;} // 进入状态
|
||||
virtual void exit() {std::cout << "[ Exit state ] : " << typeid(*this).name() << std::endl;} // 退出状态
|
||||
|
||||
|
||||
// 状态转换接口
|
||||
void triggerInitEvent() { dispatch(InitEvent()); }
|
||||
void triggerStandbyEvent() { dispatch(StandbyEvent()); }
|
||||
void triggerFaultEvent(unsigned int faultCode) { dispatch(FaultEvent(faultCode)); }
|
||||
virtual void entry() {
|
||||
auto now = std::chrono::system_clock::now();
|
||||
auto now_time = std::chrono::system_clock::to_time_t(now);
|
||||
|
||||
int status = 0;
|
||||
char* demangled = abi::__cxa_demangle(typeid(*this).name(), nullptr, nullptr, &status);
|
||||
std::string typeName = (status == 0) ? demangled : typeid(*this).name();
|
||||
if (demangled) free(demangled);
|
||||
|
||||
std::cout << "\033[1;38;5;51m╭──────────────────────────────────────────────────────\n"
|
||||
<< "│ \033[1;38;5;226m⮞⮞⮞ \033[0;38;5;51m[" << std::put_time(std::localtime(&now_time), "%Y-%m-%d %H:%M:%S")
|
||||
<< "] \033[1;38;5;255m进入状态: \033[1;38;5;213m" << typeName << "\n"
|
||||
<< "│ \033[0m" << std::endl;
|
||||
}
|
||||
|
||||
virtual void exit() {
|
||||
auto now = std::chrono::system_clock::now();
|
||||
auto now_time = std::chrono::system_clock::to_time_t(now);
|
||||
|
||||
int status = 0;
|
||||
char* demangled = abi::__cxa_demangle(typeid(*this).name(), nullptr, nullptr, &status);
|
||||
std::string typeName = (status == 0) ? demangled : typeid(*this).name();
|
||||
if (demangled) free(demangled);
|
||||
|
||||
std::cout << "\033[1;38;5;203m│ \n"
|
||||
<< "│ \033[1;38;5;208m⮜⮜⮜ \033[0;38;5;203m[" << std::put_time(std::localtime(&now_time), "%Y-%m-%d %H:%M:%S")
|
||||
<< "] \033[1;38;5;255m离开状态: \033[1;38;5;213m" << typeName << "\n"
|
||||
<< "╰──────────────────────────────────────────────────────\033[0m" << std::endl;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class InitState : public PowerManagerFsm {
|
||||
public:
|
||||
void entry() override;
|
||||
void react(InitEvent const &);
|
||||
};
|
||||
|
||||
class StandbyState : public PowerManagerFsm {
|
||||
public:
|
||||
void entry() override;
|
||||
void react(StandbyEvent const &);
|
||||
PowerSystemState getCurrentState();
|
||||
void react(StandbyEvent const &) override;
|
||||
// void react(MasterCommandEvent const &) override;
|
||||
// void react(DeviceCmd const &) override;
|
||||
private:
|
||||
void handlePowerCommands();
|
||||
void handlePowerOn();
|
||||
@@ -78,6 +102,5 @@ public:
|
||||
void react(FaultEvent const &);
|
||||
};
|
||||
|
||||
// FSM_INITIAL_STATE(PowerManagerFsm, InitState)
|
||||
|
||||
#endif // POWER_MANAGER_FSM_HPP
|
||||
@@ -126,29 +126,11 @@ bool PowerManger::Iterate()
|
||||
// cout << " Current State : " << (int)PowerManagerFsm::current_state_ptr->getCurrentState();
|
||||
if (m_ticker++ % 5 == 0)
|
||||
{
|
||||
m_CcuColCmd.heartbeat++;
|
||||
m_lowerCommManager->processPeriodicTasks();
|
||||
m_upperCommManager->processPeriodicTasks();
|
||||
// buildPowerSysReport();
|
||||
//Notify(PM_TO_DB_SUBDISCMD,m_driver.saveDriverTableToJson(&m_subDisSysCmd));
|
||||
//Notify(PM_TO_DB_EQUIPMENTSTATE,m_driver.saveDriverTableToJson(&m_currentDriverState));
|
||||
//d.保存到数据库
|
||||
writeDataToDB();
|
||||
}
|
||||
|
||||
///////////////////////
|
||||
// string a = m_driver.getSubDisCmdJson(&m_subDisSysCmd);
|
||||
// saveStringToJsonFile(a,"/home/zjk/project/H100/H100PowerManger/data/subDisSysCmd.json");
|
||||
///////////////////////
|
||||
//4. 写状态信息到数据库
|
||||
// m_stateData.state_id = m_pmState.id;
|
||||
// m_stateData.state_name = m_pmState.name;
|
||||
// m_stateData.event = m_pmEvent;
|
||||
// m_stateData.fault_code = m_faultNum;
|
||||
// if(!m_db->insertStateData(m_stateData))
|
||||
// return false;
|
||||
//AppCastingMOOSApp::PostReport();
|
||||
//5. 清空UDP消息队列
|
||||
// m_udpComm.clearMsgQueue();
|
||||
return(true);
|
||||
}
|
||||
|
||||
|
||||
@@ -114,18 +114,14 @@ class PowerManger : public AppCastingMOOSApp
|
||||
LowerCommManager* m_lowerCommManager;
|
||||
UpperCommManager* m_upperCommManager;
|
||||
|
||||
// 状态机实例
|
||||
PowerManagerFsm m_fsm;
|
||||
// // 状态机实例
|
||||
// PowerManagerFsm m_fsm;
|
||||
|
||||
public:
|
||||
//===========================状态机接口=======================================
|
||||
void printState(const std::string& stateName, const std::string& desp);
|
||||
bool FSM_RUN_IS_OK = true;
|
||||
|
||||
// 状态机事件触发接口
|
||||
// void triggerInitEvent() { m_fsm.triggerInitEvent(); }
|
||||
// void triggerStandbyEvent() { m_fsm.triggerStandbyEvent(); }
|
||||
// void triggerFaultEvent(unsigned int faultCode) { m_fsm.triggerFaultEvent(faultCode); }
|
||||
|
||||
//==================================================================================
|
||||
int checkError();
|
||||
bool shutdown();
|
||||
|
||||
@@ -17,6 +17,10 @@ bool UpperCommManager::processUpperMsg(const string& key, const string& strJson)
|
||||
m_pm->m_subDisSysState = getSubDisState(key, strJson);
|
||||
return true;
|
||||
}
|
||||
else if(key == DB_TO_PM_DEEPTH) {
|
||||
m_pm->m_depth = getDeepth(key, strJson);
|
||||
return true;
|
||||
}
|
||||
std::cout << "Unknown key: " << key << std::endl;
|
||||
return false;
|
||||
}
|
||||
@@ -25,6 +29,7 @@ const MSControlCmd UpperCommManager::getMasterControlCmd(const std::string& key,
|
||||
{
|
||||
MSControlCmd cmd;
|
||||
if (parseControlCmdFromJson(cmd, msg)) {
|
||||
|
||||
return cmd;
|
||||
}
|
||||
else
|
||||
@@ -53,6 +58,37 @@ const DriverTable UpperCommManager::getSubDisState(const std::string& key, const
|
||||
}
|
||||
}
|
||||
|
||||
const int UpperCommManager::getDeepth(const std::string& key, const std::string& msg){
|
||||
int deepth;
|
||||
Json::Value root;
|
||||
Json::CharReaderBuilder builder;
|
||||
JSONCPP_STRING errs;
|
||||
|
||||
// 解析JSON字符串
|
||||
std::istringstream stream(msg);
|
||||
if (!Json::parseFromStream(builder, stream, &root, &errs)) {
|
||||
std::cerr << "JSON解析失败: " << errs << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 检查并读取深度数组
|
||||
if (root.isMember("value_array_uint16") && root["value_array_uint16"].isArray()) {
|
||||
const Json::Value& array = root["value_array_uint16"];
|
||||
if (array.size() >= 3) {
|
||||
// 计算三个深度值的平均值
|
||||
deepth = (array[0].asInt() + array[1].asInt() + array[2].asInt()) / 3;
|
||||
} else {
|
||||
std::cerr << "深度数组元素不足3个" << std::endl;
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
std::cerr << "JSON格式错误" << std::endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
return deepth;
|
||||
}
|
||||
|
||||
const std::string UpperCommManager::getCurrentEquState(DriverTable& driver)
|
||||
{
|
||||
return m_pm->m_driver.saveDriverTableToJson(&driver);
|
||||
|
||||
@@ -26,7 +26,7 @@ using namespace std;
|
||||
#define DB_TO_PM_SUBDISSTATE "uDevice_secdistState_st"
|
||||
|
||||
//决策消息
|
||||
#define DB_TO_PM_DEEPTH "uPower_depth_fb"
|
||||
#define DB_TO_PM_DEEPTH "uDevice_depth_st"
|
||||
#define DB_TO_PM_MISSION "uPlan_taskStart_cmd"
|
||||
|
||||
class PowerManger; // 前向声明
|
||||
@@ -36,7 +36,7 @@ public:
|
||||
UpperCommManager(PowerManger* powerManager);
|
||||
~UpperCommManager();
|
||||
|
||||
//周期调用
|
||||
// 周期调用
|
||||
void processPeriodicTasks();
|
||||
|
||||
// 处理上位机消息
|
||||
@@ -49,10 +49,11 @@ public:
|
||||
const MSControlCmd getMasterControlCmd(const std::string& key, const std::string& msg);
|
||||
const DriverTable getEquipmentCmd(const std::string& key, const std::string& msg);
|
||||
const DriverTable getSubDisState(const std::string& key, const std::string& msg);
|
||||
const int getDeepth(const std::string& key, const std::string& msg);
|
||||
|
||||
|
||||
const std::string getCurrentEquState(DriverTable& driver);
|
||||
const std::string getSubDisCmd(DriverTable& driver);
|
||||
|
||||
// 其他公共函数
|
||||
string getTypeName(const string typeName);
|
||||
bool saveStringToJsonFile(const string &strJson, const string &filePath);
|
||||
|
||||
+62
-62
@@ -59,72 +59,72 @@ int Driver::getDriverTable(workCondition condition, DriverTable* driverTable)
|
||||
void Driver::getSTANDBYTable(DriverTable* driverTable)
|
||||
{
|
||||
//打开所有传感器
|
||||
driverTable->depth1 = DRIVER_FULL_POWER_ON;
|
||||
driverTable->depth2 = DRIVER_FULL_POWER_ON;
|
||||
driverTable->depth3 = DRIVER_FULL_POWER_ON;
|
||||
driverTable->overDeep1 = DRIVER_FULL_POWER_ON;
|
||||
driverTable->overDeep2 = DRIVER_FULL_POWER_ON;
|
||||
driverTable->ctd1 = DRIVER_FULL_POWER_ON;
|
||||
driverTable->ctd2 = DRIVER_FULL_POWER_ON;
|
||||
driverTable->soundVeloc = DRIVER_FULL_POWER_ON;
|
||||
driverTable->commMast = DRIVER_FULL_POWER_ON;
|
||||
driverTable->ins = DRIVER_FULL_POWER_ON;
|
||||
driverTable->ntp = DRIVER_FULL_POWER_ON;
|
||||
driverTable->inputWaterSensor1 = DRIVER_FULL_POWER_ON;
|
||||
driverTable->inputWaterSensor2 = DRIVER_FULL_POWER_ON;
|
||||
driverTable->inputWaterSensor3 = DRIVER_FULL_POWER_ON;
|
||||
driverTable->depth1 = 1;
|
||||
driverTable->depth2 = 1;
|
||||
driverTable->depth3 = 1;
|
||||
driverTable->overDeep1 = 1;
|
||||
driverTable->overDeep2 = 1;
|
||||
driverTable->ctd1 = 1;
|
||||
driverTable->ctd2 = 1;
|
||||
driverTable->soundVeloc = 1;
|
||||
driverTable->commMast = 1;
|
||||
driverTable->ins = 1;
|
||||
driverTable->ntp = 1;
|
||||
driverTable->inputWaterSensor1 = 1;
|
||||
driverTable->inputWaterSensor2 = 1;
|
||||
driverTable->inputWaterSensor3 = 1;
|
||||
|
||||
//关闭所有负载
|
||||
driverTable->photoSensor = DRIVER_STANDBY;
|
||||
driverTable->electSensor = DRIVER_STANDBY;
|
||||
driverTable->launchControler = DRIVER_STANDBY;
|
||||
driverTable->sideSonar = DRIVER_POWER_OFF;
|
||||
driverTable->buoyage = DRIVER_POWER_OFF;
|
||||
driverTable->photoSensor = 0;
|
||||
driverTable->electSensor = 0;
|
||||
driverTable->launchControler = 0;
|
||||
driverTable->sideSonar = 0;
|
||||
driverTable->buoyage = 0;
|
||||
//关闭所有水声设备
|
||||
driverTable->singleBeamSonar1 = DRIVER_POWER_OFF;
|
||||
driverTable->singleBeamSonar2 = DRIVER_POWER_OFF;
|
||||
driverTable->singleBeamSonar3 = DRIVER_POWER_OFF;
|
||||
driverTable->singleBeamSonar4 = DRIVER_POWER_OFF;
|
||||
driverTable->singleBeamSonar5 = DRIVER_POWER_OFF;
|
||||
driverTable->singleBeamSonar6 = DRIVER_POWER_OFF;
|
||||
driverTable->singleBeamSonar7 = DRIVER_POWER_OFF;
|
||||
driverTable->singleBeamSonar8 = DRIVER_POWER_OFF;
|
||||
driverTable->DVL = DRIVER_POWER_OFF;
|
||||
driverTable->forwardSonar = DRIVER_POWER_OFF;
|
||||
driverTable->lowFreqSonar = DRIVER_POWER_OFF;
|
||||
driverTable->USBL = DRIVER_POWER_OFF;
|
||||
driverTable->singleBeamSonar1 = 0;
|
||||
driverTable->singleBeamSonar2 = 0;
|
||||
driverTable->singleBeamSonar3 = 0;
|
||||
driverTable->singleBeamSonar4 = 0;
|
||||
driverTable->singleBeamSonar5 = 0;
|
||||
driverTable->singleBeamSonar6 = 0;
|
||||
driverTable->singleBeamSonar7 = 0;
|
||||
driverTable->singleBeamSonar8 = 0;
|
||||
driverTable->DVL = 0;
|
||||
driverTable->forwardSonar = 0;
|
||||
driverTable->lowFreqSonar = 0;
|
||||
driverTable->USBL = 0;
|
||||
//关闭所有执行机构
|
||||
driverTable->bowCover1 = DRIVER_POWER_OFF;
|
||||
driverTable->bowCover2 = DRIVER_POWER_OFF;
|
||||
driverTable->bowCover3 = DRIVER_POWER_OFF;
|
||||
driverTable->bowCover4 = DRIVER_POWER_OFF;
|
||||
driverTable->bowCover5 = DRIVER_POWER_OFF;
|
||||
driverTable->bowCover6 = DRIVER_POWER_OFF;
|
||||
driverTable->bowRudderDeploy = DRIVER_POWER_OFF;
|
||||
driverTable->bowRudderServo1 = DRIVER_POWER_OFF;
|
||||
driverTable->bowRudderServo2 = DRIVER_POWER_OFF;
|
||||
driverTable->bowWaterlnet1 = DRIVER_POWER_OFF;
|
||||
driverTable->bowWaterlnet2 = DRIVER_POWER_OFF;
|
||||
driverTable->bowWaterlnet3 = DRIVER_POWER_OFF;
|
||||
driverTable->bowWaterlnet4 = DRIVER_POWER_OFF;
|
||||
driverTable->bowWaterlnet5 = DRIVER_POWER_OFF;
|
||||
driverTable->bowWaterlnet6 = DRIVER_POWER_OFF;
|
||||
driverTable->bowWaterlnet7 = DRIVER_POWER_OFF;
|
||||
driverTable->bowWaterlnet8 = DRIVER_POWER_OFF;
|
||||
driverTable->waterInject = DRIVER_POWER_OFF;
|
||||
driverTable->mastLiftingServo = DRIVER_POWER_OFF;
|
||||
driverTable->buoyancyAdjust1 = DRIVER_POWER_OFF;
|
||||
driverTable->buoyancyAdjust2 = DRIVER_POWER_OFF;
|
||||
driverTable->buoyancyAdjust3 = DRIVER_POWER_OFF;
|
||||
driverTable->buoyancyAdjust4 = DRIVER_POWER_OFF;
|
||||
driverTable->buoyancyAdjust5 = DRIVER_POWER_OFF;
|
||||
driverTable->sternRudderServo1 = DRIVER_POWER_OFF;
|
||||
driverTable->sternRudderServo2 = DRIVER_POWER_OFF;
|
||||
driverTable->sternRudderServo3 = DRIVER_POWER_OFF;
|
||||
driverTable->sternRudderServo4 = DRIVER_POWER_OFF;
|
||||
driverTable->thruster = DRIVER_POWER_OFF;
|
||||
driverTable->bowThrow = DRIVER_POWER_OFF;
|
||||
driverTable->sternThrow = DRIVER_POWER_OFF;
|
||||
driverTable->bowCover1 = 0;
|
||||
driverTable->bowCover2 = 0;
|
||||
driverTable->bowCover3 = 0;
|
||||
driverTable->bowCover4 = 0;
|
||||
driverTable->bowCover5 = 0;
|
||||
driverTable->bowCover6 = 0;
|
||||
driverTable->bowRudderDeploy = 0;
|
||||
driverTable->bowRudderServo1 = 0;
|
||||
driverTable->bowRudderServo2 = 0;
|
||||
driverTable->bowWaterlnet1 = 0;
|
||||
driverTable->bowWaterlnet2 = 0;
|
||||
driverTable->bowWaterlnet3 = 0;
|
||||
driverTable->bowWaterlnet4 = 0;
|
||||
driverTable->bowWaterlnet5 = 0;
|
||||
driverTable->bowWaterlnet6 = 0;
|
||||
driverTable->bowWaterlnet7 = 0;
|
||||
driverTable->bowWaterlnet8 = 0;
|
||||
driverTable->waterInject = 0;
|
||||
driverTable->mastLiftingServo = 0;
|
||||
driverTable->buoyancyAdjust1 = 0;
|
||||
driverTable->buoyancyAdjust2 = 0;
|
||||
driverTable->buoyancyAdjust3 = 0;
|
||||
driverTable->buoyancyAdjust4 = 0;
|
||||
driverTable->buoyancyAdjust5 = 0;
|
||||
driverTable->sternRudderServo1 = 0;
|
||||
driverTable->sternRudderServo2 = 0;
|
||||
driverTable->sternRudderServo3 = 0;
|
||||
driverTable->sternRudderServo4 = 0;
|
||||
driverTable->thruster = 0;
|
||||
driverTable->bowThrow = 0;
|
||||
driverTable->sternThrow = 0;
|
||||
}
|
||||
|
||||
void Driver::getSHORE_BASED_READYable(DriverTable* driverTable)
|
||||
|
||||
@@ -360,5 +360,54 @@ typedef struct pmState
|
||||
unsigned int workCMD;
|
||||
}MSControlCmd;
|
||||
|
||||
|
||||
namespace FcuCommand {
|
||||
enum Type : unsigned char {
|
||||
SelfCheck = 0x01,
|
||||
Start = 0x02,
|
||||
Stop = 0x03,
|
||||
Reset = 0x04,
|
||||
EmergencyStop = 0x05,
|
||||
Supply = 0x06,
|
||||
WarmUp = 0x07,
|
||||
Maintenance = 0x08
|
||||
};
|
||||
}
|
||||
|
||||
enum class FcuState : unsigned char {
|
||||
//初始化
|
||||
Init = 0x01,
|
||||
//待机
|
||||
Standby = 0x02,
|
||||
//自检异常
|
||||
SelfCheckError = 0x03,
|
||||
//就绪
|
||||
Ready = 0x04,
|
||||
//启动
|
||||
Start = 0x05,
|
||||
//运行
|
||||
Running = 0x06,
|
||||
//停机
|
||||
Stop = 0x07,
|
||||
//故障
|
||||
Fault = 0x08,
|
||||
//补给
|
||||
Supply = 0x09,
|
||||
//预热
|
||||
WarmUp = 0x0A,
|
||||
//预热完成
|
||||
WarmUpComplete = 0x0B,
|
||||
//维护
|
||||
Maintenance = 0x0C,
|
||||
//维护完成
|
||||
MaintenanceComplete = 0x0D
|
||||
};
|
||||
|
||||
namespace BatteryCommand {
|
||||
enum Type : unsigned char {
|
||||
Start = 0x10,
|
||||
Stop = 0x20
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user