添加自检粘度计测试、弃用状态机、修改电眼设置默认最小值

This commit is contained in:
2026-09-09 18:14:40 +08:00
parent dc2004506b
commit 5f96e8d592
4 changed files with 203 additions and 147 deletions
+176 -133
View File
@@ -1026,17 +1026,17 @@ void InkJetPrinter::timerHandler(void){
m_MainWidget->setRunStatus(tr("开始自检,请等待%1秒..."). m_MainWidget->setRunStatus(tr("开始自检,请等待%1秒...").
arg((MAX_SELF_CHECK_CNT - sysPara->status.selfCheckCnt)/100)); arg((MAX_SELF_CHECK_CNT - sysPara->status.selfCheckCnt)/100));
} }
#ifdef QT_DEBUG #ifdef BNS_DEBUG
if(sysPara->status.selfCheckCnt >= 500) // 测试自检改为15s if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT) // 测试自检改为15s
#else #else
if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT) if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT)
#endif #endif
{ {
// sysPara->status.selfCheckDone = true; sysPara->status.selfCheckDone = true;
// 通过状态管理器发送事件,在 onStateChanged 中更新 sysPara // 通过状态管理器发送事件,在 onStateChanged 中更新 sysPara
if (m_stateManager && m_stateManager->isState(PrinterState::SELF_CHECK)) { // if (m_stateManager && m_stateManager->isState(PrinterState::SELF_CHECK)) {
m_stateManager->requestTransition(PrinterEvent::SelfCheckDone); // m_stateManager->requestTransition(PrinterEvent::SelfCheckDone);
} // }
// 自检完成后管道恢复正常阻力,重置软启动让压力重新平稳收敛 // 自检完成后管道恢复正常阻力,重置软启动让压力重新平稳收敛
// 不清零 u,从当前控制字开始,避免突变 // 不清零 u,从当前控制字开始,避免突变
@@ -1833,8 +1833,8 @@ void InkJetPrinter::initStateManager()
m_stateManager = PrinterStateManager::instance(); m_stateManager = PrinterStateManager::instance();
// 连接状态变化信号 DirectConnection:确保相关状态实时更新 // 连接状态变化信号 DirectConnection:确保相关状态实时更新
connect(m_stateManager, &PrinterStateManager::sig_stateChanged, // connect(m_stateManager, &PrinterStateManager::sig_stateChanged,
this, &InkJetPrinter::slt_stateChanged, Qt::DirectConnection); // this, &InkJetPrinter::slt_stateChanged, Qt::DirectConnection);
// ============ 开机时重置状态 ============ // ============ 开机时重置状态 ============
m_stateManager->initFromSysPara(); m_stateManager->initFromSysPara();
@@ -1880,8 +1880,6 @@ void InkJetPrinter::handleReady()
void InkJetPrinter::handleStartPrint() void InkJetPrinter::handleStartPrint()
{ {
sysPara->status.isPrinting = true; sysPara->status.isPrinting = true;
sysPara->devOp->highVoltageCtrl(1); sysPara->devOp->highVoltageCtrl(1);
sysPara->devOp->setHighVoltageAmplitudetoSTM32(); sysPara->devOp->setHighVoltageAmplitudetoSTM32();
@@ -2453,130 +2451,13 @@ void InkJetPrinter::autoControlValvePump(void)
/*------------------------------------粘度泵,混合阀-----------------------------------------*/ /*------------------------------------粘度泵,混合阀-----------------------------------------*/
if(sysPara->status.selfCheckDone)
autoControlViscosityPump();
else
autoControlViscosityPumpForSelfCheck(sysPara->status.selfCheckCnt);
/*-----------------------------每30s打开一次粘度泵以及相关处理--------------------------------------*/ /*-----------------------------每30s打开一次粘度泵以及相关处理--------------------------------------*/
static bool hasDetectedBellow = false; // 检测到下位灯
static bool hasDetectedTop = false; // 检测到上位灯
static int viscosity_low = 0; //统计粘度连续偏低10%次数
static unsigned char Mixing_valve_open = 0; //统计粘度连续偏高5%次数
static unsigned char viscosity_faulty_num = 0; //统计粘度连续偏高13%次数
static bool flag = 0;
if(sysPara->status.cycleValveOpenCntAfterSWintOff) { //关闭墨线的时候要提前开粘度泵
sysPara->status.viscosityDelayCnt = sysPara->para.viscosityPumpInterval*100 + 100;
}
++sysPara->status.viscosityDelayCnt;
int mixer_open_threshold = (105*sysPara->para.viscosity)/100;
int viscosity_faulty_threshold =(113*sysPara->para.viscosity)/100;
if(sysPara->status.viscosityDelayCnt >= sysPara->para.viscosityPumpInterval*100 && flag == 0)
{
flag=1;
if (!sysPara->devOp->isViscosityPumpOpen())
{
sysPara->devOp->controlViscosityPump(true);
viscosity_timer->start(10000);
qDebug()<<"粘度: "<<QString::number(sysPara->status.viscosity);
}
if((sysPara->status.viscosity >= 90*sysPara->para.viscosity/100) && (sysPara->status.viscosity <= mixer_open_threshold))
{
sysPara->status.viscosityFault = 0;
viscosity_low=0;
Mixing_valve_open = 0;
viscosity_faulty_num = 0;
}
if(sysPara->status.viscosity < 90*sysPara->para.viscosity/100)
{
viscosity_low++;
viscosity_faulty_num = 0;
Mixing_valve_open = 0;
}
if(sysPara->status.viscosity > mixer_open_threshold && sysPara->status.viscosity <= viscosity_faulty_threshold)
{
Mixing_valve_open++;
viscosity_low = 0;
viscosity_faulty_num = 0;
}
if(sysPara->status.viscosity > viscosity_faulty_threshold){
Mixing_valve_open++;
viscosity_faulty_num++;
viscosity_low = 0;
}
if((!sysPara->devOp->isMixValveOpen()) && (((Mixing_valve_open > 1) && (!sysPara->para.gearPumpEnable)) || ((Mixing_valve_open > 4) && sysPara->para.gearPumpEnable))) { //
sysPara->devOp->controlMixValve(true);
Mixing_valve_open = 0;
// LogInfo::setRunStatusText(tr("添加溶剂:")+QString::number(sysPara->status.viscosity));
qDebug()<<"添加溶剂";
}
if(viscosity_low >= 60)
{
// LogInfo::setRunStatusText(tr("警告!!!!!!!!!!!粘度值偏低")+QString::number(sysPara->status.viscosity));
qDebug()<<"粘度值偏低";
sysPara->status.viscosityFault = 2;
if(sysPara->devOp->isMixValveOpen()) {
sysPara->devOp->controlMixValve(false);
}
}
if(viscosity_faulty_num >= 5)
{
// LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!粘度偏大故障")+QString::number(sysPara->status.viscosity));
qDebug()<<"粘度偏大故障";
sysPara->status.viscosityFault = 1;
}
}
if((sysPara->status.viscosityDelayCnt >= (sysPara->para.viscosityPumpInterval*100+120)) && flag==1)
{
if(sysPara->devOp->isMixValveOpen()) {
sysPara->devOp->controlMixValve(false);
}
}
if((sysPara->status.viscosityDelayCnt >= (sysPara->para.viscosityPumpInterval*100+130)) && flag==1)
{
if (sysPara->devOp->isViscosityPumpOpen()) {
sysPara->devOp->controlViscosityPump(false);
}
sysPara->status.viscosityDelayCnt = 0;
flag=0;
}
if(sysPara->status.statWarn & WARN_STATUS_VISCOTITY_MEASURE_READY){ //上位灯检测标志位
viscosity_timer->stop();
}
if(sysPara->status.viscosityDelayCnt < sysPara->para.viscosityPumpInterval*100) {
static int detectBelow = 0;
if (++detectBelow%400 == 0) {
if(sysPara->status.statWarn & WARN_STATUS_VISCOTITY_MEASURE_READY)
{
if(sysPara->status.rWarnViscoReady>=15){
sysPara->status.viscosityFault = 1;
sysPara->status.viscosity=0;
if(!firstTime)
qDebug()<<"错误!粘度计下位灯故障."+QString::number(sysPara->status.viscosity);
// LogInfo::setRunStatusText(tr("错误!粘度计下位灯故障.")+QString::number(sysPara->status.viscosity));
hasDetectedBellow = true;
}
else sysPara->status.rWarnViscoReady++;
}
else {
sysPara->status.rWarnViscoReady = 0;
sysPara->status.viscosityFault = 0;
}
}
}
if(hasDetectedBellow && hasDetectedTop)
{
if(sysPara->devOp->isMixValveOpen()) { //
sysPara->devOp->controlMixValve(false); //如果检测不到上下位灯就关掉混合阀
}
}
if(sysPara->status.viscosityFault==0)
{
hasDetectedBellow = false;
hasDetectedTop = false;
}
// } // }
/*-----------------------------------回收泵------------------------------------------*/ /*-----------------------------------回收泵------------------------------------------*/
@@ -2600,6 +2481,168 @@ void InkJetPrinter::autoControlValvePump(void)
} }
} }
void InkJetPrinter::autoControlViscosityPump()
{
static bool hasDetectedBellow = false; // 检测到下位灯
static bool hasDetectedTop = false; // 检测到上位灯
static int viscosity_low = 0; //统计粘度连续偏低10%次数
static unsigned char Mixing_valve_open = 0; //统计粘度连续偏高5%次数
static unsigned char viscosity_faulty_num = 0; //统计粘度连续偏高13%次数
static bool flag = 0;
if(sysPara->status.cycleValveOpenCntAfterSWintOff) { //关闭墨线的时候要提前开粘度泵
sysPara->status.viscosityDelayCnt = sysPara->para.viscosityPumpInterval*100 + 100;
}
++sysPara->status.viscosityDelayCnt;
int mixer_open_threshold = (105*sysPara->para.viscosity)/100;
int viscosity_faulty_threshold =(113*sysPara->para.viscosity)/100;
if(sysPara->status.viscosityDelayCnt >= sysPara->para.viscosityPumpInterval*100 && flag == 0)
{
flag=1;
if (!sysPara->devOp->isViscosityPumpOpen())
{
sysPara->devOp->controlViscosityPump(true);
viscosity_timer->start(10000);
qDebug()<<"粘度: "<<QString::number(sysPara->status.viscosity);
}
if((sysPara->status.viscosity >= 90*sysPara->para.viscosity/100) && (sysPara->status.viscosity <= mixer_open_threshold))
{
sysPara->status.viscosityFault = 0;
viscosity_low=0;
Mixing_valve_open = 0;
viscosity_faulty_num = 0;
}
if(sysPara->status.viscosity < 90*sysPara->para.viscosity/100)
{
viscosity_low++;
viscosity_faulty_num = 0;
Mixing_valve_open = 0;
}
if(sysPara->status.viscosity > mixer_open_threshold && sysPara->status.viscosity <= viscosity_faulty_threshold)
{
Mixing_valve_open++;
viscosity_low = 0;
viscosity_faulty_num = 0;
}
if(sysPara->status.viscosity > viscosity_faulty_threshold){
Mixing_valve_open++;
viscosity_faulty_num++;
viscosity_low = 0;
}
if((!sysPara->devOp->isMixValveOpen()) && (((Mixing_valve_open > 1) && (!sysPara->para.gearPumpEnable)) || ((Mixing_valve_open > 4) && sysPara->para.gearPumpEnable))) { //
sysPara->devOp->controlMixValve(true);
Mixing_valve_open = 0;
// LogInfo::setRunStatusText(tr("添加溶剂:")+QString::number(sysPara->status.viscosity));
qDebug()<<"添加溶剂";
}
if(viscosity_low >= 60)
{
// LogInfo::setRunStatusText(tr("警告!!!!!!!!!!!粘度值偏低")+QString::number(sysPara->status.viscosity));
qDebug()<<"粘度值偏低";
sysPara->status.viscosityFault = 2;
if(sysPara->devOp->isMixValveOpen()) {
sysPara->devOp->controlMixValve(false);
}
}
if(viscosity_faulty_num >= 5)
{
// LogInfo::setRunStatusText(tr("错误!!!!!!!!!!!粘度偏大故障")+QString::number(sysPara->status.viscosity));
qDebug()<<"粘度偏大故障";
sysPara->status.viscosityFault = 1;
}
}
if((sysPara->status.viscosityDelayCnt >= (sysPara->para.viscosityPumpInterval*100+120)) && flag==1)
{
if(sysPara->devOp->isMixValveOpen()) {
sysPara->devOp->controlMixValve(false);
}
}
if((sysPara->status.viscosityDelayCnt >= (sysPara->para.viscosityPumpInterval*100+130)) && flag==1)
{
if (sysPara->devOp->isViscosityPumpOpen()) {
sysPara->devOp->controlViscosityPump(false);
}
sysPara->status.viscosityDelayCnt = 0;
flag=0;
}
if(sysPara->status.statWarn & WARN_STATUS_VISCOTITY_MEASURE_READY){ //上位灯检测标志位
viscosity_timer->stop();
}
if(sysPara->status.viscosityDelayCnt < sysPara->para.viscosityPumpInterval*100) {
static int detectBelow = 0;
if (++detectBelow%400 == 0) {
if(sysPara->status.statWarn & WARN_STATUS_VISCOTITY_MEASURE_READY)
{
if(sysPara->status.rWarnViscoReady>=15){
sysPara->status.viscosityFault = 1;
sysPara->status.viscosity=0;
if(!firstTime)
qDebug()<<"错误!粘度计下位灯故障."+QString::number(sysPara->status.viscosity);
// LogInfo::setRunStatusText(tr("错误!粘度计下位灯故障.")+QString::number(sysPara->status.viscosity));
hasDetectedBellow = true;
}
else sysPara->status.rWarnViscoReady++;
}
else {
sysPara->status.rWarnViscoReady = 0;
sysPara->status.viscosityFault = 0;
}
}
}
if(hasDetectedBellow && hasDetectedTop)
{
if(sysPara->devOp->isMixValveOpen()) { //
sysPara->devOp->controlMixValve(false); //如果检测不到上下位灯就关掉混合阀
}
}
if(sysPara->status.viscosityFault==0)
{
hasDetectedBellow = false;
hasDetectedTop = false;
}
}
void InkJetPrinter::autoControlViscosityPumpForSelfCheck(int selfCheckCnt)
{
if(sysPara->devOp->isCycleValveOpen()) {
sysPara->devOp->controlCycleValve(false);
}
if(sysPara->devOp->isMixValveOpen()) {
sysPara->devOp->controlMixValve(false);
}
if(selfCheckCnt >= MAX_SELF_CHECK_CNT) {
if(sysPara->devOp->isViscosityPumpOpen())
sysPara->devOp->controlViscosityPump(false);
return;
}
int stageCnt = selfCheckCnt % 1000;
if(stageCnt >= 0 && stageCnt < 150) {
if(!sysPara->devOp->isViscosityPumpOpen()) {
sysPara->devOp->controlViscosityPump(true);
qDebug() << "Start test viscosity pump.";
}
}
if(stageCnt >= 150) {
if(sysPara->devOp->isViscosityPumpOpen()) {
sysPara->devOp->controlViscosityPump(false);
qDebug() << "Stop test viscosity pump.";
}
}
}
void InkJetPrinter::autoControlCycleValve() void InkJetPrinter::autoControlCycleValve()
{ {
if(!sysPara->status.selfCheckDone || (sysPara->status.flagOfPowerOnMode && sysPara->para.gearPumpEnable)){ if(!sysPara->status.selfCheckDone || (sysPara->status.flagOfPowerOnMode && sysPara->para.gearPumpEnable)){
@@ -2750,7 +2793,7 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){
if(sysPara->status.reclaimTankstatus != 2 && rate != 0) { if(sysPara->status.reclaimTankstatus != 2 && rate != 0) {
m_MainWidget->setReclaimStatus(sysPara->status.reclaimTankstatus == 1, rate); m_MainWidget->setReclaimStatus(sysPara->status.reclaimTankstatus == 1, rate);
#ifdef QT_DEBUG #ifdef BNS_DEBUG
if(rate == 100) { if(rate == 100) {
m_MainWidget->enablePrintButton(true); m_MainWidget->enablePrintButton(true);
m_MainWidget->stopFlashReclaimOpenBtn(); m_MainWidget->stopFlashReclaimOpenBtn();
+4
View File
@@ -115,6 +115,10 @@ private:
void autoControlCycleValve(); void autoControlCycleValve();
void autoControlViscosityPump();
void autoControlViscosityPumpForSelfCheck(int selfCheckCnt);
void pressureAdj(); void pressureAdj();
void autoControlHeater(); void autoControlHeater();
void cycleValveRunForSelfCheck(); void cycleValveRunForSelfCheck();
+9 -6
View File
@@ -26,7 +26,7 @@
<enum>Qt::StrongFocus</enum> <enum>Qt::StrongFocus</enum>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>1</number>
</property> </property>
<widget class="QWidget" name="tab"> <widget class="QWidget" name="tab">
<attribute name="title"> <attribute name="title">
@@ -428,7 +428,7 @@
</size> </size>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>0</number> <number>1</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>2147483647</number> <number>2147483647</number>
@@ -491,13 +491,13 @@
</size> </size>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>1</number> <number>0</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>65535</number> <number>65535</number>
</property> </property>
<property name="value"> <property name="value">
<number>1</number> <number>0</number>
</property> </property>
</widget> </widget>
</item> </item>
@@ -541,14 +541,17 @@
</size> </size>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>1</number> <number>0</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>65535</number> <number>65535</number>
</property> </property>
<property name="value"> <property name="singleStep">
<number>1</number> <number>1</number>
</property> </property>
<property name="value">
<number>0</number>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
+13 -7
View File
@@ -951,8 +951,8 @@ void MainWidget::on_m_StartBtn_clicked()
if (!checkTriggerMode()) return; if (!checkTriggerMode()) return;
// 打印状态交给状态机修改 // 打印状态交给状态机修改
// sysPara->status.isPrinting=false; sysPara->status.isPrinting=false;
auto mgr = PrinterStateManager::instance(); // auto mgr = PrinterStateManager::instance();
#if !defined(FPGA_TEST) && !defined(QT_DEBUG) #if !defined(FPGA_TEST) && !defined(QT_DEBUG)
// if (mgr && mgr->canStopPrint()) { // if (mgr && mgr->canStopPrint()) {
// mgr->requestTransition(PrinterEvent::StopPrint); // mgr->requestTransition(PrinterEvent::StopPrint);
@@ -970,6 +970,10 @@ void MainWidget::on_m_StartBtn_clicked()
setReclaimOpenBtnStatus(false); setReclaimOpenBtnStatus(false);
updatePrintDisplayLabel(); updatePrintDisplayLabel();
sysPara->devOp->highVoltageCtrl(1);
sysPara->devOp->setHighVoltageAmplitudetoSTM32();
// 20170717 移动此,以观察条形码打印异常问题。 // 20170717 移动此,以观察条形码打印异常问题。
if(!startPrintingFlag) if(!startPrintingFlag)
{ {
@@ -979,9 +983,11 @@ void MainWidget::on_m_StartBtn_clicked()
startPrintingFlag = true; startPrintingFlag = true;
// sysPara->status.isPrinting=true; // sysPara->status.isPrinting=true;
if (mgr->canStartPrint() || mgr->isState(PrinterState::PRINTING)) { // if (mgr->canStartPrint() || mgr->isState(PrinterState::PRINTING)) {
mgr->requestTransition(PrinterEvent::StartPrint); // mgr->requestTransition(PrinterEvent::StartPrint);
} // }
sysPara->status.isPrinting = true;
sysPara->status.waitHightVolOff = 0;
// 高亮切换 // 高亮切换
changeHighLight(true); changeHighLight(true);
@@ -994,8 +1000,8 @@ void MainWidget::on_m_StopBtn_clicked()
if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) { if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) {
return; return;
} }
// sysPara->status.isPrinting=false;// 打印状态交给状态机修改 sysPara->status.isPrinting=false;// 打印状态交给状态机修改
auto mgr = PrinterStateManager::instance(); // auto mgr = PrinterStateManager::instance();
#if !defined(FPGA_TEST) && !defined(QT_DEBUG) #if !defined(FPGA_TEST) && !defined(QT_DEBUG)
// if (mgr && mgr->canStopPrint()) { // if (mgr && mgr->canStopPrint()) {
// mgr->requestTransition(PrinterEvent::StopPrint); // mgr->requestTransition(PrinterEvent::StopPrint);