Compare commits

...
12 Commits
52 changed files with 5860 additions and 3662 deletions
+1
View File
@@ -70,3 +70,4 @@ QtUI.r668
800X600_New_SystemProject-_NewInterface.zip 800X600_New_SystemProject-_NewInterface.zip
bnsTest.png bnsTest.png
printSceneView.png printSceneView.png
docs/
+42 -4
View File
@@ -91,7 +91,7 @@ void CounterVarSet::onDigitsChanged(int digits)
endValueBox->setValue(maxValue); endValueBox->setValue(maxValue);
} }
void CounterVarSet::setCounterConfig(CounterViewModel viewModel) void CounterVarSet::setCounterConfig(CounterViewModel viewModel, bool isChange)
{ {
m_vm = viewModel; m_vm = viewModel;
@@ -101,7 +101,7 @@ void CounterVarSet::setCounterConfig(CounterViewModel viewModel)
ui->tabWidget->setCurrentIndex(viewModel.counterType == COUNTER_TYPE_1 ? 1 : 2); ui->tabWidget->setCurrentIndex(viewModel.counterType == COUNTER_TYPE_1 ? 1 : 2);
ui->letterSpaceSpinBox->setValue(viewModel.letterSpace); ui->letterSpaceSpinBox->setValue(viewModel.letterSpace);
updateSysParaToUI(); updateSysParaToUI(isChange);
} }
void CounterVarSet::getValue(int *varType,int *digitalWidth,unsigned char *splitMode){ void CounterVarSet::getValue(int *varType,int *digitalWidth,unsigned char *splitMode){
@@ -139,8 +139,10 @@ void CounterVarSet::applyUIPara()
m_vm.cnt2Settings.currValue = ui->spinBoxCnt2CurrValue->value(); m_vm.cnt2Settings.currValue = ui->spinBoxCnt2CurrValue->value();
} }
void CounterVarSet::updateSysParaToUI() void CounterVarSet::updateSysParaToUI(bool isChange)
{ {
handleChange(isChange);
ui->spinBoxCnt1EndValue->setValue(m_vm.cnt1Settings.endValue); ui->spinBoxCnt1EndValue->setValue(m_vm.cnt1Settings.endValue);
ui->spinBoxCnt1RepeateCnt->setValue(m_vm.cnt1Settings.repeatValue); ui->spinBoxCnt1RepeateCnt->setValue(m_vm.cnt1Settings.repeatValue);
ui->spinBoxCnt1StartValue->setValue(m_vm.cnt1Settings.startValue); ui->spinBoxCnt1StartValue->setValue(m_vm.cnt1Settings.startValue);
@@ -154,6 +156,42 @@ void CounterVarSet::updateSysParaToUI()
ui->spinBoxCnt2CurrValue->setValue(m_vm.cnt2Settings.currValue); ui->spinBoxCnt2CurrValue->setValue(m_vm.cnt2Settings.currValue);
} }
void CounterVarSet::handleChange(bool isChange)
{
if (isChange) {
const bool useCnt1 = ui->radioButtonVar1->isChecked();
if (useCnt1) {
// 只显示 cnt1Tab
if (ui->tabWidget->indexOf(ui->cnt2Tab) >= 0)
ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->cnt2Tab));
if (ui->tabWidget->indexOf(ui->cnt1Tab) < 0)
ui->tabWidget->insertTab(1, ui->cnt1Tab, tr("计数器1"));
ui->tabWidget->setCurrentWidget(ui->cnt1Tab);
ui->radioButtonVar1->setEnabled(true);
ui->radioButtonVar2->setEnabled(false);
} else {
// 只显示 cnt2Tab
if (ui->tabWidget->indexOf(ui->cnt1Tab) >= 0)
ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->cnt1Tab));
if (ui->tabWidget->indexOf(ui->cnt2Tab) < 0)
ui->tabWidget->insertTab(1, ui->cnt2Tab, tr("计数器2"));
ui->tabWidget->setCurrentWidget(ui->cnt2Tab);
ui->radioButtonVar1->setEnabled(false);
ui->radioButtonVar2->setEnabled(true);
}
} else {
// 两个都显示
if (ui->tabWidget->indexOf(ui->cnt1Tab) < 0)
ui->tabWidget->insertTab(1, ui->cnt1Tab, tr("计数器1"));
if (ui->tabWidget->indexOf(ui->cnt2Tab) < 0)
ui->tabWidget->insertTab(2, ui->cnt2Tab, tr("计数器2"));
ui->radioButtonVar1->setEnabled(true);
ui->radioButtonVar2->setEnabled(true);
}
}
void CounterVarSet::applyStyleSheet() void CounterVarSet::applyStyleSheet()
{ {
QString styleSheet = QString styleSheet =
@@ -353,4 +391,4 @@ void CounterVarSet::applyStyleSheet()
)"; )";
this->setStyleSheet(styleSheet); this->setStyleSheet(styleSheet);
} }
+3 -2
View File
@@ -25,14 +25,15 @@ public:
void applyStyleSheet(); void applyStyleSheet();
void getValue(int *varType,int *digitalWidth,unsigned char *splitMode); void getValue(int *varType,int *digitalWidth,unsigned char *splitMode);
void updateSysParaToUI(); //重载 void updateSysParaToUI(bool isChange); //重载
void handleChange(bool isChange);
void applyUIPara(); //重载 void applyUIPara(); //重载
// 获取当前计数器配置:varType(7或8) 和 digitalNum(位数) // 获取当前计数器配置:varType(7或8) 和 digitalNum(位数)
CounterViewModel getCounterConfig(); CounterViewModel getCounterConfig();
// 设置ui,用户编辑计数器item时,会调用此函数显示计数器的配置 // 设置ui,用户编辑计数器item时,会调用此函数显示计数器的配置
void setCounterConfig(CounterViewModel viewModel); void setCounterConfig(CounterViewModel viewModel, bool isChange);
signals: signals:
void sendButtonClickedSignal(int); void sendButtonClickedSignal(int);
+24
View File
@@ -0,0 +1,24 @@
#ifndef _CUSTOM_DOUBLE_SPIN_BOX_H_
#define _CUSTOM_DOUBLE_SPIN_BOX_H_
#include <QDoubleSpinBox>
#include <QString>
class CustomDoubleSpinBox : public QDoubleSpinBox {
public:
explicit CustomDoubleSpinBox(QWidget *parent = nullptr) : QDoubleSpinBox(parent) {
// 设置一个较大的最大位数,让用户有足够的输入精度
setDecimals(10);
}
protected:
// 重写此方法,自定义数值如何显示在输入框中
QString textFromValue(double value) const override {
// 使用 'g' 格式可以自动去掉末尾不必要的零
// 或者使用 QString::number 配合手动处理
return QString::number(value, 'g', decimals());
}
};
#endif // _CUSTOM_DOUBLE_SPIN_BOX_H_
+70 -23
View File
@@ -3,7 +3,9 @@
#include "MyInputMethod.h" #include "MyInputMethod.h"
#include <QObject> #include <QObject>
#include <QSpinBox> #include <QSpinBox>
#include <QDoubleSpinBox>
#include <QSpinBox> #include <QSpinBox>
#include <QRegularExpression>
#include <QDebug> #include <QDebug>
#include <QKeyEvent> #include <QKeyEvent>
@@ -52,8 +54,7 @@ DigitalInput::~DigitalInput()
void DigitalInput::onCharPressed(){ void DigitalInput::onCharPressed(){
QPushButton * button = qobject_cast<QPushButton *>(sender()); QPushButton * button = qobject_cast<QPushButton *>(sender());
QString ch = button->text(); QString ch = button->text();
if (!m_currSpinBox && !m_currDoubleSpinBox) {
if (!m_currSpinBox) {
ui->traceEdit->insert(ch); ui->traceEdit->insert(ch);
return; return;
} }
@@ -62,34 +63,60 @@ void DigitalInput::onCharPressed(){
QString currentText = ui->traceEdit->text(); QString currentText = ui->traceEdit->text();
QString newText = currentText.left(cursorPos) + ch + currentText.mid(cursorPos); QString newText = currentText.left(cursorPos) + ch + currentText.mid(cursorPos);
if (newText.isEmpty()) { if (newText.isEmpty()) {
ui->traceEdit->insert(ch);
return;
}
if(m_currDoubleSpinBox) {
// 用正则表达式判定 newText是否是一个浮点数或部分浮点输入。
// 允许的示例: 0.2251, 15.335, 15, -924.02, 5. (末尾点为临时状态), .5
// 也允许单独的正负号作为正在输入中的状态: "-" 或 "+"
QString simulated = newText;
// Allow single sign while typing
if (simulated == "-" || simulated == "+") {
ui->traceEdit->insert(ch);
return;
}
// Regular expression: optional sign, then either digits with optional dot+digits, or dot+digits, or digits+dot (partial)
// 不限制小数位数;最终的最小/最大以及精度由 hideEvent 写回时决定
QRegularExpression re("^[+-]?((\\d+(\\.\\d*)?)|(\\.\\d*))$");
QRegularExpressionMatch match = re.match(simulated);
if (!match.hasMatch()) {
// not a valid float format (even partial) -> reject
return;
}
// acceptable -> insert
ui->traceEdit->insert(ch);
return;
}
if(ch == "." && m_currSpinBox) {
// SpinBox不能输入 .
return;
}
if(ch == "-" && m_currSpinBox->minimum() < 0 && currentText.isEmpty()) {
ui->traceEdit->insert(ch); ui->traceEdit->insert(ch);
return; return;
} }
bool ok = false; bool ok = false;
int value = newText.toInt(&ok); int value = newText.toInt(&ok);
if (!ok) { if (!ok) {
ui->traceEdit->insert(ch);
return; return;
} }
int max = m_currSpinBox->maximum(); int max = m_currSpinBox->maximum();
if (value <= max) { if (value <= max) {
ui->traceEdit->insert(ch); ui->traceEdit->insert(ch);
} }
} }
void DigitalInput::onKeyBackspacePressed(){ void DigitalInput::onKeyBackspacePressed(){
// if(m_currSpinBox && QString::number(m_currSpinBox->value()).size() == 1) {
// ui->traceEdit->clear();
// }
// #ifndef Q_OS_WIN32
// //QWSServer::sendKeyEvent(0,Qt::Key_Backspace,Qt::NoModifier,true,false); //锟斤拷系统锟斤拷锟酵硷拷锟斤拷锟铰硷拷
// MyInputMethod::sendEvent(Qt::Key_Backspace,Qt::NoModifier);
// #endif
int cursorPos = ui->traceEdit->cursorPosition(); int cursorPos = ui->traceEdit->cursorPosition();
if (cursorPos > 0) { if (cursorPos > 0) {
QString text = ui->traceEdit->text(); QString text = ui->traceEdit->text();
@@ -131,12 +158,6 @@ void DigitalInput::onEnterPressed()
void DigitalInput::onClrPressed() void DigitalInput::onClrPressed()
{ {
// if(m_currSpinBox) {
// m_currSpinBox->setValue(std::min(m_currSpinBox->maximum(), std::max(m_currSpinBox->minimum(), 0)));
// ui->traceEdit->setText(m_currSpinBox->value());
// // ui->traceEdit->setFocus();
// }
ui->traceEdit->clear(); ui->traceEdit->clear();
ui->traceEdit->setFocus(); ui->traceEdit->setFocus();
} }
@@ -147,14 +168,28 @@ void DigitalInput::showEvent(QShowEvent *event)
raise(); raise();
auto focusWidget = qApp->focusWidget(); auto focusWidget = qApp->focusWidget();
QDoubleSpinBox* dbox = dynamic_cast<QDoubleSpinBox*>(focusWidget);
if (dbox) {
m_currDoubleSpinBox = dbox;
m_currSpinBox = nullptr;
// Show value without padding trailing zeros (avoid decimals() padding)
ui->traceEdit->setText(QString::number(dbox->value(), 'g', 15));
ui->traceEdit->setFocus();
qDebug() << "The traceEdit has connected to the QDoubleSpinBox: " << dbox->objectName();
return;
}
QSpinBox* box = dynamic_cast<QSpinBox*>(focusWidget); QSpinBox* box = dynamic_cast<QSpinBox*>(focusWidget);
if(!box) { if(!box) {
qWarning() << "focusWidget is not QSpinBox"; qWarning() << "focusWidget is not QSpinBox or QDoubleSpinBox";
m_currSpinBox = nullptr; m_currSpinBox = nullptr;
m_currDoubleSpinBox = nullptr;
return; return;
} }
m_currSpinBox = box; m_currSpinBox = box;
m_currDoubleSpinBox = nullptr;
ui->traceEdit->setText(box->text()); ui->traceEdit->setText(box->text());
// focusWidget->clearFocus(); // focusWidget->clearFocus();
ui->traceEdit->setFocus(); ui->traceEdit->setFocus();
@@ -167,6 +202,18 @@ void DigitalInput::hideEvent(QHideEvent * event)
{ {
QWidget::hideEvent(event); QWidget::hideEvent(event);
if (m_currDoubleSpinBox) {
bool ok = false;
double value = ui->traceEdit->text().toDouble(&ok);
if (!ok) value = m_currDoubleSpinBox->value();
double min = m_currDoubleSpinBox->minimum();
double max = m_currDoubleSpinBox->maximum();
value = qBound(min, value, max);
m_currDoubleSpinBox->setValue(value);
m_currDoubleSpinBox->clearFocus();
return;
}
if(m_currSpinBox) { if(m_currSpinBox) {
int value = ui->traceEdit->text().toInt(); int value = ui->traceEdit->text().toInt();
int min = m_currSpinBox->minimum(); int min = m_currSpinBox->minimum();
@@ -175,4 +222,4 @@ void DigitalInput::hideEvent(QHideEvent * event)
m_currSpinBox->setValue(value); m_currSpinBox->setValue(value);
m_currSpinBox->clearFocus(); m_currSpinBox->clearFocus();
} }
} }
+2
View File
@@ -3,6 +3,7 @@
#include <QWidget> #include <QWidget>
#include <QSpinBox> #include <QSpinBox>
#include <QDoubleSpinBox>
class MyInputMethod; class MyInputMethod;
namespace Ui { namespace Ui {
@@ -36,6 +37,7 @@ private:
MyInputMethod *myInputMethod; MyInputMethod *myInputMethod;
QSpinBox* m_currSpinBox = nullptr; QSpinBox* m_currSpinBox = nullptr;
QDoubleSpinBox* m_currDoubleSpinBox = nullptr;
}; };
#endif // DIGITALINPUT_H #endif // DIGITALINPUT_H
+189 -221
View File
@@ -144,9 +144,7 @@ void InkJetPrinter::init()
connect(m_CounterVarSet,&CounterVarSet::sig_updateSelectedCounter,this,&InkJetPrinter::slt_counterVarUpdate); connect(m_CounterVarSet,&CounterVarSet::sig_updateSelectedCounter,this,&InkJetPrinter::slt_counterVarUpdate);
connect(m_MainInstruction,&MainInstruction::newFileBtnClick,m_TestPrintWidget,&TestPrintWidget::on_newfileButton_pressed); connect(m_MainInstruction,&MainInstruction::newFileBtnClick,m_TestPrintWidget,&TestPrintWidget::on_newfileButton_pressed);
connect(m_MainInstruction, &MainInstruction::superJmAccepted, this, &InkJetPrinter::resetRFIDStatus); connect(m_MainInstruction, &MainInstruction::superJmAccepted, this, &InkJetPrinter::resetRFIDStatus);
// connect(myInputMethod,&MyInputMethod::sendEnterClickedSignal,&TestPrintWidget::onEditItemDone); // connect(myInputMethod,&MyInputMethod::sendEnterClickedSignal,&TestPrintWidget::onEditItemDone);
// connect(myInputMethod,SIGNAL(sendEnterClickedSignal()),m_TestPrintWidget,SLOT(onEditItemDone())); // connect(myInputMethod,SIGNAL(sendEnterClickedSignal()),m_TestPrintWidget,SLOT(onEditItemDone()));
connect(m_DateVarSet,SIGNAL(backSpaceBtn()),myInputMethod,SLOT(backSapceButtonDel())); connect(m_DateVarSet,SIGNAL(backSpaceBtn()),myInputMethod,SLOT(backSapceButtonDel()));
@@ -187,7 +185,7 @@ void InkJetPrinter::init()
m_PrintSetting->updateModelToUI(); m_PrintSetting->updateModelToUI();
m_SystemSetting->updateSysParaToUI(); m_SystemSetting->updateSysParaToUI();
m_OtherInfo->updateSysParaToUI(); m_OtherInfo->updateSysParaToUI();
m_CounterVarSet->updateSysParaToUI(); m_CounterVarSet->updateSysParaToUI(false);
m_SystemManage->loadKeyBoardType(); m_SystemManage->loadKeyBoardType();
@@ -256,11 +254,11 @@ void InkJetPrinter::init()
} }
// type 1,2: 分别显示计数器1或2的界面 // type 1,2: 分别显示计数器1或2的界面
void InkJetPrinter::slt_editCounter(CounterViewModel vm) void InkJetPrinter::slt_editCounter(CounterViewModel vm, bool isChange)
{ {
if (m_CounterVarSet) { if (m_CounterVarSet) {
m_CounterVarSet->updateSysParaToUI(); // m_CounterVarSet->updateSysParaToUI(isChange);
m_CounterVarSet->setCounterConfig(vm); m_CounterVarSet->setCounterConfig(vm,isChange);
m_StackedWidget->setCurrentWidget(m_CounterVarSet); m_StackedWidget->setCurrentWidget(m_CounterVarSet);
} }
} }
@@ -311,7 +309,7 @@ void InkJetPrinter::showEvent(QShowEvent *e)
fpgaReadyTimer = nullptr; fpgaReadyTimer = nullptr;
} }
else { else {
qDebug() << "FPGA not connected yet."; // qDebug() << "FPGA not connected yet.";
} }
}); });
@@ -789,7 +787,7 @@ void InkJetPrinter::timerHandler(void){
checkPressureControl(); checkPressureControl();
if((QTime::currentTime()>=QTime(00,00,00))&&(QTime::currentTime()<=QTime(00,00,02))&&sysPara->para.Reciclar){ if((QTime::currentTime()>=QTime(00,00,00))&&(QTime::currentTime()<=QTime(00,00,02))&&sysPara->para.Reciclar){
if(m_MainWidget->getCurrPrintStatus() != 1){ if(sysPara->status.isPrinting == false){
m_MainWidget->_on_pushButtonPowerOff_pressed(false); m_MainWidget->_on_pushButtonPowerOff_pressed(false);
LogInfo::setRunStatusText(tr("定时开机循环完成,准备关机")); LogInfo::setRunStatusText(tr("定时开机循环完成,准备关机"));
} }
@@ -889,29 +887,6 @@ void InkJetPrinter::timerHandler(void){
sysPara->devOp->readFgaStatus(); sysPara->devOp->readFgaStatus();
} }
/**************桂澳增加超速提示*****************************/
static int logCtrl = 0;
if((sysPara->para.printTriggerMode == PRINT_TRIGGER_SYNCHRONIZER || sysPara->para.eleEyeTriggerSynPrintEn)
&& sysPara->status.lesslen_warn == 1){ //置1表示超速了
if(logCtrl++ % 500 == 0){
// LogInfo::setRunStatusText(tr("速度过快,请检查是否漏喷!!!"));
qDebug()<<"速度过快,请检查是否漏喷!!!";
}
/*if(msgBox1->isHidden()){ //桂澳的超速提示先保留
msgBox1->setText(tr("速度过快,请检查是否漏喷!!!"));
msgBox1->show();
LogInfo::setRunStatusText(tr("速度过快,请检查是否漏喷!!!"));
qDebug()<<"速度过快,请检查是否漏喷!!!";
}*/
sysPara->devOp->controlRedLight(true);
sysPara->devOp->controlGreenLight(false);
}
else{
// if(!msgBox1->isHidden())
// sysPara->devOp->controlRedLight(false);
}
sysPara->status.gearPumpRunSpeed = (PulseCnt * 60 * 1000) / (500 * 2); sysPara->status.gearPumpRunSpeed = (PulseCnt * 60 * 1000) / (500 * 2);
if(!sysPara->para.gearPumpEnable) if(!sysPara->para.gearPumpEnable)
sysPara->status.PRESSURE *= 5; //响应群众号召,数值放大五倍 sysPara->status.PRESSURE *= 5; //响应群众号召,数值放大五倍
@@ -923,7 +898,7 @@ void InkJetPrinter::timerHandler(void){
if(sysPara->status.delay10ms%5 == 0) if(sysPara->status.delay10ms%5 == 0)
{//复位发送打印数据 {//复位发送打印数据
if((m_MainWidget->getCurrPrintStatus() == 1)&&sysPara->para.ResetSendData) if(sysPara->status.isPrinting && sysPara->para.ResetSendData)
{ {
static bool oneTimeFlag = false; static bool oneTimeFlag = false;
if(sysPara->status.productCnt== 0 && (oneTimeFlag==false))//计米复位发送打印数据 if(sysPara->status.productCnt== 0 && (oneTimeFlag==false))//计米复位发送打印数据
@@ -950,7 +925,6 @@ void InkJetPrinter::timerHandler(void){
lastProductCount = sysPara->status.productCnt; lastProductCount = sysPara->status.productCnt;
if(vartypeR != 0){ //更新替换变量的值 if(vartypeR != 0){ //更新替换变量的值
// LogInfo::setRunStatusText("vartypeR");
MySleep(100); MySleep(100);
m_MainWidget->onPreviewScene(); m_MainWidget->onPreviewScene();
m_MainWidget->SendPrintDataToFpga(0); m_MainWidget->SendPrintDataToFpga(0);
@@ -969,15 +943,6 @@ void InkJetPrinter::timerHandler(void){
} }
if (!updateAreas.isEmpty() && m_StackedWidget->currentWidget() == m_MainWidget) { if (!updateAreas.isEmpty() && m_StackedWidget->currentWidget() == m_MainWidget) {
// // 统计追踪更新频率
// static QElapsedTimer bnsTimer;
// static int toogleCount = 0;
// ++toogleCount;
// if(toogleCount > 10) {
// auto elapsed = bnsTimer.restart();
// qDebug() << (QString("timeHandler avg elapsed: %1 s").arg(elapsed / qreal(toogleCount) / 1000.0));
// toogleCount = 0;
// }
m_MainWidget->updatePrintDisplayLabel(); m_MainWidget->updatePrintDisplayLabel();
} }
@@ -989,9 +954,7 @@ void InkJetPrinter::timerHandler(void){
if(gearPumpRunFlag || sysPara->para.gearPumpEnable == 0) if(gearPumpRunFlag || sysPara->para.gearPumpEnable == 0)
{ {
if(!sysPara->status.selfCheckDone && sysPara->status.isPrinting){ if(!sysPara->status.selfCheckDone && sysPara->status.isPrinting){
// sysPara->status.selfCheckDone = true;
m_MainWidget->updatePrintDisplayLabel(); m_MainWidget->updatePrintDisplayLabel();
// sysPara->status.flagOfAbnormalStatus = true;
qDebug()<<"打印过程中死机了!!!"; qDebug()<<"打印过程中死机了!!!";
m_MainWidget->on_m_StopBtn_clicked(); m_MainWidget->on_m_StopBtn_clicked();
@@ -1011,7 +974,6 @@ void InkJetPrinter::timerHandler(void){
m_MainWidget->setReclaimOpenBtnStatus(false); m_MainWidget->setReclaimOpenBtnStatus(false);
m_MainWidget->setReclaimCloseBtnStatus(false); m_MainWidget->setReclaimCloseBtnStatus(false);
// m_MainWidget->enablePrintButton(false);
sysPara->devOp->mainInkCtrl(); sysPara->devOp->mainInkCtrl();
sysPara->para.TrunOnPowerCnt++;// 20151218 开机次数加1 sysPara->para.TrunOnPowerCnt++;// 20151218 开机次数加1
sysPara->saveParaToFile(); // 保存开机次数值 sysPara->saveParaToFile(); // 保存开机次数值
@@ -1032,11 +994,11 @@ void InkJetPrinter::timerHandler(void){
if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT) if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT)
#endif #endif
{ {
sysPara->status.selfCheckDone = true; // 自检完成 selfCheckDone=true
// 通过状态管理器发送事件,在 onStateChanged 中更新 sysPara // 通过状态管理器发送事件,在 onStateChanged 中更新 sysPara
// if (m_stateManager && m_stateManager->isState(PrinterState::SELF_CHECK)) { if (m_stateManager && m_stateManager->isState(PrinterState::IDLE)) {
// m_stateManager->requestTransition(PrinterEvent::SelfCheckDone); m_stateManager->requestTransition(PrinterEvent::PowerOn);
// } }
// 自检完成后管道恢复正常阻力,重置软启动让压力重新平稳收敛 // 自检完成后管道恢复正常阻力,重置软启动让压力重新平稳收敛
// 不清零 u,从当前控制字开始,避免突变 // 不清零 u,从当前控制字开始,避免突变
@@ -1049,29 +1011,15 @@ 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;
m_MainWidget->setReclaimOpenBtnStatus(true);
m_MainWidget->setReclaimCloseBtnStatus(false);
sysPara->devOp->mainInkCtrl(); sysPara->devOp->mainInkCtrl();
sysPara->status.canRunAirPushing = true; sysPara->status.canRunAirPushing = true;
// 自检完成后,关闭高电压,不知道为什么,有时候开机自检都有高压 // 自检完成后,关闭高电压,不知道为什么,有时候开机自检都有高压
sysPara->devOp->highVoltageCtrl(0); sysPara->devOp->highVoltageCtrl(0);
m_MainWidget->on_m_StopBtn_clicked();
LogInfo::setRunStatusText(tr("自检完成!!!"));
m_MainWidget->setRunStatus(tr("自检完成!!!"));
qDebug()<<"自检完成!!!";
if(sysPara->para.Reciclar) if(sysPara->para.Reciclar)
test_flag = 1; test_flag = 1;
} }
else {
if((sysPara->status.selfCheckCnt % 200) == 0)
m_MainWidget->setReclaimOpenBtnStatus(false);
m_MainWidget->setReclaimCloseBtnStatus(false);
}
} }
else{ else{
@@ -1161,8 +1109,7 @@ void InkJetPrinter::timerHandler(void){
// cnt1GroupCheck();//分段计米 // cnt1GroupCheck();//分段计米
#endif #endif
//reserved //reserved
QWidget *widget = m_StackedWidget->currentWidget(); QWidget *widget = m_StackedWidget->currentWidget();
static bool read_flag = false;
if((widget == m_MainWidget || widget == m_LogInfo) && pulse_100ms) { if((widget == m_MainWidget || widget == m_LogInfo) && pulse_100ms) {
m_MainWidget->updateSysStatusToUI(); m_MainWidget->updateSysStatusToUI();
m_MainWidget->updateGeneralState(m_MainWidget->alarmStatus); m_MainWidget->updateGeneralState(m_MainWidget->alarmStatus);
@@ -1172,11 +1119,6 @@ void InkJetPrinter::timerHandler(void){
else if(widget == m_PrintSetting) else if(widget == m_PrintSetting)
{ {
m_PrintSetting->updateSysStatusToUI(); m_PrintSetting->updateSysStatusToUI();
// if(!read_flag)
// {
// emit sendPicScene(ui->tabMainWindow->getPicScene());
// }
read_flag = true;
} }
else if(widget == m_SystemSetting){ else if(widget == m_SystemSetting){
@@ -1194,10 +1136,6 @@ void InkJetPrinter::timerHandler(void){
// ui->tabNetworkManager->updateSysStatusToUI(); // ui->tabNetworkManager->updateSysStatusToUI();
// } // }
// } // }
if(widget != m_PrintSetting)
{
read_flag = false;
}
// 20140306 // 20140306
static int last_lesslen_warn=0,lesslen_cnt=0; static int last_lesslen_warn=0,lesslen_cnt=0;
@@ -1228,6 +1166,9 @@ void InkJetPrinter::timerHandler(void){
if(pulse_100ms && sysPara->status.selfCheckDone){ if(pulse_100ms && sysPara->status.selfCheckDone){
detectAndcontrolReclaimTank(); //控制回收槽 detectAndcontrolReclaimTank(); //控制回收槽
if (m_stateManager) {
m_stateManager->checkReadyState();
}
} }
/*---------------------------------处理警告--------------------------------------------*/ /*---------------------------------处理警告--------------------------------------------*/
@@ -1252,7 +1193,6 @@ void InkJetPrinter::timerHandler(void){
// if(sysPara->status.needMaintenanceRemind){ // if(sysPara->status.needMaintenanceRemind){
// warningHandler(3); // warningHandler(3);
// } // }
// LogInfo::setRunStatusText(tr("处理警告:%1").arg(QDateTime::currentDateTime()));
handleWarnInk(); // 处理墨水警告 handleWarnInk(); // 处理墨水警告
handleWarnSolvent(); // 处理溶剂警告 handleWarnSolvent(); // 处理溶剂警告
@@ -1838,63 +1778,76 @@ 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);
// 使能开始打印、停止打印、开回收槽、关回收槽按钮
connect(m_stateManager, &PrinterStateManager::sig_enableStartPrint,
this, &InkJetPrinter::slt_enableStartPrint, Qt::DirectConnection);
connect(m_stateManager, &PrinterStateManager::sig_enableStopPrint,
this, &InkJetPrinter::slt_enableStopPrint, Qt::DirectConnection);
connect(m_stateManager, &PrinterStateManager::sig_enableOpenTank,
this, &InkJetPrinter::slt_enableOpenTank, Qt::DirectConnection);
connect(m_stateManager, &PrinterStateManager::sig_enableCloseTank,
this, &InkJetPrinter::slt_enableCloseTank, Qt::DirectConnection);
// 更新回收槽状态
connect(m_stateManager, &PrinterStateManager::sig_updateReclaimStatus,
this, [=](){m_MainWidget->updateReclaimText();});
// 不能进入准备状态,关回收槽
connect(m_stateManager, &PrinterStateManager::sig_closeTank,
this, [=](){m_MainWidget->on_m_LeftBtn_clicked();});
// 信息
connect(m_stateManager, &PrinterStateManager::sig_infoMsg,
this, [=](QString msg){m_MainWidget->setRunStatus(msg);});
// ============ 开机时重置状态 ============ // ============ 开机时重置状态 ============
m_stateManager->initFromSysPara(); m_stateManager->initFromSysPara();
sysPara->status.selfCheckDone = false; // 自检是否完成 sysPara->status.selfCheckDone = false; // 自检是否完成
sysPara->status.isPrinting = false; // 是否正在打印 sysPara->status.isPrinting = false; // 是否正在打印
sysPara->status.powerOffAppending = false; // 是否正在关机 sysPara->status.powerOffAppending = false; // 是否正在关机
m_stateManager->bindSysPara(sysPara);
// 发送 PowerOn 事件进入自检状态
// if (!sysPara->status.selfCheckDone) {
// m_stateManager->requestTransition(PrinterEvent::PowerOn);
// }
// initStateTimer();
}
void InkJetPrinter::initStateTimer()
{
// ============ 测试定时器 ============
m_testTimer = new QTimer(this);
connect(m_testTimer, &QTimer::timeout, this, &InkJetPrinter::slt_stateTest);
m_testTimer->start(3000); // 3秒切换一次
} }
void InkJetPrinter::handleSelfCheck() void InkJetPrinter::handleSelfCheck()
{ {
sysPara->status.selfCheckDone = false; // 自检完成,非打印状态,回收槽放下后使能打印按钮
sysPara->status.selfCheckCnt = 0; if (!sysPara->status.selfCheckDone) {
m_MainWidget->enablePrintButton(false); sysPara->status.selfCheckDone = true;
LogInfo::setRunStatusText(tr("自检完成!!!"));
m_MainWidget->setRunStatus(tr("自检完成!!!"));
}
} }
void InkJetPrinter::handleReady() void InkJetPrinter::handleReady()
{ {
// 自检完成,非打印状态,回收槽放下后使能打印按钮
sysPara->status.selfCheckDone = true;
sysPara->status.isPrinting = false; sysPara->status.isPrinting = false;
if(sysPara->status.reclaimTankstatus == 5) { // MySleep(50);
m_MainWidget->enablePrintButton(true); // m_MainWidget->updateReclaimStatus();
} else {
m_MainWidget->enablePrintButton(false);
}
} }
void InkJetPrinter::handleStartPrint() void InkJetPrinter::handleStartPrint()
{ {
sysPara->status.isPrinting = true; sysPara->status.isPrinting = true;
sysPara->status.waitHightVolOff = 0;
sysPara->status.lastSynColDelay = -1; //目的是为了清空原来的数据
sysPara->devOp->highVoltageCtrl(1); sysPara->devOp->highVoltageCtrl(1);
sysPara->devOp->setHighVoltageAmplitudetoSTM32(); sysPara->devOp->setHighVoltageAmplitudetoSTM32();
sysPara->status.waitHightVolOff = 0; sysPara->devOp->printCtrl(PRINT_CTRL_START);
// MySleep(50);
// m_MainWidget->updateReclaimStatus();
} }
void InkJetPrinter::handleStopPrint() void InkJetPrinter::handleStopPrint()
{ {
sysPara->status.isPrinting = false; sysPara->status.isPrinting = false;
// LogInfo::setRunStatusText("Stop print..."); sysPara->devOp->printCtrl2(1);
sysPara->devOp->printCtrl( PRINT_CTRL_STOP);
sysPara->status.waitHightVolOff = 1;
sysPara->saveParaToFile(); // 将相关配置保存
// 停止完毕后再进入就绪状态,允许开始打印
m_stateManager->requestTransition(PrinterEvent::StopComplete);
// MySleep(50);
// m_MainWidget->updateReclaimStatus();
} }
void InkJetPrinter::handlePowerOff() void InkJetPrinter::handlePowerOff()
@@ -1903,101 +1856,40 @@ void InkJetPrinter::handlePowerOff()
m_MainWidget->checkForPowerOff(); m_MainWidget->checkForPowerOff();
} }
void InkJetPrinter::slt_stateTest()
{
if (!m_stateManager) return;
PrinterState currentState = m_stateManager->currentState();
qDebug() << "=== Test Step:" << m_testStep << "Current:" << m_stateManager->stateName();
// 根据当前状态发送不同的事件
switch (currentState) {
case PrinterState::IDLE:
// IDLE → SELF_CHECK
qDebug() << "▶ Send: PowerOn";
m_stateManager->requestTransition(PrinterEvent::PowerOn);
break;
case PrinterState::SELF_CHECK:
// SELF_CHECK → READY
qDebug() << "▶ Send: SelfCheckDone";
m_stateManager->requestTransition(PrinterEvent::SelfCheckDone);
break;
case PrinterState::READY:
// READY → PRINTING
qDebug() << "▶ Send: StartPrint";
m_stateManager->requestTransition(PrinterEvent::StartPrint);
break;
case PrinterState::PRINTING:
// PRINTING → STOPPING → READY(两步完成)
if (m_testStep % 2 == 0) {
qDebug() << "▶ Send: StopPrint";
m_stateManager->requestTransition(PrinterEvent::StopPrint);
} else {
qDebug() << "▶ Send: StopComplete";
m_stateManager->requestTransition(PrinterEvent::StopComplete);
}
break;
case PrinterState::STOPPING:
// STOPPING → READY
qDebug() << "▶ Send: StopComplete";
m_stateManager->requestTransition(PrinterEvent::StopComplete);
break;
case PrinterState::ERROR:
// ERROR → READY
qDebug() << "▶ Send: ErrorCleared";
m_stateManager->requestTransition(PrinterEvent::ErrorCleared);
break;
case PrinterState::POWER_OFF:
// POWER_OFF → IDLE
qDebug() << "▶ Send: PowerOffDone";
m_stateManager->requestTransition(PrinterEvent::PowerOffDone);
break;
default:
break;
}
m_testStep++;
}
// ============ 状态机槽函数 ============ // ============ 状态机槽函数 ============
void InkJetPrinter::slt_stateChanged(PrinterState newState, PrinterState oldState, QString reason) void InkJetPrinter::slt_stateChanged(PrinterState newState, PrinterState oldState, QString reason)
{ {
qDebug() << "State:" << m_stateManager->stateName() << "Reason:" << reason; Q_UNUSED(oldState)
LogInfo::setRunStatusText(reason);
// ============ 统一更新 sysPara 状态 ============ // ============ 统一更新 sysPara 状态 ============
switch (newState) { switch (newState) {
case PrinterState::SELF_CHECK: case PrinterState::SELF_CHECK:
// 进入自检状态 // 进入自检完成状态
handleSelfCheck(); handleSelfCheck();
LogInfo::setRunStatusText("SELF_CHECK_DONE");
break; break;
case PrinterState::READY: case PrinterState::READY:
// 进入就绪状态 // 进入就绪状态
handleReady(); handleReady();
LogInfo::setRunStatusText("READY");
break; break;
case PrinterState::PRINTING: case PrinterState::PRINTING:
// 进入打印状态 // 进入打印状态
handleStartPrint(); handleStartPrint();
LogInfo::setRunStatusText("PRINTING");
break; break;
case PrinterState::STOPPING: case PrinterState::STOPPING:
// 进入停止状态 // 进入停止状态
handleStopPrint(); handleStopPrint();
LogInfo::setRunStatusText("STOPPING");
break; break;
case PrinterState::ERROR: case PrinterState::ERROR:
// 进入故障状态 // 进入故障状态
// m_MainWidget->setRunStatus("故障!请检查");
// m_MainWidget->enablePrintButton(false);
break; break;
case PrinterState::POWER_OFF: case PrinterState::POWER_OFF:
@@ -2008,9 +1900,32 @@ void InkJetPrinter::slt_stateChanged(PrinterState newState, PrinterState oldStat
default: default:
break; break;
} }
}
// 保存参数 void InkJetPrinter::slt_enableStartPrint(bool able)
//sysPara->saveParaToFile(); {
m_MainWidget->enabeleStartBtn(able);
}
void InkJetPrinter::slt_enableStopPrint(bool able)
{
m_MainWidget->enabeleStopBtn(able);
}
// 排气过程中不使能
void InkJetPrinter::slt_enableOpenTank(bool able)
{
m_MainWidget->setReclaimOpenBtnStatus(able);
}
void InkJetPrinter::slt_enableCloseTank(bool able)
{
m_MainWidget->setReclaimCloseBtnStatus(able);
}
void InkJetPrinter::slt_infoBox(QString msg)
{
QMessageBox::information(this, tr("提示"), msg);
} }
/*************************FPGA通过串口读取状态赋值给status-start******************************************/ /*************************FPGA通过串口读取状态赋值给status-start******************************************/
@@ -2637,7 +2552,7 @@ void InkJetPrinter::autoControlViscosityPumpForSelfCheck(int selfCheckCnt)
if(!sysPara->devOp->isViscosityPumpOpen()) { if(!sysPara->devOp->isViscosityPumpOpen()) {
sysPara->devOp->controlViscosityPump(true); sysPara->devOp->controlViscosityPump(true);
qDebug() << "Start test viscosity pump."; qDebug() << "Start test viscosity pump.";
LogInfo::setRunStatusText("Start test viscosity pump."); // LogInfo::setRunStatusText("Start test viscosity pump.");
} }
} }
@@ -2645,7 +2560,7 @@ void InkJetPrinter::autoControlViscosityPumpForSelfCheck(int selfCheckCnt)
if(sysPara->devOp->isViscosityPumpOpen()) { if(sysPara->devOp->isViscosityPumpOpen()) {
sysPara->devOp->controlViscosityPump(false); sysPara->devOp->controlViscosityPump(false);
qDebug() << "Stop test viscosity pump."; qDebug() << "Stop test viscosity pump.";
LogInfo::setRunStatusText("Stop test viscosity pump."); // LogInfo::setRunStatusText("Stop test viscosity pump.");
} }
} }
} }
@@ -2768,60 +2683,47 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){
if(sysPara->devOp->isReclaimTankOpenEnable()) if(sysPara->devOp->isReclaimTankOpenEnable())
sysPara->devOp->controlReclaimTankOpen(false); //到头,关闭 sysPara->devOp->controlReclaimTankOpen(false); //到头,关闭
sysPara->status.reclainTankReachEnd = true; sysPara->status.reclainTankReachEnd = true;
m_MainWidget->setRunStatus(tr("回收槽到头")); m_MainWidget->setRunStatus(tr("回收槽到头"));
m_MainWidget->setReclaimStatus(true, 100); sysPara->devOp->highVoltageCtrl(0);
m_MainWidget->enablePrintButton(true); //仅仅在此时能使能打印按钮
sysPara->devOp->highVoltageCtrl(0);
m_MainWidget->stopFlashReclaimOpenBtn(); m_MainWidget->stopFlashReclaimOpenBtn();
// emit reclaimTankOpenDone(); /*回收槽开关时间校正*/
/*回收槽开关时间校正*/ sysPara->para.reclaimTankTime =( sysPara->status.currReclaimTankPos>120 )? sysPara->status.currReclaimTankPos/10-1:12;
sysPara->para.reclaimTankTime =( sysPara->status.currReclaimTankPos>120 )? sysPara->status.currReclaimTankPos/10-1:12; m_SystemSetting->updateReclaimTime( sysPara->para.reclaimTankTime );
m_SystemSetting->updateReclaimTime( sysPara->para.reclaimTankTime );
qDebug()<<"reclaimTankOpenDone currReclaimTankPos:"<<sysPara->status.currReclaimTankPos; LogInfo::setRunStatusText("reclaimTankOpenDone currReclaimTankPos:"+QString::number(sysPara->status.currReclaimTankPos));
qDebug()<<"reclaimTankOpenDone curr_reclaimTankTime:"<<sysPara->status.curr_reclaimTankTime;
LogInfo::setRunStatusText("reclaimTankOpenDone currReclaimTankPos:"+QString::number(sysPara->status.currReclaimTankPos));
} }
else if(sysPara->status.reclaimTankstatus == 0x11 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 else if(sysPara->status.reclaimTankstatus == 0x11 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作
{ {
sysPara->devOp->controlReclaimTankOpen(false); //卡住,关闭 sysPara->devOp->controlReclaimTankOpen(false); //卡住,关闭
m_MainWidget->stopFlashReclaimOpenBtn(); m_MainWidget->stopFlashReclaimOpenBtn();
// ui->tabMainWindow->setRunStatus(tr("回收槽卡住或者回收槽开关时间设置错误")); // ui->tabMainWindow->setRunStatus(tr("回收槽卡住或者回收槽开关时间设置错误"));
} }
else if(sysPara->status.reclaimTankstatus == 1 || sysPara->status.reclaimTankstatus == 2)//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 else if(sysPara->status.reclaimTankstatus == 1 || sysPara->status.reclaimTankstatus == 2)//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作
{ {
auto recliamTime = (sysPara->para.reclaimTankTime != 0 ? sysPara->para.reclaimTankTime : 15.0f) * 10.0f; // auto recliamTime = (sysPara->para.reclaimTankTime != 0 ? sysPara->para.reclaimTankTime : 15.0f) * 10.0f;
int rate = qBound(0, 100, int((sysPara->status.currReclaimTankPos / recliamTime) * 100)); // int rate = qBound(0, 100, int((sysPara->status.currReclaimTankPos / recliamTime) * 100));
// 不知道为什么会有rate为0,且 sysPara->status.reclaimTankstatus == 2 ,也就是 关的状态。 回收槽位置在0处,而状态却是 关 ,很奇怪 if(sysPara->status.reclaimTankstatus != 2) {
if(sysPara->status.reclaimTankstatus != 2 && rate != 0) {
m_MainWidget->setReclaimStatus(sysPara->status.reclaimTankstatus == 1, rate);
#ifdef BNS_DEBUG #ifdef BNS_DEBUG
if(rate == 100) { if(rate == 100) {
m_MainWidget->enablePrintButton(true); m_MainWidget->enablePrintButton(true);
m_MainWidget->stopFlashReclaimOpenBtn(); m_MainWidget->stopFlashReclaimOpenBtn();
sysPara->status.reclaimTankstatus = 5; sysPara->status.reclaimTankstatus = 5;
} }
#endif #endif
} }
m_MainWidget->setReclaimOpenBtnStatus(sysPara->status.reclaimTankstatus == 2); m_MainWidget->setReclaimOpenBtnStatus(sysPara->status.reclaimTankstatus == 2);
m_MainWidget->setReclaimCloseBtnStatus(sysPara->status.reclaimTankstatus == 1); m_MainWidget->setReclaimCloseBtnStatus(sysPara->status.reclaimTankstatus == 1);
sysPara->status.reclaimBlockedCnt = 0;
} }
else if(sysPara->status.reclaimTankstatus == 6 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作 else if(sysPara->status.reclaimTankstatus == 6 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作
{ {
if(sysPara->devOp->isReclaimTankCloseEnable()) if(sysPara->devOp->isReclaimTankCloseEnable())
sysPara->devOp->controlReclaimTankClose(false); //到头,关闭 sysPara->devOp->controlReclaimTankClose(false); //到头,关闭
m_MainWidget->setReclaimStatus(false, 0);
m_MainWidget->stopFlashReclaimOpenBtn(); m_MainWidget->stopFlashReclaimOpenBtn();
//sysPara->status.currReclaimTankPos = 0; //将回收槽的时间置为零
// emit reclaimTankCloseDone();
sysPara->status.lastRecycleWarn = 0; sysPara->status.lastRecycleWarn = 0;
sysPara->status.HVFaultCloseEn=0; sysPara->status.HVFaultCloseEn=0;
sysPara->status.reclainCloseAppending=false; sysPara->status.reclainCloseAppending=false;
@@ -2839,6 +2741,7 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){
m_MainWidget->setReclaimCloseBtnStatus(true); m_MainWidget->setReclaimCloseBtnStatus(true);
LogInfo::setRunStatusText("Reclaim tank hold on "+QString::number(sysPara->status.currReclaimTankPos)); LogInfo::setRunStatusText("Reclaim tank hold on "+QString::number(sysPara->status.currReclaimTankPos));
} }
} }
void InkJetPrinter::viscosity_timerHandler() void InkJetPrinter::viscosity_timerHandler()
@@ -3007,7 +2910,7 @@ bool InkJetPrinter::loadWorkFileAndPreparePrint(const QString &filename)
PrintSettingModel::applyToSysPara(model, sysPara); PrintSettingModel::applyToSysPara(model, sysPara);
ret = m_MainWidget->generatePrintContent(scene); ret = m_MainWidget->generatePrintContent(scene, model);
if(!ret) { if(!ret) {
LogInfo::setRunStatusText(QString("Failed to generate print content from work file: %1").arg(filename)); LogInfo::setRunStatusText(QString("Failed to generate print content from work file: %1").arg(filename));
delete scene; delete scene;
@@ -3300,12 +3203,6 @@ void InkJetPrinter::initRFIDManager()
connect(manager_rfid,SIGNAL(sig_maintenanceShow()), connect(manager_rfid,SIGNAL(sig_maintenanceShow()),
m_MainInstruction,SLOT(maintenanceDialogShow())); m_MainInstruction,SLOT(maintenanceDialogShow()));
auto checkReclaimOpenBtn = [this]() {
// if(sysPara->status.selfCheckDone && (sysPara->status.reclaimTankstatus == 2 || sysPara->status.reclaimTankstatus == 6)) {
// m_MainWidget->setReclaimOpenBtnStatus(true);
// }
};
connect(manager_rfid, &RFIDManager::sig_inkCardProgressFinished, this, [this](){ connect(manager_rfid, &RFIDManager::sig_inkCardProgressFinished, this, [this](){
sysPara->RFIDPara.needInkCard = false; sysPara->RFIDPara.needInkCard = false;
sysPara->saveRFIDPara(); sysPara->saveRFIDPara();
@@ -3333,7 +3230,8 @@ void InkJetPrinter::initRFIDManager()
#define MAX_WARNING_TIME_HOUR 48 #define MAX_WARNING_TIME_HOUR 48
#define WARNING_INTERVAL_SEC 3600 //#define WARNING_INTERVAL_SEC 3600
#define WARNING_INTERVAL_SEC 10
#ifdef BNS_DEBUG #ifdef BNS_DEBUG
@@ -3369,6 +3267,39 @@ void InkJetPrinter::resetRFIDStatus()
QMessageBox::information(this, "", "RFID progress has been cleaned.", QMessageBox::Ok); QMessageBox::information(this, "", "RFID progress has been cleaned.", QMessageBox::Ok);
} }
void InkJetPrinter::slt_close(bool height)
{
QString str = "";
if (height) {
str = tr("粘度过高,即将关闭喷嘴");
} else {
str = tr("粘度过低,即将关闭喷嘴");
}
if (sysPara && sysPara->status.selfCheckDone) {
QMessageBox::warning(this, tr("警告"), str);
if (sysPara->status.reclainTankReachEnd || sysPara->status.reclaimTankstatus == 1) {
// 关闭喷嘴
m_MainWidget->on_m_LeftBtn_clicked();
}
}
return;
}
void InkJetPrinter::slt_alert(bool height)
{
QString str = "";
if (height) {
str = tr("粘度较高,请注意调整粘度");
} else {
str = tr("粘度较低,请注意调整粘度");
}
if (sysPara && sysPara->status.selfCheckDone)
QMessageBox::information(this, tr("提示"), str);
return;
}
/** /**
* @brief 处理墨水警告 * @brief 处理墨水警告
* 如果发生墨水警告,则进入 加墨水&刷卡 流程。 * 如果发生墨水警告,则进入 加墨水&刷卡 流程。
@@ -3403,11 +3334,16 @@ void InkJetPrinter::handleWarnInk()
if(sysPara->RFIDPara.needInkCard) { if(sysPara->RFIDPara.needInkCard) {
slt_showMsg(tr("请及时使用墨水盒附带的IC卡激活墨水盒")); slt_showMsg(tr("请及时使用墨水盒附带的IC卡激活墨水盒"));
} }
m_MainWidget->powerOnWarn = false;
} }
} }
// 墨水盒空,进入 刷卡&加墨水 流程 // 墨水盒空,进入 刷卡&加墨水 流程
if(sysPara->status.inkWarningCnt >= DETECT_WARNING_TIME && sysPara->RFIDPara.inInkAndRFIDProgress == 0) { if(sysPara->status.inkWarningCnt >= DETECT_WARNING_TIME && sysPara->RFIDPara.inInkAndRFIDProgress == 0) {
// 只处理自检期间出现的问题
if (!sysPara->status.selfCheckDone) {
m_MainWidget->powerOnWarn = true;
}
sysPara->RFIDPara.addedInk = false; sysPara->RFIDPara.addedInk = false;
sysPara->RFIDPara.needInkCard = true; sysPara->RFIDPara.needInkCard = true;
@@ -3474,10 +3410,23 @@ void InkJetPrinter::handleWarnInk()
// 理论上differHours只会比 sysPara->status.showInkWarningNumber 大 1, 如果大于1,说明系统时间被被往后修改过或者关过机。 // 理论上differHours只会比 sysPara->status.showInkWarningNumber 大 1, 如果大于1,说明系统时间被被往后修改过或者关过机。
if(differHours > MAX_WARNING_TIME_HOUR) if(differHours > MAX_WARNING_TIME_HOUR) {
slt_showMsg(tr("墨水液位报警超过%1小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作!").arg(MAX_WARNING_TIME_HOUR)); slt_showMsg(tr("墨水液位报警超过%1小时,机器无法正常打印,请添加墨水并刷卡.").arg(MAX_WARNING_TIME_HOUR));
else }
slt_showMsg(tr("请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后禁止使用!").arg(MAX_WARNING_TIME_HOUR - differHours)); else {
// 累计 3 小时未补充,自动关喷嘴
if ((differHours > 0 && differHours % 3 == 0)
&& differHours < MAX_WARNING_TIME_HOUR
&& (sysPara->status.statWarn & WARN_STATUS_INK_WARN)) {
slt_showMsg(tr("墨水告警已累计3小时,自动关喷嘴。"));
if (sysPara->status.isPrinting)
m_MainWidget->on_m_StopBtn_clicked();
if (sysPara->status.reclaimTankstatus != 2)
m_MainWidget->on_m_LeftBtn_clicked();
} else {
slt_showMsg(tr("请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后禁止使用!").arg(MAX_WARNING_TIME_HOUR - differHours));
}
}
sysPara->status.showInkWarningNumber = differHours; sysPara->status.showInkWarningNumber = differHours;
sysPara->saveRFIDPara(); sysPara->saveRFIDPara();
@@ -3530,11 +3479,17 @@ void InkJetPrinter::handleWarnSolvent()
if(sysPara->RFIDPara.needSolventCard) { if(sysPara->RFIDPara.needSolventCard) {
slt_showMsg(tr("请及时使用溶剂盒附带的IC卡激活溶剂盒")); slt_showMsg(tr("请及时使用溶剂盒附带的IC卡激活溶剂盒"));
} }
m_MainWidget->powerOnWarn = false;
} }
} }
// 溶剂盒空,进入 刷卡&加溶剂 流程 // 溶剂盒空,进入 刷卡&加溶剂 流程
if(sysPara->status.solventWarningCnt >= DETECT_WARNING_TIME && sysPara->RFIDPara.inSolventAndRFIDProgress == 0) { if(sysPara->status.solventWarningCnt >= DETECT_WARNING_TIME && sysPara->RFIDPara.inSolventAndRFIDProgress == 0) {
// 只处理自检期间出现的问题
if (!sysPara->status.selfCheckDone) {
m_MainWidget->powerOnWarn = true;
}
QDateTime curDateTime = QDateTime::currentDateTime(); QDateTime curDateTime = QDateTime::currentDateTime();
QString strCurDateTime = curDateTime.toString("yyMMddhhmmss"); QString strCurDateTime = curDateTime.toString("yyMMddhhmmss");
LogInfo::setRunStatusText("Solvent warning."); LogInfo::setRunStatusText("Solvent warning.");
@@ -3593,10 +3548,22 @@ void InkJetPrinter::handleWarnSolvent()
} }
if(differHours > sysPara->status.showSolventWarningNumber) { if(differHours > sysPara->status.showSolventWarningNumber) {
if(differHours > MAX_WARNING_TIME_HOUR) if(differHours > MAX_WARNING_TIME_HOUR) {
slt_showMsg(tr("溶剂液位报警超过%1小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作!").arg(MAX_WARNING_TIME_HOUR)); slt_showMsg(tr("溶剂液位报警超过%1小时,机器无法正常打印,请添加溶剂并刷卡.").arg(MAX_WARNING_TIME_HOUR));
else }else {
slt_showMsg(tr("请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后禁止使用!").arg(MAX_WARNING_TIME_HOUR - differHours)); // 累计 3 小时未补充,自动关喷嘴
if ((differHours > 0 && differHours % 3 == 0)
&& differHours < MAX_WARNING_TIME_HOUR
&& (sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)) {
slt_showMsg(tr("溶剂告警已累计3小时,自动关喷嘴。"));
if (sysPara->status.isPrinting)
m_MainWidget->on_m_StopBtn_clicked();
if (sysPara->status.reclaimTankstatus != 2)
m_MainWidget->on_m_LeftBtn_clicked();
} else {
slt_showMsg(tr("请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后禁止使用!").arg(MAX_WARNING_TIME_HOUR - differHours));
}
}
sysPara->status.showSolventWarningNumber = differHours; sysPara->status.showSolventWarningNumber = differHours;
sysPara->saveRFIDPara(); sysPara->saveRFIDPara();
@@ -3610,7 +3577,8 @@ void InkJetPrinter::handleWarnSolvent()
} }
// 如果用户已经刷了溶剂卡,并且加了溶剂,则清除 刷卡&加溶剂 流程 // 如果用户已经刷了溶剂卡,并且加了溶剂,则清除 刷卡&加溶剂 流程
if(sysPara->RFIDPara.addedSolvent && !sysPara->RFIDPara.needSolventCard && sysPara->RFIDPara.inSolventAndRFIDProgress != 0) { if(sysPara->RFIDPara.addedSolvent && !sysPara->RFIDPara.needSolventCard
&& sysPara->RFIDPara.inSolventAndRFIDProgress != 0) {
sysPara->status.showSolventWarningNumber = 0; sysPara->status.showSolventWarningNumber = 0;
sysPara->RFIDPara.inSolventAndRFIDProgress = 0; sysPara->RFIDPara.inSolventAndRFIDProgress = 0;
sysPara->RFIDPara.solventCardTimeOut = false; sysPara->RFIDPara.solventCardTimeOut = false;
+16 -7
View File
@@ -170,6 +170,9 @@ private:
private slots: private slots:
void resetRFIDStatus(); void resetRFIDStatus();
// 粘度告警
void slt_close(bool);
void slt_alert(bool);
void onDlgFileOpen(const QString& filename); void onDlgFileOpen(const QString& filename);
@@ -234,7 +237,7 @@ private slots:
void OnFinished(int event); void OnFinished(int event);
void slt_editCounter(CounterViewModel vm); void slt_editCounter(CounterViewModel vm, bool isChange);
// 保养警告 // 保养警告
void slt_warningMaintenance(); void slt_warningMaintenance();
@@ -284,18 +287,17 @@ private:
bool gearPumpStartFlag = false; bool gearPumpStartFlag = false;
// 状态机 // ===================状态机====================
PrinterStateManager* m_stateManager = nullptr; PrinterStateManager* m_stateManager = nullptr;
// 测试定时器
QTimer* m_testTimer = nullptr;
int m_testStep = 0;
private: private:
void initStateManager(); void initStateManager();
void initStateTimer();
// 不同状态的处理 // 不同状态的处理
// 自检 // 自检
void handleSelfCheck(); void handleSelfCheck();
// 自检完成
void handleToReady();
// 就绪 // 就绪
void handleReady(); void handleReady();
@@ -306,7 +308,14 @@ private:
// 关机 // 关机
void handlePowerOff(); void handlePowerOff();
private slots: private slots:
void slt_stateTest(); // 切换状态
void slt_stateChanged(PrinterState newState, PrinterState oldState, QString reason); void slt_stateChanged(PrinterState newState, PrinterState oldState, QString reason);
// 使能开始打印、停止打印、开回收槽、关回收槽按钮
void slt_enableStartPrint(bool);
void slt_enableStopPrint(bool);
void slt_enableOpenTank(bool);
void slt_enableCloseTank(bool);
// 处理告警
void slt_infoBox(QString);
}; };
+22 -2
View File
@@ -84,6 +84,7 @@ MainInstruction::~MainInstruction()
void MainInstruction::bindSysPara(SysPara *sysPara){ void MainInstruction::bindSysPara(SysPara *sysPara){
this->sysPara = sysPara; this->sysPara = sysPara;
initDlgVis();
} }
void MainInstruction::onGraphicsEditBtnClicked() void MainInstruction::onGraphicsEditBtnClicked()
@@ -189,7 +190,7 @@ void MainInstruction::ondialogAuthorizationAccepted(){
} else { } else {
QMessageBox box(QMessageBox::Warning, tr("警告"), QMessageBox box(QMessageBox::Warning, tr("警告"),
tr("密码错误:%1").arg(authString), QMessageBox::Ok, tr("密码错误:%1").arg(authString), QMessageBox::Ok,
this); 0);
box.exec(); box.exec();
} }
} }
@@ -424,4 +425,23 @@ void MainInstruction::applyStyleSheet()
)"; )";
this->setStyleSheet(styleSheet); this->setStyleSheet(styleSheet);
} }
void MainInstruction::on_visSetBtn_clicked()
{
initDlgVis();
if (dlgVisSetting)
dlgVisSetting->show();
}
void MainInstruction::initDlgVis()
{
if (dlgVisSetting == nullptr) {
dlgVisSetting = new DlgViscositySetting(this);
dlgVisSetting->bindSysPara(sysPara);
connect(dlgVisSetting, &DlgViscositySetting::sig_alert,
this, &MainInstruction::sig_alert);
connect(dlgVisSetting, &DlgViscositySetting::sig_close,
this, &MainInstruction::sig_close);
}
}
+9 -1
View File
@@ -11,6 +11,7 @@
#include "dialogmaintenancetimesetting.h" #include "dialogmaintenancetimesetting.h"
#include "LogInfo.h" #include "LogInfo.h"
#include "TimeSettingDialog.h" #include "TimeSettingDialog.h"
#include "dlgviscositysetting.h"
class DlgRFIDConfig; class DlgRFIDConfig;
class DlgCanvasHeightEditor; class DlgCanvasHeightEditor;
@@ -30,7 +31,7 @@ public:
void bindSysPara(SysPara *SysPara); void bindSysPara(SysPara *SysPara);
DlgInputAddr *dlgInputAddr; DlgInputAddr *dlgInputAddr;
signals: signals:
void sendButtonClickedSignal(int index); void sendButtonClickedSignal(int index);
@@ -38,6 +39,8 @@ signals:
void superJmAccepted(); void superJmAccepted();
void sig_close(bool);
void sig_alert(bool);
private slots: private slots:
void onGraphicsEditBtnClicked(); void onGraphicsEditBtnClicked();
@@ -60,6 +63,7 @@ private slots:
void onCanvasCfgBtnClicked(); void onCanvasCfgBtnClicked();
void on_visSetBtn_clicked();
private: private:
Ui::MainInstruction *ui; Ui::MainInstruction *ui;
SysPara* sysPara = nullptr; SysPara* sysPara = nullptr;
@@ -75,6 +79,10 @@ private:
// 时间设置 // 时间设置
TimeSettingDialog timeDia; TimeSettingDialog timeDia;
//粘度预警界面
DlgViscositySetting* dlgVisSetting = nullptr;
void initDlgVis();
void applyStyleSheet(); // 应用样式表 void applyStyleSheet(); // 应用样式表
}; };
+14 -1
View File
@@ -98,7 +98,7 @@
</rect> </rect>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>2</number>
</property> </property>
<widget class="QWidget" name="tabBasic"> <widget class="QWidget" name="tabBasic">
<attribute name="title"> <attribute name="title">
@@ -304,6 +304,19 @@
<string>窗口点阵设置</string> <string>窗口点阵设置</string>
</property> </property>
</widget> </widget>
<widget class="QPushButton" name="visSetBtn">
<property name="geometry">
<rect>
<x>310</x>
<y>230</y>
<width>254</width>
<height>92</height>
</rect>
</property>
<property name="text">
<string>粘度设置</string>
</property>
</widget>
</widget> </widget>
</widget> </widget>
<widget class="QPushButton" name="closeBtn"> <widget class="QPushButton" name="closeBtn">
+3 -3
View File
@@ -217,7 +217,7 @@ QScrollBar::add-line:horizontal { bottom: 0px; }</string>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>780</width> <width>780</width>
<height>177</height> <height>169</height>
</rect> </rect>
</property> </property>
</widget> </widget>
@@ -255,7 +255,7 @@ QScrollBar::add-line:horizontal { bottom: 0px; }</string>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>150</width> <width>150</width>
<height>130</height> <height>128</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
@@ -439,7 +439,7 @@ QScrollBar::add-line:horizontal { bottom: 0px; }</string>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>0</width> <width>0</width>
<height>130</height> <height>128</height>
</size> </size>
</property> </property>
<property name="maximumSize"> <property name="maximumSize">
+1 -1
View File
@@ -124,7 +124,7 @@ void MyInputMethod::updateHandler ( int type ){
switch(type){ switch(type){
case 0:break; case 0:break;
case 1: case 1:
if(widget && (dynamic_cast<QSpinBox *>(widget))){ if(widget && (dynamic_cast<QSpinBox *>(widget) || dynamic_cast<QDoubleSpinBox *>(widget))){
if(digitalInput->isHidden()){ if(digitalInput->isHidden()){
QWidget *hostWindow = widget->window(); QWidget *hostWindow = widget->window();
QRect rec = QApplication::desktop()->screenGeometry(); QRect rec = QApplication::desktop()->screenGeometry();
+111
View File
@@ -0,0 +1,111 @@
#include "PressureMonitor.h"
#include <cmath>
PressureMonitor::PressureMonitor()
: m_tickCounter(0)
, m_sampleCount(0)
, m_bufIdx(0)
, m_totalTickCount(0)
, m_timeout(false)
{
for (int i = 0; i < BUF_SIZE; i++) {
m_buf[i] = 0.0f;
}
}
bool PressureMonitor::tick(float realtimePressure, float calibratedPressure)
{
m_totalTickCount++;
if (m_totalTickCount >= TIMEOUT_TICKS) {
m_timeout = true;
return true;
}
if (m_tickCounter != 0) {
m_tickCounter = (m_tickCounter + 1) % SAMPLE_INTERVAL_TICKS;
return false;
}
m_tickCounter = (m_tickCounter + 1) % SAMPLE_INTERVAL_TICKS;
if (calibratedPressure <= 0.0f) {
return false;
}
m_buf[m_bufIdx] = realtimePressure;
m_bufIdx = (m_bufIdx + 1) % BUF_SIZE;
m_sampleCount++;
if (m_sampleCount < BUF_SIZE) {
return false;
}
float rangeMin = calibratedPressure - 10.0f;
float rangeMax = calibratedPressure + 10.0f;
if (!checkFirst4InRange(rangeMin, rangeMax)) {
return false;
}
float avg = computeTrimmedMean();
return (avg >= rangeMin && avg <= rangeMax);
}
void PressureMonitor::reset()
{
m_tickCounter = 0;
m_sampleCount = 0;
m_bufIdx = 0;
m_totalTickCount = 0;
m_timeout = false;
for (int i = 0; i < BUF_SIZE; i++) {
m_buf[i] = 0.0f;
}
}
bool PressureMonitor::isCurrentlyInRange() const
{
return (m_sampleCount >= BUF_SIZE);
}
int PressureMonitor::stableTickCount() const
{
return m_sampleCount;
}
bool PressureMonitor::wasTimeout() const
{
return m_timeout;
}
const float* PressureMonitor::buffer() const
{
return m_buf;
}
bool PressureMonitor::checkFirst4InRange(float rangeMin, float rangeMax) const
{
for (int i = 0; i < 4; i++) {
float val = m_buf[(m_bufIdx + i) % BUF_SIZE];
if (val < rangeMin || val > rangeMax) {
return false;
}
}
return true;
}
float PressureMonitor::computeTrimmedMean() const
{
float minVal = m_buf[0];
float maxVal = m_buf[0];
float sum = 0.0f;
for (int i = 0; i < BUF_SIZE; i++) {
float val = m_buf[i];
sum += val;
if (val < minVal) minVal = val;
if (val > maxVal) maxVal = val;
}
return (sum - minVal - maxVal) / (float)(BUF_SIZE - 2);
}
+47
View File
@@ -0,0 +1,47 @@
#ifndef PRESSUREMONITOR_H
#define PRESSUREMONITOR_H
class PressureMonitor
{
public:
PressureMonitor();
// 每个100ms tick 调用一次(外部调用频率不变)
// realtimePressure: 实时压力 (sysPara->status.PRESSURE)
// calibratedPressure: 标定压力 (sysPara->para.pressure)
//
// 内部逻辑:每500ms采样一次,维护最近12个采样的环形缓冲区。
// 缓冲区满12个后,先检查最旧的4个采样是否各自在标定值 ±10 范围内,
// 满足后去掉全部12个中的最大值和最小值取平均,判断均值是否在 ±10 内。
// 每次新采样入队、最旧采样出队后立即重新判定。
// 返回 true 表示:
// 1) 前4入界且去极值均值在 ±10 范围内,或
// 2) 超过 2 分钟仍未稳定,兜底超时结束
bool tick(float realtimePressure, float calibratedPressure);
void reset();
bool isCurrentlyInRange() const;
int stableTickCount() const;
bool wasTimeout() const;
// 返回环形缓冲区(12个压力值)
const float* buffer() const;
private:
float computeTrimmedMean() const;
bool checkFirst4InRange(float rangeMin, float rangeMax) const;
static const int SAMPLE_INTERVAL_TICKS = 5; // 500ms / 100ms
static const int BUF_SIZE = 12; // 缓冲区大小
static const int TIMEOUT_TICKS = 1200; // 2分钟 / 100ms
int m_tickCounter; // 100ms tick 计数,==0 时采样
int m_sampleCount; // 已采集样本总数
int m_bufIdx; // 环形缓冲区下一次写入位置
float m_buf[12]; // 环形缓冲区
int m_totalTickCount; // 超时用总 tick 计数
bool m_timeout; // 是否已超时
};
#endif // PRESSUREMONITOR_H
+2 -1
View File
@@ -296,7 +296,8 @@ void PrintTextDisplay::paintEvent(QPaintEvent *event){
if(val>base-1)jmin=Num-j-1; if(val>base-1)jmin=Num-j-1;
base *= 10; base *= 10;
} }
str= QString("%1").arg(val%base,Num,10,QLatin1Char('0'))+str; int r = (base != 0) ? (val % base) : 0;
str= QString("%1").arg(r,Num,10,QLatin1Char('0'))+str;
} }
+32 -45
View File
@@ -89,6 +89,14 @@ void PrintSetting::init()
if(b) if(b)
on_radioButtonSynTriggerExternal_clicked(); on_radioButtonSynTriggerExternal_clicked();
}); });
connect(ui->dsb_diameter, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, [this](double v){
updateTriggerPPM();
});
connect(ui->dsb_pulsePerCycle, QOverload<double>::of(&QDoubleSpinBox::valueChanged), this, [this](double v){
updateTriggerPPM();
});
} }
extern void MySleep(unsigned int msec); extern void MySleep(unsigned int msec);
@@ -124,8 +132,13 @@ void PrintSetting::updateModelFromUI(){
m_model.eleEyeTriggerPrintDelay = ui->spinBoxEleEyeTriggerPrintDelay->value(); m_model.eleEyeTriggerPrintDelay = ui->spinBoxEleEyeTriggerPrintDelay->value();
m_model.timeTriggerPrintMode = 0; m_model.timeTriggerPrintMode = 0;
m_model.triggerInterval = ui->spinBoxEleEyeTriggerIntervalMs->value(); m_model.triggerInterval = ui->spinBoxEleEyeTriggerIntervalMs->value();
updateTriggerPPM();
m_model.encoderPulsePerMm = ui->lineEditTriggerPulsePerMm->text().toFloat(); m_model.encoderPulsePerMm = ui->lineEditTriggerPulsePerMm->text().toFloat();
m_model.encoderDiameter = ui->dsb_diameter->value();
m_model.encoderPulsePerCycle = ui->dsb_pulsePerCycle->value();
if(ui->eleEyeEdgetTriggerExternal->isChecked() && ui->radioButtonSynTriggerExternal->isChecked()) { if(ui->eleEyeEdgetTriggerExternal->isChecked() && ui->radioButtonSynTriggerExternal->isChecked()) {
m_model.triggerMode = ui->radioButtonEleEyeEdgetTrigger->isChecked() ? PRINT_TRIGGER_ELEC_EYE_EDGE : PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL; m_model.triggerMode = ui->radioButtonEleEyeEdgetTrigger->isChecked() ? PRINT_TRIGGER_ELEC_EYE_EDGE : PRINT_TRIGGER_ELEC_EYE_VOLTATE_LEVEL;
} }
@@ -215,7 +228,16 @@ void PrintSetting::TriggerupdateModelToUI()
ui->spinBoxEleEyeTriggerRepeatCnt->setValue(m_model.eleEyeRepeatCnt); ui->spinBoxEleEyeTriggerRepeatCnt->setValue(m_model.eleEyeRepeatCnt);
ui->spinBoxSynTriggerPrintLen->setText(QString::number(m_model.triggerInterval)); ui->spinBoxSynTriggerPrintLen->setText(QString::number(m_model.triggerInterval));
ui->lineEditTriggerPulsePerMm->setText(QString::number((double)m_model.encoderPulsePerMm));
auto b = ui->dsb_diameter->blockSignals(true);
ui->dsb_diameter->setValue(m_model.encoderDiameter);
ui->dsb_diameter->blockSignals(b);
b = ui->dsb_pulsePerCycle->blockSignals(true);
ui->dsb_pulsePerCycle->setValue(m_model.encoderPulsePerCycle);
ui->dsb_pulsePerCycle->blockSignals(b);
updateTriggerPPM();
ui->comboBoxEleEyeMakeClean->setCurrentIndex(0); ui->comboBoxEleEyeMakeClean->setCurrentIndex(0);
@@ -241,10 +263,10 @@ void PrintSetting::TriggerupdateModelToUI()
void PrintSetting::updateSysStatusToUI(){ void PrintSetting::updateSysStatusToUI(){
} }
void PrintSetting::on_pushButtonApplyPulseFix_clicked() void PrintSetting::updateTriggerPPM()
{ {
float circle = ui->lineEditDiameter->text().toFloat() * 3.1415926; double circle = ui->dsb_diameter->value() * 3.1415926;
float pulseNum = ui->lineEditPulsePerCycle->text().toFloat(); double pulseNum = ui->dsb_pulsePerCycle->value();
if(circle != 0){ if(circle != 0){
auto pulseNumPerMM = 4*pulseNum/circle; //电路和Fpga做了4倍频处理,这里乘以4是为了匹配4倍频的处理进行正确的显示 auto pulseNumPerMM = 4*pulseNum/circle; //电路和Fpga做了4倍频处理,这里乘以4是为了匹配4倍频的处理进行正确的显示
m_model.encoderPulsePerMm = pulseNumPerMM; m_model.encoderPulsePerMm = pulseNumPerMM;
@@ -252,15 +274,6 @@ void PrintSetting::on_pushButtonApplyPulseFix_clicked()
ui->lineEditTriggerPulsePerMm->setText(QString::number(pulseNumPerMM)); ui->lineEditTriggerPulsePerMm->setText(QString::number(pulseNumPerMM));
ui->lineEditTriggerPulsePerMm->blockSignals(b); ui->lineEditTriggerPulsePerMm->blockSignals(b);
} }
return;
if(!sysPara)
return;
pulseNumFix->bindSysPara(sysPara);
pulseNumFix->hide();
pulseNumFix->show();
} }
void PrintSetting::onPulseNumFixDone(float value){ void PrintSetting::onPulseNumFixDone(float value){
@@ -304,16 +317,6 @@ void PrintSetting::on_radioButtonEleEyeLevelTrigger_pressed()
void PrintSetting::on_radioButtonSynTrigger_pressed() void PrintSetting::on_radioButtonSynTrigger_pressed()
{ {
setTriggerUI(PRINT_TRIGGER_SYNCHRONIZER); setTriggerUI(PRINT_TRIGGER_SYNCHRONIZER);
//edit@11-19
// const unsigned short &FpgaVer=sysPara->status.build_dat.builTime;
// //72版本禁用字符宽度
// if(72 == FpgaVer){
// ui->spinBoxSynTriggerPrintLenRatio->setValue(0);
// ui->spinBoxSynTriggerPrintLenRatio->setEnabled(0);
// }else if (67 == FpgaVer)
// ui->spinBoxSynTriggerPrintLenRatio->setEnabled(1);
// emit synDisableFontWidth(true);
} }
void PrintSetting::on_checkEyeTriggerSynPrintEn_clicked(bool checked) void PrintSetting::on_checkEyeTriggerSynPrintEn_clicked(bool checked)
@@ -327,16 +330,6 @@ void PrintSetting::on_checkEyeTriggerSynPrintEn_clicked(bool checked)
#ifndef NON_CABLE #ifndef NON_CABLE
// ui->spinBoxSynTriggerPrintLen->setEnabled(1); // ui->spinBoxSynTriggerPrintLen->setEnabled(1);
#endif #endif
// ui->labelSynTriggerPrintLen->setEnabled(1);
// ui->lineEditTriggerPulsePerMm->setEnabled(1);
// ui->labelTriggerPulsePerMm->setEnabled(1);
// ui->spinBoxSynTriggerPrintLenRatio->setEnabled(1);
// ui->labelSynTriggerPrintLenRatio->setEnabled(1);
// ui->checkBoxEleEyeMakeClean->setEnabled(1);
// ui->pushButtonApplyPulseFix->setEnabled(1);
// ui->comboBoxSynPrintMode->setEnabled(1);
// ui->labelSynPrintMode->setEnabled(1);
// ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(0);
ui->labelEleEyeTriggerPrintDelay->setText(tr("触发延时(毫米)")); ui->labelEleEyeTriggerPrintDelay->setText(tr("触发延时(毫米)"));
ui->labelEleEyeTriggerIntervalMs->setText(tr("重复间隔(毫米)")); ui->labelEleEyeTriggerIntervalMs->setText(tr("重复间隔(毫米)"));
ui->labelEleMaskTime->setText(tr("抑止距离(毫米)")); ui->labelEleMaskTime->setText(tr("抑止距离(毫米)"));
@@ -351,16 +344,6 @@ void PrintSetting::on_checkEyeTriggerSynPrintEn_clicked(bool checked)
#ifndef NON_CABLE #ifndef NON_CABLE
// ui->spinBoxSynTriggerPrintLen->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER); // ui->spinBoxSynTriggerPrintLen->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER);
#endif #endif
// ui->labelSynTriggerPrintLen->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER);
// ui->lineEditTriggerPulsePerMm->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER);
// ui->labelTriggerPulsePerMm->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER);
// ui->spinBoxSynTriggerPrintLenRatio->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER);
// ui->labelSynTriggerPrintLenRatio->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER);
// ui->checkBoxEleEyeMakeClean->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER);
// ui->pushButtonApplyPulseFix->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER);
// ui->comboBoxSynPrintMode->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER);
// ui->labelSynPrintMode->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER);
// ui->spinBoxEleEyeTriggerIntervalMs->setEnabled(1);
ui->labelEleEyeTriggerPrintDelay->setText(tr("触发延时(毫秒)")); ui->labelEleEyeTriggerPrintDelay->setText(tr("触发延时(毫秒)"));
ui->labelEleEyeTriggerIntervalMs->setText(tr("重复间隔(毫秒)")); ui->labelEleEyeTriggerIntervalMs->setText(tr("重复间隔(毫秒)"));
ui->labelEleMaskTime->setText(tr("抑止距离(毫秒)")); ui->labelEleMaskTime->setText(tr("抑止距离(毫秒)"));
@@ -602,8 +585,8 @@ void PrintSetting::on_eleEyeEdgetTriggerExternal_clicked()
void PrintSetting::setEnableSynTriggerSetting(bool flag){ void PrintSetting::setEnableSynTriggerSetting(bool flag){
// ui->labelTriggerPulsePerMm->setEnabled(flag); // ui->labelTriggerPulsePerMm->setEnabled(flag);
ui->lineEditTriggerPulsePerMm->setEnabled(flag); ui->lineEditTriggerPulsePerMm->setEnabled(false);
ui->pushButtonApplyPulseFix->setEnabled(flag); // ui->pushButtonApplyPulseFix->setEnabled(flag);
// ui->labelSynTriggerPrintLen->setEnabled(flag); // ui->labelSynTriggerPrintLen->setEnabled(flag);
ui->spinBoxSynTriggerPrintLen->setEnabled(flag); ui->spinBoxSynTriggerPrintLen->setEnabled(flag);
ui->comboBoxSyncActType->setEnabled(flag); ui->comboBoxSyncActType->setEnabled(flag);
@@ -732,6 +715,8 @@ void PrintSettingModel::loadFromXml(PrintSettingModel& model, const QXmlStreamAt
model.unlimitedRepeat = attrs.value("unlimitedRepeat").toInt() != 0; model.unlimitedRepeat = attrs.value("unlimitedRepeat").toInt() != 0;
model.triggerMode = attrs.value("triggerMode").toUInt(); model.triggerMode = attrs.value("triggerMode").toUInt();
model.encoderPulsePerMm = attrs.value("encoderPulsePerMm").toFloat(); model.encoderPulsePerMm = attrs.value("encoderPulsePerMm").toFloat();
model.encoderDiameter = attrs.value("encoderDiameter").toDouble();
model.encoderPulsePerCycle = attrs.value("encoderPulsePerCycle").toDouble();
model.printColDelay = attrs.value("printColDelay").toUInt(); model.printColDelay = attrs.value("printColDelay").toUInt();
model.volParaIndex = (unsigned short)attrs.value("volParaIndex").toUInt(); model.volParaIndex = (unsigned short)attrs.value("volParaIndex").toUInt();
model.eleEyeTriggerPrintDelay = (unsigned short)attrs.value("eleEyeTriggerPrintDelay").toUInt(); model.eleEyeTriggerPrintDelay = (unsigned short)attrs.value("eleEyeTriggerPrintDelay").toUInt();
@@ -773,6 +758,8 @@ void PrintSettingModel::saveToXml(const PrintSettingModel& model, QXmlStreamWrit
writer.writeAttribute("unlimitedRepeat", QString::number(model.unlimitedRepeat)); writer.writeAttribute("unlimitedRepeat", QString::number(model.unlimitedRepeat));
writer.writeAttribute("triggerMode", QString::number(model.triggerMode)); writer.writeAttribute("triggerMode", QString::number(model.triggerMode));
writer.writeAttribute("encoderPulsePerMm", QString::number((double)model.encoderPulsePerMm)); writer.writeAttribute("encoderPulsePerMm", QString::number((double)model.encoderPulsePerMm));
writer.writeAttribute("encoderPulsePerCycle", QString::number(model.encoderPulsePerCycle));
writer.writeAttribute("encoderDiameter", QString::number(model.encoderDiameter));
writer.writeAttribute("printColDelay", QString::number(model.printColDelay)); writer.writeAttribute("printColDelay", QString::number(model.printColDelay));
writer.writeAttribute("volParaIndex", QString::number(model.volParaIndex)); writer.writeAttribute("volParaIndex", QString::number(model.volParaIndex));
writer.writeAttribute("eleEyeTriggerPrintDelay", QString::number(model.eleEyeTriggerPrintDelay)); writer.writeAttribute("eleEyeTriggerPrintDelay", QString::number(model.eleEyeTriggerPrintDelay));
+5 -1
View File
@@ -42,6 +42,10 @@ struct PrintSettingModel
float encoderPulsePerMm = 40; // 编码器的每毫米脉冲数 float encoderPulsePerMm = 40; // 编码器的每毫米脉冲数
double encoderDiameter = 10; // 编码器的直径,单位毫米
double encoderPulsePerCycle = 5000; // 编码器每圈的脉冲数
unsigned printColDelay = 6; // 打印列延迟,(字宽) unsigned printColDelay = 6; // 打印列延迟,(字宽)
unsigned short volParaIndex = 0; // 喷印模式的索引, 决定选择哪组电压参数 unsigned short volParaIndex = 0; // 喷印模式的索引, 决定选择哪组电压参数
@@ -145,7 +149,7 @@ public:
private slots: private slots:
void buttonClickedSlot(); void buttonClickedSlot();
void on_pushButtonApplyPulseFix_clicked(); void updateTriggerPPM();
void onPulseNumFixDone(float); void onPulseNumFixDone(float);
+41 -38
View File
@@ -592,6 +592,9 @@
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QLineEdit" name="lineEditTriggerPulsePerMm"> <widget class="QLineEdit" name="lineEditTriggerPulsePerMm">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch> <horstretch>0</horstretch>
@@ -816,19 +819,6 @@
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property> </property>
</widget> </widget>
<widget class="QLineEdit" name="lineEditDiameter">
<property name="geometry">
<rect>
<x>400</x>
<y>220</y>
<width>161</width>
<height>31</height>
</rect>
</property>
<property name="inputMethodHints">
<set>Qt::ImhNone</set>
</property>
</widget>
<widget class="QLabel" name="labelDiameter"> <widget class="QLabel" name="labelDiameter">
<property name="geometry"> <property name="geometry">
<rect> <rect>
@@ -861,49 +851,57 @@
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property> </property>
</widget> </widget>
<widget class="QLineEdit" name="lineEditPulsePerCycle"> <widget class="CustomDoubleSpinBox" name="dsb_pulsePerCycle">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>400</x> <x>400</x>
<y>170</y> <y>170</y>
<width>161</width> <width>171</width>
<height>31</height> <height>31</height>
</rect> </rect>
</property> </property>
<property name="inputMethodHints"> <property name="buttonSymbols">
<set>Qt::ImhNone</set> <enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="decimals">
<number>10</number>
</property>
<property name="minimum">
<double>1.000000000000000</double>
</property>
<property name="maximum">
<double>10000000.000000000000000</double>
</property>
<property name="singleStep">
<double>100.000000000000000</double>
</property>
<property name="value">
<double>5000.000000000000000</double>
</property> </property>
</widget> </widget>
<widget class="QPushButton" name="pushButtonApplyPulseFix"> <widget class="CustomDoubleSpinBox" name="dsb_diameter">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>400</x> <x>400</x>
<y>260</y> <y>220</y>
<width>161</width> <width>171</width>
<height>37</height> <height>31</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="buttonSymbols">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred"> <enum>QAbstractSpinBox::NoButtons</enum>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property> </property>
<property name="minimumSize"> <property name="decimals">
<size> <number>10</number>
<width>150</width>
<height>0</height>
</size>
</property> </property>
<property name="layoutDirection"> <property name="minimum">
<enum>Qt::LeftToRight</enum> <double>5.000000000000000</double>
</property> </property>
<property name="text"> <property name="maximum">
<string>脉冲数修正</string> <double>10000.000000000000000</double>
</property> </property>
<property name="icon"> <property name="value">
<iconset resource="image.qrc"> <double>100.000000000000000</double>
<normaloff>:/icon/pulse.png</normaloff>:/icon/pulse.png</iconset>
</property> </property>
</widget> </widget>
</widget> </widget>
@@ -1484,6 +1482,11 @@
<signal>pressed()</signal> <signal>pressed()</signal>
</slots> </slots>
</customwidget> </customwidget>
<customwidget>
<class>CustomDoubleSpinBox</class>
<extends>QDoubleSpinBox</extends>
<header>CustomDoubleSpinBox.h</header>
</customwidget>
</customwidgets> </customwidgets>
<resources> <resources>
<include location="image.qrc"/> <include location="image.qrc"/>
+10 -4
View File
@@ -96,6 +96,7 @@ HEADERS += Public.h \
# ParaSettingUI.h \ # ParaSettingUI.h \
DevOp.h \ DevOp.h \
posix_qextserialport.h \ posix_qextserialport.h \
PressureMonitor.h \
rfid/sm4.h \ rfid/sm4.h \
rfid/sm3.h \ rfid/sm3.h \
rfid/rfidfunction.h \ rfid/rfidfunction.h \
@@ -184,7 +185,9 @@ HEADERS += Public.h \
runtimectrl.h \ runtimectrl.h \
dump.h \ dump.h \
DlgCanvasHeightEditor.h \ DlgCanvasHeightEditor.h \
StateMachine/PrinterStateManager.h StateMachine/PrinterStateManager.h \
CustomDoubleSpinBox.h \
dlgviscositysetting.h
FORMS += \ FORMS += \
@@ -234,7 +237,8 @@ FORMS += \
scene/DlgBarcodeFormat.ui \ scene/DlgBarcodeFormat.ui \
scene/DlgQrcodeFormat.ui \ scene/DlgQrcodeFormat.ui \
dlgQrCode.ui \ dlgQrCode.ui \
DlgCanvasHeightEditor.ui DlgCanvasHeightEditor.ui \
dlgviscositysetting.ui
SOURCES +=\ SOURCES +=\
mainwidget.cpp \ mainwidget.cpp \
@@ -253,6 +257,7 @@ SOURCES +=\
# ParaSettingUI.cpp \ # ParaSettingUI.cpp \
DevOp.cpp \ DevOp.cpp \
posix_qextserialport.cpp \ posix_qextserialport.cpp \
PressureMonitor.cpp \
rfid/sm4.cpp \ rfid/sm4.cpp \
rfid/sm3.cpp \ rfid/sm3.cpp \
rfid/rfidfunction.cpp \ rfid/rfidfunction.cpp \
@@ -347,7 +352,8 @@ SOURCES +=\
loginfoctrl.cpp \ loginfoctrl.cpp \
runtimectrl.cpp \ runtimectrl.cpp \
DlgCanvasHeightEditor.cpp \ DlgCanvasHeightEditor.cpp \
StateMachine/PrinterStateManager.cpp StateMachine/PrinterStateManager.cpp \
dlgviscositysetting.cpp
@@ -394,4 +400,4 @@ if(contains(DEFINES,__2451WIFI__))
#SOURCES += /home/student/newDisk/2451_linux/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src/common/wpa_ctrl.c #SOURCES += /home/student/newDisk/2451_linux/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src/common/wpa_ctrl.c
#INCLUDEPATH += /home/student/newDisk/2451_linux/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src #INCLUDEPATH += /home/student/newDisk/2451_linux/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src
#INCLUDEPATH += /home/student/newDisk/2451_linux/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src/utils #INCLUDEPATH += /home/student/newDisk/2451_linux/wpa_supplicant_hostapd/wpa_supplicant_hostapd-0.8/src/utils
} }
+170 -9
View File
@@ -1,5 +1,6 @@
#include "PrinterStateManager.h" #include "PrinterStateManager.h"
#include <QDebug> #include <QDebug>
#include "LogInfo.h"
PrinterStateManager* PrinterStateManager::s_instance = nullptr; PrinterStateManager* PrinterStateManager::s_instance = nullptr;
@@ -15,17 +16,26 @@ PrinterStateManager::PrinterStateManager()
{ {
initTransitions(); initTransitions();
m_currentState = PrinterState::IDLE; m_currentState = PrinterState::IDLE;
initTimer();
} }
PrinterStateManager::~PrinterStateManager() PrinterStateManager::~PrinterStateManager()
{ {
if (m_updateUITimer) {
m_updateUITimer->stop();
m_updateUITimer->deleteLater();
m_updateUITimer = NULL;
}
if (m_sysPara) {
m_sysPara = NULL;
}
} }
QString PrinterStateManager::stateName() const QString PrinterStateManager::stateName() const
{ {
switch (m_currentState) { switch (m_currentState) {
case PrinterState::IDLE: return "空闲"; case PrinterState::IDLE: return "空闲";
case PrinterState::SELF_CHECK: return "自检中"; case PrinterState::SELF_CHECK: return "自检完成";
case PrinterState::READY: return "就绪"; case PrinterState::READY: return "就绪";
case PrinterState::PRINTING: return "打印中"; case PrinterState::PRINTING: return "打印中";
case PrinterState::STOPPING: return "停止中"; case PrinterState::STOPPING: return "停止中";
@@ -38,7 +48,7 @@ QString PrinterStateManager::stateName() const
// ============ 初始化状态(开机时调用一次) ============ // ============ 初始化状态(开机时调用一次) ============
void PrinterStateManager::initFromSysPara() void PrinterStateManager::initFromSysPara()
{ {
setState(PrinterState::SELF_CHECK, "Init from sysPara"); setState(PrinterState::IDLE, "Init from sysPara");
} }
// ============ 状态转移表 ============ // ============ 状态转移表 ============
@@ -49,9 +59,13 @@ void PrinterStateManager::initTransitions()
{PrinterState::IDLE, PrinterEvent::PowerOn, {PrinterState::IDLE, PrinterEvent::PowerOn,
PrinterState::SELF_CHECK, "IDLE → SELF_CHECK", nullptr}, PrinterState::SELF_CHECK, "IDLE → SELF_CHECK", nullptr},
{PrinterState::SELF_CHECK, PrinterEvent::SelfCheckDone, {PrinterState::SELF_CHECK, PrinterEvent::SelfCheckDone,
PrinterState::READY, "SELF_CHECK → READY", nullptr}, PrinterState::READY, "SELF_CHECK → READY",
[this]() -> bool { return guardReclaimTankOpen(); }},
{PrinterState::SELF_CHECK, PrinterEvent::SelfCheckFailed, {PrinterState::SELF_CHECK, PrinterEvent::SelfCheckFailed,
PrinterState::ERROR, "SELF_CHECK → ERROR", nullptr}, PrinterState::ERROR, "SELF_CHECK → ERROR", nullptr},
// 注意,逆清洗和关回收槽时,需要把状态重新切换回自检
{PrinterState::READY, PrinterEvent::ReSelfCheck,
PrinterState::SELF_CHECK, "READY → SELF_CHECK", nullptr},
// 打印流程 // 打印流程
{PrinterState::READY, PrinterEvent::StartPrint, {PrinterState::READY, PrinterEvent::StartPrint,
@@ -101,8 +115,9 @@ PrinterStateManager::Transition* PrinterStateManager::findTransition(PrinterEven
// ============ 请求切换状态(外部唯一接口) ============ // ============ 请求切换状态(外部唯一接口) ============
void PrinterStateManager::requestTransition(PrinterEvent event) void PrinterStateManager::requestTransition(PrinterEvent event)
{ {
qDebug() << "Request event:" << static_cast<int>(event) LogInfo::setRunStatusText(QString("Transition %1:%2")
<< "Current:" << stateName(); .arg(stateName())
.arg(m_sysPara->status.reclaimTankstatus));
Transition* trans = findTransition(event); Transition* trans = findTransition(event);
if (!trans) { if (!trans) {
@@ -123,11 +138,44 @@ void PrinterStateManager::requestTransition(PrinterEvent event)
setState(trans->toState, trans->description); setState(trans->toState, trans->description);
} }
void PrinterStateManager::checkReadyState()
{
// 自检完成后,随时检查能否进入READY状态
if (m_currentState == PrinterState::SELF_CHECK) {
if (m_sysPara) {
// 现在还有个压力稳定期,期间也不能切换状态
if (m_sysPara->status.airPushing) {
return;
}
switch (m_sysPara->status.reclaimTankstatus) {
case 5:
emit sig_updateReclaimStatus();
// 检测压力波动 -10~10,检测 3 秒,相位故障 检测3秒,总时长不超过60秒
if (!isState(PrinterState::READY)) {
if (m_canReadyTimer) m_canReadyTimer->start();
}
break;
default:
// 回收槽状态变化后就更新一次
if (lastState != m_sysPara->status.reclaimTankstatus
&& m_sysPara->status.reclaimTankstatus != 0) {
if (m_updateUITimer && !m_updateUITimer->isActive()) {
m_updateUITimer->start();
}
lastState = m_sysPara->status.reclaimTankstatus;
emit sig_updateReclaimStatus();
}
break;
}
}
}
}
// ============ 内部状态切换 ============ // ============ 内部状态切换 ============
void PrinterStateManager::setState(PrinterState newState, const QString& reason) void PrinterStateManager::setState(PrinterState newState, const QString& reason)
{ {
if (m_currentState == newState) { if (m_currentState == newState) {
qDebug() << "State already:" << stateName();
return; return;
} }
@@ -136,8 +184,13 @@ void PrinterStateManager::setState(PrinterState newState, const QString& reason)
qDebug() << "State changed:" << stateName() << "Reason:" << reason; qDebug() << "State changed:" << stateName() << "Reason:" << reason;
if (m_updateUITimer && !m_updateUITimer->isActive()) {
m_updateUITimer->start();
}
// 发送信号通知外部 // 发送信号通知外部
emit sig_stateChanged(newState, m_previousState, reason); emit sig_stateChanged(newState, m_previousState, reason);
emit sig_updateReclaimStatus();
} }
// ============ 辅助函数 ============ // ============ 辅助函数 ============
@@ -160,7 +213,8 @@ QString PrinterStateManager::stateNameFromEnum(PrinterState state) const
bool PrinterStateManager::guardReclaimTankOpen() bool PrinterStateManager::guardReclaimTankOpen()
{ {
if (!m_sysPara) return false; if (!m_sysPara) return false;
return m_sysPara->status.reclainTankReachEnd == true; // 开完成和关完成后,回收槽状态会变成0
return m_sysPara->status.reclainTankReachEnd || (m_sysPara->status.reclaimTankstatus == 5);
} }
bool PrinterStateManager::guardInkSwintOpen() bool PrinterStateManager::guardInkSwintOpen()
@@ -190,7 +244,7 @@ bool PrinterStateManager::guardNoSolventWarn()
bool PrinterStateManager::guardSelfCheckDone() bool PrinterStateManager::guardSelfCheckDone()
{ {
if (!m_sysPara) return false; if (!m_sysPara) return false;
return m_sysPara->status.selfCheckDone == true; return m_sysPara->status.selfCheckDone;
} }
bool PrinterStateManager::guardCanStartPrint() bool PrinterStateManager::guardCanStartPrint()
@@ -201,3 +255,110 @@ bool PrinterStateManager::guardCanStartPrint()
return guardReclaimTankOpen() && guardInkSwintOpen() && return guardReclaimTankOpen() && guardInkSwintOpen() &&
guardNoError() && guardSelfCheckDone(); guardNoError() && guardSelfCheckDone();
} }
void PrinterStateManager::initTimer()
{
if (m_updateUITimer == NULL) {
m_updateUITimer = new QTimer();
connect(m_updateUITimer, &QTimer::timeout, this,
&PrinterStateManager::slt_timeoutUI);
m_updateUITimer->setInterval(50);
m_updateUITimer->setSingleShot(true);
}
if (m_canReadyTimer == NULL) {
m_canReadyTimer = new QTimer();
connect(m_canReadyTimer, &QTimer::timeout, this,
&PrinterStateManager::slt_timeoutReady);
m_canReadyTimer->setInterval(500);
}
}
void PrinterStateManager::slt_timeoutUI()
{
if (m_sysPara) {
LogInfo::setRunStatusText(QString("slt_timeout ENTER:%1--state:%2")
.arg(stateName())
.arg(m_sysPara->status.reclaimTankstatus));
switch (m_sysPara->status.reclaimTankstatus) {
case 0:
emit sig_updateReclaimStatus();
break;
case 1: // 开
emit sig_enableOpenTank(false);
emit sig_enableCloseTank(true);
break;
case 2: // 关
emit sig_enableOpenTank(true);
emit sig_enableCloseTank(false);
break;
case 3:
case 4:
break;
case 5: // 开完成
emit sig_enableOpenTank(false);
emit sig_enableCloseTank(true);
break;
case 6: // 6关完成
emit sig_enableOpenTank(true);
emit sig_enableCloseTank(false);
break;
case 0x10: // 故障
emit sig_enableStartPrint(false);
emit sig_enableStopPrint(false);
emit sig_enableOpenTank(false);
emit sig_enableCloseTank(true);
break;
case 0x11: // 卡住,关闭
default:
break;
}
}
// STATE
switch (m_currentState) {
case PrinterState::SELF_CHECK:
emit sig_enableStartPrint(false);
emit sig_enableStopPrint(false);
break;
// 需要确认开完成时,状态是否一定是READY,然后避免重复操作 TODO
case PrinterState::READY:
emit sig_enableStartPrint(true);
emit sig_enableStopPrint(true);
break;
default:
break;
}
// 避免发出太多信号
if (m_updateUITimer) m_updateUITimer->stop();
}
static short allTimes = 0;
static short checkTimes = 0;
void PrinterStateManager::slt_timeoutReady()
{
allTimes++; //3s(checkTimes=6)一个周期,不超过60秒
if (allTimes > 120) {
if (m_canReadyTimer) m_canReadyTimer->stop();
allTimes = 0;
checkTimes = 0;
emit sig_closeTank();
emit sig_infoMsg(tr("相位故障,回收喷嘴"));
}
emit sig_infoMsg(tr("检查相位中..."));
// 检查相位,如果有一个错误,就重新开始累计
if (m_sysPara->status.lastPhaseFault) { checkTimes = 0; }
// 累计6次(3秒)后,再进入READY状态
if (checkTimes++ > 5){
if (m_canReadyTimer) m_canReadyTimer->stop();
checkTimes = 0;
setState(PrinterState::READY, "READY");
emit sig_infoMsg(tr("检查完毕"));
}
}
+36 -4
View File
@@ -2,12 +2,13 @@
#define PRINTERSTATEMANAGER_H #define PRINTERSTATEMANAGER_H
#include <QObject> #include <QObject>
#include <QTimer>
#include <QVector> #include <QVector>
#include "SysPara.h" #include "SysPara.h"
enum class PrinterState { enum class PrinterState {
IDLE, // 空闲 IDLE, // 空闲
SELF_CHECK, // 自检中 SELF_CHECK, // 自检完成
READY, // 就绪 READY, // 就绪
PRINTING, // 打印中 PRINTING, // 打印中
STOPPING, // 停止中 STOPPING, // 停止中
@@ -20,6 +21,7 @@ enum class PrinterEvent {
PowerOn, PowerOn,
SelfCheckDone, SelfCheckDone,
SelfCheckFailed, SelfCheckFailed,
ReSelfCheck,
StartPrint, StartPrint,
StopPrint, StopPrint,
StopComplete, StopComplete,
@@ -52,10 +54,30 @@ public:
// 外部唯一接口:请求切换状态 // 外部唯一接口:请求切换状态
void requestTransition(PrinterEvent event); void requestTransition(PrinterEvent event);
// 检查状态
void checkReadyState();
signals: signals:
// 状态变化信号(外部监听执行具体业务) // 状态变化信号(外部监听执行具体业务)
void sig_stateChanged(PrinterState newState, PrinterState oldState, QString reason); void sig_stateChanged(PrinterState newState, PrinterState oldState, QString reason);
//使能开始和停止打印按钮
void sig_enableStartPrint(bool);
void sig_enableStopPrint(bool);
//使能开关回收槽
void sig_enableOpenTank(bool);
void sig_enableCloseTank(bool);
// 更新回收槽状态
void sig_updateReclaimStatus();
// 收回收槽
void sig_closeTank();
// 提示信息
void sig_infoMsg(QString);
// 墨水告警
void sig_infoBox(QString);
private: private:
PrinterStateManager(); PrinterStateManager();
~PrinterStateManager(); ~PrinterStateManager();
@@ -80,6 +102,9 @@ private:
QVector<Transition> m_transitions; QVector<Transition> m_transitions;
// 记录上一次回收槽状态
unsigned char lastState = 0;
void initTransitions(); void initTransitions();
Transition* findTransition(PrinterEvent event); Transition* findTransition(PrinterEvent event);
@@ -88,7 +113,7 @@ private:
QString stateNameFromEnum(PrinterState state) const; QString stateNameFromEnum(PrinterState state) const;
// ============ 守卫条件函数 ============ // ============ guard 守卫条件函数 ============
// 检查回收槽是否已打开 // 检查回收槽是否已打开
bool guardReclaimTankOpen(); bool guardReclaimTankOpen();
@@ -98,10 +123,10 @@ private:
// 检查是否无故障 // 检查是否无故障
bool guardNoError(); bool guardNoError();
// 检查是否无墨水警告 // 检查是否无墨水警告 true:正常
bool guardNoInkWarn(); bool guardNoInkWarn();
// 检查是否无溶剂警告 // 检查是否无溶剂警告 true:正常
bool guardNoSolventWarn(); bool guardNoSolventWarn();
// 检查自检是否已完成 // 检查自检是否已完成
@@ -110,5 +135,12 @@ private:
// 检查是否满足所有打印条件 // 检查是否满足所有打印条件
bool guardCanStartPrint(); bool guardCanStartPrint();
private:
QTimer* m_updateUITimer = NULL; //更新按钮UI
QTimer* m_canReadyTimer = NULL; //回收槽到底后检查是否满足打印条件
void initTimer();
private slots:
void slt_timeoutUI();
void slt_timeoutReady();
}; };
#endif // PRINTERSTATEMANAGER_H #endif // PRINTERSTATEMANAGER_H
+1 -1
View File
@@ -1115,7 +1115,7 @@ typedef struct{
int viscosityFault;// 0 正常,1-粘度值高,2-粘度值低 int viscosityFault;// 0 正常,1-粘度值高,2-粘度值低
int lastViscosityFault; //用来记录上一次的粘度错误状态 int lastViscosityFault; //用来记录上一次的粘度错误状态
int lastStatWarn; int lastStatWarn;
int lastPhaseFault; int lastPhaseFault; //相位
int phaseErrorCnt; int phaseErrorCnt;
/* Yang */ /* Yang */
+14 -21
View File
@@ -340,14 +340,6 @@ void SystemManage::on_pushButtonControlByHand_pressed()
void SystemManage::on_pushButtonReclaimTankOpen_pressed() void SystemManage::on_pushButtonReclaimTankOpen_pressed()
{ {
if(sysPara){ if(sysPara){
// if(!sysPara->para.isCheckMagnet)
// {
// if(!(sysPara->status.statWarn & WARN_STATUS_HDINT)){
// QMessageBox::warning(this, tr("警告"),
// tr("请先移开喷头盖!"));
// return ;
// }
// }
sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable()); sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable());
ui->labelReclaimTankOpen->setText(sysPara->devOp->isReclaimTankOpenEnable()?tr("启动"):tr("停止")); ui->labelReclaimTankOpen->setText(sysPara->devOp->isReclaimTankOpenEnable()?tr("启动"):tr("停止"));
sysPara->devOp->highVoltageCtrl(0); sysPara->devOp->highVoltageCtrl(0);
@@ -355,20 +347,13 @@ void SystemManage::on_pushButtonReclaimTankOpen_pressed()
sysPara->status.reclainCloseAppending = false; sysPara->status.reclainCloseAppending = false;
sysPara->status.currReclaimOperationCnt = 0; sysPara->status.currReclaimOperationCnt = 0;
sysPara->status.reclainTankReachEnd = false; sysPara->status.reclainTankReachEnd = false;
sysPara->status.reclaimTankstatus = 1;
} }
} }
void SystemManage::on_pushButtonReclaimTankClose_pressed() void SystemManage::on_pushButtonReclaimTankClose_pressed()
{ {
if(sysPara){ if(sysPara){
// if(!sysPara->para.isCheckMagnet)
// {
// if(!(sysPara->status.statWarn & WARN_STATUS_HDINT)){
// QMessageBox::warning(this, tr("警告"),
// tr("请先移开喷头盖!"));
// return ;
// }
// }
sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable()); sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable());
ui->labelReclaimTankClose->setText(sysPara->devOp->isReclaimTankCloseEnable()?tr("启动"):tr("停止")); ui->labelReclaimTankClose->setText(sysPara->devOp->isReclaimTankCloseEnable()?tr("启动"):tr("停止"));
sysPara->devOp->highVoltageCtrl(0); sysPara->devOp->highVoltageCtrl(0);
@@ -376,6 +361,7 @@ void SystemManage::on_pushButtonReclaimTankClose_pressed()
sysPara->status.reclainCloseAppending = true; sysPara->status.reclainCloseAppending = true;
sysPara->status.currReclaimOperationCnt = 0; sysPara->status.currReclaimOperationCnt = 0;
sysPara->status.reclainTankReachEnd = false; sysPara->status.reclainTankReachEnd = false;
sysPara->status.reclaimTankstatus = 2;
} }
} }
#include <time.h> #include <time.h>
@@ -581,12 +567,19 @@ fi\n" ;
void SystemManage::on_pushButtonUpdateSoftware_pressed() void SystemManage::on_pushButtonUpdateSoftware_pressed()
{ {
if(sysPara->status.updateSoftEN==0){ if(sysPara->status.updateSoftEN==0){
dialogUpateMm->clearAuth(); dialogUpateMm->clearAuth();
dialogUpateMm->show(); dialogUpateMm->show();
}
else ondialogAuthorizationAccepted(); QPoint topLeft = this->mapToGlobal(QPoint(0, 0));
int x = topLeft.x() + (this->width() - dialogUpateMm->width()) / 2;
int y = topLeft.y() + (this->height() - dialogUpateMm->height()) / 2 - 200;
dialogUpateMm->move(x, y);
}
else ondialogAuthorizationAccepted();
} }
void SystemManage::ondialogAuthorizationAccepted() void SystemManage::ondialogAuthorizationAccepted()
{ {
QString authString= dialogUpateMm->getAuth(); QString authString= dialogUpateMm->getAuth();
+33
View File
@@ -498,6 +498,39 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QPushButton" name="btnSaveAs">
<property name="styleSheet">
<string notr="true">QPushButton {
background: qlineargradient(x1: 0.5, y1: 0, x2: 0.5, y2: 1, stop: 0 #6F9CD6, stop: 1 #FFFFFF);
border: 1px solid #a0a0a0;
border-radius: 8px;
padding: 8px 12px;
min-width: 90px;
min-height: 50px;
}
QPushButton:hover {
background-color: #d0d0d0;
}
QPushButton:pressed {
background-color: #c0c0c0;
}</string>
</property>
<property name="text">
<string>另存为</string>
</property>
<property name="icon">
<iconset resource="image.qrc">
<normaloff>:/image/saveAs.png</normaloff>:/image/saveAs.png</iconset>
</property>
<property name="iconSize">
<size>
<width>62</width>
<height>62</height>
</size>
</property>
</widget>
</item>
<item> <item>
<widget class="QPushButton" name="btnListConfig"> <widget class="QPushButton" name="btnListConfig">
<property name="styleSheet"> <property name="styleSheet">
+1 -1
View File
@@ -6,7 +6,7 @@
*/ */
#define UP_PRINTER_MAJOR_VER 6 #define UP_PRINTER_MAJOR_VER 6
#define UP_PRINTER_MINOR_VER 9 #define UP_PRINTER_MINOR_VER 9
#define UP_PRINTER_RIVISION_VER 1 #define UP_PRINTER_RIVISION_VER 5
#define SUB_VERSION "_KOR" #define SUB_VERSION "_KOR"
#ifdef __RFID_OLD #ifdef __RFID_OLD
#define SUB_RFID "_RO" #define SUB_RFID "_RO"
+511 -374
View File
File diff suppressed because it is too large Load Diff
+215
View File
@@ -0,0 +1,215 @@
#include "dlgviscositysetting.h"
#include "ui_dlgviscositysetting.h"
#include <QDir>
#include <QSettings>
#include <QDebug>
#define WAITTIMEMAX 20
DlgViscositySetting::DlgViscositySetting(QWidget *parent) :
QDialog(parent),
ui(new Ui::DlgViscositySetting)
{
ui->setupUi(this);
}
DlgViscositySetting::~DlgViscositySetting()
{
if (timer) {
timer->stop();
delete timer;
timer = nullptr;
}
delete ui;
}
void DlgViscositySetting::bindSysPara(SysPara *sysPara)
{
this->sysPara = sysPara;
init();
}
int DlgViscositySetting::getAlertValue()
{
return ui->sb_alert->value();
}
int DlgViscositySetting::getCloseValue()
{
return ui->sb_close->value();
}
void DlgViscositySetting::init()
{
if (sysPara) {
loadConfig();
initTimer();
}
}
void DlgViscositySetting::initTimer()
{
if (timer == nullptr) {
timer = new QTimer(this);
connect(timer, &QTimer::timeout,
this, &DlgViscositySetting::onTimeOut);
timer->start(1000);
}
}
void DlgViscositySetting::loadConfig()
{
QSettings settings(kConfDir+kConfFile, QSettings::IniFormat);
// 若 ini 中没有值,使用 SpinBox 当前默认值
alertV = settings.value(kGroupViscosity + "/" + kKeyAlertThreshold,
ui->sb_alert->value()).toInt();
closeV = settings.value(kGroupViscosity + "/" + kKeyCloseThreshold,
ui->sb_close->value()).toInt();
if (alertV < 100) alertV = 250;
if (closeV < 160) closeV = 300;
ui->sb_alert->setValue(alertV);
ui->sb_close->setValue(closeV);
}
void DlgViscositySetting::saveConfig()
{
// 确保目录存在
QDir dir(kConfDir);
if (!dir.exists()) {
if (!dir.mkpath(".")) {
// qWarning() << "无法创建配置目录:" << kConfDir;
return;
}
}
QSettings settings(kConfDir+kConfFile, QSettings::IniFormat);
settings.setValue(kGroupViscosity + "/" + kKeyAlertThreshold, ui->sb_alert->value());
settings.setValue(kGroupViscosity + "/" + kKeyCloseThreshold, ui->sb_close->value());
settings.sync();
if (settings.status() != QSettings::NoError) {
qWarning() << "写入配置文件失败:" << kConfDir+kConfFile;
} else {
qDebug() << "配置已保存到:" << kConfDir+kConfFile;
}
}
short DlgViscositySetting::checkClose(int visCurr, int visSetting)
{
if (visCurr == 0) return 0;
if (visCurr - closeV >= visSetting) {
return 1;
} else if (visCurr + closeV <= visSetting) {
return 2;
}
return 0;
}
short DlgViscositySetting::checkAlert(int visCurr, int visSetting)
{
if (visCurr == 0) return 0;
if (visCurr - alertV >= visSetting) {
return 1;
} else if (visCurr + alertV <= visSetting) {
return 2;
}
return 0;
}
static short alertTimes = 0;
static short closeTimes = 0;
// 如果提示了,就等10分钟后再重新检查,WAITTIMEMAX = 600
static short waitTimes = 0;
void DlgViscositySetting::onTimeOut()
{
// 1秒一次,5秒防抖
if (sysPara) {
visSetting = sysPara->para.viscosity;
visCurr = sysPara->status.viscosity;
// test
// sysPara->status.viscosity = 1000;
// sysPara->status.selfCheckDone = 1;
// visCurr = sysPara->status.viscosity;
ui->lb_settings->setText(QString::number(visSetting));
ui->lb_current->setText(QString::number(visCurr));
if (waitTimes-- > 0) {
return;
}
// 虽然处理并不严谨,但是直接最低值切换到最高值的情况几乎不会发生
// 是否触发关闭喷嘴
short closeV = checkClose(visCurr, visSetting);
if (closeV != 0) {
if (closeTimes++ > 5) {
bool closeFlag = closeV == 1? true : false;
emit sig_close(closeFlag);
closeTimes = 0;
waitTimes = WAITTIMEMAX;
alertTimes = 0;
return;
}
} else {
closeTimes = 0;
}
// 是否触发报警
short alertV = checkAlert(visCurr, visSetting);
if (alertV != 0) {
if (alertTimes++ > 5) {
bool alertFlag = alertV == 1? true : false;
emit sig_alert(alertFlag);
alertTimes = 0;
waitTimes = WAITTIMEMAX;
}
} else {
alertTimes = 0;
}
}
}
void DlgViscositySetting::on_checkBtn_clicked()
{
saveConfig();
visSetting = sysPara->para.viscosity;
visCurr = sysPara->status.viscosity;
closeV = ui->sb_close->value();
alertV = ui->sb_alert->value();
}
void DlgViscositySetting::on_closeBtn_clicked()
{
this->hide();
}
void DlgViscositySetting::on_sb_alert_editingFinished()
{
int tmp = ui->sb_alert->value();
// 告警阈值最小100,关闭阈值至少比告警大60
if (tmp < 100) {
ui->sb_alert->setValue(100);
tmp = 100;
}
if (tmp > ui->sb_close->value()) {
ui->sb_close->setValue(tmp+60);
}
}
void DlgViscositySetting::on_sb_close_editingFinished()
{
int tmp = ui->sb_close->value();
// 告警阈值最小100,关闭阈值至少比告警大60
if (tmp < 160) {
ui->sb_close->setValue(160);
tmp = 160;
}
if (tmp < ui->sb_alert->value()) {
ui->sb_alert->setValue(tmp-60);
}
}
+74
View File
@@ -0,0 +1,74 @@
#ifndef DLGVISCOSITYSETTING_H
#define DLGVISCOSITYSETTING_H
#include "SysPara.h"
#include <QDialog>
#include <QTimer>
/**
功能简单,不分层实现功能
在此界面设置告警阈值和关回收槽阈值
定时器连续5次检测报警,就发出对应信号
*/
namespace Ui {
class DlgViscositySetting;
}
class DlgViscositySetting : public QDialog
{
Q_OBJECT
public:
explicit DlgViscositySetting(QWidget *parent = 0);
~DlgViscositySetting();
void bindSysPara(SysPara *sysPara);
int getAlertValue();
int getCloseValue();
private slots:
void on_checkBtn_clicked();
private:
Ui::DlgViscositySetting *ui;
SysPara* sysPara = nullptr;
// 公共配置目录与文件名
const QString kConfDir = QStringLiteral("/home/plg/conf/");
const QString kConfFile = QStringLiteral("software_ui.ini");
// ini 中的分组与键名
const QString kGroupViscosity = QStringLiteral("Viscosity");
const QString kKeyAlertThreshold = QStringLiteral("alertThreshold");
const QString kKeyCloseThreshold = QStringLiteral("closeThreshold");
QTimer* timer = nullptr;
int visSetting = 0;
int visCurr = 0;
int closeV = 0;
int alertV = 0;
private:
void init();
void initTimer();
void loadConfig(); // 从 ini 读取
void saveConfig(); // 写入 ini
short checkClose(int visCurr, int visSetting);
short checkAlert(int visCurr, int visSetting);
private slots:
void onTimeOut();
void on_closeBtn_clicked();
void on_sb_alert_editingFinished();
void on_sb_close_editingFinished();
signals:
// true:比设定值高 false:比设定值低
void sig_alert(bool);
void sig_close(bool);
};
#endif // DLGVISCOSITYSETTING_H
+251
View File
@@ -0,0 +1,251 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DlgViscositySetting</class>
<widget class="QDialog" name="DlgViscositySetting">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>430</width>
<height>233</height>
</rect>
</property>
<property name="windowTitle">
<string>告警浮动范围设置</string>
</property>
<widget class="QPushButton" name="closeBtn">
<property name="geometry">
<rect>
<x>310</x>
<y>170</y>
<width>101</width>
<height>50</height>
</rect>
</property>
<property name="text">
<string>✕</string>
</property>
</widget>
<widget class="QPushButton" name="checkBtn">
<property name="geometry">
<rect>
<x>170</x>
<y>170</y>
<width>101</width>
<height>50</height>
</rect>
</property>
<property name="text">
<string>✓</string>
</property>
</widget>
<widget class="QLabel" name="lb_alertThreshold">
<property name="geometry">
<rect>
<x>60</x>
<y>60</y>
<width>141</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>告警阈值:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QLabel" name="lb_closeThreshold">
<property name="geometry">
<rect>
<x>60</x>
<y>110</y>
<width>141</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>关喷嘴阈值:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QSpinBox" name="sb_alert">
<property name="geometry">
<rect>
<x>220</x>
<y>60</y>
<width>91</width>
<height>37</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>37</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>37</height>
</size>
</property>
<property name="minimum">
<number>80</number>
</property>
<property name="maximum">
<number>750</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="value">
<number>250</number>
</property>
<property name="displayIntegerBase">
<number>10</number>
</property>
</widget>
<widget class="QSpinBox" name="sb_close">
<property name="geometry">
<rect>
<x>220</x>
<y>110</y>
<width>91</width>
<height>37</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>37</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>37</height>
</size>
</property>
<property name="minimum">
<number>80</number>
</property>
<property name="maximum">
<number>750</number>
</property>
<property name="singleStep">
<number>10</number>
</property>
<property name="value">
<number>310</number>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>30</x>
<y>10</y>
<width>81</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>设定值:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QLabel" name="lb_settings">
<property name="geometry">
<rect>
<x>120</x>
<y>10</y>
<width>81</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
<widget class="QLabel" name="lb_current">
<property name="geometry">
<rect>
<x>320</x>
<y>10</y>
<width>81</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
<widget class="QLabel" name="label_4">
<property name="geometry">
<rect>
<x>220</x>
<y>10</y>
<width>81</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>当前值:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</widget>
<resources/>
<connections>
<connection>
<sender>checkBtn</sender>
<signal>clicked()</signal>
<receiver>DlgViscositySetting</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>220</x>
<y>174</y>
</hint>
<hint type="destinationlabel">
<x>214</x>
<y>116</y>
</hint>
</hints>
</connection>
<connection>
<sender>closeBtn</sender>
<signal>clicked()</signal>
<receiver>DlgViscositySetting</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>360</x>
<y>174</y>
</hint>
<hint type="destinationlabel">
<x>214</x>
<y>116</y>
</hint>
</hints>
</connection>
</connections>
</ui>
+511 -374
View File
File diff suppressed because it is too large Load Diff
+511 -374
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -149,5 +149,6 @@
<file>image/up_white.png</file> <file>image/up_white.png</file>
<file>image/RePipeClose.png</file> <file>image/RePipeClose.png</file>
<file>image/RePipeOpen.png</file> <file>image/RePipeOpen.png</file>
<file>image/saveAs.png</file>
</qresource> </qresource>
</RCC> </RCC>
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

+522 -374
View File
File diff suppressed because it is too large Load Diff
+208 -243
View File
@@ -129,6 +129,8 @@ void MainWidget::init()
airPushTimer = new QTimer(this); airPushTimer = new QTimer(this);
connect(airPushTimer, SIGNAL(timeout()), this, SLOT(airPushingProcess())); connect(airPushTimer, SIGNAL(timeout()), this, SLOT(airPushingProcess()));
m_pressureMonitor = new PressureMonitor();
timerPowerOff = new QTimer(this); timerPowerOff = new QTimer(this);
connect(timerPowerOff,SIGNAL(timeout()),this,SLOT(sendPowerOffCmd())); connect(timerPowerOff,SIGNAL(timeout()),this,SLOT(sendPowerOffCmd()));
@@ -144,6 +146,9 @@ void MainWidget::init()
} }
connect(m_setNumDlg, &SetNumDlg::sig_setNum, this, &MainWidget::slt_setNum); connect(m_setNumDlg, &SetNumDlg::sig_setNum, this, &MainWidget::slt_setNum);
connect(m_setNumDlg, &SetNumDlg::sig_clearCnt, this, &MainWidget::slt_clearCnt); connect(m_setNumDlg, &SetNumDlg::sig_clearCnt, this, &MainWidget::slt_clearCnt);
connect(m_setNumDlg, &SetNumDlg::sig_resetCNT1, this, &MainWidget::slt_resetCNT1);
connect(m_setNumDlg, &SetNumDlg::sig_resetCNT2, this, &MainWidget::slt_resetCNT2);
} }
void MainWidget::buttonClickedSlot() void MainWidget::buttonClickedSlot()
@@ -185,7 +190,7 @@ void MySleep(unsigned int msec)
} }
bool MainWidget::generatePrintContent(PicScene *scene) bool MainWidget::generatePrintContent(PicScene *scene, const PrintSettingModel& printSettings)
{ {
if(!scene) { if(!scene) {
qWarning() << "Scene is empty!"; qWarning() << "Scene is empty!";
@@ -200,7 +205,34 @@ bool MainWidget::generatePrintContent(PicScene *scene)
this->pPicScene = scene; this->pPicScene = scene;
onPreviewScene(); onPreviewScene();
this->printSettingsModel = printSettings;
PrintSettingModel::applyToSysPara(printSettings, sysPara);
SendPrintDataToFpga(0); SendPrintDataToFpga(0);
// 检查场景内是否有计数器,根据是否有对应计数器,显示或禁用setNumDlg中对应的按钮。
bool hasCNT1 = false;
bool hasCNT2 = false;
auto items = pPicScene->items();
for(auto item : items) {
auto cntItem = dynamic_cast<PicCounterItem*>(item);
if(!cntItem)
continue;
if(cntItem->counterType() == COUNTER_TYPE_1) {
hasCNT1 = true;
continue;
}
if(cntItem->counterType() == COUNTER_TYPE_2) {
hasCNT2 = true;
continue;
}
}
m_setNumDlg->setCNTResetBtnsEnable(hasCNT1, hasCNT2);
return true; return true;
} }
@@ -238,8 +270,8 @@ void MainWidget::_on_pushButtonPowerOff_pressed(bool notice)
sysPara->status.reclaimCloseCnt=10; sysPara->status.reclaimCloseCnt=10;
//on_pushButtonStopPrint_pressed(); //on_pushButtonStopPrint_pressed();
on_m_StopBtn_clicked(); on_m_StopBtn_clicked();
MySleep(10);
on_m_LeftBtn_clicked(); on_m_LeftBtn_clicked();
//on_pushButtonReclaimTankClose_pressed();
sysPara->status.powerOffAppending = true; sysPara->status.powerOffAppending = true;
setReclaimCloseBtnStatus(false); setReclaimCloseBtnStatus(false);
setReclaimOpenBtnStatus(false); setReclaimOpenBtnStatus(false);
@@ -924,8 +956,19 @@ void MainWidget::enablePrintButton(bool enable){
m_StopBtn->setEnabled(enable); m_StopBtn->setEnabled(enable);
} }
void MainWidget::enabeleStartBtn(bool enable)
{
m_StartBtn->setEnabled(enable);
}
void MainWidget::enabeleStopBtn(bool enable)
{
m_StopBtn->setEnabled(enable);
}
void MainWidget::updateTotalCnt(int en) void MainWidget::updateTotalCnt(int en)
{ {
Q_UNUSED(en)
// No50 USEING // No50 USEING
//sysPara->para.totalProductCnt += (sysPara->status.productCnt>sysPara->status.lastProductCnt)?sysPara->status.productCnt-sysPara->status.lastProductCnt: //sysPara->para.totalProductCnt += (sysPara->status.productCnt>sysPara->status.lastProductCnt)?sysPara->status.productCnt-sysPara->status.lastProductCnt:
// (sysPara->status.productCnt>=0&&sysPara->status.productCnt<20)?sysPara->status.productCnt:0; // (sysPara->status.productCnt>=0&&sysPara->status.productCnt<20)?sysPara->status.productCnt:0;
@@ -947,95 +990,56 @@ void MainWidget::updateTotalCnt(int en)
void MainWidget::on_m_StartBtn_clicked() void MainWidget::on_m_StartBtn_clicked()
{ {
if(sysPara){ if(sysPara){
test_flag = 0; test_flag = 0;
if (!checkTriggerMode()) return; if (!checkTriggerMode()) {
return;
}
// 打印状态交给状态机修改 // 按原来逻辑,只修改打印标志,不使用状态机做多余的操作
sysPara->status.isPrinting=false; sysPara->status.isPrinting=false;
// auto mgr = PrinterStateManager::instance();
#if !defined(FPGA_TEST) && !defined(QT_DEBUG)
// if (mgr && mgr->canStopPrint()) {
// mgr->requestTransition(PrinterEvent::StopPrint);
// } else {return;}
#endif
// SendPrintDataToFpga(0); // 0--正常打印,1--打印交替部分信息1; 2--打印交替部分信息2, SendPrintDataToFpga(0); // 0--正常打印,1--打印交替部分信息1; 2--打印交替部分信息2,
/*-------------------------------------------------------------------*/
sysPara->status.lastSynColDelay = -1; //目的是为了清空原来的数据
/*---------------------------------开关回收槽------------------------------*/ /*---------------------------------开关回收槽------------------------------*/
setReclaimCloseBtnStatus(false);
setReclaimOpenBtnStatus(false);
updatePrintDisplayLabel(); updatePrintDisplayLabel();
sysPara->devOp->highVoltageCtrl(1); auto mgr = PrinterStateManager::instance();
sysPara->devOp->setHighVoltageAmplitudetoSTM32(); if (mgr->canStartPrint() || mgr->isState(PrinterState::PRINTING)) {
mgr->requestTransition(PrinterEvent::StartPrint);
// 20170717 移动此,以观察条形码打印异常问题。
if(!startPrintingFlag)
{
sysPara->devOp->printCtrl(PRINT_CTRL_START);
printintFlag = true;
} }
startPrintingFlag = true;
// sysPara->status.isPrinting=true;
// if (mgr->canStartPrint() || mgr->isState(PrinterState::PRINTING)) {
// mgr->requestTransition(PrinterEvent::StartPrint);
// }
sysPara->status.isPrinting = true;
sysPara->status.waitHightVolOff = 0;
// 高亮切换 // 高亮切换
changeHighLight(true); changeHighLight(true);
}
LogInfo::setRunStatusText(tr("print:%1--print:%2--state:%3")
.arg(sysPara->status.reclaimTankstatus)
.arg(sysPara->status.isPrinting)
.arg(mgr->stateName()));
}
} }
void MainWidget::on_m_StopBtn_clicked() void MainWidget::on_m_StopBtn_clicked()
{ {
if(sysPara){ if(sysPara){
if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) { // sysPara->status.isPrinting=false;// 打印状态交给状态机修改
return; auto mgr = PrinterStateManager::instance();
if (mgr && mgr->canStopPrint()) {
mgr->requestTransition(PrinterEvent::StopPrint);
} }
sysPara->status.isPrinting=false;// 打印状态交给状态机修改
// auto mgr = PrinterStateManager::instance();
#if !defined(FPGA_TEST) && !defined(QT_DEBUG)
// if (mgr && mgr->canStopPrint()) {
// mgr->requestTransition(PrinterEvent::StopPrint);
// } else {
// return;
// }
#endif
sysPara->devOp->printCtrl2(1);
sysPara->devOp->printCtrl( PRINT_CTRL_STOP);//:PRINT_CTRL_STOPSYNCNT
setReclaimCloseBtnStatus(sysPara->status.currReclaimTankPos != 0); setReclaimCloseBtnStatus(sysPara->status.currReclaimTankPos != 0);
setReclaimOpenBtnStatus(sysPara->status.currReclaimTankPos == 0); setReclaimOpenBtnStatus(sysPara->status.currReclaimTankPos == 0);
printintFlag = false;
startPrintingFlag = false;
updatePrintDisplayLabel(); updatePrintDisplayLabel();
sysPara->status.waitHightVolOff = 1;
sysPara->saveParaToFile(); // 将相关配置保存
if(sysPara->status.RandomBackCnt>5 && (sysPara->status.RandomNum>0))
{
QMessageBox::StandardButton ret;
ret = QMessageBox::warning(this, tr("提示"),
tr("随机码文本将展出到U盘,请插入U盘"),
QMessageBox::Ok | QMessageBox::Cancel);
if (ret == QMessageBox::Ok){
sysPara->devOp->RandTxtBakup(0); //备份到U盘
}
}
// 高亮切换 // 高亮切换
changeHighLight(false); changeHighLight(false);
LogInfo::setRunStatusText(tr("stop:%1--print:%2--state:%3")
.arg(sysPara->status.reclaimTankstatus)
.arg(sysPara->status.isPrinting)
.arg(mgr->stateName()));
} }
} }
@@ -1085,25 +1089,12 @@ void MainWidget::SendPrintDataToFpga(unsigned char alterEnable, bool isUpdate)
} }
} }
int MainWidget::getCurrPrintStatus()
{
int printStatus;
if (startPrintingFlag ) {
if(printintFlag) {
printStatus = 1; // 正在打印
}
else {
printStatus = 2; // 暂停喷印
}
}
else {
printStatus = 3; // 停止打印
}
return printStatus;
}
void MainWidget::setReclaimOpenBtnStatus(bool enable) void MainWidget::setReclaimOpenBtnStatus(bool enable)
{ {
if (airPushTimer && airPushTimer->isActive()) {
return;
}
#ifdef __RFID_CARD #ifdef __RFID_CARD
if(sysPara->RFIDPara.inkCardTimeOut if(sysPara->RFIDPara.inkCardTimeOut
|| sysPara->RFIDPara.solventCardTimeOut || sysPara->RFIDPara.solventCardTimeOut
@@ -1119,6 +1110,11 @@ void MainWidget::setReclaimOpenBtnStatus(bool enable)
void MainWidget::setReclaimCloseBtnStatus(bool enable) void MainWidget::setReclaimCloseBtnStatus(bool enable)
{ {
if (airPushTimer && airPushTimer->isActive()) {
return;
}
enable = !sysPara->status.airPushing && enable;
ui.m_LeftBtn->setEnabled(enable); ui.m_LeftBtn->setEnabled(enable);
} }
@@ -1149,27 +1145,40 @@ void MainWidget::stopFlashReclaimOpenBtn()
flashReclaimOpenBtn(); flashReclaimOpenBtn();
} }
void MainWidget::setReclaimStatus(bool isOpen, int rate) void MainWidget::updateReclaimText()
{ {
if (isOpen) { QString strR = "";
if (!sysPara->status.airPushing) { QString strL = "";
QString str = rate == 100? tr("喷嘴已开启"):tr("喷嘴开启中"); switch (sysPara->status.reclaimTankstatus) {
ui.lb_RightBtn->setText(str); case 1:
} strR = tr("喷嘴开启中");
ui.lb_LeftBtn->setText(tr("喷嘴关闭")); strL = tr("喷嘴关闭");
break;
} else { case 2:
QString str = rate == 0? tr("喷嘴已关闭"):tr("喷嘴关闭中"); strR = tr("喷嘴开启");
ui.lb_LeftBtn->setText(str); strL = tr("喷嘴关闭中");
break;
if (!sysPara->status.airPushing) { case 5:
ui.lb_RightBtn->setText(tr("喷嘴开启")); strR = tr("喷嘴已开启");
} strL = tr("喷嘴关闭");
break;
case 6:
strR = tr("喷嘴开启");
strL = tr("喷嘴已关闭");
break;
case 0: // 后续运行中5和6状态之后会自动置为0,所以加额外逻辑
strR = ui.lb_RightBtn->text();
strL = ui.lb_LeftBtn->text();
break;
default:
break;
}
if (strR!="" && strL!="") {
ui.lb_RightBtn->setText(strR);
ui.lb_LeftBtn->setText(strL);
} }
} }
static int mainInkPumpCtrlStatus = 0;
static int mainInkPumpCtrlCnt = 0;
//100ms 为单位 //100ms 为单位
void MainWidget::airPushingProcess() void MainWidget::airPushingProcess()
{ {
@@ -1179,10 +1188,7 @@ void MainWidget::airPushingProcess()
QString labelTxt = tr("正在排气..."); QString labelTxt = tr("正在排气...");
setRunStatus(labelTxt); setRunStatus(labelTxt);
ui.lb_RightBtn->setText(labelTxt); ui.lb_RightBtn->setText(labelTxt);
setReclaimOpenBtnStatus(false);
setReclaimCloseBtnStatus(false);
//qDebug()<< "start airPushingProcess "<<sysPara->status.airPushingOnTime;
// 执行排气 4 秒 // 执行排气 4 秒
sysPara->status.airPushingOnTime += 100; sysPara->status.airPushingOnTime += 100;
@@ -1191,18 +1197,6 @@ void MainWidget::airPushingProcess()
sysPara->saveParaToFile(); sysPara->saveParaToFile();
} }
// 延迟 半秒后才开回收槽,正式结束排气阶段
if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000 + 500){
//qDebug()<< "start stop";
reclaimTanOpen();
sysPara->status.airPushingDone = 1;
sysPara->status.airPushing = 0;
sysPara->status.airPushingOnTime = 0;
airPushTimer->stop();
setRunStatus(tr("喷嘴开启中"));
return;
}
if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000){ if(sysPara->status.airPushingOnTime >= sysPara->para.airPushDurationSec * 1000){
sysPara->devOp->controlViscosityPump(false); sysPara->devOp->controlViscosityPump(false);
sysPara->devOp->controlCycleValve(false); sysPara->devOp->controlCycleValve(false);
@@ -1210,6 +1204,42 @@ void MainWidget::airPushingProcess()
if(!sysPara->devOp->isReclaimPumpOpen()) if(!sysPara->devOp->isReclaimPumpOpen())
sysPara->devOp->controlReclaimPump(true, false); sysPara->devOp->controlReclaimPump(true, false);
// 切换回自动模式
sysPara->status.isPumpValveControledByHand = false;
setRunStatus(tr("等待压力稳定..."));
if(m_pressureMonitor->tick((float)sysPara->status.PRESSURE, (float)sysPara->para.pressure)) {
reclaimTanOpen();
sysPara->status.airPushingDone = 1;
sysPara->status.airPushing = 0;
sysPara->status.airPushingOnTime = 0;
airPushTimer->stop();
bool isTimeout = m_pressureMonitor->wasTimeout();
float bufCopy[12];
memcpy(bufCopy, m_pressureMonitor->buffer(), sizeof(bufCopy));
m_pressureMonitor->reset();
setRunStatus(tr("喷嘴开启中"));
LogInfo::setRunStatusText(isTimeout
? "Pressure unstable timeout, fallback open the reclaim tank."
: "Pressure has stabled, will open the reclaim tank.");
QString pressureSet = QString("Pressure buffer: [%1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12]")
.arg(bufCopy[0], 0, 'f', 1)
.arg(bufCopy[1], 0, 'f', 1)
.arg(bufCopy[2], 0, 'f', 1)
.arg(bufCopy[3], 0, 'f', 1)
.arg(bufCopy[4], 0, 'f', 1)
.arg(bufCopy[5], 0, 'f', 1)
.arg(bufCopy[6], 0, 'f', 1)
.arg(bufCopy[7], 0, 'f', 1)
.arg(bufCopy[8], 0, 'f', 1)
.arg(bufCopy[9], 0, 'f', 1)
.arg(bufCopy[10], 0, 'f', 1)
.arg(bufCopy[11], 0, 'f', 1);
LogInfo::setRunStatusText(pressureSet);
}
return; return;
} }
} }
@@ -1219,33 +1249,22 @@ void MainWidget::airPushingProcess()
void MainWidget::reclaimTanOpen() void MainWidget::reclaimTanOpen()
{ {
// 还原当前模式 // 还原当前模式
if (sysPara->status.airPushing) {
sysPara->status.isPumpValveControledByHand = sysPara->status.byHandStore;
}
sysPara->status.isPumpValveControledByHand = false; sysPara->status.isPumpValveControledByHand = false;
sysPara->devOp->mainInkCtrl(); sysPara->devOp->mainInkCtrl();
sysPara->devOp->controlReclaimTankClose(false);//开回收槽之前先让关回收槽停止 if (sysPara->status.reclaimTankstatus == 2) {
MySleep(1000); sysPara->devOp->controlReclaimTankClose(false);//开回收槽之前先让关回收槽停止
MySleep(1000);
}
sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable()); sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable());
sysPara->devOp->highVoltageCtrl(0); /*回收槽动作的时候务必关高压*/ sysPara->devOp->highVoltageCtrl(0); /*回收槽动作的时候务必关高压*/
// sysPara->status.reclaimTankstatus = 1; sysPara->status.reclaimTankstatus = 1;
// setRunStatus(sysPara->devOp->isReclaimTankOpenEnable()?tr("正在打开回收槽..."):tr("停止打开")); // updateReclaimStatus();
setReclaimStatus(true, 0);
if (!sysPara->para.reclaimTankTime) {
// LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!"));
} else {
}
sysPara->status.currReclaimOperationCnt = 0; sysPara->status.currReclaimOperationCnt = 0;
sysPara->status.reclainTankReachEnd = false; sysPara->status.reclainTankReachEnd = false;
sysPara->status.reclainOpenAppending = true; sysPara->status.reclainOpenAppending = true;
sysPara->status.reclainCloseAppending = false; sysPara->status.reclainCloseAppending = false;
sysPara->status.reclaimBlockedCnt = 0;
sysPara->status.canRunAirPushing = false; sysPara->status.canRunAirPushing = false;
if (sysPara->status.reclainTankReachEnd)
enablePrintButton(SIMULATE_PRINTING_MODE);
} }
void MainWidget::initSheet() void MainWidget::initSheet()
@@ -1321,13 +1340,6 @@ void MainWidget::initSheet()
ui.m_RightBtn->setStyleSheet(reclaimBtnNormalStyle); ui.m_RightBtn->setStyleSheet(reclaimBtnNormalStyle);
ui.m_LeftBtn->setStyleSheet(reclaimBtnNormalStyle); ui.m_LeftBtn->setStyleSheet(reclaimBtnNormalStyle);
// QString lbSheet = R"(
// QLabel {
// border: 1px solid #95a5a6; /* 灰色边框 */
// }
// )";
// ui.lb_LeftBtn->setStyleSheet(lbSheet);
// ui.lb_RightBtn->setStyleSheet(lbSheet);
} }
void MainWidget::changeHighLight(bool isStart) void MainWidget::changeHighLight(bool isStart)
@@ -1376,14 +1388,19 @@ void MainWidget::changeHighLight(bool isStart)
void MainWidget::on_m_RightBtn_clicked() void MainWidget::on_m_RightBtn_clicked()
{ {
if(sysPara){ if(sysPara){
if ((sysPara->status.statWarn & WARN_STATUS_INK_WARN) ||
(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)
&& powerOnWarn){
setRunStatus(tr("墨水或溶剂不足,请先添加"));
return;
}
if (powerOnWarn) powerOnWarn = false;
if (!sysPara->status.reclaimTankBlockedAppending) { if (!sysPara->status.reclaimTankBlockedAppending) {
if (sysPara->status.canRunAirPushing && if (sysPara->status.canRunAirPushing &&
(sysPara->status.currReclaimTankPos == 0)) { //2019/10/24 当回收槽未在顶的位置,不需要排气 (sysPara->status.currReclaimTankPos == 0)) { //2019/10/24 当回收槽未在顶的位置,不需要排气
// Pos == 0 回收槽关闭的情况下才可以执行排气; 先执行排气后开回收槽 // Pos == 0 回收槽关闭的情况下才可以执行排气; 先执行排气后开回收槽
if (!sysPara->status.airPushing) { if (!sysPara->status.airPushing) {
//排气:打印、暂停打印置灰
enablePrintButton(false);
sysPara->status.byHandStore = sysPara->status.isPumpValveControledByHand; sysPara->status.byHandStore = sysPara->status.isPumpValveControledByHand;
sysPara->status.isPumpValveControledByHand = true; sysPara->status.isPumpValveControledByHand = true;
sysPara->devOp->mainInkCtrl(); sysPara->devOp->mainInkCtrl();
@@ -1394,13 +1411,21 @@ void MainWidget::on_m_RightBtn_clicked()
sysPara->devOp->controlReclaimPump(true, false); // 回收泵开 sysPara->devOp->controlReclaimPump(true, false); // 回收泵开
sysPara->devOp->controlInkValve(true); //墨水阀 sysPara->devOp->controlInkValve(true); //墨水阀
sysPara->devOp->controlInkValvePWM(true); //墨水阀 sysPara->devOp->controlInkValvePWM(true); //墨水阀
//qDebug()<< "start airpushings";
sysPara->status.airPushing = 1; sysPara->status.airPushing = 1;
sysPara->status.airPushingDone = 0; sysPara->status.airPushingDone = 0;
sysPara->status.airPushingOnTime = 0; sysPara->status.airPushingOnTime = 0;
airPushTimer->start(100); // 100ms airPushTimer->start(100); // 100ms
m_pressureMonitor->reset();
// 喷嘴开启中
if (m_reclaimOpenBtnFlashTimer && !m_reclaimOpenBtnFlashTimer->isActive()){
ui.lb_RightBtn->setText(tr("正在排气..."));
m_reclaimFlashState = true;
m_reclaimOpenBtnFlashTimer->start();
LogInfo::setRunStatusText("m_reclaimOpenBtnFlashTimer start");
}
} }
} }
else { else {
@@ -1415,17 +1440,10 @@ void MainWidget::on_m_RightBtn_clicked()
QMessageBox::Ok | QMessageBox::Cancel); QMessageBox::Ok | QMessageBox::Cancel);
if (ret == QMessageBox::Ok){ if (ret == QMessageBox::Ok){
sysPara->para.reclaimTankTime = sysPara->status.currReclaimTankPos/10; sysPara->para.reclaimTankTime = sysPara->status.currReclaimTankPos/10;
// onReclainTankPositionChanged(sysPara->para.reclaimTankTime * 10);
} }
} }
// 喷嘴开启中
if (m_reclaimOpenBtnFlashTimer && !m_reclaimOpenBtnFlashTimer->isActive()){
ui.lb_RightBtn->setText(tr("正在排气..."));
m_reclaimFlashState = true;
m_reclaimOpenBtnFlashTimer->start();
LogInfo::setRunStatusText("m_reclaimOpenBtnFlashTimer start");
}
} }
} }
@@ -1440,28 +1458,24 @@ void MainWidget::on_m_LeftBtn_clicked()
QMessageBox::Ok | QMessageBox::Cancel); QMessageBox::Ok | QMessageBox::Cancel);
if (ret == QMessageBox::Ok){ if (ret == QMessageBox::Ok){
sysPara->status.currReclaimTankPos = 0; sysPara->status.currReclaimTankPos = 0;
// onReclainTankPositionChanged(0);
} }
} }
sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable()); sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable());
enablePrintButton(SIMULATE_PRINTING_MODE);
sysPara->devOp->highVoltageCtrl(0); sysPara->devOp->highVoltageCtrl(0);
// sysPara->status.reclaimTankstatus = 2;
// setRunStatus(sysPara->devOp->isReclaimTankCloseEnable()?tr("正在关闭回收槽..."):tr("停止关闭"));
setReclaimStatus(false, 100);
if(!sysPara->para.reclaimTankTime){
// LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!"));
}
sysPara->status.currReclaimOperationCnt = 0; sysPara->status.currReclaimOperationCnt = 0;
sysPara->status.reclainTankReachEnd = false; sysPara->status.reclainTankReachEnd = false;
sysPara->status.reclainOpenAppending = false; sysPara->status.reclainOpenAppending = false;
sysPara->status.reclainCloseAppending = true; sysPara->status.reclainCloseAppending = true;
sysPara->status.reclaimBlockedCnt = 0; sysPara->status.reclaimTankstatus = 2;
enablePrintButton(false);
stopFlashReclaimOpenBtn(); stopFlashReclaimOpenBtn();
// 收回收槽,把READY状态切换回自检状态(仅仅状态机的自检状态,不自检)
auto mgr = PrinterStateManager::instance();
if (mgr && mgr->isState(PrinterState::READY)) {
mgr->requestTransition(PrinterEvent::ReSelfCheck);
}
} }
} }
@@ -1680,20 +1694,9 @@ void MainWidget::updateSysStatusToUI(){ //100ms
m_PrintDisplay->updateSysStatusToUI(); m_PrintDisplay->updateSysStatusToUI();
} }
} }
// emit setCNT1Select(found_CNT1);
// emit setCNT2Select(found_CNT2); // if(TEST_MODE)
// emit setCNT3Select(found_CNT3); // enablePrintButton(true);
if(sysPara->para.isEnableGetDataButton)
{
// ui->pushButtonGetData->setEnabled(true);
}
else
{
// ui->pushButtonGetData->setEnabled(false);
}
if(TEST_MODE)
enablePrintButton(true);
// ui->label_size->setText(tr("%1/%2/%3").arg(sysPara->status.sizeFPGA).arg(sysPara->status.sizequeueFPGA).arg(sysPara->status.sizeSTM32));
if(oldSizeFpga != sysPara->status.sizeFPGA){ if(oldSizeFpga != sysPara->status.sizeFPGA){
oldSizeFpga = sysPara->status.sizeFPGA; oldSizeFpga = sysPara->status.sizeFPGA;
} }
@@ -2130,45 +2133,22 @@ void MainWidget::updatePrintDisplayLabel()
m_PrintDisplay->update(); m_PrintDisplay->update();
} }
static short recycleWarnTimes = 0;
void MainWidget::RefreshStatusLight(){//100ms void MainWidget::RefreshStatusLight(){//100ms
if(sysPara){ if(sysPara){
static int hdint = 0;
static int reclainTankReachEnd = 0;
if((!(sysPara->status.statWarn & WARN_STATUS_HDINT)) && (hdint == 0)) { //喷头盖由开变关
// 检查回收槽是否到底,到底才能打印
if (sysPara->status.reclainTankReachEnd) {
// sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude);
enablePrintButton(true);
} else {
enablePrintButton(false);
}
}
hdint = !(sysPara->status.statWarn & WARN_STATUS_HDINT);
if(sysPara->status.reclainTankReachEnd && reclainTankReachEnd == 0) { //开回收槽到底
if (!(sysPara->status.statWarn & WARN_STATUS_HDINT)) { //喷头盖是关闭的状态
// sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude);
}
}
reclainTankReachEnd = sysPara->status.reclainTankReachEnd;
if(sysPara->status.lastStatWarn != sysPara->status.statWarn || flagOfClearHighVltageWarnning){ if(sysPara->status.lastStatWarn != sysPara->status.statWarn || flagOfClearHighVltageWarnning){
if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){//墨线开关 if(!(sysPara->status.statWarn & WARN_STATUS_INK_SWINT)){//墨线开关
// ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
alarmStatus.inkSwint = DEV_STATUS_GREEN; alarmStatus.inkSwint = DEV_STATUS_GREEN;
} }
else { else {
// ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
alarmStatus.inkSwint = DEV_STATUS_RED; alarmStatus.inkSwint = DEV_STATUS_RED;
} }
if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)){ //液位渗漏,高电平警告 if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)){ //液位渗漏,高电平警告
// ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
alarmStatus.inkLeak = DEV_STATUS_GREEN; alarmStatus.inkLeak = DEV_STATUS_GREEN;
} }
else { else {
// ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
alarmStatus.inkLeak = DEV_STATUS_RED; alarmStatus.inkLeak = DEV_STATUS_RED;
strTitle = tr("墨水缸满报警"); strTitle = tr("墨水缸满报警");
if(sysPara->devOp->isMixValveOpen()) { if(sysPara->devOp->isMixValveOpen()) {
@@ -2176,70 +2156,55 @@ void MainWidget::RefreshStatusLight(){//100ms
} }
} }
if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)){ if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)){
// ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
alarmStatus.inkWaterLevel = DEV_STATUS_GREEN; alarmStatus.inkWaterLevel = DEV_STATUS_GREEN;
} }
else { else {
// ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
alarmStatus.inkWaterLevel = DEV_STATUS_RED; alarmStatus.inkWaterLevel = DEV_STATUS_RED;
strTitle = tr("墨水液位报警"); strTitle = tr("墨水液位报警");
} }
if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)){ if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)){
// ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
alarmStatus.solveLevelWarn = DEV_STATUS_GREEN; alarmStatus.solveLevelWarn = DEV_STATUS_GREEN;
} }
else { else {
// ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
alarmStatus.solveLevelWarn = DEV_STATUS_RED; alarmStatus.solveLevelWarn = DEV_STATUS_RED;
strTitle = tr("溶剂液位报警"); strTitle = tr("溶剂液位报警");
} }
if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT) ){ if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT) ){
// ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
alarmStatus.recycleWarn = DEV_STATUS_GREEN; alarmStatus.recycleWarn = DEV_STATUS_GREEN;
recycleWarnTimes = 0;
} }
else { else {
// ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); // 实际使用中这个报警很容易触发,决定添加防抖
alarmStatus.recycleWarn = DEV_STATUS_RED; if (recycleWarnTimes++ > 30) {
alarmStatus.recycleWarn = DEV_STATUS_RED;
}
} }
//static int HVfaultCnt=0;
if(!(sysPara->status.statWarn & WARN_STATUS_POWER_MON)){ if(!(sysPara->status.statWarn & WARN_STATUS_POWER_MON)){
if(!sysPara->status.lastHighVoltageFault) if(!sysPara->status.lastHighVoltageFault)
{ {
flagOfClearHighVltageWarnning = false; flagOfClearHighVltageWarnning = false;
// ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG"))); alarmStatus.highVoltageFault = DEV_STATUS_GREEN;
alarmStatus.highVoltageFault = DEV_STATUS_GREEN;
} }
// HVfaultCnt=0;
//sysPara->status.HVFaultCloseEn=0; //sysPara->status.HVFaultCloseEn=0;
} }
else { else {
// ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG"))); alarmStatus.highVoltageFault = DEV_STATUS_RED;
alarmStatus.highVoltageFault = DEV_STATUS_RED; if(sysPara->status.isPrinting){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电
if(startPrintingFlag && printintFlag){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电
// on_pushButtonPausePrint_pressed();
on_m_StopBtn_clicked(); on_m_StopBtn_clicked();
LogInfo::setRunStatusText(tr("高压故障,暂停打印")); LogInfo::setRunStatusText(tr("高压故障,暂停打印"));
setRunStatus(tr("高压故障,暂停打印")); setRunStatus(tr("高压故障,暂停打印"));
strTitle = tr("高压故障,暂停打印."); strTitle = tr("高压故障,暂停打印.");
sysPara->status.lastHighVoltageFault = true; sysPara->status.lastHighVoltageFault = true;
} }
if((sysPara->status.currReclaimTankPos != 0) && sysPara->para.HVFaultCloseEn ) if((sysPara->status.currReclaimTankPos != 0) && sysPara->para.HVFaultCloseEn )
{ {
//HVfaultCnt++;
// 高压故障关回收槽 // 高压故障关回收槽
if(sysPara->status.HVFaultCloseEn==0){ if(sysPara->status.HVFaultCloseEn==0){
sysPara->status.reclaimTankBlockedAppending=0; sysPara->status.reclaimTankBlockedAppending=0;
sysPara->status.reclaimCloseCnt=100; sysPara->status.reclaimCloseCnt=100;
// on_pushButtonReclaimTankClose_pressed();
on_m_LeftBtn_clicked(); on_m_LeftBtn_clicked();
sysPara->status.reclaimTankBlockedAppending=1; sysPara->status.reclaimTankBlockedAppending=1;
LogInfo::setRunStatusText(tr("高压故障,关回收槽")); LogInfo::setRunStatusText(tr("高压故障,关回收槽"));
@@ -2255,17 +2220,14 @@ void MainWidget::RefreshStatusLight(){//100ms
sysPara->status.lastStatWarn = sysPara->status.statWarn; sysPara->status.lastStatWarn = sysPara->status.statWarn;
if(sysPara->status.lastViscosityFault != sysPara->status.viscosityFault){ if(sysPara->status.lastViscosityFault != sysPara->status.viscosityFault){
if(sysPara->status.viscosityFault==0){ if(sysPara->status.viscosityFault==0){
// ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
alarmStatus.viscosityWarn = DEV_STATUS_GREEN; alarmStatus.viscosityWarn = DEV_STATUS_GREEN;
} }
else { else {
if(sysPara->status.viscosityFault==1){ if(sysPara->status.viscosityFault==1){
// ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
alarmStatus.viscosityWarn = DEV_STATUS_RED; alarmStatus.viscosityWarn = DEV_STATUS_RED;
} }
else if(sysPara->status.viscosityFault==2) { else if(sysPara->status.viscosityFault==2) {
// ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG")));
alarmStatus.viscosityWarn = DEV_STATUS_YELLOW; alarmStatus.viscosityWarn = DEV_STATUS_YELLOW;
} }
} }
@@ -2275,7 +2237,6 @@ void MainWidget::RefreshStatusLight(){//100ms
if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT)){ //20140211 nie if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT)){ //20140211 nie
if(sysPara->status.RecycleWarnCnt) if(sysPara->status.RecycleWarnCnt)
alarmStatus.recycleWarn = DEV_STATUS_GREEN; alarmStatus.recycleWarn = DEV_STATUS_GREEN;
// ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
sysPara->status.RecycleWarnCnt = 0; sysPara->status.RecycleWarnCnt = 0;
sysPara->status.lastRecycleWarn = 0; sysPara->status.lastRecycleWarn = 0;
} }
@@ -2286,7 +2247,6 @@ void MainWidget::RefreshStatusLight(){//100ms
{ {
sysPara->status.lastRecycleWarn = RECYCLE_WARN_DELAY;//5s sysPara->status.lastRecycleWarn = RECYCLE_WARN_DELAY;//5s
alarmStatus.recycleWarn = DEV_STATUS_RED; alarmStatus.recycleWarn = DEV_STATUS_RED;
// ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
sysPara->status.reclaimCloseCnt=100; sysPara->status.reclaimCloseCnt=100;
if(sysPara->para.RecycleWarnAction) if(sysPara->para.RecycleWarnAction)
{ {
@@ -2314,12 +2274,6 @@ void MainWidget::RefreshStatusLight(){//100ms
else if(sysPara->status.lastRecycleWarn)sysPara->status.lastRecycleWarn--; else if(sysPara->status.lastRecycleWarn)sysPara->status.lastRecycleWarn--;
} }
// if(startPrintingFlag ){
// if(printintFlag)
// setRunStatus(tr("正在喷印..."));
// else
// setRunStatus(tr("暂停喷印..."));
// }
if(sysPara->status.isPrinting && sysPara->status.selfCheckDone){ if(sysPara->status.isPrinting && sysPara->status.selfCheckDone){
setRunStatus(tr("正在喷印.......")); setRunStatus(tr("正在喷印......."));
@@ -2347,7 +2301,7 @@ bool MainWidget::updatePhaseIndicatorLight(){
if(sysPara==0) return 0; if(sysPara==0) return 0;
/*------------------------------------------喷头盖未关或回收槽未全部打开的时候不报相位故障-------------------------------------------------*/ /*------------------------------------------喷头盖未关或回收槽未全部打开的时候不报相位故障-------------------------------------------------*/
if((!sysPara->status.flight_tm_error && !sysPara->status.detect_phase_error) || (sysPara->status.statWarn & WARN_STATUS_HDINT) || !sysPara->status.reclainTankReachEnd){ if((!sysPara->status.flight_tm_error && !sysPara->status.detect_phase_error) || !sysPara->status.reclainTankReachEnd){
//故障后必须等手动按故障恢复才会继续 //故障后必须等手动按故障恢复才会继续
if(!sysPara->para.suspendAfterPhaseFault && !sysPara->para.powerOffAfterPhaseFault){ if(!sysPara->para.suspendAfterPhaseFault && !sysPara->para.powerOffAfterPhaseFault){
if(sysPara->status.lastPhaseFault){ if(sysPara->status.lastPhaseFault){
@@ -2538,11 +2492,8 @@ bool MainWidget::checkTriggerMode()
} }
#endif #endif
bool MaxCol4000; bool MaxCol4000 = sysPara->status.flagOfNo67FPGA;
if(sysPara->status.flagOfNo67FPGA)
MaxCol4000 = true;
else
MaxCol4000 = false;
if(sysPara->status.currPrintCol > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){ if(sysPara->status.currPrintCol > (MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)){
QMessageBox::critical(0,tr("错误"),tr("当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度").arg(sysPara->status.currPrintCol).arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide))); QMessageBox::critical(0,tr("错误"),tr("当前总列数 %1 ,支持的总列数为 %2,请减少打印串的长度").arg(sysPara->status.currPrintCol).arg((MaxCol4000?MAX_PRINT_COL_NUM_Normal:MAX_PRINT_COL_NUM_Wide)));
return false; return false;
@@ -2622,12 +2573,26 @@ void MainWidget::onLabelFaultRusumePressed(){
sysPara->devOp->mainInkCtrl(); sysPara->devOp->mainInkCtrl();
emit clearPressureFault(); emit clearPressureFault();
} }
if(printintFlag) { if(sysPara->status.isPrinting) {
sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude); sysPara->devOp->highVoltageCtrl(sysPara->para.HighVoltageAmplitude);
} }
} }
} }
void MainWidget::slt_resetCNT1()
{
sysPara->para.cnt1CurrValue = printSettingsModel.cnt1Settings.currValue;
sysPara->para.cnt2CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt2CurrValue,16).toInt();
sysPara->devOp->writeFpgaCalandar(false);
}
void MainWidget::slt_resetCNT2()
{
sysPara->para.cnt1CurrValue = QString::number(sysPara->status.calandar_and_dat.cnt1CurrValue,16).toInt();
sysPara->para.cnt2CurrValue = printSettingsModel.cnt2Settings.currValue;
sysPara->devOp->writeFpgaCalandar(false);
}
extern int baudRateValue; extern int baudRateValue;
void MainWidget::UpdateUIVersion(){ void MainWidget::UpdateUIVersion(){
int fpgaType = sysPara->status.fpgaVersionNum>>12; int fpgaType = sysPara->status.fpgaVersionNum>>12;
+13 -10
View File
@@ -29,6 +29,8 @@
#include "fileManage/FileManageWidget.h" #include "fileManage/FileManageWidget.h"
#include "setnumdlg.h" #include "setnumdlg.h"
#include "PrintSetting.h"
#include "PressureMonitor.h"
class MainWidget : public QWidget class MainWidget : public QWidget
{ {
@@ -45,9 +47,10 @@ public:
* @brief 生成打印内容,并发送打印内容到 FPGA * @brief 生成打印内容,并发送打印内容到 FPGA
* *
* @param pPicScene 包含打印内容的场景 * @param pPicScene 包含打印内容的场景
* @param printSettings 打印内容所需要的打印设置
* @return 成功返回true,否则false,查看日志 * @return 成功返回true,否则false,查看日志
*/ */
bool generatePrintContent(PicScene* pPicScene); bool generatePrintContent(PicScene* pPicScene, const PrintSettingModel& printSettings);
/** /**
* @brief 重新生成打印内容,所用场景是由调用 generatePrintContent 时设置的,generatePrintContent 也会调用此函数 * @brief 重新生成打印内容,所用场景是由调用 generatePrintContent 时设置的,generatePrintContent 也会调用此函数
@@ -60,8 +63,6 @@ public:
QString strWarring,strTitle; QString strWarring,strTitle;
bool m_2sFlag; bool m_2sFlag;
bool printintFlag; //判断当前是否在打印
bool startPrintingFlag;
bool pushButtonFlag; bool pushButtonFlag;
@@ -89,7 +90,8 @@ public:
void setRunStatus(QString str, bool enbRoll = true, bool warn = false); void setRunStatus(QString str, bool enbRoll = true, bool warn = false);
void enablePrintButton(bool); void enablePrintButton(bool);
int getCurrPrintStatus(); void enabeleStartBtn(bool);
void enabeleStopBtn(bool);
// 回收槽开启按钮状态设置 // 回收槽开启按钮状态设置
void setReclaimOpenBtnStatus(bool enable); void setReclaimOpenBtnStatus(bool enable);
@@ -107,10 +109,8 @@ public:
/** /**
* @brief 设置回收槽开关状态 * @brief 设置回收槽开关状态
* @param isOpen true:开;false:关
* @param rate 回收槽开启程度,0~100;
*/ */
void setReclaimStatus(bool isOpen, int rate = 0); void updateReclaimText();
void updateSysStatusToUI(); //重载 void updateSysStatusToUI(); //重载
//Mainwindow获取机器总状态 //Mainwindow获取机器总状态
@@ -138,8 +138,7 @@ public:
bool flagOfClearHighVltageWarnning; bool flagOfClearHighVltageWarnning;
AlarmStatus alarmStatus; AlarmStatus alarmStatus;
bool powerOnWarn = false;
// void mouseDoubleClickEvent(QMouseEvent *event) override;
private: private:
// UI对象 // UI对象
@@ -163,8 +162,11 @@ private:
int r_ExpiryDay; int r_ExpiryDay;
QTimer *airPushTimer; QTimer *airPushTimer;
PressureMonitor *m_pressureMonitor = nullptr;
PicScene *pPicScene = nullptr; PicScene *pPicScene = nullptr;
QGraphicsView *view; QGraphicsView *view;
PrintSettingModel printSettingsModel;
FileManageWidget *m_fileManageWidget = nullptr; FileManageWidget *m_fileManageWidget = nullptr;
@@ -192,7 +194,8 @@ public slots:
void _on_pushButtonPowerOff_pressed(bool notice); void _on_pushButtonPowerOff_pressed(bool notice);
void onLabelFaultRusumePressed(); void onLabelFaultRusumePressed();
void slt_resetCNT1();
void slt_resetCNT2();
void UpdateUIVersion(); void UpdateUIVersion();
void on_m_RightBtn_clicked(); void on_m_RightBtn_clicked();
+5 -2
View File
@@ -196,17 +196,20 @@ private:
std::function<void()> m_confirmCallback; std::function<void()> m_confirmCallback;
int waitStatus(); int waitStatus();
bool waitCard(); bool waitCard();
signals: signals:
void sig_showMsg(QString msg); void sig_showMsg(QString msg);
void sig_maintenanceShow(); void sig_maintenanceShow();
// 墨水流程已完成,(墨水、刷卡均已完成) // 墨水流程已完成,(墨水、刷卡均已完成)
void sig_inkCardProgressFinished(); void sig_inkCardProgressFinished();
// 溶剂流程已完成 // 溶剂流程已完成
void sig_solventProgressFinished(); void sig_solventProgressFinished();
// 告警累计 3 小时,请求关喷嘴
void sig_warnTimeout(QString);
private slots: private slots:
//接收刷卡数据槽函数 //接收刷卡数据槽函数
@@ -219,4 +222,4 @@ private slots:
// void slt_intervalTimerHandle(); // void slt_intervalTimerHandle();
}; };
#endif // RFIDMANAGER_H #endif // RFIDMANAGER_H
+1 -1
View File
@@ -125,7 +125,7 @@ void PicCounterItem::setCustomAttrs(const QXmlStreamAttributes &attrs)
ok = false; ok = false;
int displayNum = displayNumRef.toInt(&ok); int displayNum = displayNumRef.toInt(&ok);
if(!ok || displayNum <= 0) { if(!ok /*|| displayNum <= 0*/) {
qWarning() << "Invalied counter display number: " << displayNum; qWarning() << "Invalied counter display number: " << displayNum;
return; return;
} }
+12
View File
@@ -14,6 +14,12 @@ SetNumDlg::SetNumDlg(QWidget *parent) :
ui->btn_confirm->setAutoDefault(false); // 禁止回车自动触发 ui->btn_confirm->setAutoDefault(false); // 禁止回车自动触发
ui->btn_confirm->setDefault(false); // 彻底取消默认按钮 ui->btn_confirm->setDefault(false); // 彻底取消默认按钮
connect(ui->btn_resetCnt1, &QPushButton::clicked, this, &SetNumDlg::sig_resetCNT1);
connect(ui->btn_resetCnt2, &QPushButton::clicked, this, &SetNumDlg::sig_resetCNT2);
// 默认禁用 重置计数器1 重置计数器2 的按钮
setCNTResetBtnsEnable(false, false);
} }
SetNumDlg::~SetNumDlg() SetNumDlg::~SetNumDlg()
@@ -40,6 +46,12 @@ void SetNumDlg::on_btn_confirm_clicked()
emit sig_setNum(); emit sig_setNum();
} }
void SetNumDlg::setCNTResetBtnsEnable(bool cnt1Btn, bool cnt2Btn)
{
ui->btn_resetCnt1->setEnabled(cnt1Btn);
ui->btn_resetCnt2->setEnabled(cnt2Btn);
}
void SetNumDlg::on_btn_clearProductCnt_clicked() void SetNumDlg::on_btn_clearProductCnt_clicked()
{ {
emit sig_clearCnt(); emit sig_clearCnt();
+12
View File
@@ -19,6 +19,14 @@ public:
int getNum(); int getNum();
/**
* @brief 设置对话框中,重置计数器1/2 的两个按钮的可用性
*
* @param cnt1Btn 重置计数器1 按钮的可用性
* @param cnt2Btn 重置计数器2 按钮的可用性
*/
void setCNTResetBtnsEnable(bool cnt1Btn, bool cnt2Btn);
private slots: private slots:
void on_btn_confirm_clicked(); void on_btn_confirm_clicked();
@@ -34,6 +42,10 @@ signals:
void sig_setNum(); void sig_setNum();
void sig_clearCnt(); void sig_clearCnt();
void sig_resetCNT1();
void sig_resetCNT2();
}; };
#endif // SETNUMDLG_H #endif // SETNUMDLG_H
+27 -1
View File
@@ -87,7 +87,7 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>20</x> <x>20</x>
<y>160</y> <y>130</y>
<width>111</width> <width>111</width>
<height>61</height> <height>61</height>
</rect> </rect>
@@ -96,6 +96,32 @@
<string>清空产品计数</string> <string>清空产品计数</string>
</property> </property>
</widget> </widget>
<widget class="QPushButton" name="btn_resetCnt1">
<property name="geometry">
<rect>
<x>20</x>
<y>220</y>
<width>131</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>重置计数器1</string>
</property>
</widget>
<widget class="QPushButton" name="btn_resetCnt2">
<property name="geometry">
<rect>
<x>160</x>
<y>220</y>
<width>131</width>
<height>41</height>
</rect>
</property>
<property name="text">
<string>重置计数器2</string>
</property>
</widget>
</widget> </widget>
<tabstops> <tabstops>
<tabstop>cb_setNum</tabstop> <tabstop>cb_setNum</tabstop>
+511 -374
View File
File diff suppressed because it is too large Load Diff
+38 -2
View File
@@ -146,7 +146,7 @@ TestPrintWidget::TestPrintWidget(QWidget* parent)
vm.letterSpace = 1; vm.letterSpace = 1;
vm.cnt1Settings = m_printSettingModel.cnt1Settings; vm.cnt1Settings = m_printSettingModel.cnt1Settings;
vm.cnt2Settings = m_printSettingModel.cnt2Settings; vm.cnt2Settings = m_printSettingModel.cnt2Settings;
emit sig_showEditCounter(vm); emit sig_showEditCounter(vm, false);
}); });
connect(ui.btnBarcode, &QPushButton::clicked, [this](){ connect(ui.btnBarcode, &QPushButton::clicked, [this](){
@@ -201,6 +201,8 @@ TestPrintWidget::TestPrintWidget(QWidget* parent)
// 网络通信,暂时屏蔽 // 网络通信,暂时屏蔽
// ui.btnList->hide(); // ui.btnList->hide();
connect(ui.btnSaveAs, &QPushButton::clicked, this, &TestPrintWidget::onBtnSaveAsClicked);
} }
void TestPrintWidget::bindSysPara(SysPara *sysPara) void TestPrintWidget::bindSysPara(SysPara *sysPara)
@@ -713,7 +715,7 @@ void TestPrintWidget::onBtnItemConfigClicked()
vm.charWidth = counterItem->charWidth(); vm.charWidth = counterItem->charWidth();
vm.cnt1Settings = m_printSettingModel.cnt1Settings; vm.cnt1Settings = m_printSettingModel.cnt1Settings;
vm.cnt2Settings = m_printSettingModel.cnt2Settings; vm.cnt2Settings = m_printSettingModel.cnt2Settings;
emit sig_showEditCounter(vm); emit sig_showEditCounter(vm, true);
} }
return; return;
} }
@@ -1048,6 +1050,12 @@ void TestPrintWidget::addCounterItem(CounterViewModel vm, QSharedPointer<QFont>
} }
} }
// 最多两个计数器
if (getCounterNum() >= 2 && !flag) {
QMessageBox::warning(this, tr("警告"),tr("无法创建更多计数器"));
return;
}
QVector<int> currVals{vm.cnt1Settings.currValue, vm.cnt2Settings.currValue}; QVector<int> currVals{vm.cnt1Settings.currValue, vm.cnt2Settings.currValue};
QFont font; QFont font;
@@ -1098,6 +1106,19 @@ void TestPrintWidget::addCounterItem(CounterViewModel vm, QSharedPointer<QFont>
updateCountersCurrVal(currVals); updateCountersCurrVal(currVals);
} }
int TestPrintWidget::getCounterNum()
{
int count = 0;
const QList<QGraphicsItem *> items = pPicScene->items();
for (QGraphicsItem *it : items) {
if (auto *counter = dynamic_cast<PicCounterItem *>(it)) {
Q_UNUSED(counter);
++count;
}
}
return count;
}
QString TestPrintWidget::currentFile() QString TestPrintWidget::currentFile()
{ {
return xmlfileName; return xmlfileName;
@@ -1159,3 +1180,18 @@ void TestPrintWidget::on_btn_paste_clicked()
{ {
pasteCopiedLayer(); pasteCopiedLayer();
} }
void TestPrintWidget::onBtnSaveAsClicked()
{
dialogSaveFile->refreshListView(SCENE);
dialogSaveFile->setEnterFileName("");
auto ret = dialogSaveFile->exec();
if(ret == QDialog::Accepted) {
auto filename = dialogSaveFile->filename();
if(!filename.endsWith(".xml",Qt::CaseInsensitive))
filename += ".xml";
saveFile(filename);
}
}
+5 -1
View File
@@ -58,6 +58,8 @@ public:
void addCounterItem(CounterViewModel vm, QSharedPointer<QFont> font = nullptr); void addCounterItem(CounterViewModel vm, QSharedPointer<QFont> font = nullptr);
int getCounterNum();
QString currentFile(); QString currentFile();
// 更新编辑界面内所有计数器的当前值 // 更新编辑界面内所有计数器的当前值
@@ -108,6 +110,8 @@ private slots:
// 粘贴 // 粘贴
void on_btn_paste_clicked(); void on_btn_paste_clicked();
void onBtnSaveAsClicked();
private: private:
// UI对象 // UI对象
Ui::TestPrintWidget ui; Ui::TestPrintWidget ui;
@@ -174,7 +178,7 @@ signals:
void sendButtonClickedSignal(int index); void sendButtonClickedSignal(int index);
void sig_showEditCounter(CounterViewModel viewModel); void sig_showEditCounter(CounterViewModel viewModel, bool isChange);
// 用户请求打开日期类型图元编辑窗口时发送此信号 // 用户请求打开日期类型图元编辑窗口时发送此信号
void sig_showEditDateTime(DateItemModel dateModel, TextItemModel textModel); void sig_showEditDateTime(DateItemModel dateModel, TextItemModel textModel);
-5
View File
@@ -1,5 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'songti'; font-size:12pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">f</p></body></html>
-5
View File
@@ -1,5 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'songti'; font-size:12pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">fdafdsa</p></body></html>
-5
View File
@@ -1,5 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'songti'; font-size:12pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">化公为私于机构改革讨价还价液恭恭敬敬用同方</p></body></html>
-5
View File
@@ -1,5 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><style type="text/css">
p, li { white-space: pre-wrap; }
</style></head><body style=" font-family:'songti'; font-size:12pt; font-weight:400; font-style:normal;">
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'helvetica'; font-size:8pt; font-weight:200;">yujhfdddeef</span><img src=":/6/image/digitalWidth2.png" width="10" height="8" /></p></body></html>
+511 -374
View File
File diff suppressed because it is too large Load Diff
+511 -374
View File
File diff suppressed because it is too large Load Diff
+511 -374
View File
File diff suppressed because it is too large Load Diff