Compare commits
12
Commits
5a187c359b
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a126db221b | ||
|
|
7ec427097e | ||
|
|
a18665b5f9 | ||
|
|
b7e155d063 | ||
|
|
af37661b74 | ||
|
|
888c1cd724 | ||
|
|
5942564f5e | ||
|
|
d48826b028 | ||
|
|
7c755537a1 | ||
|
|
0bc587e989 | ||
|
|
96c5fab758 | ||
|
|
7d411deab0 |
@@ -70,3 +70,4 @@ QtUI.r668
|
||||
800X600_New_SystemProject-_NewInterface.zip
|
||||
bnsTest.png
|
||||
printSceneView.png
|
||||
docs/
|
||||
+42
-4
@@ -91,7 +91,7 @@ void CounterVarSet::onDigitsChanged(int digits)
|
||||
endValueBox->setValue(maxValue);
|
||||
}
|
||||
|
||||
void CounterVarSet::setCounterConfig(CounterViewModel viewModel)
|
||||
void CounterVarSet::setCounterConfig(CounterViewModel viewModel, bool isChange)
|
||||
{
|
||||
m_vm = viewModel;
|
||||
|
||||
@@ -101,7 +101,7 @@ void CounterVarSet::setCounterConfig(CounterViewModel viewModel)
|
||||
ui->tabWidget->setCurrentIndex(viewModel.counterType == COUNTER_TYPE_1 ? 1 : 2);
|
||||
ui->letterSpaceSpinBox->setValue(viewModel.letterSpace);
|
||||
|
||||
updateSysParaToUI();
|
||||
updateSysParaToUI(isChange);
|
||||
}
|
||||
|
||||
void CounterVarSet::getValue(int *varType,int *digitalWidth,unsigned char *splitMode){
|
||||
@@ -139,8 +139,10 @@ void CounterVarSet::applyUIPara()
|
||||
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->spinBoxCnt1RepeateCnt->setValue(m_vm.cnt1Settings.repeatValue);
|
||||
ui->spinBoxCnt1StartValue->setValue(m_vm.cnt1Settings.startValue);
|
||||
@@ -154,6 +156,42 @@ void CounterVarSet::updateSysParaToUI()
|
||||
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()
|
||||
{
|
||||
QString styleSheet =
|
||||
@@ -353,4 +391,4 @@ void CounterVarSet::applyStyleSheet()
|
||||
)";
|
||||
|
||||
this->setStyleSheet(styleSheet);
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -25,14 +25,15 @@ public:
|
||||
void applyStyleSheet();
|
||||
void getValue(int *varType,int *digitalWidth,unsigned char *splitMode);
|
||||
|
||||
void updateSysParaToUI(); //重载
|
||||
void updateSysParaToUI(bool isChange); //重载
|
||||
void handleChange(bool isChange);
|
||||
void applyUIPara(); //重载
|
||||
|
||||
// 获取当前计数器配置:varType(7或8) 和 digitalNum(位数)
|
||||
CounterViewModel getCounterConfig();
|
||||
|
||||
// 设置ui,用户编辑计数器item时,会调用此函数显示计数器的配置
|
||||
void setCounterConfig(CounterViewModel viewModel);
|
||||
void setCounterConfig(CounterViewModel viewModel, bool isChange);
|
||||
signals:
|
||||
void sendButtonClickedSignal(int);
|
||||
|
||||
|
||||
@@ -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
@@ -3,7 +3,9 @@
|
||||
#include "MyInputMethod.h"
|
||||
#include <QObject>
|
||||
#include <QSpinBox>
|
||||
#include <QDoubleSpinBox>
|
||||
#include <QSpinBox>
|
||||
#include <QRegularExpression>
|
||||
#include <QDebug>
|
||||
#include <QKeyEvent>
|
||||
|
||||
@@ -52,8 +54,7 @@ DigitalInput::~DigitalInput()
|
||||
void DigitalInput::onCharPressed(){
|
||||
QPushButton * button = qobject_cast<QPushButton *>(sender());
|
||||
QString ch = button->text();
|
||||
|
||||
if (!m_currSpinBox) {
|
||||
if (!m_currSpinBox && !m_currDoubleSpinBox) {
|
||||
ui->traceEdit->insert(ch);
|
||||
return;
|
||||
}
|
||||
@@ -62,34 +63,60 @@ void DigitalInput::onCharPressed(){
|
||||
QString currentText = ui->traceEdit->text();
|
||||
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);
|
||||
return;
|
||||
}
|
||||
|
||||
bool ok = false;
|
||||
int value = newText.toInt(&ok);
|
||||
if (!ok) {
|
||||
ui->traceEdit->insert(ch);
|
||||
if (!ok) {
|
||||
return;
|
||||
}
|
||||
|
||||
int max = m_currSpinBox->maximum();
|
||||
if (value <= max) {
|
||||
if (value <= max) {
|
||||
ui->traceEdit->insert(ch);
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
if (cursorPos > 0) {
|
||||
QString text = ui->traceEdit->text();
|
||||
@@ -131,12 +158,6 @@ void DigitalInput::onEnterPressed()
|
||||
|
||||
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->setFocus();
|
||||
}
|
||||
@@ -147,14 +168,28 @@ void DigitalInput::showEvent(QShowEvent *event)
|
||||
raise();
|
||||
|
||||
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);
|
||||
if(!box) {
|
||||
qWarning() << "focusWidget is not QSpinBox";
|
||||
qWarning() << "focusWidget is not QSpinBox or QDoubleSpinBox";
|
||||
m_currSpinBox = nullptr;
|
||||
m_currDoubleSpinBox = nullptr;
|
||||
return;
|
||||
}
|
||||
|
||||
m_currSpinBox = box;
|
||||
m_currDoubleSpinBox = nullptr;
|
||||
ui->traceEdit->setText(box->text());
|
||||
// focusWidget->clearFocus();
|
||||
ui->traceEdit->setFocus();
|
||||
@@ -167,6 +202,18 @@ void DigitalInput::hideEvent(QHideEvent * 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) {
|
||||
int value = ui->traceEdit->text().toInt();
|
||||
int min = m_currSpinBox->minimum();
|
||||
@@ -175,4 +222,4 @@ void DigitalInput::hideEvent(QHideEvent * event)
|
||||
m_currSpinBox->setValue(value);
|
||||
m_currSpinBox->clearFocus();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include <QWidget>
|
||||
#include <QSpinBox>
|
||||
#include <QDoubleSpinBox>
|
||||
|
||||
class MyInputMethod;
|
||||
namespace Ui {
|
||||
@@ -36,6 +37,7 @@ private:
|
||||
|
||||
MyInputMethod *myInputMethod;
|
||||
QSpinBox* m_currSpinBox = nullptr;
|
||||
QDoubleSpinBox* m_currDoubleSpinBox = nullptr;
|
||||
};
|
||||
|
||||
#endif // DIGITALINPUT_H
|
||||
|
||||
+189
-221
@@ -144,9 +144,7 @@ void InkJetPrinter::init()
|
||||
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::superJmAccepted, this, &InkJetPrinter::resetRFIDStatus);
|
||||
|
||||
// connect(myInputMethod,&MyInputMethod::sendEnterClickedSignal,&TestPrintWidget::onEditItemDone);
|
||||
// connect(myInputMethod,SIGNAL(sendEnterClickedSignal()),m_TestPrintWidget,SLOT(onEditItemDone()));
|
||||
connect(m_DateVarSet,SIGNAL(backSpaceBtn()),myInputMethod,SLOT(backSapceButtonDel()));
|
||||
@@ -187,7 +185,7 @@ void InkJetPrinter::init()
|
||||
m_PrintSetting->updateModelToUI();
|
||||
m_SystemSetting->updateSysParaToUI();
|
||||
m_OtherInfo->updateSysParaToUI();
|
||||
m_CounterVarSet->updateSysParaToUI();
|
||||
m_CounterVarSet->updateSysParaToUI(false);
|
||||
|
||||
m_SystemManage->loadKeyBoardType();
|
||||
|
||||
@@ -256,11 +254,11 @@ void InkJetPrinter::init()
|
||||
}
|
||||
|
||||
// type 1,2: 分别显示计数器1或2的界面
|
||||
void InkJetPrinter::slt_editCounter(CounterViewModel vm)
|
||||
void InkJetPrinter::slt_editCounter(CounterViewModel vm, bool isChange)
|
||||
{
|
||||
if (m_CounterVarSet) {
|
||||
m_CounterVarSet->updateSysParaToUI();
|
||||
m_CounterVarSet->setCounterConfig(vm);
|
||||
// m_CounterVarSet->updateSysParaToUI(isChange);
|
||||
m_CounterVarSet->setCounterConfig(vm,isChange);
|
||||
m_StackedWidget->setCurrentWidget(m_CounterVarSet);
|
||||
}
|
||||
}
|
||||
@@ -311,7 +309,7 @@ void InkJetPrinter::showEvent(QShowEvent *e)
|
||||
fpgaReadyTimer = nullptr;
|
||||
}
|
||||
else {
|
||||
qDebug() << "FPGA not connected yet.";
|
||||
// qDebug() << "FPGA not connected yet.";
|
||||
}
|
||||
});
|
||||
|
||||
@@ -789,7 +787,7 @@ void InkJetPrinter::timerHandler(void){
|
||||
checkPressureControl();
|
||||
|
||||
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);
|
||||
LogInfo::setRunStatusText(tr("定时开机循环完成,准备关机"));
|
||||
}
|
||||
@@ -889,29 +887,6 @@ void InkJetPrinter::timerHandler(void){
|
||||
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);
|
||||
if(!sysPara->para.gearPumpEnable)
|
||||
sysPara->status.PRESSURE *= 5; //响应群众号召,数值放大五倍
|
||||
@@ -923,7 +898,7 @@ void InkJetPrinter::timerHandler(void){
|
||||
|
||||
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;
|
||||
if(sysPara->status.productCnt== 0 && (oneTimeFlag==false))//计米复位发送打印数据
|
||||
@@ -950,7 +925,6 @@ void InkJetPrinter::timerHandler(void){
|
||||
lastProductCount = sysPara->status.productCnt;
|
||||
|
||||
if(vartypeR != 0){ //更新替换变量的值
|
||||
// LogInfo::setRunStatusText("vartypeR");
|
||||
MySleep(100);
|
||||
m_MainWidget->onPreviewScene();
|
||||
m_MainWidget->SendPrintDataToFpga(0);
|
||||
@@ -969,15 +943,6 @@ void InkJetPrinter::timerHandler(void){
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -989,9 +954,7 @@ void InkJetPrinter::timerHandler(void){
|
||||
if(gearPumpRunFlag || sysPara->para.gearPumpEnable == 0)
|
||||
{
|
||||
if(!sysPara->status.selfCheckDone && sysPara->status.isPrinting){
|
||||
// sysPara->status.selfCheckDone = true;
|
||||
m_MainWidget->updatePrintDisplayLabel();
|
||||
// sysPara->status.flagOfAbnormalStatus = true;
|
||||
qDebug()<<"打印过程中死机了!!!";
|
||||
|
||||
m_MainWidget->on_m_StopBtn_clicked();
|
||||
@@ -1011,7 +974,6 @@ void InkJetPrinter::timerHandler(void){
|
||||
m_MainWidget->setReclaimOpenBtnStatus(false);
|
||||
m_MainWidget->setReclaimCloseBtnStatus(false);
|
||||
|
||||
// m_MainWidget->enablePrintButton(false);
|
||||
sysPara->devOp->mainInkCtrl();
|
||||
sysPara->para.TrunOnPowerCnt++;// 20151218 开机次数加1
|
||||
sysPara->saveParaToFile(); // 保存开机次数值
|
||||
@@ -1032,11 +994,11 @@ void InkJetPrinter::timerHandler(void){
|
||||
if(sysPara->status.selfCheckCnt >= MAX_SELF_CHECK_CNT)
|
||||
#endif
|
||||
{
|
||||
sysPara->status.selfCheckDone = true;
|
||||
// 自检完成 selfCheckDone=true
|
||||
// 通过状态管理器发送事件,在 onStateChanged 中更新 sysPara
|
||||
// if (m_stateManager && m_stateManager->isState(PrinterState::SELF_CHECK)) {
|
||||
// m_stateManager->requestTransition(PrinterEvent::SelfCheckDone);
|
||||
// }
|
||||
if (m_stateManager && m_stateManager->isState(PrinterState::IDLE)) {
|
||||
m_stateManager->requestTransition(PrinterEvent::PowerOn);
|
||||
}
|
||||
|
||||
// 自检完成后管道恢复正常阻力,重置软启动让压力重新平稳收敛
|
||||
// 不清零 u,从当前控制字开始,避免突变
|
||||
@@ -1049,29 +1011,15 @@ void InkJetPrinter::timerHandler(void){
|
||||
for(int i = 0; i < 10; i++) m_pressureBuf[i] = 0;
|
||||
m_bufIdx = 0;
|
||||
|
||||
m_MainWidget->setReclaimOpenBtnStatus(true);
|
||||
m_MainWidget->setReclaimCloseBtnStatus(false);
|
||||
|
||||
sysPara->devOp->mainInkCtrl();
|
||||
sysPara->status.canRunAirPushing = true;
|
||||
|
||||
// 自检完成后,关闭高电压,不知道为什么,有时候开机自检都有高压
|
||||
sysPara->devOp->highVoltageCtrl(0);
|
||||
|
||||
m_MainWidget->on_m_StopBtn_clicked();
|
||||
|
||||
LogInfo::setRunStatusText(tr("自检完成!!!"));
|
||||
m_MainWidget->setRunStatus(tr("自检完成!!!"));
|
||||
qDebug()<<"自检完成!!!";
|
||||
|
||||
if(sysPara->para.Reciclar)
|
||||
test_flag = 1;
|
||||
}
|
||||
else {
|
||||
if((sysPara->status.selfCheckCnt % 200) == 0)
|
||||
m_MainWidget->setReclaimOpenBtnStatus(false);
|
||||
m_MainWidget->setReclaimCloseBtnStatus(false);
|
||||
}
|
||||
|
||||
}
|
||||
else{
|
||||
@@ -1161,8 +1109,7 @@ void InkJetPrinter::timerHandler(void){
|
||||
// cnt1GroupCheck();//分段计米
|
||||
#endif
|
||||
//reserved
|
||||
QWidget *widget = m_StackedWidget->currentWidget();
|
||||
static bool read_flag = false;
|
||||
QWidget *widget = m_StackedWidget->currentWidget();
|
||||
if((widget == m_MainWidget || widget == m_LogInfo) && pulse_100ms) {
|
||||
m_MainWidget->updateSysStatusToUI();
|
||||
m_MainWidget->updateGeneralState(m_MainWidget->alarmStatus);
|
||||
@@ -1172,11 +1119,6 @@ void InkJetPrinter::timerHandler(void){
|
||||
else if(widget == m_PrintSetting)
|
||||
{
|
||||
m_PrintSetting->updateSysStatusToUI();
|
||||
// if(!read_flag)
|
||||
// {
|
||||
// emit sendPicScene(ui->tabMainWindow->getPicScene());
|
||||
// }
|
||||
read_flag = true;
|
||||
}
|
||||
else if(widget == m_SystemSetting){
|
||||
|
||||
@@ -1194,10 +1136,6 @@ void InkJetPrinter::timerHandler(void){
|
||||
// ui->tabNetworkManager->updateSysStatusToUI();
|
||||
// }
|
||||
// }
|
||||
if(widget != m_PrintSetting)
|
||||
{
|
||||
read_flag = false;
|
||||
}
|
||||
|
||||
// 20140306
|
||||
static int last_lesslen_warn=0,lesslen_cnt=0;
|
||||
@@ -1228,6 +1166,9 @@ void InkJetPrinter::timerHandler(void){
|
||||
|
||||
if(pulse_100ms && sysPara->status.selfCheckDone){
|
||||
detectAndcontrolReclaimTank(); //控制回收槽
|
||||
if (m_stateManager) {
|
||||
m_stateManager->checkReadyState();
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------处理警告--------------------------------------------*/
|
||||
@@ -1252,7 +1193,6 @@ void InkJetPrinter::timerHandler(void){
|
||||
// if(sysPara->status.needMaintenanceRemind){
|
||||
// warningHandler(3);
|
||||
// }
|
||||
// LogInfo::setRunStatusText(tr("处理警告:%1").arg(QDateTime::currentDateTime()));
|
||||
|
||||
handleWarnInk(); // 处理墨水警告
|
||||
handleWarnSolvent(); // 处理溶剂警告
|
||||
@@ -1838,63 +1778,76 @@ void InkJetPrinter::initStateManager()
|
||||
m_stateManager = PrinterStateManager::instance();
|
||||
|
||||
// 连接状态变化信号 DirectConnection:确保相关状态实时更新
|
||||
// connect(m_stateManager, &PrinterStateManager::sig_stateChanged,
|
||||
// this, &InkJetPrinter::slt_stateChanged, Qt::DirectConnection);
|
||||
connect(m_stateManager, &PrinterStateManager::sig_stateChanged,
|
||||
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();
|
||||
sysPara->status.selfCheckDone = false; // 自检是否完成
|
||||
sysPara->status.isPrinting = false; // 是否正在打印
|
||||
sysPara->status.powerOffAppending = false; // 是否正在关机
|
||||
|
||||
// 发送 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秒切换一次
|
||||
sysPara->status.powerOffAppending = false; // 是否正在关机
|
||||
m_stateManager->bindSysPara(sysPara);
|
||||
}
|
||||
|
||||
void InkJetPrinter::handleSelfCheck()
|
||||
{
|
||||
sysPara->status.selfCheckDone = false;
|
||||
sysPara->status.selfCheckCnt = 0;
|
||||
m_MainWidget->enablePrintButton(false);
|
||||
// 自检完成,非打印状态,回收槽放下后使能打印按钮
|
||||
if (!sysPara->status.selfCheckDone) {
|
||||
sysPara->status.selfCheckDone = true;
|
||||
LogInfo::setRunStatusText(tr("自检完成!!!"));
|
||||
m_MainWidget->setRunStatus(tr("自检完成!!!"));
|
||||
}
|
||||
}
|
||||
|
||||
void InkJetPrinter::handleReady()
|
||||
{
|
||||
// 自检完成,非打印状态,回收槽放下后使能打印按钮
|
||||
sysPara->status.selfCheckDone = true;
|
||||
sysPara->status.isPrinting = false;
|
||||
if(sysPara->status.reclaimTankstatus == 5) {
|
||||
m_MainWidget->enablePrintButton(true);
|
||||
} else {
|
||||
m_MainWidget->enablePrintButton(false);
|
||||
}
|
||||
|
||||
// MySleep(50);
|
||||
// m_MainWidget->updateReclaimStatus();
|
||||
}
|
||||
|
||||
void InkJetPrinter::handleStartPrint()
|
||||
{
|
||||
sysPara->status.isPrinting = true;
|
||||
sysPara->status.waitHightVolOff = 0;
|
||||
sysPara->status.lastSynColDelay = -1; //目的是为了清空原来的数据
|
||||
sysPara->devOp->highVoltageCtrl(1);
|
||||
sysPara->devOp->setHighVoltageAmplitudetoSTM32();
|
||||
sysPara->status.waitHightVolOff = 0;
|
||||
sysPara->devOp->printCtrl(PRINT_CTRL_START);
|
||||
// MySleep(50);
|
||||
// m_MainWidget->updateReclaimStatus();
|
||||
}
|
||||
|
||||
void InkJetPrinter::handleStopPrint()
|
||||
{
|
||||
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()
|
||||
@@ -1903,101 +1856,40 @@ void InkJetPrinter::handlePowerOff()
|
||||
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)
|
||||
{
|
||||
qDebug() << "State:" << m_stateManager->stateName() << "Reason:" << reason;
|
||||
Q_UNUSED(oldState)
|
||||
LogInfo::setRunStatusText(reason);
|
||||
|
||||
// ============ 统一更新 sysPara 状态 ============
|
||||
switch (newState) {
|
||||
case PrinterState::SELF_CHECK:
|
||||
// 进入自检状态
|
||||
// 进入自检完成状态
|
||||
handleSelfCheck();
|
||||
LogInfo::setRunStatusText("SELF_CHECK_DONE");
|
||||
break;
|
||||
|
||||
case PrinterState::READY:
|
||||
// 进入就绪状态
|
||||
handleReady();
|
||||
LogInfo::setRunStatusText("READY");
|
||||
break;
|
||||
|
||||
case PrinterState::PRINTING:
|
||||
// 进入打印状态
|
||||
handleStartPrint();
|
||||
LogInfo::setRunStatusText("PRINTING");
|
||||
break;
|
||||
|
||||
case PrinterState::STOPPING:
|
||||
// 进入停止状态
|
||||
handleStopPrint();
|
||||
LogInfo::setRunStatusText("STOPPING");
|
||||
break;
|
||||
|
||||
case PrinterState::ERROR:
|
||||
// 进入故障状态
|
||||
// m_MainWidget->setRunStatus("故障!请检查");
|
||||
// m_MainWidget->enablePrintButton(false);
|
||||
break;
|
||||
|
||||
case PrinterState::POWER_OFF:
|
||||
@@ -2008,9 +1900,32 @@ void InkJetPrinter::slt_stateChanged(PrinterState newState, PrinterState oldStat
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// 保存参数
|
||||
//sysPara->saveParaToFile();
|
||||
void InkJetPrinter::slt_enableStartPrint(bool able)
|
||||
{
|
||||
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******************************************/
|
||||
@@ -2637,7 +2552,7 @@ void InkJetPrinter::autoControlViscosityPumpForSelfCheck(int selfCheckCnt)
|
||||
if(!sysPara->devOp->isViscosityPumpOpen()) {
|
||||
sysPara->devOp->controlViscosityPump(true);
|
||||
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()) {
|
||||
sysPara->devOp->controlViscosityPump(false);
|
||||
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())
|
||||
sysPara->devOp->controlReclaimTankOpen(false); //到头,关闭
|
||||
sysPara->status.reclainTankReachEnd = true;
|
||||
m_MainWidget->setRunStatus(tr("回收槽到头"));
|
||||
m_MainWidget->setReclaimStatus(true, 100);
|
||||
m_MainWidget->enablePrintButton(true); //仅仅在此时能使能打印按钮
|
||||
sysPara->devOp->highVoltageCtrl(0);
|
||||
m_MainWidget->setRunStatus(tr("回收槽到头"));
|
||||
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;
|
||||
m_SystemSetting->updateReclaimTime( sysPara->para.reclaimTankTime );
|
||||
/*回收槽开关时间校正*/
|
||||
sysPara->para.reclaimTankTime =( sysPara->status.currReclaimTankPos>120 )? sysPara->status.currReclaimTankPos/10-1:12;
|
||||
m_SystemSetting->updateReclaimTime( sysPara->para.reclaimTankTime );
|
||||
|
||||
qDebug()<<"reclaimTankOpenDone currReclaimTankPos:"<<sysPara->status.currReclaimTankPos;
|
||||
qDebug()<<"reclaimTankOpenDone curr_reclaimTankTime:"<<sysPara->status.curr_reclaimTankTime;
|
||||
|
||||
LogInfo::setRunStatusText("reclaimTankOpenDone currReclaimTankPos:"+QString::number(sysPara->status.currReclaimTankPos));
|
||||
LogInfo::setRunStatusText("reclaimTankOpenDone currReclaimTankPos:"+QString::number(sysPara->status.currReclaimTankPos));
|
||||
}
|
||||
else if(sysPara->status.reclaimTankstatus == 0x11 )//7 故障,6 关完成,5开完成,4 保持, 3 停止, 2 关, 1 开,0-无操作
|
||||
{
|
||||
sysPara->devOp->controlReclaimTankOpen(false); //卡住,关闭
|
||||
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-无操作
|
||||
{
|
||||
auto recliamTime = (sysPara->para.reclaimTankTime != 0 ? sysPara->para.reclaimTankTime : 15.0f) * 10.0f;
|
||||
int rate = qBound(0, 100, int((sysPara->status.currReclaimTankPos / recliamTime) * 100));
|
||||
// auto recliamTime = (sysPara->para.reclaimTankTime != 0 ? sysPara->para.reclaimTankTime : 15.0f) * 10.0f;
|
||||
// int rate = qBound(0, 100, int((sysPara->status.currReclaimTankPos / recliamTime) * 100));
|
||||
|
||||
// 不知道为什么会有rate为0,且 sysPara->status.reclaimTankstatus == 2 ,也就是 关的状态。 回收槽位置在0处,而状态却是 关 ,很奇怪
|
||||
if(sysPara->status.reclaimTankstatus != 2 && rate != 0) {
|
||||
m_MainWidget->setReclaimStatus(sysPara->status.reclaimTankstatus == 1, rate);
|
||||
if(sysPara->status.reclaimTankstatus != 2) {
|
||||
|
||||
#ifdef BNS_DEBUG
|
||||
#ifdef BNS_DEBUG
|
||||
if(rate == 100) {
|
||||
m_MainWidget->enablePrintButton(true);
|
||||
m_MainWidget->stopFlashReclaimOpenBtn();
|
||||
sysPara->status.reclaimTankstatus = 5;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
m_MainWidget->setReclaimOpenBtnStatus(sysPara->status.reclaimTankstatus == 2);
|
||||
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-无操作
|
||||
{
|
||||
if(sysPara->devOp->isReclaimTankCloseEnable())
|
||||
sysPara->devOp->controlReclaimTankClose(false); //到头,关闭
|
||||
m_MainWidget->setReclaimStatus(false, 0);
|
||||
m_MainWidget->stopFlashReclaimOpenBtn();
|
||||
//sysPara->status.currReclaimTankPos = 0; //将回收槽的时间置为零
|
||||
// emit reclaimTankCloseDone();
|
||||
sysPara->status.lastRecycleWarn = 0;
|
||||
sysPara->status.HVFaultCloseEn=0;
|
||||
sysPara->status.reclainCloseAppending=false;
|
||||
@@ -2839,6 +2741,7 @@ void InkJetPrinter::detectAndcontrolReclaimTank(){
|
||||
m_MainWidget->setReclaimCloseBtnStatus(true);
|
||||
LogInfo::setRunStatusText("Reclaim tank hold on "+QString::number(sysPara->status.currReclaimTankPos));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void InkJetPrinter::viscosity_timerHandler()
|
||||
@@ -3007,7 +2910,7 @@ bool InkJetPrinter::loadWorkFileAndPreparePrint(const QString &filename)
|
||||
|
||||
PrintSettingModel::applyToSysPara(model, sysPara);
|
||||
|
||||
ret = m_MainWidget->generatePrintContent(scene);
|
||||
ret = m_MainWidget->generatePrintContent(scene, model);
|
||||
if(!ret) {
|
||||
LogInfo::setRunStatusText(QString("Failed to generate print content from work file: %1").arg(filename));
|
||||
delete scene;
|
||||
@@ -3300,12 +3203,6 @@ void InkJetPrinter::initRFIDManager()
|
||||
connect(manager_rfid,SIGNAL(sig_maintenanceShow()),
|
||||
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](){
|
||||
sysPara->RFIDPara.needInkCard = false;
|
||||
sysPara->saveRFIDPara();
|
||||
@@ -3333,7 +3230,8 @@ void InkJetPrinter::initRFIDManager()
|
||||
|
||||
|
||||
#define MAX_WARNING_TIME_HOUR 48
|
||||
#define WARNING_INTERVAL_SEC 3600
|
||||
//#define WARNING_INTERVAL_SEC 3600
|
||||
#define WARNING_INTERVAL_SEC 10
|
||||
|
||||
#ifdef BNS_DEBUG
|
||||
|
||||
@@ -3369,6 +3267,39 @@ void InkJetPrinter::resetRFIDStatus()
|
||||
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 处理墨水警告
|
||||
* 如果发生墨水警告,则进入 加墨水&刷卡 流程。
|
||||
@@ -3403,11 +3334,16 @@ void InkJetPrinter::handleWarnInk()
|
||||
if(sysPara->RFIDPara.needInkCard) {
|
||||
slt_showMsg(tr("请及时使用墨水盒附带的IC卡激活墨水盒"));
|
||||
}
|
||||
m_MainWidget->powerOnWarn = false;
|
||||
}
|
||||
}
|
||||
|
||||
// 墨水盒空,进入 刷卡&加墨水 流程
|
||||
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.needInkCard = true;
|
||||
@@ -3474,10 +3410,23 @@ void InkJetPrinter::handleWarnInk()
|
||||
|
||||
// 理论上differHours只会比 sysPara->status.showInkWarningNumber 大 1, 如果大于1,说明系统时间被被往后修改过或者关过机。
|
||||
|
||||
if(differHours > MAX_WARNING_TIME_HOUR)
|
||||
slt_showMsg(tr("墨水液位报警超过%1小时,机器无法正常打印,请先添加原厂墨水再刷墨水卡,以恢复喷码机的正常工作!").arg(MAX_WARNING_TIME_HOUR));
|
||||
else
|
||||
slt_showMsg(tr("请刷墨水卡,请使用原厂墨水耗材,否则机器将在%1小时后禁止使用!").arg(MAX_WARNING_TIME_HOUR - differHours));
|
||||
if(differHours > MAX_WARNING_TIME_HOUR) {
|
||||
slt_showMsg(tr("墨水液位报警超过%1小时,机器无法正常打印,请添加墨水并刷卡.").arg(MAX_WARNING_TIME_HOUR));
|
||||
}
|
||||
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->saveRFIDPara();
|
||||
@@ -3530,11 +3479,17 @@ void InkJetPrinter::handleWarnSolvent()
|
||||
if(sysPara->RFIDPara.needSolventCard) {
|
||||
slt_showMsg(tr("请及时使用溶剂盒附带的IC卡激活溶剂盒"));
|
||||
}
|
||||
m_MainWidget->powerOnWarn = false;
|
||||
}
|
||||
}
|
||||
|
||||
// 溶剂盒空,进入 刷卡&加溶剂 流程
|
||||
if(sysPara->status.solventWarningCnt >= DETECT_WARNING_TIME && sysPara->RFIDPara.inSolventAndRFIDProgress == 0) {
|
||||
// 只处理自检期间出现的问题
|
||||
if (!sysPara->status.selfCheckDone) {
|
||||
m_MainWidget->powerOnWarn = true;
|
||||
}
|
||||
|
||||
QDateTime curDateTime = QDateTime::currentDateTime();
|
||||
QString strCurDateTime = curDateTime.toString("yyMMddhhmmss");
|
||||
LogInfo::setRunStatusText("Solvent warning.");
|
||||
@@ -3593,10 +3548,22 @@ void InkJetPrinter::handleWarnSolvent()
|
||||
}
|
||||
|
||||
if(differHours > sysPara->status.showSolventWarningNumber) {
|
||||
if(differHours > MAX_WARNING_TIME_HOUR)
|
||||
slt_showMsg(tr("溶剂液位报警超过%1小时,机器无法正常打印,请先添加溶剂再刷溶剂卡以恢复喷码机的正常工作!").arg(MAX_WARNING_TIME_HOUR));
|
||||
else
|
||||
slt_showMsg(tr("请刷溶剂卡,请使用原厂溶剂耗材,否则机器将在%1小时后禁止使用!").arg(MAX_WARNING_TIME_HOUR - differHours));
|
||||
if(differHours > MAX_WARNING_TIME_HOUR) {
|
||||
slt_showMsg(tr("溶剂液位报警超过%1小时,机器无法正常打印,请添加溶剂并刷卡.").arg(MAX_WARNING_TIME_HOUR));
|
||||
}else {
|
||||
// 累计 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->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->RFIDPara.inSolventAndRFIDProgress = 0;
|
||||
sysPara->RFIDPara.solventCardTimeOut = false;
|
||||
|
||||
+16
-7
@@ -170,6 +170,9 @@ private:
|
||||
private slots:
|
||||
|
||||
void resetRFIDStatus();
|
||||
// 粘度告警
|
||||
void slt_close(bool);
|
||||
void slt_alert(bool);
|
||||
|
||||
void onDlgFileOpen(const QString& filename);
|
||||
|
||||
@@ -234,7 +237,7 @@ private slots:
|
||||
|
||||
void OnFinished(int event);
|
||||
|
||||
void slt_editCounter(CounterViewModel vm);
|
||||
void slt_editCounter(CounterViewModel vm, bool isChange);
|
||||
|
||||
// 保养警告
|
||||
void slt_warningMaintenance();
|
||||
@@ -284,18 +287,17 @@ private:
|
||||
bool gearPumpStartFlag = false;
|
||||
|
||||
|
||||
// 状态机
|
||||
// ===================状态机====================
|
||||
PrinterStateManager* m_stateManager = nullptr;
|
||||
// 测试定时器
|
||||
QTimer* m_testTimer = nullptr;
|
||||
int m_testStep = 0;
|
||||
private:
|
||||
void initStateManager();
|
||||
void initStateTimer();
|
||||
// 不同状态的处理
|
||||
// 自检
|
||||
void handleSelfCheck();
|
||||
|
||||
// 自检完成
|
||||
void handleToReady();
|
||||
|
||||
// 就绪
|
||||
void handleReady();
|
||||
|
||||
@@ -306,7 +308,14 @@ private:
|
||||
// 关机
|
||||
void handlePowerOff();
|
||||
private slots:
|
||||
void slt_stateTest();
|
||||
// 切换状态
|
||||
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
@@ -84,6 +84,7 @@ MainInstruction::~MainInstruction()
|
||||
|
||||
void MainInstruction::bindSysPara(SysPara *sysPara){
|
||||
this->sysPara = sysPara;
|
||||
initDlgVis();
|
||||
}
|
||||
|
||||
void MainInstruction::onGraphicsEditBtnClicked()
|
||||
@@ -189,7 +190,7 @@ void MainInstruction::ondialogAuthorizationAccepted(){
|
||||
} else {
|
||||
QMessageBox box(QMessageBox::Warning, tr("警告"),
|
||||
tr("密码错误:%1").arg(authString), QMessageBox::Ok,
|
||||
this);
|
||||
0);
|
||||
box.exec();
|
||||
}
|
||||
}
|
||||
@@ -424,4 +425,23 @@ void MainInstruction::applyStyleSheet()
|
||||
)";
|
||||
|
||||
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
@@ -11,6 +11,7 @@
|
||||
#include "dialogmaintenancetimesetting.h"
|
||||
#include "LogInfo.h"
|
||||
#include "TimeSettingDialog.h"
|
||||
#include "dlgviscositysetting.h"
|
||||
|
||||
class DlgRFIDConfig;
|
||||
class DlgCanvasHeightEditor;
|
||||
@@ -30,7 +31,7 @@ public:
|
||||
|
||||
void bindSysPara(SysPara *SysPara);
|
||||
|
||||
DlgInputAddr *dlgInputAddr;
|
||||
DlgInputAddr *dlgInputAddr;
|
||||
|
||||
signals:
|
||||
void sendButtonClickedSignal(int index);
|
||||
@@ -38,6 +39,8 @@ signals:
|
||||
|
||||
void superJmAccepted();
|
||||
|
||||
void sig_close(bool);
|
||||
void sig_alert(bool);
|
||||
private slots:
|
||||
void onGraphicsEditBtnClicked();
|
||||
|
||||
@@ -60,6 +63,7 @@ private slots:
|
||||
|
||||
void onCanvasCfgBtnClicked();
|
||||
|
||||
void on_visSetBtn_clicked();
|
||||
private:
|
||||
Ui::MainInstruction *ui;
|
||||
SysPara* sysPara = nullptr;
|
||||
@@ -75,6 +79,10 @@ private:
|
||||
// 时间设置
|
||||
TimeSettingDialog timeDia;
|
||||
|
||||
//粘度预警界面
|
||||
DlgViscositySetting* dlgVisSetting = nullptr;
|
||||
void initDlgVis();
|
||||
|
||||
void applyStyleSheet(); // 应用样式表
|
||||
};
|
||||
|
||||
|
||||
+14
-1
@@ -98,7 +98,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
<number>2</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tabBasic">
|
||||
<attribute name="title">
|
||||
@@ -304,6 +304,19 @@
|
||||
<string>窗口点阵设置</string>
|
||||
</property>
|
||||
</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 class="QPushButton" name="closeBtn">
|
||||
|
||||
+3
-3
@@ -217,7 +217,7 @@ QScrollBar::add-line:horizontal { bottom: 0px; }</string>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>780</width>
|
||||
<height>177</height>
|
||||
<height>169</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
@@ -255,7 +255,7 @@ QScrollBar::add-line:horizontal { bottom: 0px; }</string>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>150</width>
|
||||
<height>130</height>
|
||||
<height>128</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
@@ -439,7 +439,7 @@ QScrollBar::add-line:horizontal { bottom: 0px; }</string>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>130</height>
|
||||
<height>128</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
|
||||
+1
-1
@@ -124,7 +124,7 @@ void MyInputMethod::updateHandler ( int type ){
|
||||
switch(type){
|
||||
case 0:break;
|
||||
case 1:
|
||||
if(widget && (dynamic_cast<QSpinBox *>(widget))){
|
||||
if(widget && (dynamic_cast<QSpinBox *>(widget) || dynamic_cast<QDoubleSpinBox *>(widget))){
|
||||
if(digitalInput->isHidden()){
|
||||
QWidget *hostWindow = widget->window();
|
||||
QRect rec = QApplication::desktop()->screenGeometry();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
@@ -296,7 +296,8 @@ void PrintTextDisplay::paintEvent(QPaintEvent *event){
|
||||
if(val>base-1)jmin=Num-j-1;
|
||||
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
@@ -89,6 +89,14 @@ void PrintSetting::init()
|
||||
if(b)
|
||||
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);
|
||||
@@ -124,8 +132,13 @@ void PrintSetting::updateModelFromUI(){
|
||||
m_model.eleEyeTriggerPrintDelay = ui->spinBoxEleEyeTriggerPrintDelay->value();
|
||||
m_model.timeTriggerPrintMode = 0;
|
||||
m_model.triggerInterval = ui->spinBoxEleEyeTriggerIntervalMs->value();
|
||||
|
||||
updateTriggerPPM();
|
||||
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()) {
|
||||
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->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);
|
||||
|
||||
@@ -241,10 +263,10 @@ void PrintSetting::TriggerupdateModelToUI()
|
||||
void PrintSetting::updateSysStatusToUI(){
|
||||
}
|
||||
|
||||
void PrintSetting::on_pushButtonApplyPulseFix_clicked()
|
||||
void PrintSetting::updateTriggerPPM()
|
||||
{
|
||||
float circle = ui->lineEditDiameter->text().toFloat() * 3.1415926;
|
||||
float pulseNum = ui->lineEditPulsePerCycle->text().toFloat();
|
||||
double circle = ui->dsb_diameter->value() * 3.1415926;
|
||||
double pulseNum = ui->dsb_pulsePerCycle->value();
|
||||
if(circle != 0){
|
||||
auto pulseNumPerMM = 4*pulseNum/circle; //电路和Fpga做了4倍频处理,这里乘以4是为了匹配4倍频的处理进行正确的显示
|
||||
m_model.encoderPulsePerMm = pulseNumPerMM;
|
||||
@@ -252,15 +274,6 @@ void PrintSetting::on_pushButtonApplyPulseFix_clicked()
|
||||
ui->lineEditTriggerPulsePerMm->setText(QString::number(pulseNumPerMM));
|
||||
ui->lineEditTriggerPulsePerMm->blockSignals(b);
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
if(!sysPara)
|
||||
return;
|
||||
|
||||
pulseNumFix->bindSysPara(sysPara);
|
||||
pulseNumFix->hide();
|
||||
pulseNumFix->show();
|
||||
}
|
||||
|
||||
void PrintSetting::onPulseNumFixDone(float value){
|
||||
@@ -304,16 +317,6 @@ void PrintSetting::on_radioButtonEleEyeLevelTrigger_pressed()
|
||||
void PrintSetting::on_radioButtonSynTrigger_pressed()
|
||||
{
|
||||
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)
|
||||
@@ -327,16 +330,6 @@ void PrintSetting::on_checkEyeTriggerSynPrintEn_clicked(bool checked)
|
||||
#ifndef NON_CABLE
|
||||
// ui->spinBoxSynTriggerPrintLen->setEnabled(1);
|
||||
#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->labelEleEyeTriggerIntervalMs->setText(tr("重复间隔(毫米)"));
|
||||
ui->labelEleMaskTime->setText(tr("抑止距离(毫米)"));
|
||||
@@ -351,16 +344,6 @@ void PrintSetting::on_checkEyeTriggerSynPrintEn_clicked(bool checked)
|
||||
#ifndef NON_CABLE
|
||||
// ui->spinBoxSynTriggerPrintLen->setEnabled(triggerMode == PRINT_TRIGGER_SYNCHRONIZER);
|
||||
#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->labelEleEyeTriggerIntervalMs->setText(tr("重复间隔(毫秒)"));
|
||||
ui->labelEleMaskTime->setText(tr("抑止距离(毫秒)"));
|
||||
@@ -602,8 +585,8 @@ void PrintSetting::on_eleEyeEdgetTriggerExternal_clicked()
|
||||
void PrintSetting::setEnableSynTriggerSetting(bool flag){
|
||||
|
||||
// ui->labelTriggerPulsePerMm->setEnabled(flag);
|
||||
ui->lineEditTriggerPulsePerMm->setEnabled(flag);
|
||||
ui->pushButtonApplyPulseFix->setEnabled(flag);
|
||||
ui->lineEditTriggerPulsePerMm->setEnabled(false);
|
||||
// ui->pushButtonApplyPulseFix->setEnabled(flag);
|
||||
// ui->labelSynTriggerPrintLen->setEnabled(flag);
|
||||
ui->spinBoxSynTriggerPrintLen->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.triggerMode = attrs.value("triggerMode").toUInt();
|
||||
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.volParaIndex = (unsigned short)attrs.value("volParaIndex").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("triggerMode", QString::number(model.triggerMode));
|
||||
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("volParaIndex", QString::number(model.volParaIndex));
|
||||
writer.writeAttribute("eleEyeTriggerPrintDelay", QString::number(model.eleEyeTriggerPrintDelay));
|
||||
|
||||
+5
-1
@@ -42,6 +42,10 @@ struct PrintSettingModel
|
||||
|
||||
float encoderPulsePerMm = 40; // 编码器的每毫米脉冲数
|
||||
|
||||
double encoderDiameter = 10; // 编码器的直径,单位毫米
|
||||
|
||||
double encoderPulsePerCycle = 5000; // 编码器每圈的脉冲数
|
||||
|
||||
unsigned printColDelay = 6; // 打印列延迟,(字宽)
|
||||
|
||||
unsigned short volParaIndex = 0; // 喷印模式的索引, 决定选择哪组电压参数
|
||||
@@ -145,7 +149,7 @@ public:
|
||||
private slots:
|
||||
void buttonClickedSlot();
|
||||
|
||||
void on_pushButtonApplyPulseFix_clicked();
|
||||
void updateTriggerPPM();
|
||||
|
||||
void onPulseNumFixDone(float);
|
||||
|
||||
|
||||
+41
-38
@@ -592,6 +592,9 @@
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="lineEditTriggerPulsePerMm">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -816,19 +819,6 @@
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</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">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
@@ -861,49 +851,57 @@
|
||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QLineEdit" name="lineEditPulsePerCycle">
|
||||
<widget class="CustomDoubleSpinBox" name="dsb_pulsePerCycle">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>400</x>
|
||||
<y>170</y>
|
||||
<width>161</width>
|
||||
<width>171</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="inputMethodHints">
|
||||
<set>Qt::ImhNone</set>
|
||||
<property name="buttonSymbols">
|
||||
<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>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="pushButtonApplyPulseFix">
|
||||
<widget class="CustomDoubleSpinBox" name="dsb_diameter">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>400</x>
|
||||
<y>260</y>
|
||||
<width>161</width>
|
||||
<height>37</height>
|
||||
<y>220</y>
|
||||
<width>171</width>
|
||||
<height>31</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
<property name="buttonSymbols">
|
||||
<enum>QAbstractSpinBox::NoButtons</enum>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>150</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
<property name="decimals">
|
||||
<number>10</number>
|
||||
</property>
|
||||
<property name="layoutDirection">
|
||||
<enum>Qt::LeftToRight</enum>
|
||||
<property name="minimum">
|
||||
<double>5.000000000000000</double>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>脉冲数修正</string>
|
||||
<property name="maximum">
|
||||
<double>10000.000000000000000</double>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="image.qrc">
|
||||
<normaloff>:/icon/pulse.png</normaloff>:/icon/pulse.png</iconset>
|
||||
<property name="value">
|
||||
<double>100.000000000000000</double>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
@@ -1484,6 +1482,11 @@
|
||||
<signal>pressed()</signal>
|
||||
</slots>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>CustomDoubleSpinBox</class>
|
||||
<extends>QDoubleSpinBox</extends>
|
||||
<header>CustomDoubleSpinBox.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources>
|
||||
<include location="image.qrc"/>
|
||||
|
||||
@@ -96,6 +96,7 @@ HEADERS += Public.h \
|
||||
# ParaSettingUI.h \
|
||||
DevOp.h \
|
||||
posix_qextserialport.h \
|
||||
PressureMonitor.h \
|
||||
rfid/sm4.h \
|
||||
rfid/sm3.h \
|
||||
rfid/rfidfunction.h \
|
||||
@@ -184,7 +185,9 @@ HEADERS += Public.h \
|
||||
runtimectrl.h \
|
||||
dump.h \
|
||||
DlgCanvasHeightEditor.h \
|
||||
StateMachine/PrinterStateManager.h
|
||||
StateMachine/PrinterStateManager.h \
|
||||
CustomDoubleSpinBox.h \
|
||||
dlgviscositysetting.h
|
||||
|
||||
|
||||
FORMS += \
|
||||
@@ -234,7 +237,8 @@ FORMS += \
|
||||
scene/DlgBarcodeFormat.ui \
|
||||
scene/DlgQrcodeFormat.ui \
|
||||
dlgQrCode.ui \
|
||||
DlgCanvasHeightEditor.ui
|
||||
DlgCanvasHeightEditor.ui \
|
||||
dlgviscositysetting.ui
|
||||
|
||||
SOURCES +=\
|
||||
mainwidget.cpp \
|
||||
@@ -253,6 +257,7 @@ SOURCES +=\
|
||||
# ParaSettingUI.cpp \
|
||||
DevOp.cpp \
|
||||
posix_qextserialport.cpp \
|
||||
PressureMonitor.cpp \
|
||||
rfid/sm4.cpp \
|
||||
rfid/sm3.cpp \
|
||||
rfid/rfidfunction.cpp \
|
||||
@@ -347,7 +352,8 @@ SOURCES +=\
|
||||
loginfoctrl.cpp \
|
||||
runtimectrl.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
|
||||
#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
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "PrinterStateManager.h"
|
||||
#include "PrinterStateManager.h"
|
||||
#include <QDebug>
|
||||
#include "LogInfo.h"
|
||||
|
||||
PrinterStateManager* PrinterStateManager::s_instance = nullptr;
|
||||
|
||||
@@ -15,17 +16,26 @@ PrinterStateManager::PrinterStateManager()
|
||||
{
|
||||
initTransitions();
|
||||
m_currentState = PrinterState::IDLE;
|
||||
initTimer();
|
||||
}
|
||||
|
||||
PrinterStateManager::~PrinterStateManager()
|
||||
{
|
||||
if (m_updateUITimer) {
|
||||
m_updateUITimer->stop();
|
||||
m_updateUITimer->deleteLater();
|
||||
m_updateUITimer = NULL;
|
||||
}
|
||||
if (m_sysPara) {
|
||||
m_sysPara = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
QString PrinterStateManager::stateName() const
|
||||
{
|
||||
switch (m_currentState) {
|
||||
case PrinterState::IDLE: return "空闲";
|
||||
case PrinterState::SELF_CHECK: return "自检中";
|
||||
case PrinterState::SELF_CHECK: return "自检完成";
|
||||
case PrinterState::READY: return "就绪";
|
||||
case PrinterState::PRINTING: return "打印中";
|
||||
case PrinterState::STOPPING: return "停止中";
|
||||
@@ -38,7 +48,7 @@ QString PrinterStateManager::stateName() const
|
||||
// ============ 初始化状态(开机时调用一次) ============
|
||||
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::SELF_CHECK, "IDLE → SELF_CHECK", nullptr},
|
||||
{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::ERROR, "SELF_CHECK → ERROR", nullptr},
|
||||
// 注意,逆清洗和关回收槽时,需要把状态重新切换回自检
|
||||
{PrinterState::READY, PrinterEvent::ReSelfCheck,
|
||||
PrinterState::SELF_CHECK, "READY → SELF_CHECK", nullptr},
|
||||
|
||||
// 打印流程
|
||||
{PrinterState::READY, PrinterEvent::StartPrint,
|
||||
@@ -101,8 +115,9 @@ PrinterStateManager::Transition* PrinterStateManager::findTransition(PrinterEven
|
||||
// ============ 请求切换状态(外部唯一接口) ============
|
||||
void PrinterStateManager::requestTransition(PrinterEvent event)
|
||||
{
|
||||
qDebug() << "Request event:" << static_cast<int>(event)
|
||||
<< "Current:" << stateName();
|
||||
LogInfo::setRunStatusText(QString("Transition %1:%2")
|
||||
.arg(stateName())
|
||||
.arg(m_sysPara->status.reclaimTankstatus));
|
||||
|
||||
Transition* trans = findTransition(event);
|
||||
if (!trans) {
|
||||
@@ -123,11 +138,44 @@ void PrinterStateManager::requestTransition(PrinterEvent event)
|
||||
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)
|
||||
{
|
||||
if (m_currentState == newState) {
|
||||
qDebug() << "State already:" << stateName();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -136,8 +184,13 @@ void PrinterStateManager::setState(PrinterState newState, const QString& 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_updateReclaimStatus();
|
||||
}
|
||||
|
||||
// ============ 辅助函数 ============
|
||||
@@ -160,7 +213,8 @@ QString PrinterStateManager::stateNameFromEnum(PrinterState state) const
|
||||
bool PrinterStateManager::guardReclaimTankOpen()
|
||||
{
|
||||
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()
|
||||
@@ -190,7 +244,7 @@ bool PrinterStateManager::guardNoSolventWarn()
|
||||
bool PrinterStateManager::guardSelfCheckDone()
|
||||
{
|
||||
if (!m_sysPara) return false;
|
||||
return m_sysPara->status.selfCheckDone == true;
|
||||
return m_sysPara->status.selfCheckDone;
|
||||
}
|
||||
|
||||
bool PrinterStateManager::guardCanStartPrint()
|
||||
@@ -201,3 +255,110 @@ bool PrinterStateManager::guardCanStartPrint()
|
||||
return guardReclaimTankOpen() && guardInkSwintOpen() &&
|
||||
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("检查完毕"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,12 +2,13 @@
|
||||
#define PRINTERSTATEMANAGER_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QTimer>
|
||||
#include <QVector>
|
||||
#include "SysPara.h"
|
||||
|
||||
enum class PrinterState {
|
||||
IDLE, // 空闲
|
||||
SELF_CHECK, // 自检中
|
||||
SELF_CHECK, // 自检完成
|
||||
READY, // 就绪
|
||||
PRINTING, // 打印中
|
||||
STOPPING, // 停止中
|
||||
@@ -20,6 +21,7 @@ enum class PrinterEvent {
|
||||
PowerOn,
|
||||
SelfCheckDone,
|
||||
SelfCheckFailed,
|
||||
ReSelfCheck,
|
||||
StartPrint,
|
||||
StopPrint,
|
||||
StopComplete,
|
||||
@@ -52,10 +54,30 @@ public:
|
||||
// 外部唯一接口:请求切换状态
|
||||
void requestTransition(PrinterEvent event);
|
||||
|
||||
// 检查状态
|
||||
void checkReadyState();
|
||||
signals:
|
||||
// 状态变化信号(外部监听执行具体业务)
|
||||
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:
|
||||
PrinterStateManager();
|
||||
~PrinterStateManager();
|
||||
@@ -80,6 +102,9 @@ private:
|
||||
|
||||
QVector<Transition> m_transitions;
|
||||
|
||||
// 记录上一次回收槽状态
|
||||
unsigned char lastState = 0;
|
||||
|
||||
void initTransitions();
|
||||
Transition* findTransition(PrinterEvent event);
|
||||
|
||||
@@ -88,7 +113,7 @@ private:
|
||||
|
||||
QString stateNameFromEnum(PrinterState state) const;
|
||||
|
||||
// ============ 守卫条件函数 ============
|
||||
// ============ guard 守卫条件函数 ============
|
||||
// 检查回收槽是否已打开
|
||||
bool guardReclaimTankOpen();
|
||||
|
||||
@@ -98,10 +123,10 @@ private:
|
||||
// 检查是否无故障
|
||||
bool guardNoError();
|
||||
|
||||
// 检查是否无墨水警告
|
||||
// 检查是否无墨水警告 true:正常
|
||||
bool guardNoInkWarn();
|
||||
|
||||
// 检查是否无溶剂警告
|
||||
// 检查是否无溶剂警告 true:正常
|
||||
bool guardNoSolventWarn();
|
||||
|
||||
// 检查自检是否已完成
|
||||
@@ -110,5 +135,12 @@ private:
|
||||
// 检查是否满足所有打印条件
|
||||
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
|
||||
|
||||
@@ -1115,7 +1115,7 @@ typedef struct{
|
||||
int viscosityFault;// 0 正常,1-粘度值高,2-粘度值低
|
||||
int lastViscosityFault; //用来记录上一次的粘度错误状态
|
||||
int lastStatWarn;
|
||||
int lastPhaseFault;
|
||||
int lastPhaseFault; //相位
|
||||
int phaseErrorCnt;
|
||||
|
||||
/* Yang */
|
||||
|
||||
+14
-21
@@ -340,14 +340,6 @@ void SystemManage::on_pushButtonControlByHand_pressed()
|
||||
void SystemManage::on_pushButtonReclaimTankOpen_pressed()
|
||||
{
|
||||
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());
|
||||
ui->labelReclaimTankOpen->setText(sysPara->devOp->isReclaimTankOpenEnable()?tr("启动"):tr("停止"));
|
||||
sysPara->devOp->highVoltageCtrl(0);
|
||||
@@ -355,20 +347,13 @@ void SystemManage::on_pushButtonReclaimTankOpen_pressed()
|
||||
sysPara->status.reclainCloseAppending = false;
|
||||
sysPara->status.currReclaimOperationCnt = 0;
|
||||
sysPara->status.reclainTankReachEnd = false;
|
||||
sysPara->status.reclaimTankstatus = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void SystemManage::on_pushButtonReclaimTankClose_pressed()
|
||||
{
|
||||
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());
|
||||
ui->labelReclaimTankClose->setText(sysPara->devOp->isReclaimTankCloseEnable()?tr("启动"):tr("停止"));
|
||||
sysPara->devOp->highVoltageCtrl(0);
|
||||
@@ -376,6 +361,7 @@ void SystemManage::on_pushButtonReclaimTankClose_pressed()
|
||||
sysPara->status.reclainCloseAppending = true;
|
||||
sysPara->status.currReclaimOperationCnt = 0;
|
||||
sysPara->status.reclainTankReachEnd = false;
|
||||
sysPara->status.reclaimTankstatus = 2;
|
||||
}
|
||||
}
|
||||
#include <time.h>
|
||||
@@ -581,12 +567,19 @@ fi\n" ;
|
||||
|
||||
void SystemManage::on_pushButtonUpdateSoftware_pressed()
|
||||
{
|
||||
if(sysPara->status.updateSoftEN==0){
|
||||
dialogUpateMm->clearAuth();
|
||||
dialogUpateMm->show();
|
||||
}
|
||||
else ondialogAuthorizationAccepted();
|
||||
if(sysPara->status.updateSoftEN==0){
|
||||
dialogUpateMm->clearAuth();
|
||||
dialogUpateMm->show();
|
||||
|
||||
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()
|
||||
{
|
||||
QString authString= dialogUpateMm->getAuth();
|
||||
|
||||
@@ -498,6 +498,39 @@
|
||||
</property>
|
||||
</widget>
|
||||
</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>
|
||||
<widget class="QPushButton" name="btnListConfig">
|
||||
<property name="styleSheet">
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
*/
|
||||
#define UP_PRINTER_MAJOR_VER 6
|
||||
#define UP_PRINTER_MINOR_VER 9
|
||||
#define UP_PRINTER_RIVISION_VER 1
|
||||
#define UP_PRINTER_RIVISION_VER 5
|
||||
#define SUB_VERSION "_KOR"
|
||||
#ifdef __RFID_OLD
|
||||
#define SUB_RFID "_RO"
|
||||
|
||||
+511
-374
File diff suppressed because it is too large
Load Diff
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -149,5 +149,6 @@
|
||||
<file>image/up_white.png</file>
|
||||
<file>image/RePipeClose.png</file>
|
||||
<file>image/RePipeOpen.png</file>
|
||||
<file>image/saveAs.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
+208
-243
@@ -129,6 +129,8 @@ void MainWidget::init()
|
||||
airPushTimer = new QTimer(this);
|
||||
connect(airPushTimer, SIGNAL(timeout()), this, SLOT(airPushingProcess()));
|
||||
|
||||
m_pressureMonitor = new PressureMonitor();
|
||||
|
||||
timerPowerOff = new QTimer(this);
|
||||
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_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()
|
||||
@@ -185,7 +190,7 @@ void MySleep(unsigned int msec)
|
||||
|
||||
}
|
||||
|
||||
bool MainWidget::generatePrintContent(PicScene *scene)
|
||||
bool MainWidget::generatePrintContent(PicScene *scene, const PrintSettingModel& printSettings)
|
||||
{
|
||||
if(!scene) {
|
||||
qWarning() << "Scene is empty!";
|
||||
@@ -200,7 +205,34 @@ bool MainWidget::generatePrintContent(PicScene *scene)
|
||||
this->pPicScene = scene;
|
||||
onPreviewScene();
|
||||
|
||||
this->printSettingsModel = printSettings;
|
||||
PrintSettingModel::applyToSysPara(printSettings, sysPara);
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -238,8 +270,8 @@ void MainWidget::_on_pushButtonPowerOff_pressed(bool notice)
|
||||
sysPara->status.reclaimCloseCnt=10;
|
||||
//on_pushButtonStopPrint_pressed();
|
||||
on_m_StopBtn_clicked();
|
||||
MySleep(10);
|
||||
on_m_LeftBtn_clicked();
|
||||
//on_pushButtonReclaimTankClose_pressed();
|
||||
sysPara->status.powerOffAppending = true;
|
||||
setReclaimCloseBtnStatus(false);
|
||||
setReclaimOpenBtnStatus(false);
|
||||
@@ -924,8 +956,19 @@ void MainWidget::enablePrintButton(bool 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)
|
||||
{
|
||||
Q_UNUSED(en)
|
||||
// No50 USEING
|
||||
//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;
|
||||
@@ -947,95 +990,56 @@ void MainWidget::updateTotalCnt(int en)
|
||||
void MainWidget::on_m_StartBtn_clicked()
|
||||
{
|
||||
if(sysPara){
|
||||
test_flag = 0;
|
||||
test_flag = 0;
|
||||
|
||||
if (!checkTriggerMode()) return;
|
||||
if (!checkTriggerMode()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 打印状态交给状态机修改
|
||||
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->status.isPrinting=false;
|
||||
|
||||
// SendPrintDataToFpga(0); // 0--正常打印,1--打印交替部分信息1; 2--打印交替部分信息2,
|
||||
|
||||
/*-------------------------------------------------------------------*/
|
||||
sysPara->status.lastSynColDelay = -1; //目的是为了清空原来的数据
|
||||
SendPrintDataToFpga(0); // 0--正常打印,1--打印交替部分信息1; 2--打印交替部分信息2,
|
||||
|
||||
/*---------------------------------开关回收槽------------------------------*/
|
||||
|
||||
setReclaimCloseBtnStatus(false);
|
||||
setReclaimOpenBtnStatus(false);
|
||||
|
||||
updatePrintDisplayLabel();
|
||||
|
||||
sysPara->devOp->highVoltageCtrl(1);
|
||||
sysPara->devOp->setHighVoltageAmplitudetoSTM32();
|
||||
|
||||
// 20170717 移动此,以观察条形码打印异常问题。
|
||||
if(!startPrintingFlag)
|
||||
{
|
||||
sysPara->devOp->printCtrl(PRINT_CTRL_START);
|
||||
printintFlag = true;
|
||||
auto mgr = PrinterStateManager::instance();
|
||||
if (mgr->canStartPrint() || mgr->isState(PrinterState::PRINTING)) {
|
||||
mgr->requestTransition(PrinterEvent::StartPrint);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
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()
|
||||
{
|
||||
if(sysPara){
|
||||
if (!sysPara->status.reclainTankReachEnd && !SIMULATE_PRINTING_MODE) {
|
||||
return;
|
||||
// sysPara->status.isPrinting=false;// 打印状态交给状态机修改
|
||||
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);
|
||||
setReclaimOpenBtnStatus(sysPara->status.currReclaimTankPos == 0);
|
||||
|
||||
printintFlag = false;
|
||||
startPrintingFlag = false;
|
||||
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);
|
||||
|
||||
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)
|
||||
{
|
||||
if (airPushTimer && airPushTimer->isActive()) {
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef __RFID_CARD
|
||||
if(sysPara->RFIDPara.inkCardTimeOut
|
||||
|| sysPara->RFIDPara.solventCardTimeOut
|
||||
@@ -1119,6 +1110,11 @@ void MainWidget::setReclaimOpenBtnStatus(bool enable)
|
||||
|
||||
void MainWidget::setReclaimCloseBtnStatus(bool enable)
|
||||
{
|
||||
if (airPushTimer && airPushTimer->isActive()) {
|
||||
return;
|
||||
}
|
||||
|
||||
enable = !sysPara->status.airPushing && enable;
|
||||
ui.m_LeftBtn->setEnabled(enable);
|
||||
}
|
||||
|
||||
@@ -1149,27 +1145,40 @@ void MainWidget::stopFlashReclaimOpenBtn()
|
||||
flashReclaimOpenBtn();
|
||||
}
|
||||
|
||||
void MainWidget::setReclaimStatus(bool isOpen, int rate)
|
||||
void MainWidget::updateReclaimText()
|
||||
{
|
||||
if (isOpen) {
|
||||
if (!sysPara->status.airPushing) {
|
||||
QString str = rate == 100? tr("喷嘴已开启"):tr("喷嘴开启中");
|
||||
ui.lb_RightBtn->setText(str);
|
||||
}
|
||||
ui.lb_LeftBtn->setText(tr("喷嘴关闭"));
|
||||
|
||||
} else {
|
||||
QString str = rate == 0? tr("喷嘴已关闭"):tr("喷嘴关闭中");
|
||||
ui.lb_LeftBtn->setText(str);
|
||||
|
||||
if (!sysPara->status.airPushing) {
|
||||
ui.lb_RightBtn->setText(tr("喷嘴开启"));
|
||||
}
|
||||
QString strR = "";
|
||||
QString strL = "";
|
||||
switch (sysPara->status.reclaimTankstatus) {
|
||||
case 1:
|
||||
strR = tr("喷嘴开启中");
|
||||
strL = tr("喷嘴关闭");
|
||||
break;
|
||||
case 2:
|
||||
strR = tr("喷嘴开启");
|
||||
strL = tr("喷嘴关闭中");
|
||||
break;
|
||||
case 5:
|
||||
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 为单位
|
||||
void MainWidget::airPushingProcess()
|
||||
{
|
||||
@@ -1179,10 +1188,7 @@ void MainWidget::airPushingProcess()
|
||||
QString labelTxt = tr("正在排气...");
|
||||
setRunStatus(labelTxt);
|
||||
ui.lb_RightBtn->setText(labelTxt);
|
||||
setReclaimOpenBtnStatus(false);
|
||||
setReclaimCloseBtnStatus(false);
|
||||
|
||||
//qDebug()<< "start airPushingProcess "<<sysPara->status.airPushingOnTime;
|
||||
// 执行排气 4 秒
|
||||
sysPara->status.airPushingOnTime += 100;
|
||||
|
||||
@@ -1191,18 +1197,6 @@ void MainWidget::airPushingProcess()
|
||||
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){
|
||||
sysPara->devOp->controlViscosityPump(false);
|
||||
sysPara->devOp->controlCycleValve(false);
|
||||
@@ -1210,6 +1204,42 @@ void MainWidget::airPushingProcess()
|
||||
if(!sysPara->devOp->isReclaimPumpOpen())
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -1219,33 +1249,22 @@ void MainWidget::airPushingProcess()
|
||||
void MainWidget::reclaimTanOpen()
|
||||
{
|
||||
// 还原当前模式
|
||||
if (sysPara->status.airPushing) {
|
||||
sysPara->status.isPumpValveControledByHand = sysPara->status.byHandStore;
|
||||
}
|
||||
sysPara->status.isPumpValveControledByHand = false;
|
||||
sysPara->devOp->mainInkCtrl();
|
||||
sysPara->devOp->controlReclaimTankClose(false);//开回收槽之前先让关回收槽停止
|
||||
MySleep(1000);
|
||||
if (sysPara->status.reclaimTankstatus == 2) {
|
||||
sysPara->devOp->controlReclaimTankClose(false);//开回收槽之前先让关回收槽停止
|
||||
MySleep(1000);
|
||||
}
|
||||
sysPara->devOp->controlReclaimTankOpen(!sysPara->devOp->isReclaimTankOpenEnable());
|
||||
sysPara->devOp->highVoltageCtrl(0); /*回收槽动作的时候务必关高压*/
|
||||
// sysPara->status.reclaimTankstatus = 1;
|
||||
// setRunStatus(sysPara->devOp->isReclaimTankOpenEnable()?tr("正在打开回收槽..."):tr("停止打开"));
|
||||
setReclaimStatus(true, 0);
|
||||
if (!sysPara->para.reclaimTankTime) {
|
||||
// LogInfo::setRunStatusText(tr("警告!回收槽开关时间未设置!"));
|
||||
} else {
|
||||
|
||||
}
|
||||
sysPara->status.reclaimTankstatus = 1;
|
||||
// updateReclaimStatus();
|
||||
|
||||
sysPara->status.currReclaimOperationCnt = 0;
|
||||
sysPara->status.reclainTankReachEnd = false;
|
||||
sysPara->status.reclainOpenAppending = true;
|
||||
sysPara->status.reclainCloseAppending = false;
|
||||
sysPara->status.reclaimBlockedCnt = 0;
|
||||
sysPara->status.canRunAirPushing = false;
|
||||
|
||||
if (sysPara->status.reclainTankReachEnd)
|
||||
enablePrintButton(SIMULATE_PRINTING_MODE);
|
||||
}
|
||||
|
||||
void MainWidget::initSheet()
|
||||
@@ -1321,13 +1340,6 @@ void MainWidget::initSheet()
|
||||
ui.m_RightBtn->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)
|
||||
@@ -1376,14 +1388,19 @@ void MainWidget::changeHighLight(bool isStart)
|
||||
void MainWidget::on_m_RightBtn_clicked()
|
||||
{
|
||||
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.canRunAirPushing &&
|
||||
(sysPara->status.currReclaimTankPos == 0)) { //2019/10/24 当回收槽未在顶的位置,不需要排气
|
||||
// Pos == 0 回收槽关闭的情况下才可以执行排气; 先执行排气后开回收槽
|
||||
if (!sysPara->status.airPushing) {
|
||||
//排气:打印、暂停打印置灰
|
||||
enablePrintButton(false);
|
||||
|
||||
sysPara->status.byHandStore = sysPara->status.isPumpValveControledByHand;
|
||||
sysPara->status.isPumpValveControledByHand = true;
|
||||
sysPara->devOp->mainInkCtrl();
|
||||
@@ -1394,13 +1411,21 @@ void MainWidget::on_m_RightBtn_clicked()
|
||||
sysPara->devOp->controlReclaimPump(true, false); // 回收泵开
|
||||
sysPara->devOp->controlInkValve(true); //墨水阀
|
||||
sysPara->devOp->controlInkValvePWM(true); //墨水阀
|
||||
//qDebug()<< "start airpushings";
|
||||
|
||||
sysPara->status.airPushing = 1;
|
||||
sysPara->status.airPushingDone = 0;
|
||||
sysPara->status.airPushingOnTime = 0;
|
||||
|
||||
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 {
|
||||
@@ -1415,17 +1440,10 @@ void MainWidget::on_m_RightBtn_clicked()
|
||||
QMessageBox::Ok | QMessageBox::Cancel);
|
||||
if (ret == QMessageBox::Ok){
|
||||
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);
|
||||
if (ret == QMessageBox::Ok){
|
||||
sysPara->status.currReclaimTankPos = 0;
|
||||
// onReclainTankPositionChanged(0);
|
||||
}
|
||||
}
|
||||
|
||||
sysPara->devOp->controlReclaimTankClose(!sysPara->devOp->isReclaimTankCloseEnable());
|
||||
enablePrintButton(SIMULATE_PRINTING_MODE);
|
||||
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.reclainTankReachEnd = false;
|
||||
sysPara->status.reclainOpenAppending = false;
|
||||
sysPara->status.reclainCloseAppending = true;
|
||||
sysPara->status.reclaimBlockedCnt = 0;
|
||||
|
||||
enablePrintButton(false);
|
||||
|
||||
sysPara->status.reclaimTankstatus = 2;
|
||||
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();
|
||||
}
|
||||
}
|
||||
// emit setCNT1Select(found_CNT1);
|
||||
// emit setCNT2Select(found_CNT2);
|
||||
// emit setCNT3Select(found_CNT3);
|
||||
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(TEST_MODE)
|
||||
// enablePrintButton(true);
|
||||
if(oldSizeFpga != sysPara->status.sizeFPGA){
|
||||
oldSizeFpga = sysPara->status.sizeFPGA;
|
||||
}
|
||||
@@ -2130,45 +2133,22 @@ void MainWidget::updatePrintDisplayLabel()
|
||||
m_PrintDisplay->update();
|
||||
}
|
||||
|
||||
static short recycleWarnTimes = 0;
|
||||
void MainWidget::RefreshStatusLight(){//100ms
|
||||
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.statWarn & WARN_STATUS_INK_SWINT)){//墨线开关
|
||||
// ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||||
alarmStatus.inkSwint = DEV_STATUS_GREEN;
|
||||
}
|
||||
else {
|
||||
// ui->labelStatusInkSwint->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
|
||||
alarmStatus.inkSwint = DEV_STATUS_RED;
|
||||
}
|
||||
|
||||
|
||||
if(!(sysPara->status.statWarn & WARN_STATUS_SUMP_WARN)){ //液位渗漏,高电平警告
|
||||
// ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||||
alarmStatus.inkLeak = DEV_STATUS_GREEN;
|
||||
}
|
||||
else {
|
||||
// ui->labelStatusInkLeak->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
|
||||
alarmStatus.inkLeak = DEV_STATUS_RED;
|
||||
strTitle = tr("墨水缸满报警");
|
||||
if(sysPara->devOp->isMixValveOpen()) {
|
||||
@@ -2176,70 +2156,55 @@ void MainWidget::RefreshStatusLight(){//100ms
|
||||
}
|
||||
}
|
||||
if(!(sysPara->status.statWarn & WARN_STATUS_INK_WARN)){
|
||||
// ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||||
alarmStatus.inkWaterLevel = DEV_STATUS_GREEN;
|
||||
}
|
||||
else {
|
||||
// ui->labelStatusInkWaterLevel->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
|
||||
alarmStatus.inkWaterLevel = DEV_STATUS_RED;
|
||||
strTitle = tr("墨水液位报警");
|
||||
|
||||
|
||||
strTitle = tr("墨水液位报警");
|
||||
}
|
||||
if(!(sysPara->status.statWarn & WARN_STATUS_SOLV_WARN)){
|
||||
// ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||||
alarmStatus.solveLevelWarn = DEV_STATUS_GREEN;
|
||||
}
|
||||
else {
|
||||
// ui->labelStatusSolvLevelWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
|
||||
alarmStatus.solveLevelWarn = DEV_STATUS_RED;
|
||||
strTitle = tr("溶剂液位报警");
|
||||
|
||||
}
|
||||
|
||||
if(!(sysPara->status.statWarn & WARN_STATUS_RECYCLE_FAULT) ){
|
||||
// ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||||
alarmStatus.recycleWarn = DEV_STATUS_GREEN;
|
||||
|
||||
recycleWarnTimes = 0;
|
||||
}
|
||||
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.lastHighVoltageFault)
|
||||
{
|
||||
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;
|
||||
}
|
||||
else {
|
||||
// ui->labelStatusHighVoltageFault->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
|
||||
alarmStatus.highVoltageFault = DEV_STATUS_RED;
|
||||
if(startPrintingFlag && printintFlag){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电
|
||||
// on_pushButtonPausePrint_pressed();
|
||||
alarmStatus.highVoltageFault = DEV_STATUS_RED;
|
||||
if(sysPara->status.isPrinting){ //已经在打印,则暂停打印 2013-9-15高压报警停止充电
|
||||
on_m_StopBtn_clicked();
|
||||
LogInfo::setRunStatusText(tr("高压故障,暂停打印"));
|
||||
setRunStatus(tr("高压故障,暂停打印"));
|
||||
|
||||
strTitle = tr("高压故障,暂停打印.");
|
||||
|
||||
sysPara->status.lastHighVoltageFault = true;
|
||||
}
|
||||
|
||||
if((sysPara->status.currReclaimTankPos != 0) && sysPara->para.HVFaultCloseEn )
|
||||
{
|
||||
//HVfaultCnt++;
|
||||
// 高压故障关回收槽
|
||||
if(sysPara->status.HVFaultCloseEn==0){
|
||||
sysPara->status.reclaimTankBlockedAppending=0;
|
||||
sysPara->status.reclaimCloseCnt=100;
|
||||
// on_pushButtonReclaimTankClose_pressed();
|
||||
on_m_LeftBtn_clicked();
|
||||
sysPara->status.reclaimTankBlockedAppending=1;
|
||||
LogInfo::setRunStatusText(tr("高压故障,关回收槽"));
|
||||
@@ -2255,17 +2220,14 @@ void MainWidget::RefreshStatusLight(){//100ms
|
||||
sysPara->status.lastStatWarn = sysPara->status.statWarn;
|
||||
if(sysPara->status.lastViscosityFault != sysPara->status.viscosityFault){
|
||||
if(sysPara->status.viscosityFault==0){
|
||||
// ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||||
alarmStatus.viscosityWarn = DEV_STATUS_GREEN;
|
||||
}
|
||||
else {
|
||||
if(sysPara->status.viscosityFault==1){
|
||||
|
||||
// ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
|
||||
alarmStatus.viscosityWarn = DEV_STATUS_RED;
|
||||
}
|
||||
else if(sysPara->status.viscosityFault==2) {
|
||||
// ui->labelStatusViscosityWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMYellow.PNG")));
|
||||
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.RecycleWarnCnt)
|
||||
alarmStatus.recycleWarn = DEV_STATUS_GREEN;
|
||||
// ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMGreen.PNG")));
|
||||
sysPara->status.RecycleWarnCnt = 0;
|
||||
sysPara->status.lastRecycleWarn = 0;
|
||||
}
|
||||
@@ -2286,7 +2247,6 @@ void MainWidget::RefreshStatusLight(){//100ms
|
||||
{
|
||||
sysPara->status.lastRecycleWarn = RECYCLE_WARN_DELAY;//5s
|
||||
alarmStatus.recycleWarn = DEV_STATUS_RED;
|
||||
// ui->labelStatusRecycleWarn->setPixmap(QPixmap(QString::fromUtf8(":/image/ALARMRed.PNG")));
|
||||
sysPara->status.reclaimCloseCnt=100;
|
||||
if(sysPara->para.RecycleWarnAction)
|
||||
{
|
||||
@@ -2314,12 +2274,6 @@ void MainWidget::RefreshStatusLight(){//100ms
|
||||
else if(sysPara->status.lastRecycleWarn)sysPara->status.lastRecycleWarn--;
|
||||
}
|
||||
|
||||
// if(startPrintingFlag ){
|
||||
// if(printintFlag)
|
||||
// setRunStatus(tr("正在喷印..."));
|
||||
// else
|
||||
// setRunStatus(tr("暂停喷印..."));
|
||||
// }
|
||||
|
||||
if(sysPara->status.isPrinting && sysPara->status.selfCheckDone){
|
||||
setRunStatus(tr("正在喷印......."));
|
||||
@@ -2347,7 +2301,7 @@ bool MainWidget::updatePhaseIndicatorLight(){
|
||||
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->status.lastPhaseFault){
|
||||
@@ -2538,11 +2492,8 @@ bool MainWidget::checkTriggerMode()
|
||||
}
|
||||
#endif
|
||||
|
||||
bool MaxCol4000;
|
||||
if(sysPara->status.flagOfNo67FPGA)
|
||||
MaxCol4000 = true;
|
||||
else
|
||||
MaxCol4000 = false;
|
||||
bool MaxCol4000 = sysPara->status.flagOfNo67FPGA;
|
||||
|
||||
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)));
|
||||
return false;
|
||||
@@ -2622,12 +2573,26 @@ void MainWidget::onLabelFaultRusumePressed(){
|
||||
sysPara->devOp->mainInkCtrl();
|
||||
emit clearPressureFault();
|
||||
}
|
||||
if(printintFlag) {
|
||||
if(sysPara->status.isPrinting) {
|
||||
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;
|
||||
void MainWidget::UpdateUIVersion(){
|
||||
int fpgaType = sysPara->status.fpgaVersionNum>>12;
|
||||
|
||||
+13
-10
@@ -29,6 +29,8 @@
|
||||
#include "fileManage/FileManageWidget.h"
|
||||
|
||||
#include "setnumdlg.h"
|
||||
#include "PrintSetting.h"
|
||||
#include "PressureMonitor.h"
|
||||
|
||||
class MainWidget : public QWidget
|
||||
{
|
||||
@@ -45,9 +47,10 @@ public:
|
||||
* @brief 生成打印内容,并发送打印内容到 FPGA
|
||||
*
|
||||
* @param pPicScene 包含打印内容的场景
|
||||
* @param printSettings 打印内容所需要的打印设置
|
||||
* @return 成功返回true,否则false,查看日志
|
||||
*/
|
||||
bool generatePrintContent(PicScene* pPicScene);
|
||||
bool generatePrintContent(PicScene* pPicScene, const PrintSettingModel& printSettings);
|
||||
|
||||
/**
|
||||
* @brief 重新生成打印内容,所用场景是由调用 generatePrintContent 时设置的,generatePrintContent 也会调用此函数
|
||||
@@ -60,8 +63,6 @@ public:
|
||||
|
||||
QString strWarring,strTitle;
|
||||
bool m_2sFlag;
|
||||
bool printintFlag; //判断当前是否在打印
|
||||
bool startPrintingFlag;
|
||||
|
||||
bool pushButtonFlag;
|
||||
|
||||
@@ -89,7 +90,8 @@ public:
|
||||
|
||||
void setRunStatus(QString str, bool enbRoll = true, bool warn = false);
|
||||
void enablePrintButton(bool);
|
||||
int getCurrPrintStatus();
|
||||
void enabeleStartBtn(bool);
|
||||
void enabeleStopBtn(bool);
|
||||
|
||||
// 回收槽开启按钮状态设置
|
||||
void setReclaimOpenBtnStatus(bool enable);
|
||||
@@ -107,10 +109,8 @@ public:
|
||||
|
||||
/**
|
||||
* @brief 设置回收槽开关状态
|
||||
* @param isOpen true:开;false:关
|
||||
* @param rate 回收槽开启程度,0~100;
|
||||
*/
|
||||
void setReclaimStatus(bool isOpen, int rate = 0);
|
||||
void updateReclaimText();
|
||||
|
||||
void updateSysStatusToUI(); //重载
|
||||
//Mainwindow获取机器总状态
|
||||
@@ -138,8 +138,7 @@ public:
|
||||
bool flagOfClearHighVltageWarnning;
|
||||
|
||||
AlarmStatus alarmStatus;
|
||||
|
||||
// void mouseDoubleClickEvent(QMouseEvent *event) override;
|
||||
bool powerOnWarn = false;
|
||||
|
||||
private:
|
||||
// UI对象
|
||||
@@ -163,8 +162,11 @@ private:
|
||||
int r_ExpiryDay;
|
||||
QTimer *airPushTimer;
|
||||
|
||||
PressureMonitor *m_pressureMonitor = nullptr;
|
||||
|
||||
PicScene *pPicScene = nullptr;
|
||||
QGraphicsView *view;
|
||||
PrintSettingModel printSettingsModel;
|
||||
|
||||
FileManageWidget *m_fileManageWidget = nullptr;
|
||||
|
||||
@@ -192,7 +194,8 @@ public slots:
|
||||
void _on_pushButtonPowerOff_pressed(bool notice);
|
||||
|
||||
void onLabelFaultRusumePressed();
|
||||
|
||||
void slt_resetCNT1();
|
||||
void slt_resetCNT2();
|
||||
void UpdateUIVersion();
|
||||
|
||||
void on_m_RightBtn_clicked();
|
||||
|
||||
+5
-2
@@ -196,17 +196,20 @@ private:
|
||||
std::function<void()> m_confirmCallback;
|
||||
int waitStatus();
|
||||
bool waitCard();
|
||||
|
||||
signals:
|
||||
void sig_showMsg(QString msg);
|
||||
|
||||
void sig_maintenanceShow();
|
||||
|
||||
// 墨水流程已完成,(墨水、刷卡均已完成)
|
||||
// 墨水流程已完成,(墨水、刷卡均已完成)
|
||||
void sig_inkCardProgressFinished();
|
||||
|
||||
// 溶剂流程已完成
|
||||
void sig_solventProgressFinished();
|
||||
|
||||
// 告警累计 3 小时,请求关喷嘴
|
||||
void sig_warnTimeout(QString);
|
||||
|
||||
private slots:
|
||||
//接收刷卡数据槽函数
|
||||
@@ -219,4 +222,4 @@ private slots:
|
||||
// void slt_intervalTimerHandle();
|
||||
};
|
||||
|
||||
#endif // RFIDMANAGER_H
|
||||
#endif // RFIDMANAGER_H
|
||||
|
||||
@@ -125,7 +125,7 @@ void PicCounterItem::setCustomAttrs(const QXmlStreamAttributes &attrs)
|
||||
|
||||
ok = false;
|
||||
int displayNum = displayNumRef.toInt(&ok);
|
||||
if(!ok || displayNum <= 0) {
|
||||
if(!ok /*|| displayNum <= 0*/) {
|
||||
qWarning() << "Invalied counter display number: " << displayNum;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -14,6 +14,12 @@ SetNumDlg::SetNumDlg(QWidget *parent) :
|
||||
|
||||
ui->btn_confirm->setAutoDefault(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()
|
||||
@@ -40,6 +46,12 @@ void SetNumDlg::on_btn_confirm_clicked()
|
||||
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()
|
||||
{
|
||||
emit sig_clearCnt();
|
||||
|
||||
+12
@@ -19,6 +19,14 @@ public:
|
||||
|
||||
int getNum();
|
||||
|
||||
/**
|
||||
* @brief 设置对话框中,重置计数器1/2 的两个按钮的可用性
|
||||
*
|
||||
* @param cnt1Btn 重置计数器1 按钮的可用性
|
||||
* @param cnt2Btn 重置计数器2 按钮的可用性
|
||||
*/
|
||||
void setCNTResetBtnsEnable(bool cnt1Btn, bool cnt2Btn);
|
||||
|
||||
private slots:
|
||||
void on_btn_confirm_clicked();
|
||||
|
||||
@@ -34,6 +42,10 @@ signals:
|
||||
void sig_setNum();
|
||||
|
||||
void sig_clearCnt();
|
||||
|
||||
void sig_resetCNT1();
|
||||
|
||||
void sig_resetCNT2();
|
||||
};
|
||||
|
||||
#endif // SETNUMDLG_H
|
||||
|
||||
+27
-1
@@ -87,7 +87,7 @@
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>160</y>
|
||||
<y>130</y>
|
||||
<width>111</width>
|
||||
<height>61</height>
|
||||
</rect>
|
||||
@@ -96,6 +96,32 @@
|
||||
<string>清空产品计数</string>
|
||||
</property>
|
||||
</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>
|
||||
<tabstops>
|
||||
<tabstop>cb_setNum</tabstop>
|
||||
|
||||
+511
-374
File diff suppressed because it is too large
Load Diff
+38
-2
@@ -146,7 +146,7 @@ TestPrintWidget::TestPrintWidget(QWidget* parent)
|
||||
vm.letterSpace = 1;
|
||||
vm.cnt1Settings = m_printSettingModel.cnt1Settings;
|
||||
vm.cnt2Settings = m_printSettingModel.cnt2Settings;
|
||||
emit sig_showEditCounter(vm);
|
||||
emit sig_showEditCounter(vm, false);
|
||||
});
|
||||
|
||||
connect(ui.btnBarcode, &QPushButton::clicked, [this](){
|
||||
@@ -201,6 +201,8 @@ TestPrintWidget::TestPrintWidget(QWidget* parent)
|
||||
|
||||
// 网络通信,暂时屏蔽
|
||||
// ui.btnList->hide();
|
||||
|
||||
connect(ui.btnSaveAs, &QPushButton::clicked, this, &TestPrintWidget::onBtnSaveAsClicked);
|
||||
}
|
||||
|
||||
void TestPrintWidget::bindSysPara(SysPara *sysPara)
|
||||
@@ -713,7 +715,7 @@ void TestPrintWidget::onBtnItemConfigClicked()
|
||||
vm.charWidth = counterItem->charWidth();
|
||||
vm.cnt1Settings = m_printSettingModel.cnt1Settings;
|
||||
vm.cnt2Settings = m_printSettingModel.cnt2Settings;
|
||||
emit sig_showEditCounter(vm);
|
||||
emit sig_showEditCounter(vm, true);
|
||||
}
|
||||
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};
|
||||
|
||||
QFont font;
|
||||
@@ -1098,6 +1106,19 @@ void TestPrintWidget::addCounterItem(CounterViewModel vm, QSharedPointer<QFont>
|
||||
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()
|
||||
{
|
||||
return xmlfileName;
|
||||
@@ -1159,3 +1180,18 @@ void TestPrintWidget::on_btn_paste_clicked()
|
||||
{
|
||||
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
@@ -58,6 +58,8 @@ public:
|
||||
|
||||
void addCounterItem(CounterViewModel vm, QSharedPointer<QFont> font = nullptr);
|
||||
|
||||
int getCounterNum();
|
||||
|
||||
QString currentFile();
|
||||
|
||||
// 更新编辑界面内所有计数器的当前值
|
||||
@@ -108,6 +110,8 @@ private slots:
|
||||
// 粘贴
|
||||
void on_btn_paste_clicked();
|
||||
|
||||
void onBtnSaveAsClicked();
|
||||
|
||||
private:
|
||||
// UI对象
|
||||
Ui::TestPrintWidget ui;
|
||||
@@ -174,7 +178,7 @@ signals:
|
||||
|
||||
void sendButtonClickedSignal(int index);
|
||||
|
||||
void sig_showEditCounter(CounterViewModel viewModel);
|
||||
void sig_showEditCounter(CounterViewModel viewModel, bool isChange);
|
||||
|
||||
// 用户请求打开日期类型图元编辑窗口时发送此信号
|
||||
void sig_showEditDateTime(DateItemModel dateModel, TextItemModel textModel);
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user