陆工调整关机流程第一版、优化排气提示

This commit is contained in:
2026-09-07 15:51:08 +08:00
parent 0fa8ce4b51
commit fbdd064adb
12 changed files with 7025 additions and 7001 deletions
+43 -20
View File
@@ -799,6 +799,27 @@ float PID_realize2(float speed, float act){
void InkJetPrinter::pressureAdj()
{
// 关机压力控制首次进入时从停泵状态重新开始,禁止继承正常运行或手动控制转速
if(sysPara->status.powerOffAppending && !m_powerOffPressureControlActive)
{
u = 0.0f;
sysPara->para.gearPumpValue = 0;
m_pumpState = DPUMP_STOPPED;
m_stateChangeCount = 0;
m_adjSkip = 0;
m_lastActualPressure = 0;
m_startingStepCount = 0;
m_bufValidCount = 0;
for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0;
m_bufIdx = 0;
sysPara->devOp->WriteMoterPump();
m_powerOffPressureControlActive = true;
}
else if(!sysPara->status.powerOffAppending)
{
m_powerOffPressureControlActive = false;
}
// 故障停机处理
if(sysPara->status.gearPumpRunStopFlag || sysPara->status.flagOfSpeedAlarm)
{
@@ -834,6 +855,8 @@ void InkJetPrinter::pressureAdj()
int actual = sysPara->status.PRESSURE;
int target = (int)sysPara->para.pressure;
if(sysPara->status.powerOffAppending && target > 650)
target = 650; // 关机压力目标不超过650,不修改用户设定值
int err = target - actual; // 正值=压力偏低,负值=压力偏高
// 更新滑动平均缓冲
@@ -849,8 +872,9 @@ void InkJetPrinter::pressureAdj()
// 检查是否允许状态切换(距上次切换>=800ms)
bool canSwitch = (m_stateChangeCount >= MIN_STATE_INTERVAL);
// 硬保护:压力严重超标,立即强制停泵(不受800ms限制)
if(actual > target + 80)
// 关机压力上限:超过关机目标10立即停泵,不受状态和800ms切换间隔限制
int hardStopThreshold = sysPara->status.powerOffAppending ? 10 : 80;
if(actual > target + hardStopThreshold)
{
if(m_pumpState != DPUMP_STOPPED) {
u = 0.0f;
@@ -1331,20 +1355,18 @@ void InkJetPrinter::timerHandler(void){
ControledSwitchFlag = false;
pulse_3s = 0;
}
// 检测手动→自动边沿,直接恢复压力控制,不走 gearPumpStartFlag 的 3s 等待
// 检测手动→自动边沿,恢复压力控制时从停止状态安全重启
if(m_lastByHand && !sysPara->status.isPumpValveControledByHand)
{
ControledSwitchFlag = true;
u = (float)sysPara->para.gearPumpValue; // 同步当前转速,避免突变
// 重置隔膜泵状态机,从当前转速状态开始
if(u > 40.0f) {
m_pumpState = DPUMP_RUNNING; // 如果当前有转速,进入运行状态
} else {
m_pumpState = DPUMP_STOPPED; // 否则从停止状态开始
}
u = 0.0f;
sysPara->para.gearPumpValue = 0;
sysPara->devOp->WriteMoterPump();
m_pumpState = DPUMP_STOPPED;
m_stateChangeCount = 0;
m_adjSkip = 0;
m_lastActualPressure = 0;
m_startingStepCount = 0;
m_bufValidCount = 0;
for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0;
m_bufIdx = 0;
@@ -1567,7 +1589,7 @@ void InkJetPrinter::timerHandler(void){
}
}
if(gearPumpRunFlag || sysPara->para.gearPumpEnable == 0)
if(gearPumpRunFlag || sysPara->para.gearPumpEnable == 0 || sysPara->status.powerOffAppending)
{
if(!sysPara->status.selfCheckDone && sysPara->status.isPrinting){
sysPara->status.selfCheckDone = true;
@@ -1615,14 +1637,13 @@ void InkJetPrinter::timerHandler(void){
if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT)
{
sysPara->status.selfCheckDone = 1;
u = (float)sysPara->para.gearPumpValue;
// 自检完成后管道恢复正常阻力,重置状态机让压力重新平稳收敛
// 不清零 u,从当前控制字开始,避免突变
if(u > 40.0f) {
m_pumpState = DPUMP_RUNNING; // 如果当前有转速,进入运行状态
} else {
m_pumpState = DPUMP_STOPPED; // 否则从停止状态开始
}
// 自检完成后管道恢复正常阻力,必须重新从STOPPED状态开始
// 清零 u 和状态机,让系统根据实际压力重新启动
u = 0.0f; // 关键:清零控制量,避免继承自检期间的大转速
sysPara->para.gearPumpValue = 0;
sysPara->devOp->WriteMoterPump(); // 立即停泵
m_pumpState = DPUMP_STOPPED; // 强制进入STOPPED状态
m_stateChangeCount = 0;
m_adjSkip = 0;
m_lastActualPressure = 0;
@@ -1667,7 +1688,9 @@ void InkJetPrinter::timerHandler(void){
for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0;
m_bufIdx = 0;
}
if(pulse_100ms && sysPara->para.gearPumpEnable && !sysPara->status.isPumpValveControledByHand && ControledSwitchFlag ) {
if(pulse_100ms && sysPara->para.gearPumpEnable &&
(sysPara->status.powerOffAppending ||
(!sysPara->status.isPumpValveControledByHand && ControledSwitchFlag))) {
pressureAdj();
}