Files
VX5_KRO_GearPump/StateMachine/printerstatemanager.h
T

115 lines
2.9 KiB
C++

#ifndef PRINTERSTATEMANAGER_H
#define PRINTERSTATEMANAGER_H
#include <QObject>
#include <QVector>
#include "SysPara.h"
enum class PrinterState {
IDLE, // 空闲
SELF_CHECK, // 自检中
READY, // 就绪
PRINTING, // 打印中
STOPPING, // 停止中
ERROR, // 故障
POWER_OFF, // 关机中
NORMAL // 一种常规状态,表明机器运行中,true
};
enum class PrinterEvent {
PowerOn,
SelfCheckDone,
SelfCheckFailed,
StartPrint,
StopPrint,
StopComplete,
ErrorOccurred,
ErrorCleared,
PowerOff,
PowerOffDone
};
class PrinterStateManager : public QObject
{
Q_OBJECT
public:
static PrinterStateManager* instance();
// 绑定 sysPara(用于守卫条件)
void bindSysPara(SysPara* para) { m_sysPara = para; }
// ============ 状态查询 ============
PrinterState currentState() const { return m_currentState; }
QString stateName() const;
bool isState(PrinterState state) const { return m_currentState == state; }
bool canStartPrint() const { return m_currentState == PrinterState::READY; }
bool canStopPrint() const { return m_currentState == PrinterState::PRINTING; }
// ============ 状态管理 ============
// 初始化状态(只在开机时调用一次)
void initFromSysPara();
// 外部唯一接口:请求切换状态
void requestTransition(PrinterEvent event);
signals:
// 状态变化信号(外部监听执行具体业务)
void sig_stateChanged(PrinterState newState, PrinterState oldState, QString reason);
private:
PrinterStateManager();
~PrinterStateManager();
SysPara* m_sysPara = nullptr;
static PrinterStateManager* s_instance;
PrinterState m_currentState = PrinterState::IDLE;
PrinterState m_previousState = PrinterState::IDLE;
// 状态转移表
// 守卫条件函数类型
using GuardFunc = std::function<bool()>;
struct Transition {
PrinterState fromState;
PrinterEvent event;
PrinterState toState;
QString description;
GuardFunc guard;
};
QVector<Transition> m_transitions;
void initTransitions();
Transition* findTransition(PrinterEvent event);
// 内部状态切换(不对外暴露)
void setState(PrinterState newState, const QString& reason = "");
QString stateNameFromEnum(PrinterState state) const;
// ============ 守卫条件函数 ============
// 检查回收槽是否已打开
bool guardReclaimTankOpen();
// 检查墨线是否已打开
bool guardInkSwintOpen();
// 检查是否无故障
bool guardNoError();
// 检查是否无墨水警告
bool guardNoInkWarn();
// 检查是否无溶剂警告
bool guardNoSolventWarn();
// 检查自检是否已完成
bool guardSelfCheckDone();
// 检查是否满足所有打印条件
bool guardCanStartPrint();
};
#endif // PRINTERSTATEMANAGER_H