陆工调整关机流程第一版、优化排气提示
This commit is contained in:
+43
-20
@@ -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();
|
||||
|
||||
}
|
||||
|
||||
@@ -120,6 +120,7 @@ private:
|
||||
int m_bufValidCount = 0; // 缓冲区有效点数(用于启动阶段判断)
|
||||
bool m_lastReclaimMode = false; // 上次回收泵使能状态
|
||||
bool m_lastByHand = false; // 上次手动控制状态
|
||||
bool m_powerOffPressureControlActive = false; // 关机压力控制已初始化
|
||||
|
||||
// 隔膜泵控制函数
|
||||
float calculateTargetSpeed(int err);
|
||||
|
||||
+21
-22
@@ -2079,8 +2079,12 @@ void MainWindow::airPushingProcess()
|
||||
}
|
||||
|
||||
if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000){
|
||||
sysPara->devOp->controlViscosityPump(false);
|
||||
sysPara->devOp->controlCycleValve(false);
|
||||
|
||||
if(sysPara->devOp->isViscosityPumpOpen())
|
||||
sysPara->devOp->controlViscosityPump(false);
|
||||
|
||||
if(sysPara->devOp->isCycleValveOpen())
|
||||
sysPara->devOp->controlCycleValve(false);
|
||||
|
||||
if(!sysPara->devOp->isReclaimPumpOpen())
|
||||
sysPara->devOp->controlReclaimPump(true, false);
|
||||
@@ -2225,13 +2229,16 @@ void MySleep(unsigned int msec);
|
||||
* 关机前务必保存参数
|
||||
* */
|
||||
void MainWindow::checkForPowerOff(){
|
||||
if(m_powerOffInProgress)
|
||||
return;
|
||||
|
||||
if(sysPara->status.powerOffAppending){
|
||||
m_powerOffInProgress = true;
|
||||
if(!sysPara->status.selfCheckDone)
|
||||
sysPara->status.selfCheckDone = true;
|
||||
this->setDisabled(true);
|
||||
emit setDisableAll();
|
||||
////////关机时提高转速和回收泵压力,粘度泵和循环阀/////
|
||||
quint16 gearPumpValue_backup = sysPara->para.gearPumpValue;
|
||||
////////关机时通过闭环控制维持压力,控制目标不超过650/////
|
||||
int reclaimPumpPWMWidth_backup = sysPara->para.reclaimPumpPWMWidth;;
|
||||
if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN))
|
||||
{
|
||||
@@ -2257,17 +2264,11 @@ void MainWindow::checkForPowerOff(){
|
||||
}
|
||||
}
|
||||
sysPara->devOp->controlReclaimTankOpen(true);
|
||||
sysPara->status.isPumpValveControledByHand = true; //停止自动
|
||||
sysPara->status.isPumpValveControledByHand = true; // 阀门保持手动,隔膜泵由关机闭环控制
|
||||
if(sysPara->para.gearPumpEnable ){
|
||||
if(!sysPara->para.flagOfReclaimPumEnable){
|
||||
sysPara->para.gearPumpValue = 360;
|
||||
sysPara->devOp->WriteMoterPump();
|
||||
}
|
||||
else{
|
||||
if(sysPara->para.flagOfReclaimPumEnable)
|
||||
sysPara->devOp->controlReclaimPump(true,false);
|
||||
sysPara->para.gearPumpValue = 0;
|
||||
sysPara->devOp->WriteMoterPump();
|
||||
}
|
||||
// 不再固定输出360,隔膜泵由pressureAdj按关机目标压力闭环调节
|
||||
}
|
||||
else{
|
||||
sysPara->para.reclaimPumpPWMWidth = 95;
|
||||
@@ -2298,7 +2299,10 @@ void MainWindow::checkForPowerOff(){
|
||||
updateTotalCnt(0);
|
||||
sysPara->saveParaToFile(); // 关机前将相关配置保存
|
||||
}
|
||||
// 退出关机压力维持阶段,后续关闭泵阀时禁止隔膜泵再次启动
|
||||
sysPara->status.powerOffAppending = false;
|
||||
sysPara->para.gearPumpValue = 0;
|
||||
sysPara->devOp->WriteMoterPump();
|
||||
if(!TEST_MODE){
|
||||
for(int i=7;i>0;i--)
|
||||
{
|
||||
@@ -2317,7 +2321,8 @@ void MainWindow::checkForPowerOff(){
|
||||
}
|
||||
}
|
||||
emit CloseJd();
|
||||
sysPara->para.gearPumpValue=gearPumpValue_backup;
|
||||
sysPara->para.gearPumpValue = 0;
|
||||
sysPara->devOp->WriteMoterPump();
|
||||
sysPara->para.reclaimPumpPWMWidth = reclaimPumpPWMWidth_backup;
|
||||
sysPara->devOp->controlCompressPump(false);
|
||||
setRunStatus(tr("准备关机......"));
|
||||
@@ -4435,15 +4440,9 @@ void MainWindow::on_pushButton_Reboot_clicked()
|
||||
sysPara->devOp->controlReclaimTankOpen(true);
|
||||
sysPara->status.isPumpValveControledByHand = true; //停止自动
|
||||
if(sysPara->para.gearPumpEnable ){
|
||||
if(!sysPara->para.flagOfReclaimPumEnable){
|
||||
sysPara->para.gearPumpValue = 360;
|
||||
sysPara->devOp->WriteMoterPump();
|
||||
}
|
||||
else{
|
||||
if(sysPara->para.flagOfReclaimPumEnable)
|
||||
sysPara->devOp->controlReclaimPump(true,false);
|
||||
sysPara->para.gearPumpValue = 0;
|
||||
sysPara->devOp->WriteMoterPump();
|
||||
}
|
||||
// 不再固定输出360,由闭环控制维持压力
|
||||
}
|
||||
else{
|
||||
sysPara->para.reclaimPumpPWMWidth = 95;
|
||||
|
||||
@@ -243,6 +243,7 @@ private:
|
||||
bool printingFlag; //判断当前是否在打印
|
||||
bool startPrintingFlag;
|
||||
bool previewFlag;
|
||||
bool m_powerOffInProgress = false; // 防止MySleep处理事件时重复进入关机流程
|
||||
|
||||
int searchExpiryVar(QString html = "");//检索有效期变量
|
||||
void ExpiryDotUpdate(char Mode);
|
||||
|
||||
Reference in New Issue
Block a user