hlp:更新翻译、喷嘴到底后等至少3秒检查相检、状态机统一打印和回收槽状态、修复数字键盘输入bug

This commit is contained in:
kite_lucs
2026-09-18 15:20:13 +08:00
35 changed files with 3840 additions and 3113 deletions
+62 -42
View File
@@ -31,17 +31,6 @@ PrinterStateManager::~PrinterStateManager()
}
}
void PrinterStateManager::initTimer()
{
if (m_updateUITimer == NULL) {
m_updateUITimer = new QTimer();
connect(m_updateUITimer, &QTimer::timeout, this,
&PrinterStateManager::slt_timeout);
m_updateUITimer->setInterval(50);
m_updateUITimer->setSingleShot(true);
}
}
QString PrinterStateManager::stateName() const
{
switch (m_currentState) {
@@ -149,30 +138,23 @@ void PrinterStateManager::requestTransition(PrinterEvent event)
setState(trans->toState, trans->description);
}
static int f = 0;
void PrinterStateManager::checkReadyState()
{
// 自检完成后,随时检查能否进入READY状态
if (m_currentState == PrinterState::SELF_CHECK) {
if (m_sysPara) {
if (f ++ > 50) {
f = 0;
LogInfo::setRunStatusText
(QString("%3:%1---airPushing:%2")
.arg(m_sysPara->status.reclaimTankstatus)
.arg(m_sysPara->status.airPushing)
.arg(stateName()));
}
// 现在还有个压力稳定期,期间也不能切换状态
if (m_sysPara->status.airPushing) {
emit sig_enableOpenTank(false);
emit sig_enableCloseTank(false);
return;
}
switch (m_sysPara->status.reclaimTankstatus) {
case 5:
setState(PrinterState::READY, "READY");
emit sig_updateReclaimStatus();
// 检测压力波动 -10~10,检测 3 秒,相位故障 检测3秒,总时长不超过60秒
if (!isState(PrinterState::READY)) {
if (m_canReadyTimer) m_canReadyTimer->start();
}
break;
default:
// 回收槽状态变化后就更新一次
@@ -202,8 +184,9 @@ void PrinterStateManager::setState(PrinterState newState, const QString& reason)
qDebug() << "State changed:" << stateName() << "Reason:" << reason;
if (m_updateUITimer && !m_updateUITimer->isActive())
if (m_updateUITimer && !m_updateUITimer->isActive()) {
m_updateUITimer->start();
}
// 发送信号通知外部
emit sig_stateChanged(newState, m_previousState, reason);
@@ -227,30 +210,22 @@ QString PrinterStateManager::stateNameFromEnum(PrinterState state) const
// ============ 守卫条件函数 ============
static char times = 0;
bool PrinterStateManager::guardReclaimTankOpen()
{
if (!m_sysPara) return false;
if (times ++ > 50) {
times = 0;
LogInfo::setRunStatusText(QString("guardReclaimTankOpen:%1").arg(m_sysPara->status.reclainTankReachEnd));
LogInfo::setRunStatusText(QString("reclaimTankstatus:%1").arg(m_sysPara->status.reclaimTankstatus));
}
// 开完成和关完成后,回收槽状态会变成0
return m_sysPara->status.reclainTankReachEnd || (m_sysPara->status.reclaimTankstatus == 5);
}
bool PrinterStateManager::guardInkSwintOpen()
{
if (!m_sysPara) return false;
LogInfo::setRunStatusText("guardInkSwintOpen:" + !(m_sysPara->status.statWarn & WARN_STATUS_INK_SWINT));
return !(m_sysPara->status.statWarn & WARN_STATUS_INK_SWINT);
}
bool PrinterStateManager::guardNoError()
{
if (!m_sysPara) return false;
LogInfo::setRunStatusText("guardNoError:" + (m_sysPara->status.statWarn == 0));
return m_sysPara->status.statWarn == 0;
}
@@ -269,8 +244,7 @@ bool PrinterStateManager::guardNoSolventWarn()
bool PrinterStateManager::guardSelfCheckDone()
{
if (!m_sysPara) return false;
LogInfo::setRunStatusText("guardSelfCheckDone:" + m_sysPara->status.selfCheckDone);
return m_sysPara->status.selfCheckDone == true;
return m_sysPara->status.selfCheckDone;
}
bool PrinterStateManager::guardCanStartPrint()
@@ -282,15 +256,34 @@ bool PrinterStateManager::guardCanStartPrint()
guardNoError() && guardSelfCheckDone();
}
void PrinterStateManager::slt_timeout()
void PrinterStateManager::initTimer()
{
if (m_updateUITimer == NULL) {
m_updateUITimer = new QTimer();
connect(m_updateUITimer, &QTimer::timeout, this,
&PrinterStateManager::slt_timeoutUI);
m_updateUITimer->setInterval(50);
m_updateUITimer->setSingleShot(true);
}
if (m_canReadyTimer == NULL) {
m_canReadyTimer = new QTimer();
connect(m_canReadyTimer, &QTimer::timeout, this,
&PrinterStateManager::slt_timeoutReady);
m_canReadyTimer->setInterval(500);
}
}
void PrinterStateManager::slt_timeoutUI()
{
if (m_sysPara) {
LogInfo::setRunStatusText(QString("slt_timeout ENTER:%1--state:%2--airPushing:%3")
LogInfo::setRunStatusText(QString("slt_timeout ENTER:%1--state:%2")
.arg(stateName())
.arg(m_sysPara->status.reclaimTankstatus)
.arg(m_sysPara->status.airPushing));
.arg(m_sysPara->status.reclaimTankstatus));
switch (m_sysPara->status.reclaimTankstatus) {
case 0:
emit sig_updateReclaimStatus();
break;
case 1: // 开
emit sig_enableOpenTank(false);
emit sig_enableCloseTank(true);
@@ -303,8 +296,6 @@ void PrinterStateManager::slt_timeout()
case 4:
break;
case 5: // 开完成
// emit sig_enableStartPrint(true);
// emit sig_enableStopPrint(true);
emit sig_enableOpenTank(false);
emit sig_enableCloseTank(true);
break;
@@ -342,3 +333,32 @@ void PrinterStateManager::slt_timeout()
// 避免发出太多信号
if (m_updateUITimer) m_updateUITimer->stop();
}
static short allTimes = 0;
static short checkTimes = 0;
void PrinterStateManager::slt_timeoutReady()
{
allTimes++; //3s(checkTimes=6)一个周期,不超过60秒
if (allTimes > 120) {
if (m_canReadyTimer) m_canReadyTimer->stop();
allTimes = 0;
checkTimes = 0;
emit sig_closeTank();
emit sig_infoMsg(tr("相位故障,回收喷嘴"));
}
emit sig_infoMsg(tr("检查相位中..."));
// 检查相位,如果有一个错误,就重新开始累计
if (m_sysPara->status.lastPhaseFault) { checkTimes = 0; }
// 累计6次(3秒)后,再进入READY状态
if (checkTimes++ > 5){
if (m_canReadyTimer) m_canReadyTimer->stop();
checkTimes = 0;
setState(PrinterState::READY, "READY");
emit sig_infoMsg(tr("检查完毕"));
}
}
+11 -4
View File
@@ -69,6 +69,11 @@ signals:
// 更新回收槽状态
void sig_updateReclaimStatus();
// 收回收槽
void sig_closeTank();
// 提示信息
void sig_infoMsg(QString);
private:
PrinterStateManager();
~PrinterStateManager();
@@ -79,9 +84,6 @@ private:
PrinterState m_currentState = PrinterState::IDLE;
PrinterState m_previousState = PrinterState::IDLE;
QTimer* m_updateUITimer = NULL;
void initTimer();
// 状态转移表
// 守卫条件函数类型
using GuardFunc = std::function<bool()>;
@@ -129,7 +131,12 @@ private:
// 检查是否满足所有打印条件
bool guardCanStartPrint();
private:
QTimer* m_updateUITimer = NULL; //更新按钮UI
QTimer* m_canReadyTimer = NULL; //回收槽到底后检查是否满足打印条件
void initTimer();
private slots:
void slt_timeout();
void slt_timeoutUI();
void slt_timeoutReady();
};
#endif // PRINTERSTATEMANAGER_H