陆工调整关机流程第一版、优化排气提示
This commit is contained in:
+43
-20
@@ -799,6 +799,27 @@ float PID_realize2(float speed, float act){
|
|||||||
|
|
||||||
void InkJetPrinter::pressureAdj()
|
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)
|
if(sysPara->status.gearPumpRunStopFlag || sysPara->status.flagOfSpeedAlarm)
|
||||||
{
|
{
|
||||||
@@ -834,6 +855,8 @@ void InkJetPrinter::pressureAdj()
|
|||||||
|
|
||||||
int actual = sysPara->status.PRESSURE;
|
int actual = sysPara->status.PRESSURE;
|
||||||
int target = (int)sysPara->para.pressure;
|
int target = (int)sysPara->para.pressure;
|
||||||
|
if(sysPara->status.powerOffAppending && target > 650)
|
||||||
|
target = 650; // 关机压力目标不超过650,不修改用户设定值
|
||||||
int err = target - actual; // 正值=压力偏低,负值=压力偏高
|
int err = target - actual; // 正值=压力偏低,负值=压力偏高
|
||||||
|
|
||||||
// 更新滑动平均缓冲
|
// 更新滑动平均缓冲
|
||||||
@@ -849,8 +872,9 @@ void InkJetPrinter::pressureAdj()
|
|||||||
// 检查是否允许状态切换(距上次切换>=800ms)
|
// 检查是否允许状态切换(距上次切换>=800ms)
|
||||||
bool canSwitch = (m_stateChangeCount >= MIN_STATE_INTERVAL);
|
bool canSwitch = (m_stateChangeCount >= MIN_STATE_INTERVAL);
|
||||||
|
|
||||||
// 硬保护:压力严重超标,立即强制停泵(不受800ms限制)
|
// 关机压力上限:超过关机目标10立即停泵,不受状态和800ms切换间隔限制
|
||||||
if(actual > target + 80)
|
int hardStopThreshold = sysPara->status.powerOffAppending ? 10 : 80;
|
||||||
|
if(actual > target + hardStopThreshold)
|
||||||
{
|
{
|
||||||
if(m_pumpState != DPUMP_STOPPED) {
|
if(m_pumpState != DPUMP_STOPPED) {
|
||||||
u = 0.0f;
|
u = 0.0f;
|
||||||
@@ -1331,20 +1355,18 @@ void InkJetPrinter::timerHandler(void){
|
|||||||
ControledSwitchFlag = false;
|
ControledSwitchFlag = false;
|
||||||
pulse_3s = 0;
|
pulse_3s = 0;
|
||||||
}
|
}
|
||||||
// 检测手动→自动边沿,直接恢复压力控制,不走 gearPumpStartFlag 的 3s 等待
|
// 检测手动→自动边沿,恢复压力控制时从停止状态安全重启
|
||||||
if(m_lastByHand && !sysPara->status.isPumpValveControledByHand)
|
if(m_lastByHand && !sysPara->status.isPumpValveControledByHand)
|
||||||
{
|
{
|
||||||
ControledSwitchFlag = true;
|
ControledSwitchFlag = true;
|
||||||
u = (float)sysPara->para.gearPumpValue; // 同步当前转速,避免突变
|
u = 0.0f;
|
||||||
// 重置隔膜泵状态机,从当前转速状态开始
|
sysPara->para.gearPumpValue = 0;
|
||||||
if(u > 40.0f) {
|
sysPara->devOp->WriteMoterPump();
|
||||||
m_pumpState = DPUMP_RUNNING; // 如果当前有转速,进入运行状态
|
m_pumpState = DPUMP_STOPPED;
|
||||||
} else {
|
|
||||||
m_pumpState = DPUMP_STOPPED; // 否则从停止状态开始
|
|
||||||
}
|
|
||||||
m_stateChangeCount = 0;
|
m_stateChangeCount = 0;
|
||||||
m_adjSkip = 0;
|
m_adjSkip = 0;
|
||||||
m_lastActualPressure = 0;
|
m_lastActualPressure = 0;
|
||||||
|
m_startingStepCount = 0;
|
||||||
m_bufValidCount = 0;
|
m_bufValidCount = 0;
|
||||||
for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0;
|
for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0;
|
||||||
m_bufIdx = 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){
|
if(!sysPara->status.selfCheckDone && sysPara->status.isPrinting){
|
||||||
sysPara->status.selfCheckDone = true;
|
sysPara->status.selfCheckDone = true;
|
||||||
@@ -1615,14 +1637,13 @@ void InkJetPrinter::timerHandler(void){
|
|||||||
if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT)
|
if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT)
|
||||||
{
|
{
|
||||||
sysPara->status.selfCheckDone = 1;
|
sysPara->status.selfCheckDone = 1;
|
||||||
u = (float)sysPara->para.gearPumpValue;
|
// 自检完成后管道恢复正常阻力,必须重新从STOPPED状态开始
|
||||||
// 自检完成后管道恢复正常阻力,重置状态机让压力重新平稳收敛
|
// 清零 u 和状态机,让系统根据实际压力重新启动
|
||||||
// 不清零 u,从当前控制字开始,避免突变
|
u = 0.0f; // 关键:清零控制量,避免继承自检期间的大转速
|
||||||
if(u > 40.0f) {
|
sysPara->para.gearPumpValue = 0;
|
||||||
m_pumpState = DPUMP_RUNNING; // 如果当前有转速,进入运行状态
|
sysPara->devOp->WriteMoterPump(); // 立即停泵
|
||||||
} else {
|
|
||||||
m_pumpState = DPUMP_STOPPED; // 否则从停止状态开始
|
m_pumpState = DPUMP_STOPPED; // 强制进入STOPPED状态
|
||||||
}
|
|
||||||
m_stateChangeCount = 0;
|
m_stateChangeCount = 0;
|
||||||
m_adjSkip = 0;
|
m_adjSkip = 0;
|
||||||
m_lastActualPressure = 0;
|
m_lastActualPressure = 0;
|
||||||
@@ -1667,7 +1688,9 @@ void InkJetPrinter::timerHandler(void){
|
|||||||
for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0;
|
for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0;
|
||||||
m_bufIdx = 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();
|
pressureAdj();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -120,6 +120,7 @@ private:
|
|||||||
int m_bufValidCount = 0; // 缓冲区有效点数(用于启动阶段判断)
|
int m_bufValidCount = 0; // 缓冲区有效点数(用于启动阶段判断)
|
||||||
bool m_lastReclaimMode = false; // 上次回收泵使能状态
|
bool m_lastReclaimMode = false; // 上次回收泵使能状态
|
||||||
bool m_lastByHand = false; // 上次手动控制状态
|
bool m_lastByHand = false; // 上次手动控制状态
|
||||||
|
bool m_powerOffPressureControlActive = false; // 关机压力控制已初始化
|
||||||
|
|
||||||
// 隔膜泵控制函数
|
// 隔膜泵控制函数
|
||||||
float calculateTargetSpeed(int err);
|
float calculateTargetSpeed(int err);
|
||||||
|
|||||||
+19
-20
@@ -2079,7 +2079,11 @@ void MainWindow::airPushingProcess()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000){
|
if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000){
|
||||||
|
|
||||||
|
if(sysPara->devOp->isViscosityPumpOpen())
|
||||||
sysPara->devOp->controlViscosityPump(false);
|
sysPara->devOp->controlViscosityPump(false);
|
||||||
|
|
||||||
|
if(sysPara->devOp->isCycleValveOpen())
|
||||||
sysPara->devOp->controlCycleValve(false);
|
sysPara->devOp->controlCycleValve(false);
|
||||||
|
|
||||||
if(!sysPara->devOp->isReclaimPumpOpen())
|
if(!sysPara->devOp->isReclaimPumpOpen())
|
||||||
@@ -2225,13 +2229,16 @@ void MySleep(unsigned int msec);
|
|||||||
* 关机前务必保存参数
|
* 关机前务必保存参数
|
||||||
* */
|
* */
|
||||||
void MainWindow::checkForPowerOff(){
|
void MainWindow::checkForPowerOff(){
|
||||||
|
if(m_powerOffInProgress)
|
||||||
|
return;
|
||||||
|
|
||||||
if(sysPara->status.powerOffAppending){
|
if(sysPara->status.powerOffAppending){
|
||||||
|
m_powerOffInProgress = true;
|
||||||
if(!sysPara->status.selfCheckDone)
|
if(!sysPara->status.selfCheckDone)
|
||||||
sysPara->status.selfCheckDone = true;
|
sysPara->status.selfCheckDone = true;
|
||||||
this->setDisabled(true);
|
this->setDisabled(true);
|
||||||
emit setDisableAll();
|
emit setDisableAll();
|
||||||
////////关机时提高转速和回收泵压力,粘度泵和循环阀/////
|
////////关机时通过闭环控制维持压力,控制目标不超过650/////
|
||||||
quint16 gearPumpValue_backup = sysPara->para.gearPumpValue;
|
|
||||||
int reclaimPumpPWMWidth_backup = sysPara->para.reclaimPumpPWMWidth;;
|
int reclaimPumpPWMWidth_backup = sysPara->para.reclaimPumpPWMWidth;;
|
||||||
if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN))
|
if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN))
|
||||||
{
|
{
|
||||||
@@ -2257,17 +2264,11 @@ void MainWindow::checkForPowerOff(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
sysPara->devOp->controlReclaimTankOpen(true);
|
sysPara->devOp->controlReclaimTankOpen(true);
|
||||||
sysPara->status.isPumpValveControledByHand = true; //停止自动
|
sysPara->status.isPumpValveControledByHand = true; // 阀门保持手动,隔膜泵由关机闭环控制
|
||||||
if(sysPara->para.gearPumpEnable ){
|
if(sysPara->para.gearPumpEnable ){
|
||||||
if(!sysPara->para.flagOfReclaimPumEnable){
|
if(sysPara->para.flagOfReclaimPumEnable)
|
||||||
sysPara->para.gearPumpValue = 360;
|
|
||||||
sysPara->devOp->WriteMoterPump();
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
sysPara->devOp->controlReclaimPump(true,false);
|
sysPara->devOp->controlReclaimPump(true,false);
|
||||||
sysPara->para.gearPumpValue = 0;
|
// 不再固定输出360,隔膜泵由pressureAdj按关机目标压力闭环调节
|
||||||
sysPara->devOp->WriteMoterPump();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
sysPara->para.reclaimPumpPWMWidth = 95;
|
sysPara->para.reclaimPumpPWMWidth = 95;
|
||||||
@@ -2298,7 +2299,10 @@ void MainWindow::checkForPowerOff(){
|
|||||||
updateTotalCnt(0);
|
updateTotalCnt(0);
|
||||||
sysPara->saveParaToFile(); // 关机前将相关配置保存
|
sysPara->saveParaToFile(); // 关机前将相关配置保存
|
||||||
}
|
}
|
||||||
|
// 退出关机压力维持阶段,后续关闭泵阀时禁止隔膜泵再次启动
|
||||||
sysPara->status.powerOffAppending = false;
|
sysPara->status.powerOffAppending = false;
|
||||||
|
sysPara->para.gearPumpValue = 0;
|
||||||
|
sysPara->devOp->WriteMoterPump();
|
||||||
if(!TEST_MODE){
|
if(!TEST_MODE){
|
||||||
for(int i=7;i>0;i--)
|
for(int i=7;i>0;i--)
|
||||||
{
|
{
|
||||||
@@ -2317,7 +2321,8 @@ void MainWindow::checkForPowerOff(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
emit CloseJd();
|
emit CloseJd();
|
||||||
sysPara->para.gearPumpValue=gearPumpValue_backup;
|
sysPara->para.gearPumpValue = 0;
|
||||||
|
sysPara->devOp->WriteMoterPump();
|
||||||
sysPara->para.reclaimPumpPWMWidth = reclaimPumpPWMWidth_backup;
|
sysPara->para.reclaimPumpPWMWidth = reclaimPumpPWMWidth_backup;
|
||||||
sysPara->devOp->controlCompressPump(false);
|
sysPara->devOp->controlCompressPump(false);
|
||||||
setRunStatus(tr("准备关机......"));
|
setRunStatus(tr("准备关机......"));
|
||||||
@@ -4435,15 +4440,9 @@ void MainWindow::on_pushButton_Reboot_clicked()
|
|||||||
sysPara->devOp->controlReclaimTankOpen(true);
|
sysPara->devOp->controlReclaimTankOpen(true);
|
||||||
sysPara->status.isPumpValveControledByHand = true; //停止自动
|
sysPara->status.isPumpValveControledByHand = true; //停止自动
|
||||||
if(sysPara->para.gearPumpEnable ){
|
if(sysPara->para.gearPumpEnable ){
|
||||||
if(!sysPara->para.flagOfReclaimPumEnable){
|
if(sysPara->para.flagOfReclaimPumEnable)
|
||||||
sysPara->para.gearPumpValue = 360;
|
|
||||||
sysPara->devOp->WriteMoterPump();
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
sysPara->devOp->controlReclaimPump(true,false);
|
sysPara->devOp->controlReclaimPump(true,false);
|
||||||
sysPara->para.gearPumpValue = 0;
|
// 不再固定输出360,由闭环控制维持压力
|
||||||
sysPara->devOp->WriteMoterPump();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
sysPara->para.reclaimPumpPWMWidth = 95;
|
sysPara->para.reclaimPumpPWMWidth = 95;
|
||||||
|
|||||||
@@ -243,6 +243,7 @@ private:
|
|||||||
bool printingFlag; //判断当前是否在打印
|
bool printingFlag; //判断当前是否在打印
|
||||||
bool startPrintingFlag;
|
bool startPrintingFlag;
|
||||||
bool previewFlag;
|
bool previewFlag;
|
||||||
|
bool m_powerOffInProgress = false; // 防止MySleep处理事件时重复进入关机流程
|
||||||
|
|
||||||
int searchExpiryVar(QString html = "");//检索有效期变量
|
int searchExpiryVar(QString html = "");//检索有效期变量
|
||||||
void ExpiryDotUpdate(char Mode);
|
void ExpiryDotUpdate(char Mode);
|
||||||
|
|||||||
Reference in New Issue
Block a user