Files

808 lines
35 KiB
C++

#include "SystemSetting.h"
#include "ui_systemsetting.h"
#include <QFileDialog>
#include <QList>
#include <QUrl>
#include <QMessageBox>
#include <QProcess>
#include <QDebug>
#include <QTime>
#include <QDate>
#include <QScroller>
#include <QScrollArea>
//#include "LogInfo.h"
#include "myinclude.h"
#include "QInputDialog"
//#define FINDVOL
#include "InputMethod.h"
int convertFreq(int index){
// qDebug()<<"index="<<index;
switch(index){
case 0:return 64000;break; //64k,pwm波,占空比50%
// case 1:return 76000;break; //76k
case 1:return 83000;break; //83k
case 2:return 96000;break; //96k
case 3:return 128000;break; //128k
case 4:return 145000;break; //145k
}
return 0;
}
static int detectValidHVCnt = 0;
SystemSetting::SystemSetting(QWidget *parent) :
QWidget(parent),progressBar(0),
ui(new Ui::SystemSetting)
{
ui->setupUi(this);
progressBar.setGeometry(200,200,300,40); //将其放在最中间
progressBar.hide();
timer = new QTimer();
connect(timer, SIGNAL(timeout()), this, SLOT(timerHandler()));
timer2 = new QTimer();
connect(timer2, SIGNAL(timeout()), this, SLOT(timerHandler2()));
timerAuto = new QTimer();
connect(timerAuto,SIGNAL(timeout()),this,SLOT(autoControlPressure()));
enCleanUpAppendFlag=0; // 0空闲,1关开回收槽,2手动,3清洗,4恢复,5停止,6
dialogUpateMm =new DialogAuthorization;
connect(dialogUpateMm,SIGNAL(accepted()),this,SLOT(ondialogAuthorizationAccepted()));
if (ctrl_loginfo == nullptr) {
ctrl_loginfo = LogInfoCtrl::instance();
connect(ctrl_loginfo, &LogInfoCtrl::sig_clean,
this, &SystemSetting::on_pushButtonCleanUP_pressed);
}
init();
}
SystemSetting::~SystemSetting()
{
delete ui;
delete timer;
delete timer2;
}
void SystemSetting::init()
{
// 应用样式表
applyStyleSheet();
QScrollArea *scrollArea = this->findChild<QScrollArea *>("systemSettingScrollArea");
if (scrollArea) {
QWidget *viewport = scrollArea->viewport();
QScroller::grabGesture(viewport, QScroller::LeftMouseButtonGesture);
QScroller::grabGesture(viewport, QScroller::TouchGesture);
QScroller *scroller = QScroller::scroller(viewport);
QScrollerProperties properties = scroller->scrollerProperties();
// 关闭惯性:限制 flick 速度并加快减速,达到松手即停的效果
properties.setScrollMetric(QScrollerProperties::DecelerationFactor, 1.0);
properties.setScrollMetric(QScrollerProperties::MaximumVelocity, 0.0);
properties.setScrollMetric(QScrollerProperties::AcceleratingFlickMaximumTime, 0.0);
properties.setScrollMetric(QScrollerProperties::DragStartDistance, 0.002);
scroller->setScrollerProperties(properties);
}
// 连接信号槽
connect(ui->closeBtn, &QPushButton::clicked, this, &SystemSetting::buttonClickedSlot);
connect(ui->checkBtn,&QPushButton::clicked, this, &SystemSetting::buttonClickedSlot);
}
void SystemSetting::buttonClickedSlot()
{
QPushButton* btn = qobject_cast<QPushButton*>(sender());
if (btn == ui->closeBtn)
{
emit sendButtonClickedSignal(1);
}else if(btn == ui->checkBtn){
emit sendButtonClickedSignal(2);
applyUIPara();
sysPara->saveParaToFile();
// SystemSettingLog();
int freq = sysPara->para.oscillatorFreqFix+ convertFreq(sysPara->para.oscillatoFreq);
sysPara->para.divideRatio = (FPGA_SYS_HZ/freq)/2;
sysPara->devOp->setDivideRatio(sysPara->para.divideRatio);
}
}
void SystemSetting::lockUI()
{
ui->checkBtn->setEnabled(false);
ui->closeBtn->setEnabled(false);
ui->pushButtonHighVoltageData->setEnabled(false);
}
void SystemSetting::unlockUI()
{
ui->checkBtn->setEnabled(true);
ui->closeBtn->setEnabled(true);
ui->pushButtonHighVoltageData->setEnabled(true);
}
void SystemSetting::SystemupdateSysParaToUI(){
updateSysParaToUI();
}
void SystemSetting::on_pushButtonApply_pressed()
{
applyUIPara();
SystemSettingLog();
int freq = sysPara->para.oscillatorFreqFix+ convertFreq(sysPara->para.oscillatoFreq);
sysPara->para.divideRatio = (FPGA_SYS_HZ/freq)/2;
sysPara->devOp->setDivideRatio(sysPara->para.divideRatio);
}
void SystemSetting::SystemSettingLog(){
qDebug()<<QString("SystemSetting 晶振电压(%): %1").arg(ui->spinBoxOscillatorVoltage->value());
qDebug()<<QString("SystemSetting 高压包容差: %1").arg(ui->spinBoxHighVoltageLevel->value());
qDebug()<<QString("SystemSetting 回收泵力度(%): %1").arg(ui->spinBoxReclaimPumpPower->value());
qDebug()<<QString("SystemSetting 粘度校正(%): %1").arg(ui->ViscosityAdujstSelect->currentIndex());
qDebug()<<QString("SystemSetting 粘度泵动作间隔(秒): %1").arg(ui->spinBoxPumpInterval->value());
qDebug()<<QString("SystemSetting 回收槽开关时间: %1").arg(ui->spinBoxReclaimTankTime->value());
qDebug()<<QString("SystemSetting 隔膜位置: %1").arg(ui->spinBoxSeptalPostion->value());
qDebug()<<QString("SystemSetting 隔膜位置偏移:: %1").arg(ui->comboBoxDiaphramOffset->currentIndex());
qDebug()<<QString("SystemSetting 压力:: %1").arg(ui->spinBoxPressure->value());
qDebug()<<QString("SystemSetting 粘度: %1").arg(ui->spinBoxVIscosity->value());
qDebug()<<QString("SystemSetting 喷头温度: %1").arg(ui->spinBoxTemperature->value());
qDebug()<<QString("SystemSetting 晶振频率: %1").arg(ui->comboBoxOscillatorFreq->currentIndex());
qDebug()<<QString("SystemSetting 频率修正: %1").arg(ui->spinBoxOscillatorFreqFix->value());
qDebug()<<QString("SystemSetting 喷嘴直径: %1").arg(ui->comboBoxDiameter->currentIndex());
}
void SystemSetting::updateSysParaToUI(){
if(sysPara){
ui->spinBoxHighVoltageLevel->setValue(sysPara->para.highVoltageLevel);
ui->spinBoxOscillatorVoltage->setValue((sysPara->para.oscillatorVoltage));
ui->spinBoxPressure->setValue(sysPara->para.pressure);
ui->spinBoxPumpInterval->setValue(sysPara->para.viscosityPumpInterval);
ui->spinBoxReclaimPumpPower->setValue(sysPara->para.reclaimPumpPWMWidth);
ui->spinBoxReclaimTankTime->setValue(sysPara->para.reclaimTankTime);
ui->spinBoxTemperature->setValue(sysPara->para.temperature);
ui->spinBoxFanTemperature->setValue(sysPara->para.FanTemperature);
ui->spinBoxVIscosity->setValue( sysPara->para.viscosity);
ui->ViscosityAdujstSelect->setCurrentIndex(sysPara->para.viscosityAdjust);
ui->comboBoxOscillatorFreq->setCurrentIndex(sysPara->para.oscillatoFreq);
ui->spinBoxOscillatorFreqFix->setValue(sysPara->para.oscillatorFreqFix);
ui->spinBoxSeptalPostion->setValue(sysPara->para.septalPostion);
ui->comboBoxDiameter->setCurrentIndex(sysPara->para.diameter);
ui->comboBoxDiaphramOffset->setCurrentIndex(sysPara->para.diaphramOffset/5-1);
ui->enableReclaimAlgorithm->setChecked(sysPara->para.flagOfReclaimPumEnable);
ui->checkBoxReciclar->setChecked(sysPara->para.Reciclar);
ui->checkBoxMagnet->setChecked(sysPara->para.isCheckMagnet);
ui->checkHVFaultCloseEn->setChecked(sysPara->para.HVFaultCloseEn);
ui->spinBoxAirPushDuration->setValue(sysPara->para.airPushDurationSec);
ui->checkBoxCloseReclaimTankWhenPhaseFault->setChecked(sysPara->para.closeReclaimTankWhenPhaseFault);
sysPara->para.suspendAfterPhaseFault = sysPara->para.closeReclaimTankWhenPhaseFault ? true : sysPara->para.suspendAfterPhaseFault;
ui->checkBoxSuspendAfterPhaseFault->setChecked(sysPara->para.suspendAfterPhaseFault);
if(sysPara->para.EditMode>SCENE)
sysPara->para.EditMode=TXTFILE;
}
}
extern bool gearPumpRunNormalFlag;
void SystemSetting::applyUIPara(){
if(sysPara){
sysPara->para.highVoltageLevel = ui->spinBoxHighVoltageLevel->value();
sysPara->para.oscillatorVoltage = ui->spinBoxOscillatorVoltage->value();
sysPara->para.pressure = ui->spinBoxPressure->value();
gearPumpRunNormalFlag = false;//重新设置压力标志设置
sysPara->para.viscosityPumpInterval = ui->spinBoxPumpInterval->value();
sysPara->para.reclaimPumpPWMWidth = ui->spinBoxReclaimPumpPower->value();
sysPara->para.reclaimTankTime = ui->spinBoxReclaimTankTime->value();
sysPara->para.temperature = ui->spinBoxTemperature->value();
sysPara->para.viscosity = ui->spinBoxVIscosity->value();
//sysPara->para.viscosityAdjust = ui->spinBoxViscosityAdjust->value();
sysPara->para.viscosityAdjust = ui->ViscosityAdujstSelect->currentIndex();
sysPara->para.oscillatoFreq = ui->comboBoxOscillatorFreq->currentIndex();
sysPara->para.oscillatorFreqFix = ui->spinBoxOscillatorFreqFix->value();
sysPara->para.diameter = ui->comboBoxDiameter->currentIndex();// qDebug()<<"EditMode1"<<sysPara->para.EditMode;
int freq = sysPara->para.oscillatorFreqFix+ convertFreq(sysPara->para.oscillatoFreq);
if(freq > 0){
sysPara->para.divideRatio = (FPGA_SYS_HZ/freq)/2;
}
else {
QMessageBox::critical(this,tr("错误"),tr("实际频率不能为%1").arg(freq));
}
sysPara->para.flagOfReclaimPumEnable = ui->enableReclaimAlgorithm->isChecked();
sysPara->para.Reciclar = ui->checkBoxReciclar->isChecked();
sysPara->para.isCheckMagnet = ui->checkBoxMagnet->isChecked();
sysPara->para.HVFaultCloseEn = ui->checkHVFaultCloseEn->isChecked();
sysPara->para.FanTemperature = ui->spinBoxFanTemperature->value();
sysPara->para.septalPostion = ui->spinBoxSeptalPostion->value();
quint16 diaphramOffset = 5*(ui->comboBoxDiaphramOffset->currentIndex()+1);
sysPara->para.diaphramOffset = diaphramOffset;
sysPara->para.airPushDurationSec = ui->spinBoxAirPushDuration->value();
sysPara->para.closeReclaimTankWhenPhaseFault = ui->checkBoxCloseReclaimTankWhenPhaseFault->isChecked();
sysPara->para.suspendAfterPhaseFault = sysPara->para.closeReclaimTankWhenPhaseFault ? true : ui->checkBoxSuspendAfterPhaseFault->isChecked();
//sysPara->para.mixValveisNewVersion = ui->radioButtonMixValveNewVersion->isChecked();
if(sysPara->devOp->writeFpgaPrintPara(true) != -1){
QMessageBox::information(this,tr("提示"),tr("应用成功"));
}
emit changeEditMode(sysPara->para.EditMode);
//qDebug()<<"EditMode"<<sysPara->para.EditMode;
}
}
void SystemSetting::updateSysStatusToUI(){
if(sysPara){
ui->pushButtonHighVoltageData->setEnabled( sysPara->status.currReclaimTankPos <5 );
//ui->pushButtonHighVoltageData->setEnabled( !sysPara->status.isPrinting);
ui->spinBoxPressure->setEnabled( !sysPara->status.isPrinting);
ui->labelHighVoltageValue->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + QString::number(sysPara->para.maxHighVoltageDAC));
//ui->labelHighVoltageValue->setText(QString::number(sysPara->status.HV_DETOUT) + "/" + "600");//FPGA那边已固定600
ui->labelMotorCurrent->setText(QString::number(sysPara->status.MOTOR_ISEN));
ui->labelPressure->setText(QString::number(sysPara->status.PRESSURE));
ui->labelTemperature->setText(QString::number(sysPara->status.TEMP_ADIN/4));
ui->labelPulseCounter->setText(QString::number(sysPara->status.synTotalPulseCnt));
//ui->label_PulseCounterZero->setText(QString::number(sysPara->status.xor_sync.sync_counter_at_zero));
// if( sysPara->status.viscosityFaultCnt || sysPara->status.rWarnViscoReady )
// sysPara->status.viscosity = 0;//sysPara->status.rWarnViscoReady
ui->labelVIscosity->setText(QString::number(sysPara->status.viscosity));
ui->labelReclaimTankCloseTime->setText(QString::number(sysPara->status.currReclaimTankPos/10));
//ui->labelTotalPulseNum->setText(QString::number(sysPara->status.synTotalPulseCnt));//不需要显示
ui->labelSpetalPosition->setText(QString::number(sysPara->status.SEPTAL_POSITION));
if(sysPara->para.gearPumpEnable)
{
setSpinBoxPressureMaxValue(900);
}
else
{
setSpinBoxPressureMaxValue(5000);
}
// 逆清洗使能判定
static bool CleanUPEn=1,preCleanUP=0;
if(!sysPara->para.isCheckMagnet)
{
CleanUPEn = (sysPara->status.currReclaimTankPos<70) && (sysPara->status.statWarn & WARN_STATUS_HDINT);
}
else
{
CleanUPEn = (sysPara->status.currReclaimTankPos<70) ;
}
if(CleanUPEn != preCleanUP){
ui->pushButtonCleanUP->setEnabled(CleanUPEn);
}
preCleanUP=CleanUPEn;
if(sysPara->status.currReclaimTankPos<55 && sysPara->status.currReclaimTankPos>44 && enCleanUpAppendFlag==2)
{
if(timer2->isActive()) timer2->stop();
enCleanUpAppendFlag=3;
sysPara->devOp->controlReclaimTankOpen(0);
emit onCleanUPNow();// start cleanup
}
else if(sysPara->status.currReclaimTankPos >0 && enCleanUpAppendFlag==4) //?
{
enCleanUpAppendFlag=5;
//sysPara->devOp->controlReclaimTankClose(1);
//ui->label_status->setText(tr("正在关回收槽......"));
if(ctrl_loginfo) ctrl_loginfo->emitSigCleanOver(false);
unlockUI();
}
else if(sysPara->status.currReclaimTankPos ==0 && (enCleanUpAppendFlag==5 ||enCleanUpAppendFlag==4)) //?
{
if(sysPara->status.reclaimCloseCnt)sysPara->status.reclaimCloseCnt--;
else {
sysPara->devOp->controlReclaimTankOpen(0);
timerHandler2();
if(timer2->isActive()) timer2->stop();
enCleanUpAppendFlag=0;
}
}
}
}
void SystemSetting::bindSysPara(SysPara *sysPara)
{
this->sysPara = sysPara;
}
void SystemSetting::on_pushButtonCleanUP_pressed()
{
if(sysPara){
QMessageBox msgBox(QMessageBox::Information,tr("提示"),tr("自动清洗时间约为一分钟,然后自动停止"));
QPushButton *cleanButton;
QPushButton *cancleCleanButton;
cleanButton=NULL;
cancleCleanButton=NULL;
r_PumpValveControledByHand = false;
if( enCleanUpAppendFlag==0) cleanButton = msgBox.addButton(tr("开始清洗"), QMessageBox::ActionRole);
else cancleCleanButton = msgBox.addButton(tr("停止清洗"), QMessageBox::ActionRole);
msgBox.addButton(QMessageBox::Cancel);
msgBox.exec();
if (msgBox.clickedButton() == cleanButton)
{
r_PumpValveControledByHand = sysPara->status.isPumpValveControledByHand;
//ui->label_status->setText(tr("正在进入手动模式......"));
sysPara->status.isPumpValveControledByHand=true;
sysPara->devOp->controlCompressPump(false);
sysPara->devOp->controlCycleValve(true);
sysPara->devOp->controlInkValve(false);
sysPara->devOp->controlInkValvePWM(false);
sysPara->devOp->controlMainInkPump(false);
sysPara->devOp->controlMixValve(false);
sysPara->devOp->controlReclaimPump(true,true);
sysPara->devOp->controlViscosityPump(false);
sysPara->devOp->controlReleaseValve(false);
if(sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable){
sysPara->devOp->controlCycleValve(true);
sysPara->devOp->controlViscosityPump(true);
sysPara->devOp->controlReclaimPump(true,false);
sysPara->para.gearPumpValue = 0;
sysPara->devOp->WriteMoterPump();
sysPara->devOp->controlInkValvePWM(false);
}
enCleanUpAppendFlag=1;// 开始启动手动模式
sysPara->devOp->mainInkCtrl();
if (ctrl_loginfo) ctrl_loginfo->emitSigCleanOver(true);
lockUI();
timer2->start(2000); // 暂时循环一下2s
}
else if (msgBox.clickedButton() == cancleCleanButton) {
enCleanUpAppendFlag=3;
if (ctrl_loginfo) ctrl_loginfo->emitSigCleanOver(false);
unlockUI();
timerHandler2();
return ;
}
}
}
void SystemSetting::onCleanUPNow()
{
if(sysPara){
emit setRunStatus(tr("正在喷嘴逆清洗......"));
if(!(sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable)){
sysPara->devOp->controlCycleValve(true);
sysPara->devOp->controlViscosityPump(true);
sysPara->devOp->controlReclaimPump(true,false);
}
timer2->start(60000);
}
}
void SystemSetting::autoControlPressure(){
emit pressureAdjust();
}
void SystemSetting::timerHandler2(){
if(sysPara){
if(enCleanUpAppendFlag==1)
{
//2s循环结束
// sysPara->devOp->controlCycleValve(false);
// sysPara->devOp->controlReclaimPump(false,false);
if(timer2->isActive()) timer2->stop();
// 已经进入手动模式了
// 判断回收槽位置,并控制回收槽打开10mm以上;
enCleanUpAppendFlag=2;
if(sysPara->status.currReclaimTankPos<45)
{
sysPara->devOp->controlReclaimTankOpen(1);
//ui->label_status->setText(tr("正在开回收槽......"));
}
else if(sysPara->status.currReclaimTankPos>55){
sysPara->devOp->controlReclaimTankClose(1);
//ui->label_status->setText(tr("正在关回收槽......"));
}
timer2->start(5500);
}
else if(enCleanUpAppendFlag==2) // 正在开回收槽
{
if(timer2->isActive()) timer2->stop();
enCleanUpAppendFlag=3;
sysPara->devOp->controlReclaimTankOpen(0);
emit onCleanUPNow();// start cleanup
}
else if(enCleanUpAppendFlag==3){// 清洗完成
enCleanUpAppendFlag=4;
sysPara->devOp->controlCycleValve(false);
sysPara->devOp->controlViscosityPump(false);
sysPara->devOp->controlReclaimTankClose(1);
sysPara->status.reclaimCloseCnt=10;
if(timer2->isActive()) timer2->stop();
timer2->start(8300); // close reclaimTandk
if(sysPara->para.gearPumpEnable && sysPara->para.flagOfReclaimPumEnable){
timerAuto->start(100);
}
}
else if(enCleanUpAppendFlag==4){
emit setRunStatus(tr("清洗完成"));
if (ctrl_loginfo) ctrl_loginfo->emitSigCleanOver(false);
unlockUI();
if(sysPara->status.currReclaimTankPos==0){
enCleanUpAppendFlag=0;
if(timer2->isActive()) timer2->stop();
sysPara->devOp->controlReclaimTankClose(0);
}
sysPara->status.isPumpValveControledByHand = false;
if(timerAuto->isActive()) timerAuto->stop();
sysPara->devOp->mainInkCtrl();
}
else if(enCleanUpAppendFlag==5){
if(timer2->isActive()) timer2->stop();enCleanUpAppendFlag=0;
sysPara->devOp->controlReclaimTankClose(0);
sysPara->status.isPumpValveControledByHand =false;
sysPara->devOp->mainInkCtrl();
}
else if(enCleanUpAppendFlag==6){
if(timer2->isActive()) timer2->stop();enCleanUpAppendFlag=0;
sysPara->status.isPumpValveControledByHand =false ;
}
else {if(timer2->isActive()) timer2->stop();}
}
}
void SystemSetting::on_spinBoxReclaimPumpPower_valueChanged(int arg1)
{
Q_UNUSED(arg1);
if(sysPara){
if(sysPara->devOp->isReclaimPumpOpen()){ //在当前是开的情况下重设pwm
sysPara->para.reclaimPumpPWMWidth = ui->spinBoxReclaimPumpPower->value();
sysPara->devOp->controlReclaimPump(true,false);
}
}
}
void SystemSetting::on_pushButtonHighVoltageData_pressed()
{
ondialogAuthorizationAccepted();
}
void SystemSetting::ondialogAuthorizationAccepted()
{
if(sysPara){
QMessageBox::StandardButton ret;
if(sysPara->status.adjHightVolInitEN==0){
{
sysPara->status.adjHightVolInitEN =1;
}
}
ret = QMessageBox::information(this, tr("Application"),
tr("是否更新高压包电流数据?"),
QMessageBox::Ok | QMessageBox::Cancel);
if (ret == QMessageBox::Ok){
// 暂时不检测喷头盖 byons@2026年6月21日
// if((sysPara->status.statWarn & WARN_STATUS_HDINT)){
// QMessageBox::information(this,tr("错误"),tr("喷头盖未关,请先关喷头盖!"));
// return ;
// }
lastHighVoltageOpen = sysPara->devOp->isHighVoltageOpen();
sysPara->status.detectHighVoltageAppending = true;
sysPara->status.detectedValidHighVoltage = false;
sysPara->status.detectHighVoltageCnt = 0;
detectValidHVCnt = 0;
progressBar.setMaximum (ARRAY_SIZE(sysPara->para.highVoltageRecord));
progressBar.setMinimum (0);
progressBar.setValue(sysPara->status.detectHighVoltageCnt);
progressBar.show();
timer->start(1000);
//ui->label_HVFlag->setText(tr(""));
sysPara->para.set_HVData_Flag = 1; //
sysPara->devOp->writeFpgaPrintPara(true);
//--sysPara->devOp->setCtrlFlags();
//qDebug()<<"set_HVData_Flag"<<sysPara->para.set_HVData_Flag ;
}
}
}
//#define VOLDIV 5 // 原来的值
//#define VOLNUM 20 // 原来的值
#define VOLDIV 2 // 测试的值
#define VOLNUM 50 // 测试的值
//排序函数
void bubbleSort(unsigned short arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void SystemSetting::timerHandler(){
if(sysPara){
/*-------------------------------------高压检测-----------------------------------*/
if(sysPara->status.detectHighVoltageAppending){
if(sysPara->status.detectHighVoltageCnt < ARRAY_SIZE(sysPara->para.highVoltageRecord)-1){
sysPara->para.highVoltageRecord[sysPara->status.detectHighVoltageCnt] =
sysPara->status.detectHighVoltageCnt?sysPara->status.HV_DETOUT:0;
sysPara->devOp->maxHighVoltageDACCtrl(0); //将其detectHighVoltageCnt设置为零,不处理高压故障
sysPara->devOp->resumeFault(); //如果有高压故障,恢复高压故障
progressBar.setValue(sysPara->status.detectHighVoltageCnt);
/* 应要求去掉多余到信息*/
// LogInfo::setRunStatusText(QString("High voltage %1 --- value %2")
// .arg(sysPara->status.detectHighVoltageCnt).arg(sysPara->para.highVoltageRecord[sysPara->status.detectHighVoltageCnt]));
if(sysPara->para.highVoltageRecord[sysPara->status.detectHighVoltageCnt] > 30) //起始电压太小不算
{
if(sysPara->status.detectedValidHighVoltage)
sysPara->status.detectHighVoltageCnt ++;
else{ //从无到有第一次检测高压的话,计数不加1
}
sysPara->status.detectedValidHighVoltage = true;
}
else
sysPara->status.detectHighVoltageCnt ++;
int actHvAmp = sysPara->status.detectHighVoltageCnt*10;
sysPara->devOp->highVoltageCtrl(actHvAmp);
sysPara->para.HighVoltageAmplitude = actHvAmp;
}else {
sysPara->para.highVoltageRecord[9] = sysPara->para.highVoltageRecord[8];
sysPara->status.detectHighVoltageAppending = 0;
//LogInfo::setRunStatusText(tr("高压设置完成"));
sysPara->para.set_HVData_Flag = 0; //
sysPara->devOp->writeFpgaPrintPara(true); //在这里面不能产生阻塞
progressBar.hide();
timer->stop();
if(lastHighVoltageOpen){
sysPara->devOp->highVoltageCtrl(1);
}else{
sysPara->devOp->highVoltageCtrl(0);
}
}
}
else if(sysPara->status.detectBestOscillatorFreqAppending){
sysPara->devOp->readPhaseDetectHighTm();
int longestPhaseHightLevelTm = 0;
if(!sysPara->status.detect_phase_error && !sysPara->status.flight_tm_error ){
int n = ARRAY_SIZE(sysPara->status.phaseDetectHighTm);
bubbleSort(sysPara->status.phaseDetectHighTm, n);
int sum = 0;
for (int i= 1; i < n -1; i++)
{
sum += sysPara->status.phaseDetectHighTm[i];
}
longestPhaseHightLevelTm = sum / (n-2);
}
// LogInfo::setRunStatusText(tr("Oscillator Freq %1 --- 最长高电平时钟 %2")
// .arg( sysPara->status.detectedStartOscillatorFreq + sysPara->status.currentDetectBestOscillatorCnt*200).arg(longestPhaseHightLevelTm));
if(longestPhaseHightLevelTm > sysPara->status.longestPhaseHightLevelTm){
sysPara->status.longestPhaseHightLevelTm = longestPhaseHightLevelTm;
sysPara->status.detectedBestOscillatorFreq = sysPara->status.detectedStartOscillatorFreq + sysPara->status.currentDetectBestOscillatorCnt*200;
}
sysPara->status.currentDetectBestOscillatorCnt++;
sysPara->devOp->setDivideRatio((FPGA_SYS_HZ/(sysPara->status.detectedStartOscillatorFreq + sysPara->status.currentDetectBestOscillatorCnt*200))/2);
progressBar.setValue(sysPara->status.currentDetectBestOscillatorCnt);
if(sysPara->status.currentDetectBestOscillatorCnt == 20){ //100分了20份
sysPara->status.detectBestOscillatorFreqAppending= false;
int bestRatio = (FPGA_SYS_HZ/(sysPara->status.detectedBestOscillatorFreq))/2;
/*------------------------------------------------------------------------------------*/
ui->spinBoxOscillatorFreqFix->setValue(sysPara->status.detectedBestOscillatorFreq - convertFreq(sysPara->para.oscillatoFreq));
sysPara->para.oscillatorFreqFix = sysPara->status.detectedBestOscillatorFreq - convertFreq(sysPara->para.oscillatoFreq);
/*------------------------------------------------------------------------------------*/
sysPara->devOp->setDivideRatio(bestRatio);
sysPara->para.divideRatio = bestRatio;
progressBar.hide();
timer->stop();
//LogInfo::setRunStatusText(tr("最佳晶振频率完成"));
}
}
#ifdef FINDVOL
else if(sysPara->status.detectBestOscillatorVoltageAppending){// 最佳晶振电压
sysPara->devOp->readPhaseDetectHighTm();
int longestPhaseHightLevelTm = 0;
if(!sysPara->status.detect_phase_error && !sysPara->status.flight_tm_error ){
for(int i = 0; i < ARRAY_SIZE(sysPara->status.phaseDetectHighTm); i++){
if(sysPara->status.phaseDetectHighTm[i] > longestPhaseHightLevelTm){
longestPhaseHightLevelTm = sysPara->status.phaseDetectHighTm[i];
}
}
}
LogInfo::setRunStatusText(tr("Oscillator voltage %1 --- 最长高电平时钟 %2")
.arg(sysPara->status.currentDetectBestOscillatorCnt*3).arg(longestPhaseHightLevelTm));
if(longestPhaseHightLevelTm > sysPara->status.longestPhaseHightLevelTm){
sysPara->status.longestPhaseHightLevelTm = longestPhaseHightLevelTm;
sysPara->status.detectedBestOscillatorVoltage = sysPara->status.currentDetectBestOscillatorCnt*3;
}
sysPara->status.currentDetectBestOscillatorCnt++;
sysPara->devOp->setOscillatorVoltage(sysPara->status.currentDetectBestOscillatorCnt*3);
progressBar.setValue(sysPara->status.currentDetectBestOscillatorCnt);
if(sysPara->status.currentDetectBestOscillatorCnt == 32){ //分了32份
sysPara->status.detectBestOscillatorVoltageAppending = false;
ui->spinBoxOscillatorVoltage->setValue(sysPara->status.detectedBestOscillatorVoltage);
sysPara->devOp->setOscillatorVoltage(sysPara->status.detectedBestOscillatorVoltage);
sysPara->para.oscillatorVoltage = sysPara->status.detectedBestOscillatorVoltage;
progressBar.hide();
timer->stop();
LogInfo::setRunStatusText(tr("最佳晶振电压完成"));
}
}
#else
else if(sysPara->status.detectBestOscillatorVoltageAppending){// 最佳晶振电压
sysPara->devOp->readPhaseDetectHighTm();
int longestPhaseHightLevelTm = 0;
if(!sysPara->status.detect_phase_error && !sysPara->status.flight_tm_error ){
for(unsigned int i = 0; i < ARRAY_SIZE(sysPara->status.phaseDetectHighTm); i++){
if(sysPara->status.phaseDetectHighTm[i] > longestPhaseHightLevelTm){
longestPhaseHightLevelTm = sysPara->status.phaseDetectHighTm[i];
}
}
}
// LogInfo::setRunStatusText(tr("Oscillator voltage %1 --- 最长高电平时钟 %2")
// .arg(sysPara->status.currentDetectBestOscillatorCnt*VOLDIV).arg(longestPhaseHightLevelTm));
if(longestPhaseHightLevelTm > sysPara->status.longestPhaseHightLevelTm){
sysPara->status.longestPhaseHightLevelTm = longestPhaseHightLevelTm;
sysPara->status.detectedBestOscillatorVoltage = sysPara->status.currentDetectBestOscillatorCnt*VOLDIV;
}
sysPara->status.currentDetectBestOscillatorCnt++;
sysPara->devOp->setOscillatorVoltage(sysPara->status.currentDetectBestOscillatorCnt*VOLDIV);
progressBar.setValue(sysPara->status.currentDetectBestOscillatorCnt);
if(sysPara->status.currentDetectBestOscillatorCnt == VOLNUM){ //分了20份
sysPara->status.detectBestOscillatorVoltageAppending = false;
ui->spinBoxOscillatorVoltage->setValue(sysPara->status.detectedBestOscillatorVoltage);
sysPara->devOp->setOscillatorVoltage(sysPara->status.detectedBestOscillatorVoltage);
sysPara->para.oscillatorVoltage = sysPara->status.detectedBestOscillatorVoltage;
progressBar.hide();
timer->stop();
// LogInfo::setRunStatusText(tr("最佳晶振电压完成"));
}
}
#endif
}
}
void SystemSetting::updateReclaimTime(int time){
if(sysPara){
ui->spinBoxReclaimTankTime->setValue(time);
}
}
void SystemSetting::updateViscosityAdjust(int offset){
if(sysPara){
int viscostyRealValue;
if(offset>0)
{
if(offset>5)
offset = 5;
if(sysPara->para.viscosityAdjust==1)//0.6%
{
//viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*3)/5/100;
viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*3)/500;
}
else if(sysPara->para.viscosityAdjust==2)//1.0%
{
//viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*5)/5/100;
viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*offset/100;
}
else if(sysPara->para.viscosityAdjust==3)//1.6%
{
//viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*8)/5/100;
viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*offset*8/500;
}
else if(sysPara->para.viscosityAdjust==4)//2.0%
{
//viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*(offset*10)/5/100;
viscostyRealValue = sysPara->para.viscosity - sysPara->para.viscosity*offset*2/100;
}
else
{
viscostyRealValue = sysPara->para.viscosity;
}
}
else
{
viscostyRealValue = sysPara->para.viscosity;
}
if(sysPara->para.viscosityAdjust!=0)
{
ui->ViscosityAdjustText->setText(QString("%1").arg(viscostyRealValue));
}
}
}
void SystemSetting::updateAuthorization(int auth){
Q_UNUSED(auth);
if(sysPara){
//ui->labelMixValveVersion->setVisible(PRODUCT_VERSION(sysPara->status.fpgaVersionNum) == JETV1);
//ui->radioButtonMixValveNewVersion->setVisible(PRODUCT_VERSION(sysPara->status.fpgaVersionNum) == JETV1);
//ui->radioButtonMixValveOldVersion->setVisible(PRODUCT_VERSION(sysPara->status.fpgaVersionNum) == JETV1);
}
}
void SystemSetting::setSpinBoxPressureMaxValue(int pressureVal)
{
ui->spinBoxPressure->setMaximum(pressureVal);
}
//简单的使用输入框值变化事件时,会在用户输入个位数(未输入完成时),就触发发送修改命令,造成断点不正常
void SystemSetting::on_spinBoxOscillatorVoltage_valueChanged(int arg1)
{
static int vol=0; //
if(sysPara){
vol = arg1;
if(arg1 >= 10)
sysPara->devOp->setOscillatorVoltage(ui->spinBoxOscillatorVoltage->value());
}
}
#include "Public.h"
//void SystemSetting::setInterfaceMode()
//{
// QString s1 = Public::ReadLanguageName();
// if(s1 =="English") {// English--> Vietnamese
// ui->pushButtonInterFace->setText( tr("Tiếng Việt(Vietnamese interface)"));
// }
// else if(s1 =="Vietnamese") {// Vietnamese--> Chinese
// ui->pushButtonInterFace->setText( tr("Chinese interface(中文界面)"));
// }
// else{// Chinese--> English
// ui->pushButtonInterFace->setText( tr("English interface(英文界面)"));
// }
//}
void SystemSetting::applyStyleSheet()
{
QString styleSheet = R"(
QPushButton#closeBtn, QPushButton#checkBtn{
background-color: #E6F7FF;
border: 1px solid #87CEEB;
border-radius: 4px;
font-size: 24px;
color: #228B22;
}
QPushButton#closeBtn:hover,QPushButton#checkBtn:hover{
background-color: #D1E9FF;
}
QPushButton#closeBtn:pressed,QPushButton#checkBtn:pressed{
background-color: #BAE7FF;
}
)";
this->setStyleSheet(styleSheet);
}