hlp:merge
This commit is contained in:
+57
-27
@@ -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;
|
||||
@@ -1395,7 +1417,7 @@ void InkJetPrinter::timerHandler(void){
|
||||
test_flag = 0;
|
||||
}
|
||||
if(pulse_1s) {
|
||||
if(sysPara->status.selfCheckDone && sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable)
|
||||
if(sysPara->status.selfCheckDone && sysPara->para.gearPumpEnable)
|
||||
checkPressureControl();
|
||||
if((QTime::currentTime()>=QTime(00,00,00))&&(QTime::currentTime()<=QTime(00,00,02))&&sysPara->para.Reciclar){
|
||||
if(ui->tabMainWindow->getCurrPrintStatus() != 1){
|
||||
@@ -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;
|
||||
@@ -1663,16 +1684,25 @@ void InkJetPrinter::timerHandler(void){
|
||||
m_lastReclaimMode = sysPara->para.flagOfReclaimPumEnable;
|
||||
gearPumpRunNormalFlag = false; // 泄漏保护重新学习
|
||||
gearPumpRunNormalValue = 0.0f;
|
||||
// 重置隔膜泵状态机,适应新模式
|
||||
m_pumpState = DPUMP_STOPPED;
|
||||
m_stateChangeCount = 0;
|
||||
m_adjSkip = 0;
|
||||
m_lastActualPressure = 0;
|
||||
m_bufValidCount = 0;
|
||||
// 重置隔膜泵状态机,适应新模式
|
||||
u = 0.0f;
|
||||
pid.integral = 0.0f;
|
||||
pid.err_last = 0.0f;
|
||||
sysPara->para.gearPumpValue = 0;
|
||||
sysPara->devOp->WriteMoterPump();
|
||||
if(!sysPara->para.flagOfReclaimPumEnable)
|
||||
sysPara->devOp->controlReclaimPump(false, false);
|
||||
m_pumpState = DPUMP_STOPPED;
|
||||
m_stateChangeCount = 0;
|
||||
m_adjSkip = 0;
|
||||
m_lastActualPressure = 0;
|
||||
m_bufValidCount = 0;
|
||||
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();
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user