hlp:更新翻译,开机报警不可以开回收槽,运行中报警缺少3h后自动收 喷嘴;新增粘度阈值设置界面,提醒粘度异常情况,严重越界自动收喷嘴
This commit is contained in:
@@ -1,6 +1,12 @@
|
||||
#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)
|
||||
@@ -10,5 +16,200 @@ DlgViscositySetting::DlgViscositySetting(QWidget *parent) :
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user