/* * SysPara.cpp * * Created on: Jun 25, 2013 * Author: yiyu * QQ:1036184468 * Descriptoin: * * 2013-9-29 高压 */ #include "SysPara.h" #include #include #include #include #include #include //#include #include "LogInfo.h" #define VNLG SysPara::SysPara(void): devOp(new DevOp(this)){ memset(¶,0,sizeof(para)); memset(&status,0,sizeof(status)); //qDebug("start to loadParaFromFile."); loadParaFromFile(); //qDebug("loadParaFromFile ok."); //para.HVFaultCloseEn= 0; if(para.ReadFileErrorCnt<10) para.ReadFileErrorCnt++; if(para.PowerOnErrorCnt<10) para.PowerOnErrorCnt++; // PowerOnErrorCnt //qDebug()<<"cnt ++:"<3 || para.PowerOnErrorCnt>4) { //loadDefaultPara(); memset( para.lastOpenedFileName,0,sizeof(para.lastOpenedFileName)); if(para.ReadFileErrorCnt>=4 ) para.ReadFileErrorCnt=0; if(para.PowerOnErrorCnt>=4) para.PowerOnErrorCnt=0; //qDebug()<<"sys Star Error, cnt :"<writeFpgaPrintPara(true)会调用这个,所以忽略 //para.HVFaultCloseEn= 1; //开机默认为1,允许高压故障自动关闭回收功能 devOp->writeFpgaPrintPara(true); //系统起来的时候,将上次记录的配置写入fpga,比如晶振分频等信息 devOp->writeFpgaVariCtrl(); devOp->resumeFault(); status.lastProductCnt = status.productCnt ; //这会让产品计数显示出来 status.gearPumpRunStopFlag = false; status.detectBestOscillatorFreqAppending = false; status.isPumpValveControledByHand = false; //初始化为自动模式 status.forTemplateUse = false; status.lastHighVoltageFault = false; status.needPowerOffTimerout = 0; status.circleProductCnt = false; } void SysPara::loadParaFromFile(){ QFile file(PARA_FILE_PATH); QFile DeviceCodefile(DeviceCode_FILE_PATH); QDir dir; char buf[200]; //qDebug()<<"loadParaFromFile"; if(!dir.exists(DOC_ROOT_DIR)){ snprintf(buf,sizeof(buf),"mkdir -p %s",DOC_ROOT_DIR); system(buf); } if(!dir.exists(PARA_ROOT_DIR)){ snprintf(buf,sizeof(buf),"mkdir -p %s",PARA_ROOT_DIR); system(buf); } if(!dir.exists(PARA_ROOT_DIR)){ QMessageBox::warning(0,QString("warnning"),QString("Path") + PARA_ROOT_DIR + QString("not Found.")); return ; } if(file.exists(PARA_FILE_PATH)){ //qDebug("PARA_FILE_PATH"); if(!file.open(QIODevice::ReadOnly)){ //QMessageBox::warning(0,("警告"),QString("无法打开配置文件 ") + PARA_FILE_PATH); loadDefaultPara(); } else { //qDebug("PARA_FILE_PATH1"); #if 0 QMessageBox::StandardButton ret = QMessageBox::Ok; qint32 copy_len; if(file.size() != sizeof(para)){ #ifdef VNLG ; #else ret = QMessageBox::warning(NULL,QString("警告"),QString("配置文件大小不一致,按 确定 将采取兼容方式读取配置文件,否则将恢复成默认设置"), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok ); #endif if(ret == QMessageBox::Ok){ if(file.size()>sizeof(print)) copy_len = sizeof(print); else copy_len = file.size(); file.seek(0); file.read((char *)¶,copy_len); file.close(); //qDebug("normal load para"); } else if(ret == QMessageBox::Cancel){ loadDefaultPara();//qDebug("loadDefaultPara"); file.close(); } } else #endif { file.seek(0); file.read((char *)¶,(long long int)sizeof(para)); file.close(); //////////////////// if (DeviceCodefile.isOpen()) { DeviceCodefile.close(); } //jdDataRwLock.lockForRead(); if(!DeviceCodefile.open(QIODevice::ReadOnly)){//怀疑是QIODevice::Truncate 引起参数错误,去掉试试看 //QMessageBox::warning(0,"警告",QString("无法打开文件") ); } else { DeviceCodefile.seek(0); //file.read((char *)&jd.addr,(long long int)sizeof(jd)); DeviceCodefile.read((char *)¶.Json_device_code,(qint64)sizeof(para.Json_device_code)); DeviceCodefile.close(); } ////////////// } } } else { #ifdef VNLG ; #else QMessageBox::information(0,QString("提示"),QString("这可能是你设备第一次上电,或是进行了出厂设置,我们将使用系统默认配置")); #endif loadDefaultPara(); //loadDefaultPara();//qDebug("loadDefaultPara2"); } //qDebug()<<"SYSPrar:"<sizeof(print)) copy_len = sizeof(print); else copy_len = file.size(); file.seek(0); file.read((char *)&print,copy_len); file.close(); } else { file.seek(0); file.read((char *)&print,(long long int)sizeof(print)); file.close(); memcpy( (char *)¶.alterPrint,(char *)&print.alterPrint,sizeof(alterPrint_t)) ; para.charBold = print.charBold ; #ifndef CABLEUSER para.SynCntEn = 0 ; para.autoSynSpeedEn =0 ; para.cnt1CurrValue =0 ; para.cnt1EndValue = 0 ; para.Cnt1NatureValue =0 ; #else para.SynCntEn = print.SynCntEn ; para.autoSynSpeedEn = print.autoSynSpeedEn ; para.cnt1CurrValue = print.cnt1CurrValue; // 20170313 cnt1StartValue;20191226 cnt1CurrValue para.cnt1EndValue = print.cnt1EndValue ; para.Cnt1NatureValue = print.Cnt1NatureValue ; #endif para.mixValveisNewVersion = 1; para.cnt1RepeateValue = print.cnt1RepeateValue ; para.cnt1StartValue = print.cnt1StartValue ; para.cnt1StepValue = print.cnt1StepValue ; para.cnt2CurrValue = print.cnt2CurrValue;//20170313 cnt2StartValue ; /// 20191226cnt2CurrValue para.cnt2EndValue = print.cnt2EndValue ; para.cnt2RepeateValue = print.cnt2RepeateValue ; para.cnt2StartValue = print.cnt2StartValue ; para.cnt2StepValue = print.cnt2StepValue ; para.cnt3CurrValue = print.cnt3CurrValue;//20170313 cnt2StartValue ; /// 20191226cnt2CurrValue para.cnt3EndValue = print.cnt3EndValue ; para.cnt3RepeateValue = print.cnt3RepeateValue ; para.cnt3StartValue = print.cnt3StartValue ; para.cnt3StepValue = print.cnt3StepValue ; para.currPrintMode = print.currPrintMode ; para.elecEyeTriggerInterval = print.elecEyeTriggerInterval ; para.eleEyeClearCntInSynMode = print.eleEyeClearCntInSynMode ; para.eleEyeTriggerPrintDelay = print.eleEyeTriggerPrintDelay ; para.eleEyeTriggerSynPrintEn = print.eleEyeTriggerSynPrintEn ; para.endVoltage = print.endVoltage ; para.extClearAllCntEnable = print.extClearAllCntEnable ; para.HighVoltageAmplitude = print.HighVoltageAmplitude ; para.lastLineEndPointFixedDACValue = print.lastLineEndPointFixedDACValue ; para.lastLineEndPointFixedValue = print.lastLineEndPointFixedValue ; para.FullColFixVal = print.FullColFixVal ; para.leftRightInverse = print.leftRightInverse ; para.lineEndAdjustPointCnt = print.lineEndAdjustPointCnt ; para.lineEndAdjustPointDelay = print.lineEndAdjustPointDelay ; para.outputPulseDelayMs = print.outputPulseDelayMs ; para.photoElectricityRepeateNum = print.photoElectricityRepeateNum ; para.pixNumPerCol = print.pixNumPerCol ; para.pointVoltageAdjustPos = print.pointVoltageAdjustPos ; para.PointVoltageAdjustValue = print.PointVoltageAdjustValue ; para.printColDelay = print.printColDelay ; para.printDelayMs = print.printDelayMs ; para.printDirection = print.printDirection ; para.printRowDelay = print.printRowDelay ; para.printTotalColNum = print.printTotalColNum ; para.printTriggerMode = print.printTriggerMode ; //打印触发模式 para.productCntPerOutputPulse = print.productCntPerOutputPulse ; para.productNumToGenerateOutputPulse = print.productNumToGenerateOutputPulse ; para.pulseOutputEnable = print.pulseOutputEnable ; para.reducedPixelMode = print.reducedPixelMode ; para.reducedPixelNum = print.reducedPixelNum ; para.reducedPixelNumRatio = print.reducedPixelNumRatio ; para.scanInverse = print.scanInverse ; para.startVoltage = print.startVoltage ; //print.stepPrint = print.stepPrint ; memcpy( (char *)¶.stepPrint,(char *)&print.stepPrint,sizeof(stepPrint_t)) ; memcpy( (char *)¶.adjVolDacRate,(char *)&print.adjVolDacRate,sizeof(print.adjVolDacRate)) ; para.synCharWidthRatio = print.synCharWidthRatio ; para.synClearCntInEleEyeMode = print.synClearCntInEleEyeMode ; #if 0 //不需要每个文件都存相位的参数 para.synPulseNumPerMm = print.synPulseNumPerMm ; para.synPulsePerMmX8 = print.synPulsePerMmX8 ; #endif para.synTriggerPrintLenMm = print.synTriggerPrintLenMm ; //喷印间隔 //para.synTriggerPrintLenRatio = print.synTriggerPrintLenRatio ; para.sysTriggerPrintMode = print.sysTriggerPrintMode ; para.timeTriggerPrintDelayMs = print.timeTriggerPrintDelayMs ; para.timeTriggerPrintMode = print.timeTriggerPrintMode ; //para.totalSynPulseNum = print.totalSynPulseNum ; para.upDownInverse = print.upDownInverse ; para.varLen = print.varLen; print.varLen1 = para.varLen1; para.varLenEn = print.varLenEn?1:0; para.headLen = print.headLen; para.endLen = print.endLen; para.set_HVData_Flag = 0; para.eleMaskTime = print.eleMaskTime; para.AltMirrorGap = print.AltMirrorGap; //para.weihu = print.wehu; //qDebug()<<"sysFile3:"<spinBoxHighLowRatio->value(); para.phaseHighLowRatio = print.phaseHighLowRatio; para.phaseShift = print.phaseShift; para.OuputPulseCol = print.OuputPulseCol; #ifndef FOR_PHASE_ADJUST print.phase_detect_pulse_num = 7; para.phaseDetectVol = 40; print.phaseDetectDelay = 100; #else para.phase_detect_pulse_num = print.phase_detect_pulse_num; if (print.phase_detect_pulse_num<3 || print.phase_detect_pulse_num>10) { print.phase_detect_pulse_num = 7; } para.phaseDetectVol = print.phaseDetectVol; if (print.phaseDetectVol < 28 || print.phaseDetectVol > 70) print.phaseDetectVol = 35; para.phaseDetectDelay = print.phaseDetectDelay;//120;// ui->spinBoxPhaseDetectDelay->value(); if (print.phaseDetectDelay < 70 || print.phaseDetectDelay > 150) print.phaseDetectDelay = 100; #endif para.enableChargeFullTime = 1; #endif } } } void SysPara::loadDefaultPrintPara(){ // memset(&print,0,sizeof(print)); // print.alterPrint.enable = 0; // print.stepPrint.enbale = 0; loadDefaultPara(); } void SysPara::savePrintParaToFile(){ qDebug()<<"savePrintParaToFile"; if(sysFile=="") return; QString fileName = QString( PARA_ROOT_DIR+QFileInfo( sysFile).baseName()+".dpn"); //qDebug()<<"savePrintParaToFile1:"<> 12; if(mode == FAST_PRINT ) { volParaFilePath = ":/conf/VoltParaHi.bin"; } else if(mode == STANDARD_PRINT) { volParaFilePath = PARA_ROOT_DIR"VoltParaStd.bin"; } if(status.build_dat.builTime == 73) volParaFilePath = ":/conf/VoltePara_No73.bin"; else if(type == 6){ if(status.currPrintRow<=21){ volParaFilePath = ":/conf/VoltDataStd21.bin"; } else if(status.currPrintRow <=25){ volParaFilePath = ":/conf/VoltDataStd25.bin"; } else volParaFilePath = ":/conf/VoltDataStd32.bin"; } QFile file(volParaFilePath); #if 1 QDir dir; char buf[200]; if (!dir.exists(DOC_ROOT_DIR)){ snprintf(buf, sizeof(buf), "mkdir -p %s", DOC_ROOT_DIR); system(buf); } if (!dir.exists(PARA_ROOT_DIR)){ snprintf(buf, sizeof(buf), "mkdir -p %s", PARA_ROOT_DIR); system(buf); } if (!dir.exists(PARA_ROOT_DIR)){ QMessageBox::warning(0, QString("warnning"), QString("Path") + PARA_ROOT_DIR + QString("not Found.")); return; } #endif if (file.exists(volParaFilePath)){ if (!file.open(QIODevice::ReadOnly)){ } else { QMessageBox::StandardButton ret = QMessageBox::Ok; qint32 copy_len; char *volteStruct = (char *)&voltePara; size_t sizeofVolteParaStruct = sizeof(voltePara); if(status.build_dat.builTime == 73){ volteStruct = (char *)&voltePara_No73; sizeofVolteParaStruct = sizeof(voltePara_No73); } else if(type == 6){ memset(&voltePara_25Dots,0,sizeof(voltePara_25Dots)); volteStruct = (char *)&voltePara_25Dots; sizeofVolteParaStruct = sizeof(voltePara_25Dots); } if (file.size() != sizeofVolteParaStruct){ qDebug()<<"注意,电压文件大小不对!"; // LogInfo::setRunStatusText(QString("注意,电压文件大小不对!")); #ifdef VNLG ; #else ret = QMessageBox::warning(NULL, QString("警告"), QString("配置文件大小不一致,按 确定 将采取兼容方式读取配置文件"), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok); #endif if (ret == QMessageBox::Ok){ copy_len = file.size() < sizeofVolteParaStruct?file.size():sizeofVolteParaStruct; file.seek(0); file.read(volteStruct, copy_len); file.close(); } else if (ret == QMessageBox::Cancel){ file.close(); } } else { file.seek(0); file.read(volteStruct, (long long int)sizeofVolteParaStruct); file.close(); } } } else{ qDebug()<<"There is no Volte Para File."; LogInfo::setRunStatusText(QString("There is no Volte Para File.")); } }