diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index f4a7d86..c0a9da5 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -1893,30 +1893,30 @@ QList BaseCommonApi::getInstructionLib(QString verification_program_id) { QList result; - QSqlQuery query; - query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); - query.bindValue(":verification_program_id", verification_program_id); - if (query.exec()) { - while (query.next()) { - InstructionLib instruction; - instruction.id = query.value("id").toString(); - instruction.device_id = query.value("device_id").toString(); - instruction.device_name = query.value("device_name").toString(); - instruction.instruct_config = query.value("instruct_config").toString(); - instruction.instruct_read = query.value("instruct_read").toString(); - instruction.type = query.value("type").toString(); - instruction.belong_vername = query.value("belong_vername").toString(); - instruction.belong_checkname = query.value("belong_checkname").toString(); - instruction.verification_program_id = query.value("verification_program_id").toString(); - instruction.create_time = query.value("create_time").toDateTime(); - instruction.update_time = query.value("update_time").toDateTime(); - instruction.param = query.value("param").toString(); - result.append(instruction); - } - } else { - qDebug() << "Query execution failed: " << query.lastError().text(); - } - return result; + QSqlQuery query; + query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); + query.bindValue(":verification_program_id", verification_program_id); + if (query.exec()) { + while (query.next()) { + InstructionLib instruction; + instruction.id = query.value("id").toString(); + instruction.device_id = query.value("device_id").toString(); + instruction.device_name = query.value("device_name").toString(); + instruction.instruct_config = query.value("instruct_config").toString(); + instruction.instruct_read = query.value("instruct_read").toString(); + instruction.type = query.value("type").toString(); + instruction.belong_vername = query.value("belong_vername").toString(); + instruction.belong_checkname = query.value("belong_checkname").toString(); + instruction.verification_program_id = query.value("verification_program_id").toString(); + instruction.create_time = query.value("create_time").toDateTime(); + instruction.update_time = query.value("update_time").toDateTime(); + instruction.param = query.value("param").toString(); + result.append(instruction); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + return result; }; //查询检定项用于在新增指令时筛选 例如DCV ACI 如果equipment_item_category_id为空查询所有 QList BaseCommonApi::getParams(QString belong_standard_equipment_id,QString equipment_item_category_id) @@ -3978,7 +3978,7 @@ resultData.clear(); QSqlQuery query; - query.prepare("SELECT * FROM biz_business_device_measure_item_data_oscilloscope bbdmido" + query.prepare("SELECT *,bbdmii.band_width as BW FROM biz_business_device_measure_item_data_oscilloscope bbdmido" " JOIN biz_business_device_measure_item_info bbdmii ON bbdmii.id = bbdmido.item_id " " WHERE bbdmido.item_id = :itemId ORDER BY bbdmido.update_time DESC"); // 将参数绑定到占位符 @@ -3991,7 +3991,7 @@ result.append(query.value("time_base").toString());//时基 result.append(query.value("current_gain").toString());//直流增益(示波器-数字) result.append(query.value("current_bias").toString());//直流偏置(示波器-数字) - result.append(query.value("band_width").toString());//频带宽度 (示波器-数字/模拟) + result.append(query.value("BW").toString());//频带宽度 (示波器-数字/模拟) result.append(query.value("trigger_sensitivity").toString());//触发灵敏度(示波器-数字/模拟) result.append(query.value("rise_time").toString());//上升时间(示波器-数字/模拟) result.append(query.value("input_resistance").toString());//输入电阻 (示波器-数字/模拟) @@ -4017,6 +4017,7 @@ result.append(query.value("nominal_value").toString());//标称值 result.append(query.value("nominal_value_unit").toString());//标称值单位 result.append(query.value("data_type").toString());// + result.append(query.value("item_type").toString());// result.append(query.value("create_time").toString()); result.append(query.value("update_time").toString()); resultData.append(result); @@ -4069,7 +4070,6 @@ QStringList head; //添加列头 head <<"序号"<<"检定项目"<<"通道"<<"阻抗" <<"幅度/DIV" <<"标准值" - <<"单位" <<"测量值"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4078,9 +4078,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[28]);//标准值 - Data.append(row[29]);//标准值单位 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//相对误差 Data.append(row[13]);//技术指标 @@ -4091,7 +4090,7 @@ VerificationItem = "直流偏置"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)"<<"标准值" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV"<<"标准值" <<"测量值"<<"误差"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4100,8 +4099,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[19]);//标准值 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//误差 Data.append("");//相对误差 @@ -4113,7 +4112,7 @@ VerificationItem = "频带宽度"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" <<"标准值" << "频带宽度" <<"参考幅度" <<"参考幅度单位" <<"测量幅度" <<"测量幅度单位" <<"分贝数(dB)" <<"技术指标" << "结论"; HeadMapList->insert(VerificationItem,head); @@ -4123,12 +4122,13 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[22]);//频带宽度 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 + Data.append(row[22]+row[23]);//频带宽度 Data.append("");//参考幅度 - Data.append("");//参考幅度单位 + Data.append(row[19]);//参考幅度单位 Data.append("");//测量幅度 - Data.append("");//测量幅度单位 + Data.append(row[19]);//测量幅度单位 Data.append("");//分贝数(dB) Data.append(row[13]);//技术指标 Data.append("");//结论 @@ -4150,14 +4150,15 @@ Data.append(row[27]);//信号频率 Data.append(row[28]);//标称值 Data.append("");//测量值 + Data.append("");//结论 trigger_sensitivity.append(Data); } if (!row.isEmpty() && row[7]=="1" && row[30] =="6") { VerificationItem = "上升时间"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" - <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" + <<"标准值" <<"测量值"<<"单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 QStringList Data; @@ -4165,9 +4166,10 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 - Data.append("");//测量值单位 + Data.append("ns");//测量值单位 Data.append(row[13]);//技术指标 Data.append("");//结论 rise_timeList.append(Data); @@ -4176,7 +4178,7 @@ VerificationItem = "输入电阻"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"幅度/DIV" <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4185,7 +4187,7 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[28]+row[29]);//标称值 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) Data.append("");//测量值 Data.append("");//测量值单位 Data.append(row[13]);//技术指标 @@ -4203,13 +4205,13 @@ QStringList Data; Data.append(row[0]); //ID Data.append(VerificationItem); //检定项目 - Data.append(row[30]);//项目 + Data.append(row[31]);//项目 Data.append(row[28]+row[29]);//标称值 Data.append("");//顶部测量值 Data.append("");//底部测量值 Data.append("");//测量值 Data.append("");//测量值单位 - Data.append(row[13]);//技术指标 + Data.append("");//相对误差 calibrating_signalList.append(Data); } diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index f4a7d86..c0a9da5 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -1893,30 +1893,30 @@ QList BaseCommonApi::getInstructionLib(QString verification_program_id) { QList result; - QSqlQuery query; - query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); - query.bindValue(":verification_program_id", verification_program_id); - if (query.exec()) { - while (query.next()) { - InstructionLib instruction; - instruction.id = query.value("id").toString(); - instruction.device_id = query.value("device_id").toString(); - instruction.device_name = query.value("device_name").toString(); - instruction.instruct_config = query.value("instruct_config").toString(); - instruction.instruct_read = query.value("instruct_read").toString(); - instruction.type = query.value("type").toString(); - instruction.belong_vername = query.value("belong_vername").toString(); - instruction.belong_checkname = query.value("belong_checkname").toString(); - instruction.verification_program_id = query.value("verification_program_id").toString(); - instruction.create_time = query.value("create_time").toDateTime(); - instruction.update_time = query.value("update_time").toDateTime(); - instruction.param = query.value("param").toString(); - result.append(instruction); - } - } else { - qDebug() << "Query execution failed: " << query.lastError().text(); - } - return result; + QSqlQuery query; + query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); + query.bindValue(":verification_program_id", verification_program_id); + if (query.exec()) { + while (query.next()) { + InstructionLib instruction; + instruction.id = query.value("id").toString(); + instruction.device_id = query.value("device_id").toString(); + instruction.device_name = query.value("device_name").toString(); + instruction.instruct_config = query.value("instruct_config").toString(); + instruction.instruct_read = query.value("instruct_read").toString(); + instruction.type = query.value("type").toString(); + instruction.belong_vername = query.value("belong_vername").toString(); + instruction.belong_checkname = query.value("belong_checkname").toString(); + instruction.verification_program_id = query.value("verification_program_id").toString(); + instruction.create_time = query.value("create_time").toDateTime(); + instruction.update_time = query.value("update_time").toDateTime(); + instruction.param = query.value("param").toString(); + result.append(instruction); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + return result; }; //查询检定项用于在新增指令时筛选 例如DCV ACI 如果equipment_item_category_id为空查询所有 QList BaseCommonApi::getParams(QString belong_standard_equipment_id,QString equipment_item_category_id) @@ -3978,7 +3978,7 @@ resultData.clear(); QSqlQuery query; - query.prepare("SELECT * FROM biz_business_device_measure_item_data_oscilloscope bbdmido" + query.prepare("SELECT *,bbdmii.band_width as BW FROM biz_business_device_measure_item_data_oscilloscope bbdmido" " JOIN biz_business_device_measure_item_info bbdmii ON bbdmii.id = bbdmido.item_id " " WHERE bbdmido.item_id = :itemId ORDER BY bbdmido.update_time DESC"); // 将参数绑定到占位符 @@ -3991,7 +3991,7 @@ result.append(query.value("time_base").toString());//时基 result.append(query.value("current_gain").toString());//直流增益(示波器-数字) result.append(query.value("current_bias").toString());//直流偏置(示波器-数字) - result.append(query.value("band_width").toString());//频带宽度 (示波器-数字/模拟) + result.append(query.value("BW").toString());//频带宽度 (示波器-数字/模拟) result.append(query.value("trigger_sensitivity").toString());//触发灵敏度(示波器-数字/模拟) result.append(query.value("rise_time").toString());//上升时间(示波器-数字/模拟) result.append(query.value("input_resistance").toString());//输入电阻 (示波器-数字/模拟) @@ -4017,6 +4017,7 @@ result.append(query.value("nominal_value").toString());//标称值 result.append(query.value("nominal_value_unit").toString());//标称值单位 result.append(query.value("data_type").toString());// + result.append(query.value("item_type").toString());// result.append(query.value("create_time").toString()); result.append(query.value("update_time").toString()); resultData.append(result); @@ -4069,7 +4070,6 @@ QStringList head; //添加列头 head <<"序号"<<"检定项目"<<"通道"<<"阻抗" <<"幅度/DIV" <<"标准值" - <<"单位" <<"测量值"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4078,9 +4078,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[28]);//标准值 - Data.append(row[29]);//标准值单位 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//相对误差 Data.append(row[13]);//技术指标 @@ -4091,7 +4090,7 @@ VerificationItem = "直流偏置"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)"<<"标准值" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV"<<"标准值" <<"测量值"<<"误差"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4100,8 +4099,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[19]);//标准值 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//误差 Data.append("");//相对误差 @@ -4113,7 +4112,7 @@ VerificationItem = "频带宽度"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" <<"标准值" << "频带宽度" <<"参考幅度" <<"参考幅度单位" <<"测量幅度" <<"测量幅度单位" <<"分贝数(dB)" <<"技术指标" << "结论"; HeadMapList->insert(VerificationItem,head); @@ -4123,12 +4122,13 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[22]);//频带宽度 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 + Data.append(row[22]+row[23]);//频带宽度 Data.append("");//参考幅度 - Data.append("");//参考幅度单位 + Data.append(row[19]);//参考幅度单位 Data.append("");//测量幅度 - Data.append("");//测量幅度单位 + Data.append(row[19]);//测量幅度单位 Data.append("");//分贝数(dB) Data.append(row[13]);//技术指标 Data.append("");//结论 @@ -4150,14 +4150,15 @@ Data.append(row[27]);//信号频率 Data.append(row[28]);//标称值 Data.append("");//测量值 + Data.append("");//结论 trigger_sensitivity.append(Data); } if (!row.isEmpty() && row[7]=="1" && row[30] =="6") { VerificationItem = "上升时间"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" - <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" + <<"标准值" <<"测量值"<<"单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 QStringList Data; @@ -4165,9 +4166,10 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 - Data.append("");//测量值单位 + Data.append("ns");//测量值单位 Data.append(row[13]);//技术指标 Data.append("");//结论 rise_timeList.append(Data); @@ -4176,7 +4178,7 @@ VerificationItem = "输入电阻"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"幅度/DIV" <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4185,7 +4187,7 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[28]+row[29]);//标称值 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) Data.append("");//测量值 Data.append("");//测量值单位 Data.append(row[13]);//技术指标 @@ -4203,13 +4205,13 @@ QStringList Data; Data.append(row[0]); //ID Data.append(VerificationItem); //检定项目 - Data.append(row[30]);//项目 + Data.append(row[31]);//项目 Data.append(row[28]+row[29]);//标称值 Data.append("");//顶部测量值 Data.append("");//底部测量值 Data.append("");//测量值 Data.append("");//测量值单位 - Data.append(row[13]);//技术指标 + Data.append("");//相对误差 calibrating_signalList.append(Data); } diff --git a/softwareDirectory/AutoVerScheme/checkwindow.cpp b/softwareDirectory/AutoVerScheme/checkwindow.cpp index cf8f54a..6e9fd04 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.cpp +++ b/softwareDirectory/AutoVerScheme/checkwindow.cpp @@ -57,6 +57,14 @@ unitTransList.insert("Ω",1); unitTransList.insert("KΩ",0.001); unitTransList.insert("MΩ",0.000001); + unitTransList.insert("HZ",1); + unitTransList.insert("kHZ",0.001); + unitTransList.insert("MHZ",0.000001); + unitTransList.insert("GHZ",0.000000001); + unitTransList.insert("S",1); + unitTransList.insert("MS",1E+3); + unitTransList.insert("PS",1E+12); + unitTransList.insert("NS",1E+9); //统一定义命令占位符 cmdPlaceHolderList.insert("{CH}","通道"); cmdPlaceHolderList.insert("{RANV}","量程"); @@ -69,15 +77,19 @@ cmdPlaceHolderList.insert("{STVAL}","标准值"); cmdPlaceHolderList.insert("{RAN}","量程"); cmdPlaceHolderList.insert("{FREQ}","频率"); + cmdPlaceHolderList.insert("{BW}","频带宽度"); cmdPlaceHolderList.insert("{UNIT}","单位"); cmdPlaceHolderList.insert("{FUNIT}","频率单位"); cmdPlaceHolderList.insert("{OHM}","阻抗"); + cmdPlaceHolderList.insert("{POS}","周期时标信号"); //示波器 cmdPlaceHolderList.insert("{OHM}","阻抗"); //转换 unitTypeTransList.insert("Ω","OHM"); unitTypeTransList.insert("KΩ","KOHM"); unitTypeTransList.insert("MΩ","MOHM"); + unitTypeTransList.insert("50Ω","0"); + unitTypeTransList.insert("1MΩ","1"); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -421,16 +433,19 @@ int idx2= getIndexByHeader(sLabel,"标准值"); int idx3= getIndexByHeader(sLabel,"单位"); int chname= getIndexByHeader(sLabel,"通道"); + if(idx==-1){idx=1;};if(idx2==-1){idx2=5;};if(idx3==-1){idx3=4;}; ui->tableWidget_Point->setItem(row, 0, new QTableWidgetItem(dataRes[i][idx])); ui->tableWidget_Point->setItem(row, 1, new QTableWidgetItem(dataRes[i][idx2]+"("+dataRes[i][idx3]+")")); ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; + if(chname!=-1&&!chList.contains(dataRes[i][chname])) { chList.append(dataRes[i][chname]); } } + // ======================================================================================== // 按钮设置显示 // ==================================================================================== @@ -444,7 +459,7 @@ //设置第一个按钮选中状态 if(index==0){ button->setChecked(true);} //button->setc(true); - // 设置按钮样式表 + // 设置按钮样式表 button->setStyleSheet("QPushButton {" "border: 1px solid white;" // 白色边框 "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 @@ -510,6 +525,8 @@ ui->HeadListLayout->addWidget(button); } } + std::sort(chList.begin(), chList.end()); + if(chList.count()==0){chList.append("CH1");}; ui->stackedWidget_2->setCurrentIndex(1); initCheckTable(0); } @@ -1136,6 +1153,21 @@ } return dTmp; } +double CheckWindow::tranunitSplit(QString sData,bool reverse) +{ + + QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); + if(re.match(sData).hasMatch()) + { + QString sData2=sData; + QString sNewData,sUnit; + ItemUnitSplit(sData,sNewData,sUnit); + return transUnit(sNewData,sUnit,reverse); + }else{ + return sData.toDouble(); + } + +} QString CheckWindow::TranTypeUnit(QString sUnit) { QString NewsUnit=sUnit; @@ -1151,24 +1183,25 @@ if(dex==-1) dex=getIndexByHeader(sLabel,"标准器示值"); if(dex==-1) + dex=getIndexByHeader(sLabel,"标称值"); + if(dex==-1) return QString::number(TestValue); - QString StanValue=data[dex]; - int decimalPlaces = 0; - int decimalPos = StanValue.indexOf('.'); + + QString StanValue=Removeunit(data[dex]); + int decimalPlaces = 0; + int decimalPos = StanValue.indexOf('.'); if (decimalPos == -1) { decimalPlaces=1; }else{ decimalPlaces=StanValue.length() - decimalPos - 1; } - - QString formattedTestValue = QString::number(TestValue, 'f', decimalPlaces); return formattedTestValue; } QString CheckWindow::transCmd(QString sCmd,QString sLabel,QStringList data,bool devicetype) { QString sNewCmd = sCmd; - if(sNewCmd.contains("DELAY:")){ + if(sNewCmd.contains("{DELAY:")){ QRegExp re("DELAY:(\\d+)"); int delay=0; if (re.indexIn(sNewCmd) != -1) { @@ -1184,15 +1217,28 @@ if(sCmd.contains(key)){ int idx= getIndexByHeader(sLabel,cmdPlaceHolderList.value(key)); if(idx!=-1){ - if(devicetype) + if(devicetype || key=="{CH}") { NewUnit = TranTypeUnit(data[idx]); //转换 Ω->OHM sNewCmd = sNewCmd.replace(key,NewUnit); continue; } - int idx2= getIndexByHeader(sLabel,"单位"); - QString unit = data[idx2]; - double dTmp = transUnit(data[idx],unit,true); + double dTmp; + QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); + if(re.match(data[idx]).hasMatch()) + { + dTmp = tranunitSplit(data[idx],true); + }else + { + int idx2= getIndexByHeader(sLabel,"单位"); + if(idx2!=-1) + { + QString unit = data[idx2]; + dTmp = transUnit(data[idx],unit,true); + }else{ + dTmp=data[idx].toDouble(); + }; + } sNewCmd = sNewCmd.replace(key,QString::number(dTmp)); } @@ -1200,6 +1246,7 @@ } return sNewCmd; } + //_text void CheckWindow::on_pushButton_start_clicked() { @@ -1281,9 +1328,9 @@ void CheckWindow::autoAdujstData(QString sLabel,int i,double dStdValue,QList& dataRes){ double dError; - QString newdStdValue,newdError; + QString newdStdValue,newdError,Value; if(iEquipType==1 || iEquipType==13){ - if(qIsFinite(dStdValue)){ + if(dStdValue==FP_INFINITE){ bool bOk = false; dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,5,&bOk); @@ -1293,7 +1340,10 @@ dStdValue=0; } } - newdStdValue= TranDecimals(sLabel,dataRes[i],dStdValue); + // ItemUnitSplit + + newdStdValue= TranDecimals(sLabel, dataRes[i],dStdValue); + int idx= getIndexByHeader(sLabel,"示值"); if(idx!=-1) { @@ -1320,11 +1370,16 @@ if(idx!=-1) { int idx2=getIndexByHeader(sLabel,"标准值"); - double dTmp = dataRes[i][idx2].toDouble(); - dError = (dStdValue-dTmp); - newdError=TranDecimals(sLabel,dataRes[i],dError); - dataRes[i][idx] = newdError; - ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); + if(idx2==-1) + idx2=getIndexByHeader(sLabel,"标称值"); + if(idx2!=-1){ + double dTmp = dataRes[i][idx2].toDouble(); + dError = (dStdValue-dTmp); + newdError=TranDecimals(sLabel,dataRes[i],dError); + dataRes[i][idx] = newdError; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); + } + } idx= getIndexByHeader(sLabel,"结论"); if(idx!=-1) @@ -1333,6 +1388,61 @@ ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem("符合指标")); //测量值 } + idx= getIndexByHeader(sLabel,"测量幅度"); + if(idx!=-1) + { + QString textValue= ui->tableWidgetCheck->item(i,idx)->text(); + + if(textValue==""){ + dataRes[i][idx] = newdStdValue; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); //测试 + }else + { + idx= getIndexByHeader(sLabel,"参考幅度"); + QString refvalue= newdStdValue; + dataRes[i][idx] = refvalue; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(refvalue)); //参考 + // 计算a除以b的对数(以10为底) + double logResult = std::log10( refvalue.toDouble() / textValue.toDouble()); + double result = 20 * logResult; + idx= getIndexByHeader(sLabel,"分贝数(dB)"); + if(idx!=-1) + { + QString newresult; + newresult=TranDecimals(sLabel, dataRes[i],result); + dataRes[i][idx] = newresult; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newresult)); //分贝数 + } + + } + } + idx= getIndexByHeader(sLabel,"周期时标信号"); + if(idx!=-1) + { + double ErrorCal; + QString sign=""; + if(dStdValue>0.2){sign="-";}; + + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动输入","请输入△T/ns值",0,-100000, 100000,5,&bOk); + if (bOk) { + }else{ + dStdValue=0; + } + dStdValue=transUnit(QString::number(dStdValue),"ns",true); + ErrorCal=std::fabs(dStdValue); + idx= getIndexByHeader(sLabel,"时基绝对误差△T/ns"); + if(idx!=-1){ + dataRes[i][idx] =sign+QString::number(ErrorCal); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal))); //测量值 + } + + idx= getIndexByHeader(sLabel,"时基相对误差△δ"); + { + dataRes[i][idx] =sign+QString::number(ErrorCal/0.01); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal/0.01))); //测量值 + } + } BaseCommonApi::SaveLogInfo(1,QString("转换前 测试值 %1").arg(dStdValue)); BaseCommonApi::SaveLogInfo(1,QString("转换后 测试值 %1").arg(newdStdValue)); @@ -1468,37 +1578,118 @@ } void CheckWindow::Oscilloscopetextflow() { + connectDevice(); + for (int _ch=0;_chshowDialog("通道切换提示",QString("请切换 %1 通道").arg(chList[_ch]))){continue;} for(int i=0;i dataRes = caliDataList.value(sLabel); - BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(_ch).arg(sLabel)); + BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(chList[_ch]).arg(sLabel)); QString sParam; + QString ValueUnit; + InstructionLib *instrcutLibOhm; for (int i = 0; i < dataRes.count(); ++i) { + TextCount=1; int _dex= getIndexByHeader(sLabel,"通道"); - if(_dex==-1){sParam=_ch;}else{sParam=dataRes[i][_dex];} + if(_dex==-1){sParam=chList[_ch];}else{sParam=dataRes[i][_dex];} if(sParam!=chList[_ch]){continue;}; + CheckBackColorUpdate(true,i); QString sRet=""; QString newCmd; double dStdValue=FP_INFINITE; QString newdStdValue; - //标准器输出 - BaseCommonApi::SaveLogInfo(1,QString("标准器输出")); - QString sParam; int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam; if(idx!=-1) sParam = dataRes[i][idx]; - if(standardEngine.getState() || 1==1){ - InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); + InstructionLib *instrcutLibbiz=getCmdByCheckName(0,sParam); + InstructionLib *instrcutLibstan=getCmdByCheckName(1,sParam); + //INIT 被检设备 - 标准设备 + BaseCommonApi::SaveLogInfo(1,QString("INIT")); + InstructionLib *InItbiz; + InstructionLib *InItstan; + InItbiz= getCmdByCheckName(0,"INIT"); + InItstan= getCmdByCheckName(1,"INIT"); + if(InItbiz!=nullptr && instrcutLibbiz!=nullptr) + { + if(deviceEngine.getState()) + { + //设置电阻值+ + instrcutLibOhm= getCmdByCheckName(0,"电阻"); + if(instrcutLibOhm!=nullptr){ + QStringList ohmList = instrcutLibOhm->instruct_config.split(";"); + int idxohm= getIndexByHeader(sLabel,"阻抗"); + if(idxohm!=-1) + { + QString onmname="50Ω"; + QString CmdOhm; + onmname=dataRes[i][idxohm]; + if(onmname=="50Ω"){CmdOhm=ohmList[0];}else{CmdOhm=ohmList[1];}; + newCmd = transCmd(CmdOhm,sLabel,dataRes[i],true); + deviceEngine.sendData(newCmd); + } + } + //读取配置指令 + + QStringList sList = InItbiz->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + deviceEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + }; + + } + + if(InItstan!=nullptr && instrcutLibstan!=nullptr) + { + if(standardEngine.getState()) + { + //读取配置指令 + QStringList sList = InItstan->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + standardEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + } + + } + + if(sParam=="频带宽度"){TextCount=2;}; + for (int d=0;dinstruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + if(d==1&& sCmd.contains("{BW}")) + { + sCmd.replace("{BW}","50000"); + } + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + if(newCmd!=""){ standardEngine.sendData(newCmd); qDebug() << "standard cmds:" << newCmd; @@ -1509,10 +1700,9 @@ } //被检设备读数 BaseCommonApi::SaveLogInfo(1,QString("被检设备输出")); - if(deviceEngine.getState() || 1==1){ - InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); + if(deviceEngine.getState()){ + if(instrcutLibbiz!=nullptr){ + QStringList sList = instrcutLibbiz->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); @@ -1522,18 +1712,83 @@ } } } - - newCmd = transCmd(instrcutLib->instruct_read,sLabel,dataRes[i]); + newCmd = transCmd(instrcutLibbiz->instruct_read,sLabel,dataRes[i]); if(newCmd!=""){ qDebug() << "query cmds:" << newCmd; + sRet = deviceEngine.queryData(newCmd); idx= getIndexByHeader(sLabel,"单位"); - dStdValue = transUnit(sRet,dataRes[i][idx]); + //ValueUnit + if(idx!=-1) + { + ValueUnit=dataRes[i][idx]; + }else + { + int idx= getIndexByHeader(sLabel,"标准值"); + if(idx==-1) + idx= getIndexByHeader(sLabel,"标称值"); + if(idx!=-1) + ItemUnitSplit(dataRes[i][idx],ValueUnit,ValueUnit); + + } + dStdValue = transUnit(sRet,ValueUnit); + + } + } + + } + + + autoAdujstData(sLabel,i,dStdValue,dataRes); + CheckBackColorUpdate(false,i); + Delay_MSec(2000); + } + //CLOSE 被检设备 - 标准设备 + BaseCommonApi::SaveLogInfo(1,QString("CLOSE")); + InstructionLib *Closebiz; + InstructionLib *Closestan; + Closebiz= getCmdByCheckName(0,"CLOSE"); + Closestan= getCmdByCheckName(1,"CLOSE"); + if(Closestan!=nullptr && instrcutLibstan!=nullptr) + { + if(standardEngine.getState()) + { + //读取配置指令 + QStringList sList = Closestan->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + standardEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } } } + } } - autoAdujstData(sLabel,i,dStdValue,dataRes); - Delay_MSec(2000); + // + if(Closebiz!=nullptr && instrcutLibbiz!=nullptr) + { + if(deviceEngine.getState()) + { + //读取配置指令 + QStringList sList = Closebiz->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + deviceEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + }; + + } + + } caliDataList.insert(sLabel,dataRes); @@ -1673,3 +1928,45 @@ } return IsSucc; } +void CheckWindow::ItemUnitSplit(QString Value,QString &data,QString &unit) +{ + QString sData2=Value; + QString sNewData,sUnit; + // 正则表达式匹配数字 + QRegularExpression reLetters("[a-zA-ZΩΜΩ]"); + QRegularExpression reLetters1("[^a-zA-ZΩΜΩ]"); + data=sData2.replace(reLetters,""); + unit= Value.replace(reLetters1,""); + +} +void CheckWindow::CheckBackColorUpdate(bool State,int row) +{ + QBrush colorBrush(Qt::white); + if(State) + { + QColor lightGreenColor(173, 216, 230); + colorBrush.setColor(lightGreenColor); + } + for (int col = 0; col < ui->tableWidgetCheck->columnCount(); ++col) { + QTableWidgetItem *item = ui->tableWidgetCheck->item(row, col); + if (item) { + item->setBackground(colorBrush); + } + } +} +QString CheckWindow::Removeunit(QString data) +{ + QRegularExpression re("[a-zA-ZΩΜΩ]"); + return data.replace(re,""); +} +bool CheckWindow::showDialog(QString title,QString mess) +{ + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, title, mess, + QMessageBox::Yes|QMessageBox::No); + if (reply == QMessageBox::Yes) { + return true; + } else { + return false; + } +} diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index f4a7d86..c0a9da5 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -1893,30 +1893,30 @@ QList BaseCommonApi::getInstructionLib(QString verification_program_id) { QList result; - QSqlQuery query; - query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); - query.bindValue(":verification_program_id", verification_program_id); - if (query.exec()) { - while (query.next()) { - InstructionLib instruction; - instruction.id = query.value("id").toString(); - instruction.device_id = query.value("device_id").toString(); - instruction.device_name = query.value("device_name").toString(); - instruction.instruct_config = query.value("instruct_config").toString(); - instruction.instruct_read = query.value("instruct_read").toString(); - instruction.type = query.value("type").toString(); - instruction.belong_vername = query.value("belong_vername").toString(); - instruction.belong_checkname = query.value("belong_checkname").toString(); - instruction.verification_program_id = query.value("verification_program_id").toString(); - instruction.create_time = query.value("create_time").toDateTime(); - instruction.update_time = query.value("update_time").toDateTime(); - instruction.param = query.value("param").toString(); - result.append(instruction); - } - } else { - qDebug() << "Query execution failed: " << query.lastError().text(); - } - return result; + QSqlQuery query; + query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); + query.bindValue(":verification_program_id", verification_program_id); + if (query.exec()) { + while (query.next()) { + InstructionLib instruction; + instruction.id = query.value("id").toString(); + instruction.device_id = query.value("device_id").toString(); + instruction.device_name = query.value("device_name").toString(); + instruction.instruct_config = query.value("instruct_config").toString(); + instruction.instruct_read = query.value("instruct_read").toString(); + instruction.type = query.value("type").toString(); + instruction.belong_vername = query.value("belong_vername").toString(); + instruction.belong_checkname = query.value("belong_checkname").toString(); + instruction.verification_program_id = query.value("verification_program_id").toString(); + instruction.create_time = query.value("create_time").toDateTime(); + instruction.update_time = query.value("update_time").toDateTime(); + instruction.param = query.value("param").toString(); + result.append(instruction); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + return result; }; //查询检定项用于在新增指令时筛选 例如DCV ACI 如果equipment_item_category_id为空查询所有 QList BaseCommonApi::getParams(QString belong_standard_equipment_id,QString equipment_item_category_id) @@ -3978,7 +3978,7 @@ resultData.clear(); QSqlQuery query; - query.prepare("SELECT * FROM biz_business_device_measure_item_data_oscilloscope bbdmido" + query.prepare("SELECT *,bbdmii.band_width as BW FROM biz_business_device_measure_item_data_oscilloscope bbdmido" " JOIN biz_business_device_measure_item_info bbdmii ON bbdmii.id = bbdmido.item_id " " WHERE bbdmido.item_id = :itemId ORDER BY bbdmido.update_time DESC"); // 将参数绑定到占位符 @@ -3991,7 +3991,7 @@ result.append(query.value("time_base").toString());//时基 result.append(query.value("current_gain").toString());//直流增益(示波器-数字) result.append(query.value("current_bias").toString());//直流偏置(示波器-数字) - result.append(query.value("band_width").toString());//频带宽度 (示波器-数字/模拟) + result.append(query.value("BW").toString());//频带宽度 (示波器-数字/模拟) result.append(query.value("trigger_sensitivity").toString());//触发灵敏度(示波器-数字/模拟) result.append(query.value("rise_time").toString());//上升时间(示波器-数字/模拟) result.append(query.value("input_resistance").toString());//输入电阻 (示波器-数字/模拟) @@ -4017,6 +4017,7 @@ result.append(query.value("nominal_value").toString());//标称值 result.append(query.value("nominal_value_unit").toString());//标称值单位 result.append(query.value("data_type").toString());// + result.append(query.value("item_type").toString());// result.append(query.value("create_time").toString()); result.append(query.value("update_time").toString()); resultData.append(result); @@ -4069,7 +4070,6 @@ QStringList head; //添加列头 head <<"序号"<<"检定项目"<<"通道"<<"阻抗" <<"幅度/DIV" <<"标准值" - <<"单位" <<"测量值"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4078,9 +4078,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[28]);//标准值 - Data.append(row[29]);//标准值单位 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//相对误差 Data.append(row[13]);//技术指标 @@ -4091,7 +4090,7 @@ VerificationItem = "直流偏置"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)"<<"标准值" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV"<<"标准值" <<"测量值"<<"误差"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4100,8 +4099,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[19]);//标准值 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//误差 Data.append("");//相对误差 @@ -4113,7 +4112,7 @@ VerificationItem = "频带宽度"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" <<"标准值" << "频带宽度" <<"参考幅度" <<"参考幅度单位" <<"测量幅度" <<"测量幅度单位" <<"分贝数(dB)" <<"技术指标" << "结论"; HeadMapList->insert(VerificationItem,head); @@ -4123,12 +4122,13 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[22]);//频带宽度 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 + Data.append(row[22]+row[23]);//频带宽度 Data.append("");//参考幅度 - Data.append("");//参考幅度单位 + Data.append(row[19]);//参考幅度单位 Data.append("");//测量幅度 - Data.append("");//测量幅度单位 + Data.append(row[19]);//测量幅度单位 Data.append("");//分贝数(dB) Data.append(row[13]);//技术指标 Data.append("");//结论 @@ -4150,14 +4150,15 @@ Data.append(row[27]);//信号频率 Data.append(row[28]);//标称值 Data.append("");//测量值 + Data.append("");//结论 trigger_sensitivity.append(Data); } if (!row.isEmpty() && row[7]=="1" && row[30] =="6") { VerificationItem = "上升时间"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" - <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" + <<"标准值" <<"测量值"<<"单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 QStringList Data; @@ -4165,9 +4166,10 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 - Data.append("");//测量值单位 + Data.append("ns");//测量值单位 Data.append(row[13]);//技术指标 Data.append("");//结论 rise_timeList.append(Data); @@ -4176,7 +4178,7 @@ VerificationItem = "输入电阻"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"幅度/DIV" <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4185,7 +4187,7 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[28]+row[29]);//标称值 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) Data.append("");//测量值 Data.append("");//测量值单位 Data.append(row[13]);//技术指标 @@ -4203,13 +4205,13 @@ QStringList Data; Data.append(row[0]); //ID Data.append(VerificationItem); //检定项目 - Data.append(row[30]);//项目 + Data.append(row[31]);//项目 Data.append(row[28]+row[29]);//标称值 Data.append("");//顶部测量值 Data.append("");//底部测量值 Data.append("");//测量值 Data.append("");//测量值单位 - Data.append(row[13]);//技术指标 + Data.append("");//相对误差 calibrating_signalList.append(Data); } diff --git a/softwareDirectory/AutoVerScheme/checkwindow.cpp b/softwareDirectory/AutoVerScheme/checkwindow.cpp index cf8f54a..6e9fd04 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.cpp +++ b/softwareDirectory/AutoVerScheme/checkwindow.cpp @@ -57,6 +57,14 @@ unitTransList.insert("Ω",1); unitTransList.insert("KΩ",0.001); unitTransList.insert("MΩ",0.000001); + unitTransList.insert("HZ",1); + unitTransList.insert("kHZ",0.001); + unitTransList.insert("MHZ",0.000001); + unitTransList.insert("GHZ",0.000000001); + unitTransList.insert("S",1); + unitTransList.insert("MS",1E+3); + unitTransList.insert("PS",1E+12); + unitTransList.insert("NS",1E+9); //统一定义命令占位符 cmdPlaceHolderList.insert("{CH}","通道"); cmdPlaceHolderList.insert("{RANV}","量程"); @@ -69,15 +77,19 @@ cmdPlaceHolderList.insert("{STVAL}","标准值"); cmdPlaceHolderList.insert("{RAN}","量程"); cmdPlaceHolderList.insert("{FREQ}","频率"); + cmdPlaceHolderList.insert("{BW}","频带宽度"); cmdPlaceHolderList.insert("{UNIT}","单位"); cmdPlaceHolderList.insert("{FUNIT}","频率单位"); cmdPlaceHolderList.insert("{OHM}","阻抗"); + cmdPlaceHolderList.insert("{POS}","周期时标信号"); //示波器 cmdPlaceHolderList.insert("{OHM}","阻抗"); //转换 unitTypeTransList.insert("Ω","OHM"); unitTypeTransList.insert("KΩ","KOHM"); unitTypeTransList.insert("MΩ","MOHM"); + unitTypeTransList.insert("50Ω","0"); + unitTypeTransList.insert("1MΩ","1"); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -421,16 +433,19 @@ int idx2= getIndexByHeader(sLabel,"标准值"); int idx3= getIndexByHeader(sLabel,"单位"); int chname= getIndexByHeader(sLabel,"通道"); + if(idx==-1){idx=1;};if(idx2==-1){idx2=5;};if(idx3==-1){idx3=4;}; ui->tableWidget_Point->setItem(row, 0, new QTableWidgetItem(dataRes[i][idx])); ui->tableWidget_Point->setItem(row, 1, new QTableWidgetItem(dataRes[i][idx2]+"("+dataRes[i][idx3]+")")); ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; + if(chname!=-1&&!chList.contains(dataRes[i][chname])) { chList.append(dataRes[i][chname]); } } + // ======================================================================================== // 按钮设置显示 // ==================================================================================== @@ -444,7 +459,7 @@ //设置第一个按钮选中状态 if(index==0){ button->setChecked(true);} //button->setc(true); - // 设置按钮样式表 + // 设置按钮样式表 button->setStyleSheet("QPushButton {" "border: 1px solid white;" // 白色边框 "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 @@ -510,6 +525,8 @@ ui->HeadListLayout->addWidget(button); } } + std::sort(chList.begin(), chList.end()); + if(chList.count()==0){chList.append("CH1");}; ui->stackedWidget_2->setCurrentIndex(1); initCheckTable(0); } @@ -1136,6 +1153,21 @@ } return dTmp; } +double CheckWindow::tranunitSplit(QString sData,bool reverse) +{ + + QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); + if(re.match(sData).hasMatch()) + { + QString sData2=sData; + QString sNewData,sUnit; + ItemUnitSplit(sData,sNewData,sUnit); + return transUnit(sNewData,sUnit,reverse); + }else{ + return sData.toDouble(); + } + +} QString CheckWindow::TranTypeUnit(QString sUnit) { QString NewsUnit=sUnit; @@ -1151,24 +1183,25 @@ if(dex==-1) dex=getIndexByHeader(sLabel,"标准器示值"); if(dex==-1) + dex=getIndexByHeader(sLabel,"标称值"); + if(dex==-1) return QString::number(TestValue); - QString StanValue=data[dex]; - int decimalPlaces = 0; - int decimalPos = StanValue.indexOf('.'); + + QString StanValue=Removeunit(data[dex]); + int decimalPlaces = 0; + int decimalPos = StanValue.indexOf('.'); if (decimalPos == -1) { decimalPlaces=1; }else{ decimalPlaces=StanValue.length() - decimalPos - 1; } - - QString formattedTestValue = QString::number(TestValue, 'f', decimalPlaces); return formattedTestValue; } QString CheckWindow::transCmd(QString sCmd,QString sLabel,QStringList data,bool devicetype) { QString sNewCmd = sCmd; - if(sNewCmd.contains("DELAY:")){ + if(sNewCmd.contains("{DELAY:")){ QRegExp re("DELAY:(\\d+)"); int delay=0; if (re.indexIn(sNewCmd) != -1) { @@ -1184,15 +1217,28 @@ if(sCmd.contains(key)){ int idx= getIndexByHeader(sLabel,cmdPlaceHolderList.value(key)); if(idx!=-1){ - if(devicetype) + if(devicetype || key=="{CH}") { NewUnit = TranTypeUnit(data[idx]); //转换 Ω->OHM sNewCmd = sNewCmd.replace(key,NewUnit); continue; } - int idx2= getIndexByHeader(sLabel,"单位"); - QString unit = data[idx2]; - double dTmp = transUnit(data[idx],unit,true); + double dTmp; + QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); + if(re.match(data[idx]).hasMatch()) + { + dTmp = tranunitSplit(data[idx],true); + }else + { + int idx2= getIndexByHeader(sLabel,"单位"); + if(idx2!=-1) + { + QString unit = data[idx2]; + dTmp = transUnit(data[idx],unit,true); + }else{ + dTmp=data[idx].toDouble(); + }; + } sNewCmd = sNewCmd.replace(key,QString::number(dTmp)); } @@ -1200,6 +1246,7 @@ } return sNewCmd; } + //_text void CheckWindow::on_pushButton_start_clicked() { @@ -1281,9 +1328,9 @@ void CheckWindow::autoAdujstData(QString sLabel,int i,double dStdValue,QList& dataRes){ double dError; - QString newdStdValue,newdError; + QString newdStdValue,newdError,Value; if(iEquipType==1 || iEquipType==13){ - if(qIsFinite(dStdValue)){ + if(dStdValue==FP_INFINITE){ bool bOk = false; dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,5,&bOk); @@ -1293,7 +1340,10 @@ dStdValue=0; } } - newdStdValue= TranDecimals(sLabel,dataRes[i],dStdValue); + // ItemUnitSplit + + newdStdValue= TranDecimals(sLabel, dataRes[i],dStdValue); + int idx= getIndexByHeader(sLabel,"示值"); if(idx!=-1) { @@ -1320,11 +1370,16 @@ if(idx!=-1) { int idx2=getIndexByHeader(sLabel,"标准值"); - double dTmp = dataRes[i][idx2].toDouble(); - dError = (dStdValue-dTmp); - newdError=TranDecimals(sLabel,dataRes[i],dError); - dataRes[i][idx] = newdError; - ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); + if(idx2==-1) + idx2=getIndexByHeader(sLabel,"标称值"); + if(idx2!=-1){ + double dTmp = dataRes[i][idx2].toDouble(); + dError = (dStdValue-dTmp); + newdError=TranDecimals(sLabel,dataRes[i],dError); + dataRes[i][idx] = newdError; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); + } + } idx= getIndexByHeader(sLabel,"结论"); if(idx!=-1) @@ -1333,6 +1388,61 @@ ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem("符合指标")); //测量值 } + idx= getIndexByHeader(sLabel,"测量幅度"); + if(idx!=-1) + { + QString textValue= ui->tableWidgetCheck->item(i,idx)->text(); + + if(textValue==""){ + dataRes[i][idx] = newdStdValue; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); //测试 + }else + { + idx= getIndexByHeader(sLabel,"参考幅度"); + QString refvalue= newdStdValue; + dataRes[i][idx] = refvalue; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(refvalue)); //参考 + // 计算a除以b的对数(以10为底) + double logResult = std::log10( refvalue.toDouble() / textValue.toDouble()); + double result = 20 * logResult; + idx= getIndexByHeader(sLabel,"分贝数(dB)"); + if(idx!=-1) + { + QString newresult; + newresult=TranDecimals(sLabel, dataRes[i],result); + dataRes[i][idx] = newresult; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newresult)); //分贝数 + } + + } + } + idx= getIndexByHeader(sLabel,"周期时标信号"); + if(idx!=-1) + { + double ErrorCal; + QString sign=""; + if(dStdValue>0.2){sign="-";}; + + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动输入","请输入△T/ns值",0,-100000, 100000,5,&bOk); + if (bOk) { + }else{ + dStdValue=0; + } + dStdValue=transUnit(QString::number(dStdValue),"ns",true); + ErrorCal=std::fabs(dStdValue); + idx= getIndexByHeader(sLabel,"时基绝对误差△T/ns"); + if(idx!=-1){ + dataRes[i][idx] =sign+QString::number(ErrorCal); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal))); //测量值 + } + + idx= getIndexByHeader(sLabel,"时基相对误差△δ"); + { + dataRes[i][idx] =sign+QString::number(ErrorCal/0.01); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal/0.01))); //测量值 + } + } BaseCommonApi::SaveLogInfo(1,QString("转换前 测试值 %1").arg(dStdValue)); BaseCommonApi::SaveLogInfo(1,QString("转换后 测试值 %1").arg(newdStdValue)); @@ -1468,37 +1578,118 @@ } void CheckWindow::Oscilloscopetextflow() { + connectDevice(); + for (int _ch=0;_chshowDialog("通道切换提示",QString("请切换 %1 通道").arg(chList[_ch]))){continue;} for(int i=0;i dataRes = caliDataList.value(sLabel); - BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(_ch).arg(sLabel)); + BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(chList[_ch]).arg(sLabel)); QString sParam; + QString ValueUnit; + InstructionLib *instrcutLibOhm; for (int i = 0; i < dataRes.count(); ++i) { + TextCount=1; int _dex= getIndexByHeader(sLabel,"通道"); - if(_dex==-1){sParam=_ch;}else{sParam=dataRes[i][_dex];} + if(_dex==-1){sParam=chList[_ch];}else{sParam=dataRes[i][_dex];} if(sParam!=chList[_ch]){continue;}; + CheckBackColorUpdate(true,i); QString sRet=""; QString newCmd; double dStdValue=FP_INFINITE; QString newdStdValue; - //标准器输出 - BaseCommonApi::SaveLogInfo(1,QString("标准器输出")); - QString sParam; int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam; if(idx!=-1) sParam = dataRes[i][idx]; - if(standardEngine.getState() || 1==1){ - InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); + InstructionLib *instrcutLibbiz=getCmdByCheckName(0,sParam); + InstructionLib *instrcutLibstan=getCmdByCheckName(1,sParam); + //INIT 被检设备 - 标准设备 + BaseCommonApi::SaveLogInfo(1,QString("INIT")); + InstructionLib *InItbiz; + InstructionLib *InItstan; + InItbiz= getCmdByCheckName(0,"INIT"); + InItstan= getCmdByCheckName(1,"INIT"); + if(InItbiz!=nullptr && instrcutLibbiz!=nullptr) + { + if(deviceEngine.getState()) + { + //设置电阻值+ + instrcutLibOhm= getCmdByCheckName(0,"电阻"); + if(instrcutLibOhm!=nullptr){ + QStringList ohmList = instrcutLibOhm->instruct_config.split(";"); + int idxohm= getIndexByHeader(sLabel,"阻抗"); + if(idxohm!=-1) + { + QString onmname="50Ω"; + QString CmdOhm; + onmname=dataRes[i][idxohm]; + if(onmname=="50Ω"){CmdOhm=ohmList[0];}else{CmdOhm=ohmList[1];}; + newCmd = transCmd(CmdOhm,sLabel,dataRes[i],true); + deviceEngine.sendData(newCmd); + } + } + //读取配置指令 + + QStringList sList = InItbiz->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + deviceEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + }; + + } + + if(InItstan!=nullptr && instrcutLibstan!=nullptr) + { + if(standardEngine.getState()) + { + //读取配置指令 + QStringList sList = InItstan->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + standardEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + } + + } + + if(sParam=="频带宽度"){TextCount=2;}; + for (int d=0;dinstruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + if(d==1&& sCmd.contains("{BW}")) + { + sCmd.replace("{BW}","50000"); + } + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + if(newCmd!=""){ standardEngine.sendData(newCmd); qDebug() << "standard cmds:" << newCmd; @@ -1509,10 +1700,9 @@ } //被检设备读数 BaseCommonApi::SaveLogInfo(1,QString("被检设备输出")); - if(deviceEngine.getState() || 1==1){ - InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); + if(deviceEngine.getState()){ + if(instrcutLibbiz!=nullptr){ + QStringList sList = instrcutLibbiz->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); @@ -1522,18 +1712,83 @@ } } } - - newCmd = transCmd(instrcutLib->instruct_read,sLabel,dataRes[i]); + newCmd = transCmd(instrcutLibbiz->instruct_read,sLabel,dataRes[i]); if(newCmd!=""){ qDebug() << "query cmds:" << newCmd; + sRet = deviceEngine.queryData(newCmd); idx= getIndexByHeader(sLabel,"单位"); - dStdValue = transUnit(sRet,dataRes[i][idx]); + //ValueUnit + if(idx!=-1) + { + ValueUnit=dataRes[i][idx]; + }else + { + int idx= getIndexByHeader(sLabel,"标准值"); + if(idx==-1) + idx= getIndexByHeader(sLabel,"标称值"); + if(idx!=-1) + ItemUnitSplit(dataRes[i][idx],ValueUnit,ValueUnit); + + } + dStdValue = transUnit(sRet,ValueUnit); + + } + } + + } + + + autoAdujstData(sLabel,i,dStdValue,dataRes); + CheckBackColorUpdate(false,i); + Delay_MSec(2000); + } + //CLOSE 被检设备 - 标准设备 + BaseCommonApi::SaveLogInfo(1,QString("CLOSE")); + InstructionLib *Closebiz; + InstructionLib *Closestan; + Closebiz= getCmdByCheckName(0,"CLOSE"); + Closestan= getCmdByCheckName(1,"CLOSE"); + if(Closestan!=nullptr && instrcutLibstan!=nullptr) + { + if(standardEngine.getState()) + { + //读取配置指令 + QStringList sList = Closestan->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + standardEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } } } + } } - autoAdujstData(sLabel,i,dStdValue,dataRes); - Delay_MSec(2000); + // + if(Closebiz!=nullptr && instrcutLibbiz!=nullptr) + { + if(deviceEngine.getState()) + { + //读取配置指令 + QStringList sList = Closebiz->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + deviceEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + }; + + } + + } caliDataList.insert(sLabel,dataRes); @@ -1673,3 +1928,45 @@ } return IsSucc; } +void CheckWindow::ItemUnitSplit(QString Value,QString &data,QString &unit) +{ + QString sData2=Value; + QString sNewData,sUnit; + // 正则表达式匹配数字 + QRegularExpression reLetters("[a-zA-ZΩΜΩ]"); + QRegularExpression reLetters1("[^a-zA-ZΩΜΩ]"); + data=sData2.replace(reLetters,""); + unit= Value.replace(reLetters1,""); + +} +void CheckWindow::CheckBackColorUpdate(bool State,int row) +{ + QBrush colorBrush(Qt::white); + if(State) + { + QColor lightGreenColor(173, 216, 230); + colorBrush.setColor(lightGreenColor); + } + for (int col = 0; col < ui->tableWidgetCheck->columnCount(); ++col) { + QTableWidgetItem *item = ui->tableWidgetCheck->item(row, col); + if (item) { + item->setBackground(colorBrush); + } + } +} +QString CheckWindow::Removeunit(QString data) +{ + QRegularExpression re("[a-zA-ZΩΜΩ]"); + return data.replace(re,""); +} +bool CheckWindow::showDialog(QString title,QString mess) +{ + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, title, mess, + QMessageBox::Yes|QMessageBox::No); + if (reply == QMessageBox::Yes) { + return true; + } else { + return false; + } +} diff --git a/softwareDirectory/AutoVerScheme/checkwindow.h b/softwareDirectory/AutoVerScheme/checkwindow.h index 5dacafa..fb6784f 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.h +++ b/softwareDirectory/AutoVerScheme/checkwindow.h @@ -92,6 +92,12 @@ QString TranTypeUnit(QString sUnit); void Oscilloscopetextflow(); void closeDevice(); + double tranunitSplit(QString sData,bool reverse=false); + void ItemUnitSplit(QString Value,QString &data,QString &unit); + void CheckBackColorUpdate(bool State,int row); + QString Removeunit(QString data); + bool showDialog(QString title,QString mess); + int TextCount; void openGageResult(); private: Ui::CheckWindow *ui; diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index f4a7d86..c0a9da5 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -1893,30 +1893,30 @@ QList BaseCommonApi::getInstructionLib(QString verification_program_id) { QList result; - QSqlQuery query; - query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); - query.bindValue(":verification_program_id", verification_program_id); - if (query.exec()) { - while (query.next()) { - InstructionLib instruction; - instruction.id = query.value("id").toString(); - instruction.device_id = query.value("device_id").toString(); - instruction.device_name = query.value("device_name").toString(); - instruction.instruct_config = query.value("instruct_config").toString(); - instruction.instruct_read = query.value("instruct_read").toString(); - instruction.type = query.value("type").toString(); - instruction.belong_vername = query.value("belong_vername").toString(); - instruction.belong_checkname = query.value("belong_checkname").toString(); - instruction.verification_program_id = query.value("verification_program_id").toString(); - instruction.create_time = query.value("create_time").toDateTime(); - instruction.update_time = query.value("update_time").toDateTime(); - instruction.param = query.value("param").toString(); - result.append(instruction); - } - } else { - qDebug() << "Query execution failed: " << query.lastError().text(); - } - return result; + QSqlQuery query; + query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); + query.bindValue(":verification_program_id", verification_program_id); + if (query.exec()) { + while (query.next()) { + InstructionLib instruction; + instruction.id = query.value("id").toString(); + instruction.device_id = query.value("device_id").toString(); + instruction.device_name = query.value("device_name").toString(); + instruction.instruct_config = query.value("instruct_config").toString(); + instruction.instruct_read = query.value("instruct_read").toString(); + instruction.type = query.value("type").toString(); + instruction.belong_vername = query.value("belong_vername").toString(); + instruction.belong_checkname = query.value("belong_checkname").toString(); + instruction.verification_program_id = query.value("verification_program_id").toString(); + instruction.create_time = query.value("create_time").toDateTime(); + instruction.update_time = query.value("update_time").toDateTime(); + instruction.param = query.value("param").toString(); + result.append(instruction); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + return result; }; //查询检定项用于在新增指令时筛选 例如DCV ACI 如果equipment_item_category_id为空查询所有 QList BaseCommonApi::getParams(QString belong_standard_equipment_id,QString equipment_item_category_id) @@ -3978,7 +3978,7 @@ resultData.clear(); QSqlQuery query; - query.prepare("SELECT * FROM biz_business_device_measure_item_data_oscilloscope bbdmido" + query.prepare("SELECT *,bbdmii.band_width as BW FROM biz_business_device_measure_item_data_oscilloscope bbdmido" " JOIN biz_business_device_measure_item_info bbdmii ON bbdmii.id = bbdmido.item_id " " WHERE bbdmido.item_id = :itemId ORDER BY bbdmido.update_time DESC"); // 将参数绑定到占位符 @@ -3991,7 +3991,7 @@ result.append(query.value("time_base").toString());//时基 result.append(query.value("current_gain").toString());//直流增益(示波器-数字) result.append(query.value("current_bias").toString());//直流偏置(示波器-数字) - result.append(query.value("band_width").toString());//频带宽度 (示波器-数字/模拟) + result.append(query.value("BW").toString());//频带宽度 (示波器-数字/模拟) result.append(query.value("trigger_sensitivity").toString());//触发灵敏度(示波器-数字/模拟) result.append(query.value("rise_time").toString());//上升时间(示波器-数字/模拟) result.append(query.value("input_resistance").toString());//输入电阻 (示波器-数字/模拟) @@ -4017,6 +4017,7 @@ result.append(query.value("nominal_value").toString());//标称值 result.append(query.value("nominal_value_unit").toString());//标称值单位 result.append(query.value("data_type").toString());// + result.append(query.value("item_type").toString());// result.append(query.value("create_time").toString()); result.append(query.value("update_time").toString()); resultData.append(result); @@ -4069,7 +4070,6 @@ QStringList head; //添加列头 head <<"序号"<<"检定项目"<<"通道"<<"阻抗" <<"幅度/DIV" <<"标准值" - <<"单位" <<"测量值"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4078,9 +4078,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[28]);//标准值 - Data.append(row[29]);//标准值单位 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//相对误差 Data.append(row[13]);//技术指标 @@ -4091,7 +4090,7 @@ VerificationItem = "直流偏置"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)"<<"标准值" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV"<<"标准值" <<"测量值"<<"误差"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4100,8 +4099,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[19]);//标准值 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//误差 Data.append("");//相对误差 @@ -4113,7 +4112,7 @@ VerificationItem = "频带宽度"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" <<"标准值" << "频带宽度" <<"参考幅度" <<"参考幅度单位" <<"测量幅度" <<"测量幅度单位" <<"分贝数(dB)" <<"技术指标" << "结论"; HeadMapList->insert(VerificationItem,head); @@ -4123,12 +4122,13 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[22]);//频带宽度 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 + Data.append(row[22]+row[23]);//频带宽度 Data.append("");//参考幅度 - Data.append("");//参考幅度单位 + Data.append(row[19]);//参考幅度单位 Data.append("");//测量幅度 - Data.append("");//测量幅度单位 + Data.append(row[19]);//测量幅度单位 Data.append("");//分贝数(dB) Data.append(row[13]);//技术指标 Data.append("");//结论 @@ -4150,14 +4150,15 @@ Data.append(row[27]);//信号频率 Data.append(row[28]);//标称值 Data.append("");//测量值 + Data.append("");//结论 trigger_sensitivity.append(Data); } if (!row.isEmpty() && row[7]=="1" && row[30] =="6") { VerificationItem = "上升时间"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" - <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" + <<"标准值" <<"测量值"<<"单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 QStringList Data; @@ -4165,9 +4166,10 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 - Data.append("");//测量值单位 + Data.append("ns");//测量值单位 Data.append(row[13]);//技术指标 Data.append("");//结论 rise_timeList.append(Data); @@ -4176,7 +4178,7 @@ VerificationItem = "输入电阻"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"幅度/DIV" <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4185,7 +4187,7 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[28]+row[29]);//标称值 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) Data.append("");//测量值 Data.append("");//测量值单位 Data.append(row[13]);//技术指标 @@ -4203,13 +4205,13 @@ QStringList Data; Data.append(row[0]); //ID Data.append(VerificationItem); //检定项目 - Data.append(row[30]);//项目 + Data.append(row[31]);//项目 Data.append(row[28]+row[29]);//标称值 Data.append("");//顶部测量值 Data.append("");//底部测量值 Data.append("");//测量值 Data.append("");//测量值单位 - Data.append(row[13]);//技术指标 + Data.append("");//相对误差 calibrating_signalList.append(Data); } diff --git a/softwareDirectory/AutoVerScheme/checkwindow.cpp b/softwareDirectory/AutoVerScheme/checkwindow.cpp index cf8f54a..6e9fd04 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.cpp +++ b/softwareDirectory/AutoVerScheme/checkwindow.cpp @@ -57,6 +57,14 @@ unitTransList.insert("Ω",1); unitTransList.insert("KΩ",0.001); unitTransList.insert("MΩ",0.000001); + unitTransList.insert("HZ",1); + unitTransList.insert("kHZ",0.001); + unitTransList.insert("MHZ",0.000001); + unitTransList.insert("GHZ",0.000000001); + unitTransList.insert("S",1); + unitTransList.insert("MS",1E+3); + unitTransList.insert("PS",1E+12); + unitTransList.insert("NS",1E+9); //统一定义命令占位符 cmdPlaceHolderList.insert("{CH}","通道"); cmdPlaceHolderList.insert("{RANV}","量程"); @@ -69,15 +77,19 @@ cmdPlaceHolderList.insert("{STVAL}","标准值"); cmdPlaceHolderList.insert("{RAN}","量程"); cmdPlaceHolderList.insert("{FREQ}","频率"); + cmdPlaceHolderList.insert("{BW}","频带宽度"); cmdPlaceHolderList.insert("{UNIT}","单位"); cmdPlaceHolderList.insert("{FUNIT}","频率单位"); cmdPlaceHolderList.insert("{OHM}","阻抗"); + cmdPlaceHolderList.insert("{POS}","周期时标信号"); //示波器 cmdPlaceHolderList.insert("{OHM}","阻抗"); //转换 unitTypeTransList.insert("Ω","OHM"); unitTypeTransList.insert("KΩ","KOHM"); unitTypeTransList.insert("MΩ","MOHM"); + unitTypeTransList.insert("50Ω","0"); + unitTypeTransList.insert("1MΩ","1"); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -421,16 +433,19 @@ int idx2= getIndexByHeader(sLabel,"标准值"); int idx3= getIndexByHeader(sLabel,"单位"); int chname= getIndexByHeader(sLabel,"通道"); + if(idx==-1){idx=1;};if(idx2==-1){idx2=5;};if(idx3==-1){idx3=4;}; ui->tableWidget_Point->setItem(row, 0, new QTableWidgetItem(dataRes[i][idx])); ui->tableWidget_Point->setItem(row, 1, new QTableWidgetItem(dataRes[i][idx2]+"("+dataRes[i][idx3]+")")); ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; + if(chname!=-1&&!chList.contains(dataRes[i][chname])) { chList.append(dataRes[i][chname]); } } + // ======================================================================================== // 按钮设置显示 // ==================================================================================== @@ -444,7 +459,7 @@ //设置第一个按钮选中状态 if(index==0){ button->setChecked(true);} //button->setc(true); - // 设置按钮样式表 + // 设置按钮样式表 button->setStyleSheet("QPushButton {" "border: 1px solid white;" // 白色边框 "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 @@ -510,6 +525,8 @@ ui->HeadListLayout->addWidget(button); } } + std::sort(chList.begin(), chList.end()); + if(chList.count()==0){chList.append("CH1");}; ui->stackedWidget_2->setCurrentIndex(1); initCheckTable(0); } @@ -1136,6 +1153,21 @@ } return dTmp; } +double CheckWindow::tranunitSplit(QString sData,bool reverse) +{ + + QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); + if(re.match(sData).hasMatch()) + { + QString sData2=sData; + QString sNewData,sUnit; + ItemUnitSplit(sData,sNewData,sUnit); + return transUnit(sNewData,sUnit,reverse); + }else{ + return sData.toDouble(); + } + +} QString CheckWindow::TranTypeUnit(QString sUnit) { QString NewsUnit=sUnit; @@ -1151,24 +1183,25 @@ if(dex==-1) dex=getIndexByHeader(sLabel,"标准器示值"); if(dex==-1) + dex=getIndexByHeader(sLabel,"标称值"); + if(dex==-1) return QString::number(TestValue); - QString StanValue=data[dex]; - int decimalPlaces = 0; - int decimalPos = StanValue.indexOf('.'); + + QString StanValue=Removeunit(data[dex]); + int decimalPlaces = 0; + int decimalPos = StanValue.indexOf('.'); if (decimalPos == -1) { decimalPlaces=1; }else{ decimalPlaces=StanValue.length() - decimalPos - 1; } - - QString formattedTestValue = QString::number(TestValue, 'f', decimalPlaces); return formattedTestValue; } QString CheckWindow::transCmd(QString sCmd,QString sLabel,QStringList data,bool devicetype) { QString sNewCmd = sCmd; - if(sNewCmd.contains("DELAY:")){ + if(sNewCmd.contains("{DELAY:")){ QRegExp re("DELAY:(\\d+)"); int delay=0; if (re.indexIn(sNewCmd) != -1) { @@ -1184,15 +1217,28 @@ if(sCmd.contains(key)){ int idx= getIndexByHeader(sLabel,cmdPlaceHolderList.value(key)); if(idx!=-1){ - if(devicetype) + if(devicetype || key=="{CH}") { NewUnit = TranTypeUnit(data[idx]); //转换 Ω->OHM sNewCmd = sNewCmd.replace(key,NewUnit); continue; } - int idx2= getIndexByHeader(sLabel,"单位"); - QString unit = data[idx2]; - double dTmp = transUnit(data[idx],unit,true); + double dTmp; + QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); + if(re.match(data[idx]).hasMatch()) + { + dTmp = tranunitSplit(data[idx],true); + }else + { + int idx2= getIndexByHeader(sLabel,"单位"); + if(idx2!=-1) + { + QString unit = data[idx2]; + dTmp = transUnit(data[idx],unit,true); + }else{ + dTmp=data[idx].toDouble(); + }; + } sNewCmd = sNewCmd.replace(key,QString::number(dTmp)); } @@ -1200,6 +1246,7 @@ } return sNewCmd; } + //_text void CheckWindow::on_pushButton_start_clicked() { @@ -1281,9 +1328,9 @@ void CheckWindow::autoAdujstData(QString sLabel,int i,double dStdValue,QList& dataRes){ double dError; - QString newdStdValue,newdError; + QString newdStdValue,newdError,Value; if(iEquipType==1 || iEquipType==13){ - if(qIsFinite(dStdValue)){ + if(dStdValue==FP_INFINITE){ bool bOk = false; dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,5,&bOk); @@ -1293,7 +1340,10 @@ dStdValue=0; } } - newdStdValue= TranDecimals(sLabel,dataRes[i],dStdValue); + // ItemUnitSplit + + newdStdValue= TranDecimals(sLabel, dataRes[i],dStdValue); + int idx= getIndexByHeader(sLabel,"示值"); if(idx!=-1) { @@ -1320,11 +1370,16 @@ if(idx!=-1) { int idx2=getIndexByHeader(sLabel,"标准值"); - double dTmp = dataRes[i][idx2].toDouble(); - dError = (dStdValue-dTmp); - newdError=TranDecimals(sLabel,dataRes[i],dError); - dataRes[i][idx] = newdError; - ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); + if(idx2==-1) + idx2=getIndexByHeader(sLabel,"标称值"); + if(idx2!=-1){ + double dTmp = dataRes[i][idx2].toDouble(); + dError = (dStdValue-dTmp); + newdError=TranDecimals(sLabel,dataRes[i],dError); + dataRes[i][idx] = newdError; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); + } + } idx= getIndexByHeader(sLabel,"结论"); if(idx!=-1) @@ -1333,6 +1388,61 @@ ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem("符合指标")); //测量值 } + idx= getIndexByHeader(sLabel,"测量幅度"); + if(idx!=-1) + { + QString textValue= ui->tableWidgetCheck->item(i,idx)->text(); + + if(textValue==""){ + dataRes[i][idx] = newdStdValue; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); //测试 + }else + { + idx= getIndexByHeader(sLabel,"参考幅度"); + QString refvalue= newdStdValue; + dataRes[i][idx] = refvalue; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(refvalue)); //参考 + // 计算a除以b的对数(以10为底) + double logResult = std::log10( refvalue.toDouble() / textValue.toDouble()); + double result = 20 * logResult; + idx= getIndexByHeader(sLabel,"分贝数(dB)"); + if(idx!=-1) + { + QString newresult; + newresult=TranDecimals(sLabel, dataRes[i],result); + dataRes[i][idx] = newresult; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newresult)); //分贝数 + } + + } + } + idx= getIndexByHeader(sLabel,"周期时标信号"); + if(idx!=-1) + { + double ErrorCal; + QString sign=""; + if(dStdValue>0.2){sign="-";}; + + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动输入","请输入△T/ns值",0,-100000, 100000,5,&bOk); + if (bOk) { + }else{ + dStdValue=0; + } + dStdValue=transUnit(QString::number(dStdValue),"ns",true); + ErrorCal=std::fabs(dStdValue); + idx= getIndexByHeader(sLabel,"时基绝对误差△T/ns"); + if(idx!=-1){ + dataRes[i][idx] =sign+QString::number(ErrorCal); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal))); //测量值 + } + + idx= getIndexByHeader(sLabel,"时基相对误差△δ"); + { + dataRes[i][idx] =sign+QString::number(ErrorCal/0.01); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal/0.01))); //测量值 + } + } BaseCommonApi::SaveLogInfo(1,QString("转换前 测试值 %1").arg(dStdValue)); BaseCommonApi::SaveLogInfo(1,QString("转换后 测试值 %1").arg(newdStdValue)); @@ -1468,37 +1578,118 @@ } void CheckWindow::Oscilloscopetextflow() { + connectDevice(); + for (int _ch=0;_chshowDialog("通道切换提示",QString("请切换 %1 通道").arg(chList[_ch]))){continue;} for(int i=0;i dataRes = caliDataList.value(sLabel); - BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(_ch).arg(sLabel)); + BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(chList[_ch]).arg(sLabel)); QString sParam; + QString ValueUnit; + InstructionLib *instrcutLibOhm; for (int i = 0; i < dataRes.count(); ++i) { + TextCount=1; int _dex= getIndexByHeader(sLabel,"通道"); - if(_dex==-1){sParam=_ch;}else{sParam=dataRes[i][_dex];} + if(_dex==-1){sParam=chList[_ch];}else{sParam=dataRes[i][_dex];} if(sParam!=chList[_ch]){continue;}; + CheckBackColorUpdate(true,i); QString sRet=""; QString newCmd; double dStdValue=FP_INFINITE; QString newdStdValue; - //标准器输出 - BaseCommonApi::SaveLogInfo(1,QString("标准器输出")); - QString sParam; int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam; if(idx!=-1) sParam = dataRes[i][idx]; - if(standardEngine.getState() || 1==1){ - InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); + InstructionLib *instrcutLibbiz=getCmdByCheckName(0,sParam); + InstructionLib *instrcutLibstan=getCmdByCheckName(1,sParam); + //INIT 被检设备 - 标准设备 + BaseCommonApi::SaveLogInfo(1,QString("INIT")); + InstructionLib *InItbiz; + InstructionLib *InItstan; + InItbiz= getCmdByCheckName(0,"INIT"); + InItstan= getCmdByCheckName(1,"INIT"); + if(InItbiz!=nullptr && instrcutLibbiz!=nullptr) + { + if(deviceEngine.getState()) + { + //设置电阻值+ + instrcutLibOhm= getCmdByCheckName(0,"电阻"); + if(instrcutLibOhm!=nullptr){ + QStringList ohmList = instrcutLibOhm->instruct_config.split(";"); + int idxohm= getIndexByHeader(sLabel,"阻抗"); + if(idxohm!=-1) + { + QString onmname="50Ω"; + QString CmdOhm; + onmname=dataRes[i][idxohm]; + if(onmname=="50Ω"){CmdOhm=ohmList[0];}else{CmdOhm=ohmList[1];}; + newCmd = transCmd(CmdOhm,sLabel,dataRes[i],true); + deviceEngine.sendData(newCmd); + } + } + //读取配置指令 + + QStringList sList = InItbiz->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + deviceEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + }; + + } + + if(InItstan!=nullptr && instrcutLibstan!=nullptr) + { + if(standardEngine.getState()) + { + //读取配置指令 + QStringList sList = InItstan->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + standardEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + } + + } + + if(sParam=="频带宽度"){TextCount=2;}; + for (int d=0;dinstruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + if(d==1&& sCmd.contains("{BW}")) + { + sCmd.replace("{BW}","50000"); + } + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + if(newCmd!=""){ standardEngine.sendData(newCmd); qDebug() << "standard cmds:" << newCmd; @@ -1509,10 +1700,9 @@ } //被检设备读数 BaseCommonApi::SaveLogInfo(1,QString("被检设备输出")); - if(deviceEngine.getState() || 1==1){ - InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); + if(deviceEngine.getState()){ + if(instrcutLibbiz!=nullptr){ + QStringList sList = instrcutLibbiz->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); @@ -1522,18 +1712,83 @@ } } } - - newCmd = transCmd(instrcutLib->instruct_read,sLabel,dataRes[i]); + newCmd = transCmd(instrcutLibbiz->instruct_read,sLabel,dataRes[i]); if(newCmd!=""){ qDebug() << "query cmds:" << newCmd; + sRet = deviceEngine.queryData(newCmd); idx= getIndexByHeader(sLabel,"单位"); - dStdValue = transUnit(sRet,dataRes[i][idx]); + //ValueUnit + if(idx!=-1) + { + ValueUnit=dataRes[i][idx]; + }else + { + int idx= getIndexByHeader(sLabel,"标准值"); + if(idx==-1) + idx= getIndexByHeader(sLabel,"标称值"); + if(idx!=-1) + ItemUnitSplit(dataRes[i][idx],ValueUnit,ValueUnit); + + } + dStdValue = transUnit(sRet,ValueUnit); + + } + } + + } + + + autoAdujstData(sLabel,i,dStdValue,dataRes); + CheckBackColorUpdate(false,i); + Delay_MSec(2000); + } + //CLOSE 被检设备 - 标准设备 + BaseCommonApi::SaveLogInfo(1,QString("CLOSE")); + InstructionLib *Closebiz; + InstructionLib *Closestan; + Closebiz= getCmdByCheckName(0,"CLOSE"); + Closestan= getCmdByCheckName(1,"CLOSE"); + if(Closestan!=nullptr && instrcutLibstan!=nullptr) + { + if(standardEngine.getState()) + { + //读取配置指令 + QStringList sList = Closestan->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + standardEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } } } + } } - autoAdujstData(sLabel,i,dStdValue,dataRes); - Delay_MSec(2000); + // + if(Closebiz!=nullptr && instrcutLibbiz!=nullptr) + { + if(deviceEngine.getState()) + { + //读取配置指令 + QStringList sList = Closebiz->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + deviceEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + }; + + } + + } caliDataList.insert(sLabel,dataRes); @@ -1673,3 +1928,45 @@ } return IsSucc; } +void CheckWindow::ItemUnitSplit(QString Value,QString &data,QString &unit) +{ + QString sData2=Value; + QString sNewData,sUnit; + // 正则表达式匹配数字 + QRegularExpression reLetters("[a-zA-ZΩΜΩ]"); + QRegularExpression reLetters1("[^a-zA-ZΩΜΩ]"); + data=sData2.replace(reLetters,""); + unit= Value.replace(reLetters1,""); + +} +void CheckWindow::CheckBackColorUpdate(bool State,int row) +{ + QBrush colorBrush(Qt::white); + if(State) + { + QColor lightGreenColor(173, 216, 230); + colorBrush.setColor(lightGreenColor); + } + for (int col = 0; col < ui->tableWidgetCheck->columnCount(); ++col) { + QTableWidgetItem *item = ui->tableWidgetCheck->item(row, col); + if (item) { + item->setBackground(colorBrush); + } + } +} +QString CheckWindow::Removeunit(QString data) +{ + QRegularExpression re("[a-zA-ZΩΜΩ]"); + return data.replace(re,""); +} +bool CheckWindow::showDialog(QString title,QString mess) +{ + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, title, mess, + QMessageBox::Yes|QMessageBox::No); + if (reply == QMessageBox::Yes) { + return true; + } else { + return false; + } +} diff --git a/softwareDirectory/AutoVerScheme/checkwindow.h b/softwareDirectory/AutoVerScheme/checkwindow.h index 5dacafa..fb6784f 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.h +++ b/softwareDirectory/AutoVerScheme/checkwindow.h @@ -92,6 +92,12 @@ QString TranTypeUnit(QString sUnit); void Oscilloscopetextflow(); void closeDevice(); + double tranunitSplit(QString sData,bool reverse=false); + void ItemUnitSplit(QString Value,QString &data,QString &unit); + void CheckBackColorUpdate(bool State,int row); + QString Removeunit(QString data); + bool showDialog(QString title,QString mess); + int TextCount; void openGageResult(); private: Ui::CheckWindow *ui; diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp index 9810a45..f6f5a32 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp @@ -136,6 +136,7 @@ void DialogCheckResult::on_pushButton_3_clicked() { + checkitemlist.clear(); SaveDeviceMeasureInfo measInfo; BaseCommonApi api; measInfo.id = QString::number(api.generateId()); @@ -239,6 +240,73 @@ BaseCommonApi::SearchSelectTable(QString::number(iEquipType),&measItem); } } + //示波器检定装置 + else if(iEquipType==13) + { + checkitemlist.insert("时基",1); + checkitemlist.insert("直流增益",2); + checkitemlist.insert("直流偏置",3); + checkitemlist.insert("频带宽度",4); + checkitemlist.insert("触发灵敏度",5); + checkitemlist.insert("上升时间",6); + checkitemlist.insert("输入电阻",7); + checkitemlist.insert("校准信号",8); + QString Value,Unit; + //ItemUnitSplit + for (int i = 0; i < dataRes.count(); ++i) { + DeviceOscilloscopeCalibration measItem; + measItem.id = QString::number(api.generateId()); + measItem.data_id = measInfo.id; + measItem.data_type = getDictebyItemName(getValueByHeader(i,sLabel,"检定项目")); + ItemUnitSplit(getValueByHeader(i,sLabel,"周期时标信号"),Value,Unit); + measItem.cycle_signal=Value; + measItem.cycle_signal_unit=Unit; + measItem.time_base_absolute_error=getValueByHeader(i,sLabel,"时基绝对误差△T/ns"); + measItem.time_base_relative_error=getValueByHeader(i,sLabel,"时基相对误差△δ"); + ItemUnitSplit(getValueByHeader(i,sLabel,"技术指标"),Value,Unit); + measItem.technical_index=Value; + measItem.technical_index_unit=Unit; + measItem.conclusion=getValueByHeader(i,sLabel,"结论"); + measItem.thoroughfare=getValueByHeader(i,sLabel,"通道"); + ItemUnitSplit(getValueByHeader(i,sLabel,"阻抗"),Value,Unit); + measItem.impedance=Value; + measItem.impedance_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"幅度/DIV"),Value,Unit); + measItem.vertical_deflect_coefficient=Value; + measItem.vertical_deflect_coefficient_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"标准值"),Value,Unit); + measItem.standard_value=Value; + measItem.standard_value_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"测量值"),Value,Unit); + measItem.measure_value=Value; + measItem.measure_value_unit=Unit; + measItem.relative_error=getValueByHeader(i,sLabel,"相对误差"); + measItem.error_value=getValueByHeader(i,sLabel,"误差"); + ItemUnitSplit(getValueByHeader(i,sLabel,"频带宽度"),Value,Unit); + measItem.band_width=Value; + measItem.band_width_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"参考幅度"),Value,Unit); + measItem.reference_amplitude=Value; + measItem.reference_amplitude=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"测量幅度"),Value,Unit); + measItem.measure_amplitude=Value; + measItem.measure_amplitude_unit=Unit; + measItem.decibel_number=getValueByHeader(i,sLabel,"分贝数(dB)"); + measItem.trigger_type=getValueByHeader(i,sLabel,"触发类型"); + ItemUnitSplit(getValueByHeader(i,sLabel,"标称值"),Value,Unit); + measItem.nominal_value=Value; + measItem.nominal_value_unit=Unit; + measItem.data_type=getValueByHeader(i,sLabel,"项目"); + ItemUnitSplit(getValueByHeader(i,sLabel,"顶部测量值"),Value,Unit); + measItem.top_measure_value=Value; + measItem.top_measure_value_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"底部测量值"),Value,Unit); + measItem.bottom_measure_value=Value; + measItem.bottom_measure_value_unit=Unit; + //decibel_number + BaseCommonApi::InsertDeviceOscilloscopeCalibration(measItem); + } + } } // for(SaveDeviceMeasureCalibrator& item:measureCalList){ // item.id = QString::number(api.generateId()); @@ -342,3 +410,23 @@ { } +int DialogCheckResult::getDictebyItemName(QString Name) +{ + int NewName=0; + if(checkitemlist.keys().contains(Name)) + { + NewName=checkitemlist.value(Name); + } + return NewName; +} +void DialogCheckResult::ItemUnitSplit(QString Value,QString &data,QString &unit) +{ + QString sData2=Value; + QString sNewData,sUnit; + // 正则表达式匹配数字 + QRegularExpression reLetters("[a-zA-ZΩΜΩ]"); + QRegularExpression reLetters1("[^a-zA-ZΩΜΩ]"); + data=sData2.replace(reLetters,""); + unit= Value.replace(reLetters1,""); + +} diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index f4a7d86..c0a9da5 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -1893,30 +1893,30 @@ QList BaseCommonApi::getInstructionLib(QString verification_program_id) { QList result; - QSqlQuery query; - query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); - query.bindValue(":verification_program_id", verification_program_id); - if (query.exec()) { - while (query.next()) { - InstructionLib instruction; - instruction.id = query.value("id").toString(); - instruction.device_id = query.value("device_id").toString(); - instruction.device_name = query.value("device_name").toString(); - instruction.instruct_config = query.value("instruct_config").toString(); - instruction.instruct_read = query.value("instruct_read").toString(); - instruction.type = query.value("type").toString(); - instruction.belong_vername = query.value("belong_vername").toString(); - instruction.belong_checkname = query.value("belong_checkname").toString(); - instruction.verification_program_id = query.value("verification_program_id").toString(); - instruction.create_time = query.value("create_time").toDateTime(); - instruction.update_time = query.value("update_time").toDateTime(); - instruction.param = query.value("param").toString(); - result.append(instruction); - } - } else { - qDebug() << "Query execution failed: " << query.lastError().text(); - } - return result; + QSqlQuery query; + query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); + query.bindValue(":verification_program_id", verification_program_id); + if (query.exec()) { + while (query.next()) { + InstructionLib instruction; + instruction.id = query.value("id").toString(); + instruction.device_id = query.value("device_id").toString(); + instruction.device_name = query.value("device_name").toString(); + instruction.instruct_config = query.value("instruct_config").toString(); + instruction.instruct_read = query.value("instruct_read").toString(); + instruction.type = query.value("type").toString(); + instruction.belong_vername = query.value("belong_vername").toString(); + instruction.belong_checkname = query.value("belong_checkname").toString(); + instruction.verification_program_id = query.value("verification_program_id").toString(); + instruction.create_time = query.value("create_time").toDateTime(); + instruction.update_time = query.value("update_time").toDateTime(); + instruction.param = query.value("param").toString(); + result.append(instruction); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + return result; }; //查询检定项用于在新增指令时筛选 例如DCV ACI 如果equipment_item_category_id为空查询所有 QList BaseCommonApi::getParams(QString belong_standard_equipment_id,QString equipment_item_category_id) @@ -3978,7 +3978,7 @@ resultData.clear(); QSqlQuery query; - query.prepare("SELECT * FROM biz_business_device_measure_item_data_oscilloscope bbdmido" + query.prepare("SELECT *,bbdmii.band_width as BW FROM biz_business_device_measure_item_data_oscilloscope bbdmido" " JOIN biz_business_device_measure_item_info bbdmii ON bbdmii.id = bbdmido.item_id " " WHERE bbdmido.item_id = :itemId ORDER BY bbdmido.update_time DESC"); // 将参数绑定到占位符 @@ -3991,7 +3991,7 @@ result.append(query.value("time_base").toString());//时基 result.append(query.value("current_gain").toString());//直流增益(示波器-数字) result.append(query.value("current_bias").toString());//直流偏置(示波器-数字) - result.append(query.value("band_width").toString());//频带宽度 (示波器-数字/模拟) + result.append(query.value("BW").toString());//频带宽度 (示波器-数字/模拟) result.append(query.value("trigger_sensitivity").toString());//触发灵敏度(示波器-数字/模拟) result.append(query.value("rise_time").toString());//上升时间(示波器-数字/模拟) result.append(query.value("input_resistance").toString());//输入电阻 (示波器-数字/模拟) @@ -4017,6 +4017,7 @@ result.append(query.value("nominal_value").toString());//标称值 result.append(query.value("nominal_value_unit").toString());//标称值单位 result.append(query.value("data_type").toString());// + result.append(query.value("item_type").toString());// result.append(query.value("create_time").toString()); result.append(query.value("update_time").toString()); resultData.append(result); @@ -4069,7 +4070,6 @@ QStringList head; //添加列头 head <<"序号"<<"检定项目"<<"通道"<<"阻抗" <<"幅度/DIV" <<"标准值" - <<"单位" <<"测量值"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4078,9 +4078,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[28]);//标准值 - Data.append(row[29]);//标准值单位 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//相对误差 Data.append(row[13]);//技术指标 @@ -4091,7 +4090,7 @@ VerificationItem = "直流偏置"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)"<<"标准值" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV"<<"标准值" <<"测量值"<<"误差"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4100,8 +4099,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[19]);//标准值 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//误差 Data.append("");//相对误差 @@ -4113,7 +4112,7 @@ VerificationItem = "频带宽度"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" <<"标准值" << "频带宽度" <<"参考幅度" <<"参考幅度单位" <<"测量幅度" <<"测量幅度单位" <<"分贝数(dB)" <<"技术指标" << "结论"; HeadMapList->insert(VerificationItem,head); @@ -4123,12 +4122,13 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[22]);//频带宽度 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 + Data.append(row[22]+row[23]);//频带宽度 Data.append("");//参考幅度 - Data.append("");//参考幅度单位 + Data.append(row[19]);//参考幅度单位 Data.append("");//测量幅度 - Data.append("");//测量幅度单位 + Data.append(row[19]);//测量幅度单位 Data.append("");//分贝数(dB) Data.append(row[13]);//技术指标 Data.append("");//结论 @@ -4150,14 +4150,15 @@ Data.append(row[27]);//信号频率 Data.append(row[28]);//标称值 Data.append("");//测量值 + Data.append("");//结论 trigger_sensitivity.append(Data); } if (!row.isEmpty() && row[7]=="1" && row[30] =="6") { VerificationItem = "上升时间"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" - <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" + <<"标准值" <<"测量值"<<"单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 QStringList Data; @@ -4165,9 +4166,10 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 - Data.append("");//测量值单位 + Data.append("ns");//测量值单位 Data.append(row[13]);//技术指标 Data.append("");//结论 rise_timeList.append(Data); @@ -4176,7 +4178,7 @@ VerificationItem = "输入电阻"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"幅度/DIV" <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4185,7 +4187,7 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[28]+row[29]);//标称值 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) Data.append("");//测量值 Data.append("");//测量值单位 Data.append(row[13]);//技术指标 @@ -4203,13 +4205,13 @@ QStringList Data; Data.append(row[0]); //ID Data.append(VerificationItem); //检定项目 - Data.append(row[30]);//项目 + Data.append(row[31]);//项目 Data.append(row[28]+row[29]);//标称值 Data.append("");//顶部测量值 Data.append("");//底部测量值 Data.append("");//测量值 Data.append("");//测量值单位 - Data.append(row[13]);//技术指标 + Data.append("");//相对误差 calibrating_signalList.append(Data); } diff --git a/softwareDirectory/AutoVerScheme/checkwindow.cpp b/softwareDirectory/AutoVerScheme/checkwindow.cpp index cf8f54a..6e9fd04 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.cpp +++ b/softwareDirectory/AutoVerScheme/checkwindow.cpp @@ -57,6 +57,14 @@ unitTransList.insert("Ω",1); unitTransList.insert("KΩ",0.001); unitTransList.insert("MΩ",0.000001); + unitTransList.insert("HZ",1); + unitTransList.insert("kHZ",0.001); + unitTransList.insert("MHZ",0.000001); + unitTransList.insert("GHZ",0.000000001); + unitTransList.insert("S",1); + unitTransList.insert("MS",1E+3); + unitTransList.insert("PS",1E+12); + unitTransList.insert("NS",1E+9); //统一定义命令占位符 cmdPlaceHolderList.insert("{CH}","通道"); cmdPlaceHolderList.insert("{RANV}","量程"); @@ -69,15 +77,19 @@ cmdPlaceHolderList.insert("{STVAL}","标准值"); cmdPlaceHolderList.insert("{RAN}","量程"); cmdPlaceHolderList.insert("{FREQ}","频率"); + cmdPlaceHolderList.insert("{BW}","频带宽度"); cmdPlaceHolderList.insert("{UNIT}","单位"); cmdPlaceHolderList.insert("{FUNIT}","频率单位"); cmdPlaceHolderList.insert("{OHM}","阻抗"); + cmdPlaceHolderList.insert("{POS}","周期时标信号"); //示波器 cmdPlaceHolderList.insert("{OHM}","阻抗"); //转换 unitTypeTransList.insert("Ω","OHM"); unitTypeTransList.insert("KΩ","KOHM"); unitTypeTransList.insert("MΩ","MOHM"); + unitTypeTransList.insert("50Ω","0"); + unitTypeTransList.insert("1MΩ","1"); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -421,16 +433,19 @@ int idx2= getIndexByHeader(sLabel,"标准值"); int idx3= getIndexByHeader(sLabel,"单位"); int chname= getIndexByHeader(sLabel,"通道"); + if(idx==-1){idx=1;};if(idx2==-1){idx2=5;};if(idx3==-1){idx3=4;}; ui->tableWidget_Point->setItem(row, 0, new QTableWidgetItem(dataRes[i][idx])); ui->tableWidget_Point->setItem(row, 1, new QTableWidgetItem(dataRes[i][idx2]+"("+dataRes[i][idx3]+")")); ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; + if(chname!=-1&&!chList.contains(dataRes[i][chname])) { chList.append(dataRes[i][chname]); } } + // ======================================================================================== // 按钮设置显示 // ==================================================================================== @@ -444,7 +459,7 @@ //设置第一个按钮选中状态 if(index==0){ button->setChecked(true);} //button->setc(true); - // 设置按钮样式表 + // 设置按钮样式表 button->setStyleSheet("QPushButton {" "border: 1px solid white;" // 白色边框 "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 @@ -510,6 +525,8 @@ ui->HeadListLayout->addWidget(button); } } + std::sort(chList.begin(), chList.end()); + if(chList.count()==0){chList.append("CH1");}; ui->stackedWidget_2->setCurrentIndex(1); initCheckTable(0); } @@ -1136,6 +1153,21 @@ } return dTmp; } +double CheckWindow::tranunitSplit(QString sData,bool reverse) +{ + + QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); + if(re.match(sData).hasMatch()) + { + QString sData2=sData; + QString sNewData,sUnit; + ItemUnitSplit(sData,sNewData,sUnit); + return transUnit(sNewData,sUnit,reverse); + }else{ + return sData.toDouble(); + } + +} QString CheckWindow::TranTypeUnit(QString sUnit) { QString NewsUnit=sUnit; @@ -1151,24 +1183,25 @@ if(dex==-1) dex=getIndexByHeader(sLabel,"标准器示值"); if(dex==-1) + dex=getIndexByHeader(sLabel,"标称值"); + if(dex==-1) return QString::number(TestValue); - QString StanValue=data[dex]; - int decimalPlaces = 0; - int decimalPos = StanValue.indexOf('.'); + + QString StanValue=Removeunit(data[dex]); + int decimalPlaces = 0; + int decimalPos = StanValue.indexOf('.'); if (decimalPos == -1) { decimalPlaces=1; }else{ decimalPlaces=StanValue.length() - decimalPos - 1; } - - QString formattedTestValue = QString::number(TestValue, 'f', decimalPlaces); return formattedTestValue; } QString CheckWindow::transCmd(QString sCmd,QString sLabel,QStringList data,bool devicetype) { QString sNewCmd = sCmd; - if(sNewCmd.contains("DELAY:")){ + if(sNewCmd.contains("{DELAY:")){ QRegExp re("DELAY:(\\d+)"); int delay=0; if (re.indexIn(sNewCmd) != -1) { @@ -1184,15 +1217,28 @@ if(sCmd.contains(key)){ int idx= getIndexByHeader(sLabel,cmdPlaceHolderList.value(key)); if(idx!=-1){ - if(devicetype) + if(devicetype || key=="{CH}") { NewUnit = TranTypeUnit(data[idx]); //转换 Ω->OHM sNewCmd = sNewCmd.replace(key,NewUnit); continue; } - int idx2= getIndexByHeader(sLabel,"单位"); - QString unit = data[idx2]; - double dTmp = transUnit(data[idx],unit,true); + double dTmp; + QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); + if(re.match(data[idx]).hasMatch()) + { + dTmp = tranunitSplit(data[idx],true); + }else + { + int idx2= getIndexByHeader(sLabel,"单位"); + if(idx2!=-1) + { + QString unit = data[idx2]; + dTmp = transUnit(data[idx],unit,true); + }else{ + dTmp=data[idx].toDouble(); + }; + } sNewCmd = sNewCmd.replace(key,QString::number(dTmp)); } @@ -1200,6 +1246,7 @@ } return sNewCmd; } + //_text void CheckWindow::on_pushButton_start_clicked() { @@ -1281,9 +1328,9 @@ void CheckWindow::autoAdujstData(QString sLabel,int i,double dStdValue,QList& dataRes){ double dError; - QString newdStdValue,newdError; + QString newdStdValue,newdError,Value; if(iEquipType==1 || iEquipType==13){ - if(qIsFinite(dStdValue)){ + if(dStdValue==FP_INFINITE){ bool bOk = false; dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,5,&bOk); @@ -1293,7 +1340,10 @@ dStdValue=0; } } - newdStdValue= TranDecimals(sLabel,dataRes[i],dStdValue); + // ItemUnitSplit + + newdStdValue= TranDecimals(sLabel, dataRes[i],dStdValue); + int idx= getIndexByHeader(sLabel,"示值"); if(idx!=-1) { @@ -1320,11 +1370,16 @@ if(idx!=-1) { int idx2=getIndexByHeader(sLabel,"标准值"); - double dTmp = dataRes[i][idx2].toDouble(); - dError = (dStdValue-dTmp); - newdError=TranDecimals(sLabel,dataRes[i],dError); - dataRes[i][idx] = newdError; - ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); + if(idx2==-1) + idx2=getIndexByHeader(sLabel,"标称值"); + if(idx2!=-1){ + double dTmp = dataRes[i][idx2].toDouble(); + dError = (dStdValue-dTmp); + newdError=TranDecimals(sLabel,dataRes[i],dError); + dataRes[i][idx] = newdError; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); + } + } idx= getIndexByHeader(sLabel,"结论"); if(idx!=-1) @@ -1333,6 +1388,61 @@ ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem("符合指标")); //测量值 } + idx= getIndexByHeader(sLabel,"测量幅度"); + if(idx!=-1) + { + QString textValue= ui->tableWidgetCheck->item(i,idx)->text(); + + if(textValue==""){ + dataRes[i][idx] = newdStdValue; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); //测试 + }else + { + idx= getIndexByHeader(sLabel,"参考幅度"); + QString refvalue= newdStdValue; + dataRes[i][idx] = refvalue; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(refvalue)); //参考 + // 计算a除以b的对数(以10为底) + double logResult = std::log10( refvalue.toDouble() / textValue.toDouble()); + double result = 20 * logResult; + idx= getIndexByHeader(sLabel,"分贝数(dB)"); + if(idx!=-1) + { + QString newresult; + newresult=TranDecimals(sLabel, dataRes[i],result); + dataRes[i][idx] = newresult; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newresult)); //分贝数 + } + + } + } + idx= getIndexByHeader(sLabel,"周期时标信号"); + if(idx!=-1) + { + double ErrorCal; + QString sign=""; + if(dStdValue>0.2){sign="-";}; + + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动输入","请输入△T/ns值",0,-100000, 100000,5,&bOk); + if (bOk) { + }else{ + dStdValue=0; + } + dStdValue=transUnit(QString::number(dStdValue),"ns",true); + ErrorCal=std::fabs(dStdValue); + idx= getIndexByHeader(sLabel,"时基绝对误差△T/ns"); + if(idx!=-1){ + dataRes[i][idx] =sign+QString::number(ErrorCal); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal))); //测量值 + } + + idx= getIndexByHeader(sLabel,"时基相对误差△δ"); + { + dataRes[i][idx] =sign+QString::number(ErrorCal/0.01); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal/0.01))); //测量值 + } + } BaseCommonApi::SaveLogInfo(1,QString("转换前 测试值 %1").arg(dStdValue)); BaseCommonApi::SaveLogInfo(1,QString("转换后 测试值 %1").arg(newdStdValue)); @@ -1468,37 +1578,118 @@ } void CheckWindow::Oscilloscopetextflow() { + connectDevice(); + for (int _ch=0;_chshowDialog("通道切换提示",QString("请切换 %1 通道").arg(chList[_ch]))){continue;} for(int i=0;i dataRes = caliDataList.value(sLabel); - BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(_ch).arg(sLabel)); + BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(chList[_ch]).arg(sLabel)); QString sParam; + QString ValueUnit; + InstructionLib *instrcutLibOhm; for (int i = 0; i < dataRes.count(); ++i) { + TextCount=1; int _dex= getIndexByHeader(sLabel,"通道"); - if(_dex==-1){sParam=_ch;}else{sParam=dataRes[i][_dex];} + if(_dex==-1){sParam=chList[_ch];}else{sParam=dataRes[i][_dex];} if(sParam!=chList[_ch]){continue;}; + CheckBackColorUpdate(true,i); QString sRet=""; QString newCmd; double dStdValue=FP_INFINITE; QString newdStdValue; - //标准器输出 - BaseCommonApi::SaveLogInfo(1,QString("标准器输出")); - QString sParam; int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam; if(idx!=-1) sParam = dataRes[i][idx]; - if(standardEngine.getState() || 1==1){ - InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); + InstructionLib *instrcutLibbiz=getCmdByCheckName(0,sParam); + InstructionLib *instrcutLibstan=getCmdByCheckName(1,sParam); + //INIT 被检设备 - 标准设备 + BaseCommonApi::SaveLogInfo(1,QString("INIT")); + InstructionLib *InItbiz; + InstructionLib *InItstan; + InItbiz= getCmdByCheckName(0,"INIT"); + InItstan= getCmdByCheckName(1,"INIT"); + if(InItbiz!=nullptr && instrcutLibbiz!=nullptr) + { + if(deviceEngine.getState()) + { + //设置电阻值+ + instrcutLibOhm= getCmdByCheckName(0,"电阻"); + if(instrcutLibOhm!=nullptr){ + QStringList ohmList = instrcutLibOhm->instruct_config.split(";"); + int idxohm= getIndexByHeader(sLabel,"阻抗"); + if(idxohm!=-1) + { + QString onmname="50Ω"; + QString CmdOhm; + onmname=dataRes[i][idxohm]; + if(onmname=="50Ω"){CmdOhm=ohmList[0];}else{CmdOhm=ohmList[1];}; + newCmd = transCmd(CmdOhm,sLabel,dataRes[i],true); + deviceEngine.sendData(newCmd); + } + } + //读取配置指令 + + QStringList sList = InItbiz->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + deviceEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + }; + + } + + if(InItstan!=nullptr && instrcutLibstan!=nullptr) + { + if(standardEngine.getState()) + { + //读取配置指令 + QStringList sList = InItstan->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + standardEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + } + + } + + if(sParam=="频带宽度"){TextCount=2;}; + for (int d=0;dinstruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + if(d==1&& sCmd.contains("{BW}")) + { + sCmd.replace("{BW}","50000"); + } + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + if(newCmd!=""){ standardEngine.sendData(newCmd); qDebug() << "standard cmds:" << newCmd; @@ -1509,10 +1700,9 @@ } //被检设备读数 BaseCommonApi::SaveLogInfo(1,QString("被检设备输出")); - if(deviceEngine.getState() || 1==1){ - InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); + if(deviceEngine.getState()){ + if(instrcutLibbiz!=nullptr){ + QStringList sList = instrcutLibbiz->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); @@ -1522,18 +1712,83 @@ } } } - - newCmd = transCmd(instrcutLib->instruct_read,sLabel,dataRes[i]); + newCmd = transCmd(instrcutLibbiz->instruct_read,sLabel,dataRes[i]); if(newCmd!=""){ qDebug() << "query cmds:" << newCmd; + sRet = deviceEngine.queryData(newCmd); idx= getIndexByHeader(sLabel,"单位"); - dStdValue = transUnit(sRet,dataRes[i][idx]); + //ValueUnit + if(idx!=-1) + { + ValueUnit=dataRes[i][idx]; + }else + { + int idx= getIndexByHeader(sLabel,"标准值"); + if(idx==-1) + idx= getIndexByHeader(sLabel,"标称值"); + if(idx!=-1) + ItemUnitSplit(dataRes[i][idx],ValueUnit,ValueUnit); + + } + dStdValue = transUnit(sRet,ValueUnit); + + } + } + + } + + + autoAdujstData(sLabel,i,dStdValue,dataRes); + CheckBackColorUpdate(false,i); + Delay_MSec(2000); + } + //CLOSE 被检设备 - 标准设备 + BaseCommonApi::SaveLogInfo(1,QString("CLOSE")); + InstructionLib *Closebiz; + InstructionLib *Closestan; + Closebiz= getCmdByCheckName(0,"CLOSE"); + Closestan= getCmdByCheckName(1,"CLOSE"); + if(Closestan!=nullptr && instrcutLibstan!=nullptr) + { + if(standardEngine.getState()) + { + //读取配置指令 + QStringList sList = Closestan->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + standardEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } } } + } } - autoAdujstData(sLabel,i,dStdValue,dataRes); - Delay_MSec(2000); + // + if(Closebiz!=nullptr && instrcutLibbiz!=nullptr) + { + if(deviceEngine.getState()) + { + //读取配置指令 + QStringList sList = Closebiz->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + deviceEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + }; + + } + + } caliDataList.insert(sLabel,dataRes); @@ -1673,3 +1928,45 @@ } return IsSucc; } +void CheckWindow::ItemUnitSplit(QString Value,QString &data,QString &unit) +{ + QString sData2=Value; + QString sNewData,sUnit; + // 正则表达式匹配数字 + QRegularExpression reLetters("[a-zA-ZΩΜΩ]"); + QRegularExpression reLetters1("[^a-zA-ZΩΜΩ]"); + data=sData2.replace(reLetters,""); + unit= Value.replace(reLetters1,""); + +} +void CheckWindow::CheckBackColorUpdate(bool State,int row) +{ + QBrush colorBrush(Qt::white); + if(State) + { + QColor lightGreenColor(173, 216, 230); + colorBrush.setColor(lightGreenColor); + } + for (int col = 0; col < ui->tableWidgetCheck->columnCount(); ++col) { + QTableWidgetItem *item = ui->tableWidgetCheck->item(row, col); + if (item) { + item->setBackground(colorBrush); + } + } +} +QString CheckWindow::Removeunit(QString data) +{ + QRegularExpression re("[a-zA-ZΩΜΩ]"); + return data.replace(re,""); +} +bool CheckWindow::showDialog(QString title,QString mess) +{ + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, title, mess, + QMessageBox::Yes|QMessageBox::No); + if (reply == QMessageBox::Yes) { + return true; + } else { + return false; + } +} diff --git a/softwareDirectory/AutoVerScheme/checkwindow.h b/softwareDirectory/AutoVerScheme/checkwindow.h index 5dacafa..fb6784f 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.h +++ b/softwareDirectory/AutoVerScheme/checkwindow.h @@ -92,6 +92,12 @@ QString TranTypeUnit(QString sUnit); void Oscilloscopetextflow(); void closeDevice(); + double tranunitSplit(QString sData,bool reverse=false); + void ItemUnitSplit(QString Value,QString &data,QString &unit); + void CheckBackColorUpdate(bool State,int row); + QString Removeunit(QString data); + bool showDialog(QString title,QString mess); + int TextCount; void openGageResult(); private: Ui::CheckWindow *ui; diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp index 9810a45..f6f5a32 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp @@ -136,6 +136,7 @@ void DialogCheckResult::on_pushButton_3_clicked() { + checkitemlist.clear(); SaveDeviceMeasureInfo measInfo; BaseCommonApi api; measInfo.id = QString::number(api.generateId()); @@ -239,6 +240,73 @@ BaseCommonApi::SearchSelectTable(QString::number(iEquipType),&measItem); } } + //示波器检定装置 + else if(iEquipType==13) + { + checkitemlist.insert("时基",1); + checkitemlist.insert("直流增益",2); + checkitemlist.insert("直流偏置",3); + checkitemlist.insert("频带宽度",4); + checkitemlist.insert("触发灵敏度",5); + checkitemlist.insert("上升时间",6); + checkitemlist.insert("输入电阻",7); + checkitemlist.insert("校准信号",8); + QString Value,Unit; + //ItemUnitSplit + for (int i = 0; i < dataRes.count(); ++i) { + DeviceOscilloscopeCalibration measItem; + measItem.id = QString::number(api.generateId()); + measItem.data_id = measInfo.id; + measItem.data_type = getDictebyItemName(getValueByHeader(i,sLabel,"检定项目")); + ItemUnitSplit(getValueByHeader(i,sLabel,"周期时标信号"),Value,Unit); + measItem.cycle_signal=Value; + measItem.cycle_signal_unit=Unit; + measItem.time_base_absolute_error=getValueByHeader(i,sLabel,"时基绝对误差△T/ns"); + measItem.time_base_relative_error=getValueByHeader(i,sLabel,"时基相对误差△δ"); + ItemUnitSplit(getValueByHeader(i,sLabel,"技术指标"),Value,Unit); + measItem.technical_index=Value; + measItem.technical_index_unit=Unit; + measItem.conclusion=getValueByHeader(i,sLabel,"结论"); + measItem.thoroughfare=getValueByHeader(i,sLabel,"通道"); + ItemUnitSplit(getValueByHeader(i,sLabel,"阻抗"),Value,Unit); + measItem.impedance=Value; + measItem.impedance_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"幅度/DIV"),Value,Unit); + measItem.vertical_deflect_coefficient=Value; + measItem.vertical_deflect_coefficient_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"标准值"),Value,Unit); + measItem.standard_value=Value; + measItem.standard_value_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"测量值"),Value,Unit); + measItem.measure_value=Value; + measItem.measure_value_unit=Unit; + measItem.relative_error=getValueByHeader(i,sLabel,"相对误差"); + measItem.error_value=getValueByHeader(i,sLabel,"误差"); + ItemUnitSplit(getValueByHeader(i,sLabel,"频带宽度"),Value,Unit); + measItem.band_width=Value; + measItem.band_width_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"参考幅度"),Value,Unit); + measItem.reference_amplitude=Value; + measItem.reference_amplitude=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"测量幅度"),Value,Unit); + measItem.measure_amplitude=Value; + measItem.measure_amplitude_unit=Unit; + measItem.decibel_number=getValueByHeader(i,sLabel,"分贝数(dB)"); + measItem.trigger_type=getValueByHeader(i,sLabel,"触发类型"); + ItemUnitSplit(getValueByHeader(i,sLabel,"标称值"),Value,Unit); + measItem.nominal_value=Value; + measItem.nominal_value_unit=Unit; + measItem.data_type=getValueByHeader(i,sLabel,"项目"); + ItemUnitSplit(getValueByHeader(i,sLabel,"顶部测量值"),Value,Unit); + measItem.top_measure_value=Value; + measItem.top_measure_value_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"底部测量值"),Value,Unit); + measItem.bottom_measure_value=Value; + measItem.bottom_measure_value_unit=Unit; + //decibel_number + BaseCommonApi::InsertDeviceOscilloscopeCalibration(measItem); + } + } } // for(SaveDeviceMeasureCalibrator& item:measureCalList){ // item.id = QString::number(api.generateId()); @@ -342,3 +410,23 @@ { } +int DialogCheckResult::getDictebyItemName(QString Name) +{ + int NewName=0; + if(checkitemlist.keys().contains(Name)) + { + NewName=checkitemlist.value(Name); + } + return NewName; +} +void DialogCheckResult::ItemUnitSplit(QString Value,QString &data,QString &unit) +{ + QString sData2=Value; + QString sNewData,sUnit; + // 正则表达式匹配数字 + QRegularExpression reLetters("[a-zA-ZΩΜΩ]"); + QRegularExpression reLetters1("[^a-zA-ZΩΜΩ]"); + data=sData2.replace(reLetters,""); + unit= Value.replace(reLetters1,""); + +} diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.h b/softwareDirectory/AutoVerScheme/dialogcheckresult.h index 538aa41..d72eddf 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.h +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.h @@ -42,6 +42,9 @@ int curHeadIdx=-1; int iEquipType; QList catoryList; + QMap checkitemlist; + int getDictebyItemName(QString Name); + void ItemUnitSplit(QString Value,QString &data,QString &unit); }; #endif // DIALOGCHECKRESULT_H diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index f4a7d86..c0a9da5 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -1893,30 +1893,30 @@ QList BaseCommonApi::getInstructionLib(QString verification_program_id) { QList result; - QSqlQuery query; - query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); - query.bindValue(":verification_program_id", verification_program_id); - if (query.exec()) { - while (query.next()) { - InstructionLib instruction; - instruction.id = query.value("id").toString(); - instruction.device_id = query.value("device_id").toString(); - instruction.device_name = query.value("device_name").toString(); - instruction.instruct_config = query.value("instruct_config").toString(); - instruction.instruct_read = query.value("instruct_read").toString(); - instruction.type = query.value("type").toString(); - instruction.belong_vername = query.value("belong_vername").toString(); - instruction.belong_checkname = query.value("belong_checkname").toString(); - instruction.verification_program_id = query.value("verification_program_id").toString(); - instruction.create_time = query.value("create_time").toDateTime(); - instruction.update_time = query.value("update_time").toDateTime(); - instruction.param = query.value("param").toString(); - result.append(instruction); - } - } else { - qDebug() << "Query execution failed: " << query.lastError().text(); - } - return result; + QSqlQuery query; + query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); + query.bindValue(":verification_program_id", verification_program_id); + if (query.exec()) { + while (query.next()) { + InstructionLib instruction; + instruction.id = query.value("id").toString(); + instruction.device_id = query.value("device_id").toString(); + instruction.device_name = query.value("device_name").toString(); + instruction.instruct_config = query.value("instruct_config").toString(); + instruction.instruct_read = query.value("instruct_read").toString(); + instruction.type = query.value("type").toString(); + instruction.belong_vername = query.value("belong_vername").toString(); + instruction.belong_checkname = query.value("belong_checkname").toString(); + instruction.verification_program_id = query.value("verification_program_id").toString(); + instruction.create_time = query.value("create_time").toDateTime(); + instruction.update_time = query.value("update_time").toDateTime(); + instruction.param = query.value("param").toString(); + result.append(instruction); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + return result; }; //查询检定项用于在新增指令时筛选 例如DCV ACI 如果equipment_item_category_id为空查询所有 QList BaseCommonApi::getParams(QString belong_standard_equipment_id,QString equipment_item_category_id) @@ -3978,7 +3978,7 @@ resultData.clear(); QSqlQuery query; - query.prepare("SELECT * FROM biz_business_device_measure_item_data_oscilloscope bbdmido" + query.prepare("SELECT *,bbdmii.band_width as BW FROM biz_business_device_measure_item_data_oscilloscope bbdmido" " JOIN biz_business_device_measure_item_info bbdmii ON bbdmii.id = bbdmido.item_id " " WHERE bbdmido.item_id = :itemId ORDER BY bbdmido.update_time DESC"); // 将参数绑定到占位符 @@ -3991,7 +3991,7 @@ result.append(query.value("time_base").toString());//时基 result.append(query.value("current_gain").toString());//直流增益(示波器-数字) result.append(query.value("current_bias").toString());//直流偏置(示波器-数字) - result.append(query.value("band_width").toString());//频带宽度 (示波器-数字/模拟) + result.append(query.value("BW").toString());//频带宽度 (示波器-数字/模拟) result.append(query.value("trigger_sensitivity").toString());//触发灵敏度(示波器-数字/模拟) result.append(query.value("rise_time").toString());//上升时间(示波器-数字/模拟) result.append(query.value("input_resistance").toString());//输入电阻 (示波器-数字/模拟) @@ -4017,6 +4017,7 @@ result.append(query.value("nominal_value").toString());//标称值 result.append(query.value("nominal_value_unit").toString());//标称值单位 result.append(query.value("data_type").toString());// + result.append(query.value("item_type").toString());// result.append(query.value("create_time").toString()); result.append(query.value("update_time").toString()); resultData.append(result); @@ -4069,7 +4070,6 @@ QStringList head; //添加列头 head <<"序号"<<"检定项目"<<"通道"<<"阻抗" <<"幅度/DIV" <<"标准值" - <<"单位" <<"测量值"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4078,9 +4078,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[28]);//标准值 - Data.append(row[29]);//标准值单位 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//相对误差 Data.append(row[13]);//技术指标 @@ -4091,7 +4090,7 @@ VerificationItem = "直流偏置"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)"<<"标准值" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV"<<"标准值" <<"测量值"<<"误差"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4100,8 +4099,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[19]);//标准值 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//误差 Data.append("");//相对误差 @@ -4113,7 +4112,7 @@ VerificationItem = "频带宽度"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" <<"标准值" << "频带宽度" <<"参考幅度" <<"参考幅度单位" <<"测量幅度" <<"测量幅度单位" <<"分贝数(dB)" <<"技术指标" << "结论"; HeadMapList->insert(VerificationItem,head); @@ -4123,12 +4122,13 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[22]);//频带宽度 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 + Data.append(row[22]+row[23]);//频带宽度 Data.append("");//参考幅度 - Data.append("");//参考幅度单位 + Data.append(row[19]);//参考幅度单位 Data.append("");//测量幅度 - Data.append("");//测量幅度单位 + Data.append(row[19]);//测量幅度单位 Data.append("");//分贝数(dB) Data.append(row[13]);//技术指标 Data.append("");//结论 @@ -4150,14 +4150,15 @@ Data.append(row[27]);//信号频率 Data.append(row[28]);//标称值 Data.append("");//测量值 + Data.append("");//结论 trigger_sensitivity.append(Data); } if (!row.isEmpty() && row[7]=="1" && row[30] =="6") { VerificationItem = "上升时间"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" - <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" + <<"标准值" <<"测量值"<<"单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 QStringList Data; @@ -4165,9 +4166,10 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 - Data.append("");//测量值单位 + Data.append("ns");//测量值单位 Data.append(row[13]);//技术指标 Data.append("");//结论 rise_timeList.append(Data); @@ -4176,7 +4178,7 @@ VerificationItem = "输入电阻"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"幅度/DIV" <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4185,7 +4187,7 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[28]+row[29]);//标称值 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) Data.append("");//测量值 Data.append("");//测量值单位 Data.append(row[13]);//技术指标 @@ -4203,13 +4205,13 @@ QStringList Data; Data.append(row[0]); //ID Data.append(VerificationItem); //检定项目 - Data.append(row[30]);//项目 + Data.append(row[31]);//项目 Data.append(row[28]+row[29]);//标称值 Data.append("");//顶部测量值 Data.append("");//底部测量值 Data.append("");//测量值 Data.append("");//测量值单位 - Data.append(row[13]);//技术指标 + Data.append("");//相对误差 calibrating_signalList.append(Data); } diff --git a/softwareDirectory/AutoVerScheme/checkwindow.cpp b/softwareDirectory/AutoVerScheme/checkwindow.cpp index cf8f54a..6e9fd04 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.cpp +++ b/softwareDirectory/AutoVerScheme/checkwindow.cpp @@ -57,6 +57,14 @@ unitTransList.insert("Ω",1); unitTransList.insert("KΩ",0.001); unitTransList.insert("MΩ",0.000001); + unitTransList.insert("HZ",1); + unitTransList.insert("kHZ",0.001); + unitTransList.insert("MHZ",0.000001); + unitTransList.insert("GHZ",0.000000001); + unitTransList.insert("S",1); + unitTransList.insert("MS",1E+3); + unitTransList.insert("PS",1E+12); + unitTransList.insert("NS",1E+9); //统一定义命令占位符 cmdPlaceHolderList.insert("{CH}","通道"); cmdPlaceHolderList.insert("{RANV}","量程"); @@ -69,15 +77,19 @@ cmdPlaceHolderList.insert("{STVAL}","标准值"); cmdPlaceHolderList.insert("{RAN}","量程"); cmdPlaceHolderList.insert("{FREQ}","频率"); + cmdPlaceHolderList.insert("{BW}","频带宽度"); cmdPlaceHolderList.insert("{UNIT}","单位"); cmdPlaceHolderList.insert("{FUNIT}","频率单位"); cmdPlaceHolderList.insert("{OHM}","阻抗"); + cmdPlaceHolderList.insert("{POS}","周期时标信号"); //示波器 cmdPlaceHolderList.insert("{OHM}","阻抗"); //转换 unitTypeTransList.insert("Ω","OHM"); unitTypeTransList.insert("KΩ","KOHM"); unitTypeTransList.insert("MΩ","MOHM"); + unitTypeTransList.insert("50Ω","0"); + unitTypeTransList.insert("1MΩ","1"); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -421,16 +433,19 @@ int idx2= getIndexByHeader(sLabel,"标准值"); int idx3= getIndexByHeader(sLabel,"单位"); int chname= getIndexByHeader(sLabel,"通道"); + if(idx==-1){idx=1;};if(idx2==-1){idx2=5;};if(idx3==-1){idx3=4;}; ui->tableWidget_Point->setItem(row, 0, new QTableWidgetItem(dataRes[i][idx])); ui->tableWidget_Point->setItem(row, 1, new QTableWidgetItem(dataRes[i][idx2]+"("+dataRes[i][idx3]+")")); ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; + if(chname!=-1&&!chList.contains(dataRes[i][chname])) { chList.append(dataRes[i][chname]); } } + // ======================================================================================== // 按钮设置显示 // ==================================================================================== @@ -444,7 +459,7 @@ //设置第一个按钮选中状态 if(index==0){ button->setChecked(true);} //button->setc(true); - // 设置按钮样式表 + // 设置按钮样式表 button->setStyleSheet("QPushButton {" "border: 1px solid white;" // 白色边框 "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 @@ -510,6 +525,8 @@ ui->HeadListLayout->addWidget(button); } } + std::sort(chList.begin(), chList.end()); + if(chList.count()==0){chList.append("CH1");}; ui->stackedWidget_2->setCurrentIndex(1); initCheckTable(0); } @@ -1136,6 +1153,21 @@ } return dTmp; } +double CheckWindow::tranunitSplit(QString sData,bool reverse) +{ + + QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); + if(re.match(sData).hasMatch()) + { + QString sData2=sData; + QString sNewData,sUnit; + ItemUnitSplit(sData,sNewData,sUnit); + return transUnit(sNewData,sUnit,reverse); + }else{ + return sData.toDouble(); + } + +} QString CheckWindow::TranTypeUnit(QString sUnit) { QString NewsUnit=sUnit; @@ -1151,24 +1183,25 @@ if(dex==-1) dex=getIndexByHeader(sLabel,"标准器示值"); if(dex==-1) + dex=getIndexByHeader(sLabel,"标称值"); + if(dex==-1) return QString::number(TestValue); - QString StanValue=data[dex]; - int decimalPlaces = 0; - int decimalPos = StanValue.indexOf('.'); + + QString StanValue=Removeunit(data[dex]); + int decimalPlaces = 0; + int decimalPos = StanValue.indexOf('.'); if (decimalPos == -1) { decimalPlaces=1; }else{ decimalPlaces=StanValue.length() - decimalPos - 1; } - - QString formattedTestValue = QString::number(TestValue, 'f', decimalPlaces); return formattedTestValue; } QString CheckWindow::transCmd(QString sCmd,QString sLabel,QStringList data,bool devicetype) { QString sNewCmd = sCmd; - if(sNewCmd.contains("DELAY:")){ + if(sNewCmd.contains("{DELAY:")){ QRegExp re("DELAY:(\\d+)"); int delay=0; if (re.indexIn(sNewCmd) != -1) { @@ -1184,15 +1217,28 @@ if(sCmd.contains(key)){ int idx= getIndexByHeader(sLabel,cmdPlaceHolderList.value(key)); if(idx!=-1){ - if(devicetype) + if(devicetype || key=="{CH}") { NewUnit = TranTypeUnit(data[idx]); //转换 Ω->OHM sNewCmd = sNewCmd.replace(key,NewUnit); continue; } - int idx2= getIndexByHeader(sLabel,"单位"); - QString unit = data[idx2]; - double dTmp = transUnit(data[idx],unit,true); + double dTmp; + QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); + if(re.match(data[idx]).hasMatch()) + { + dTmp = tranunitSplit(data[idx],true); + }else + { + int idx2= getIndexByHeader(sLabel,"单位"); + if(idx2!=-1) + { + QString unit = data[idx2]; + dTmp = transUnit(data[idx],unit,true); + }else{ + dTmp=data[idx].toDouble(); + }; + } sNewCmd = sNewCmd.replace(key,QString::number(dTmp)); } @@ -1200,6 +1246,7 @@ } return sNewCmd; } + //_text void CheckWindow::on_pushButton_start_clicked() { @@ -1281,9 +1328,9 @@ void CheckWindow::autoAdujstData(QString sLabel,int i,double dStdValue,QList& dataRes){ double dError; - QString newdStdValue,newdError; + QString newdStdValue,newdError,Value; if(iEquipType==1 || iEquipType==13){ - if(qIsFinite(dStdValue)){ + if(dStdValue==FP_INFINITE){ bool bOk = false; dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,5,&bOk); @@ -1293,7 +1340,10 @@ dStdValue=0; } } - newdStdValue= TranDecimals(sLabel,dataRes[i],dStdValue); + // ItemUnitSplit + + newdStdValue= TranDecimals(sLabel, dataRes[i],dStdValue); + int idx= getIndexByHeader(sLabel,"示值"); if(idx!=-1) { @@ -1320,11 +1370,16 @@ if(idx!=-1) { int idx2=getIndexByHeader(sLabel,"标准值"); - double dTmp = dataRes[i][idx2].toDouble(); - dError = (dStdValue-dTmp); - newdError=TranDecimals(sLabel,dataRes[i],dError); - dataRes[i][idx] = newdError; - ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); + if(idx2==-1) + idx2=getIndexByHeader(sLabel,"标称值"); + if(idx2!=-1){ + double dTmp = dataRes[i][idx2].toDouble(); + dError = (dStdValue-dTmp); + newdError=TranDecimals(sLabel,dataRes[i],dError); + dataRes[i][idx] = newdError; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); + } + } idx= getIndexByHeader(sLabel,"结论"); if(idx!=-1) @@ -1333,6 +1388,61 @@ ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem("符合指标")); //测量值 } + idx= getIndexByHeader(sLabel,"测量幅度"); + if(idx!=-1) + { + QString textValue= ui->tableWidgetCheck->item(i,idx)->text(); + + if(textValue==""){ + dataRes[i][idx] = newdStdValue; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); //测试 + }else + { + idx= getIndexByHeader(sLabel,"参考幅度"); + QString refvalue= newdStdValue; + dataRes[i][idx] = refvalue; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(refvalue)); //参考 + // 计算a除以b的对数(以10为底) + double logResult = std::log10( refvalue.toDouble() / textValue.toDouble()); + double result = 20 * logResult; + idx= getIndexByHeader(sLabel,"分贝数(dB)"); + if(idx!=-1) + { + QString newresult; + newresult=TranDecimals(sLabel, dataRes[i],result); + dataRes[i][idx] = newresult; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newresult)); //分贝数 + } + + } + } + idx= getIndexByHeader(sLabel,"周期时标信号"); + if(idx!=-1) + { + double ErrorCal; + QString sign=""; + if(dStdValue>0.2){sign="-";}; + + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动输入","请输入△T/ns值",0,-100000, 100000,5,&bOk); + if (bOk) { + }else{ + dStdValue=0; + } + dStdValue=transUnit(QString::number(dStdValue),"ns",true); + ErrorCal=std::fabs(dStdValue); + idx= getIndexByHeader(sLabel,"时基绝对误差△T/ns"); + if(idx!=-1){ + dataRes[i][idx] =sign+QString::number(ErrorCal); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal))); //测量值 + } + + idx= getIndexByHeader(sLabel,"时基相对误差△δ"); + { + dataRes[i][idx] =sign+QString::number(ErrorCal/0.01); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal/0.01))); //测量值 + } + } BaseCommonApi::SaveLogInfo(1,QString("转换前 测试值 %1").arg(dStdValue)); BaseCommonApi::SaveLogInfo(1,QString("转换后 测试值 %1").arg(newdStdValue)); @@ -1468,37 +1578,118 @@ } void CheckWindow::Oscilloscopetextflow() { + connectDevice(); + for (int _ch=0;_chshowDialog("通道切换提示",QString("请切换 %1 通道").arg(chList[_ch]))){continue;} for(int i=0;i dataRes = caliDataList.value(sLabel); - BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(_ch).arg(sLabel)); + BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(chList[_ch]).arg(sLabel)); QString sParam; + QString ValueUnit; + InstructionLib *instrcutLibOhm; for (int i = 0; i < dataRes.count(); ++i) { + TextCount=1; int _dex= getIndexByHeader(sLabel,"通道"); - if(_dex==-1){sParam=_ch;}else{sParam=dataRes[i][_dex];} + if(_dex==-1){sParam=chList[_ch];}else{sParam=dataRes[i][_dex];} if(sParam!=chList[_ch]){continue;}; + CheckBackColorUpdate(true,i); QString sRet=""; QString newCmd; double dStdValue=FP_INFINITE; QString newdStdValue; - //标准器输出 - BaseCommonApi::SaveLogInfo(1,QString("标准器输出")); - QString sParam; int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam; if(idx!=-1) sParam = dataRes[i][idx]; - if(standardEngine.getState() || 1==1){ - InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); + InstructionLib *instrcutLibbiz=getCmdByCheckName(0,sParam); + InstructionLib *instrcutLibstan=getCmdByCheckName(1,sParam); + //INIT 被检设备 - 标准设备 + BaseCommonApi::SaveLogInfo(1,QString("INIT")); + InstructionLib *InItbiz; + InstructionLib *InItstan; + InItbiz= getCmdByCheckName(0,"INIT"); + InItstan= getCmdByCheckName(1,"INIT"); + if(InItbiz!=nullptr && instrcutLibbiz!=nullptr) + { + if(deviceEngine.getState()) + { + //设置电阻值+ + instrcutLibOhm= getCmdByCheckName(0,"电阻"); + if(instrcutLibOhm!=nullptr){ + QStringList ohmList = instrcutLibOhm->instruct_config.split(";"); + int idxohm= getIndexByHeader(sLabel,"阻抗"); + if(idxohm!=-1) + { + QString onmname="50Ω"; + QString CmdOhm; + onmname=dataRes[i][idxohm]; + if(onmname=="50Ω"){CmdOhm=ohmList[0];}else{CmdOhm=ohmList[1];}; + newCmd = transCmd(CmdOhm,sLabel,dataRes[i],true); + deviceEngine.sendData(newCmd); + } + } + //读取配置指令 + + QStringList sList = InItbiz->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + deviceEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + }; + + } + + if(InItstan!=nullptr && instrcutLibstan!=nullptr) + { + if(standardEngine.getState()) + { + //读取配置指令 + QStringList sList = InItstan->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + standardEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + } + + } + + if(sParam=="频带宽度"){TextCount=2;}; + for (int d=0;dinstruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + if(d==1&& sCmd.contains("{BW}")) + { + sCmd.replace("{BW}","50000"); + } + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + if(newCmd!=""){ standardEngine.sendData(newCmd); qDebug() << "standard cmds:" << newCmd; @@ -1509,10 +1700,9 @@ } //被检设备读数 BaseCommonApi::SaveLogInfo(1,QString("被检设备输出")); - if(deviceEngine.getState() || 1==1){ - InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); + if(deviceEngine.getState()){ + if(instrcutLibbiz!=nullptr){ + QStringList sList = instrcutLibbiz->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); @@ -1522,18 +1712,83 @@ } } } - - newCmd = transCmd(instrcutLib->instruct_read,sLabel,dataRes[i]); + newCmd = transCmd(instrcutLibbiz->instruct_read,sLabel,dataRes[i]); if(newCmd!=""){ qDebug() << "query cmds:" << newCmd; + sRet = deviceEngine.queryData(newCmd); idx= getIndexByHeader(sLabel,"单位"); - dStdValue = transUnit(sRet,dataRes[i][idx]); + //ValueUnit + if(idx!=-1) + { + ValueUnit=dataRes[i][idx]; + }else + { + int idx= getIndexByHeader(sLabel,"标准值"); + if(idx==-1) + idx= getIndexByHeader(sLabel,"标称值"); + if(idx!=-1) + ItemUnitSplit(dataRes[i][idx],ValueUnit,ValueUnit); + + } + dStdValue = transUnit(sRet,ValueUnit); + + } + } + + } + + + autoAdujstData(sLabel,i,dStdValue,dataRes); + CheckBackColorUpdate(false,i); + Delay_MSec(2000); + } + //CLOSE 被检设备 - 标准设备 + BaseCommonApi::SaveLogInfo(1,QString("CLOSE")); + InstructionLib *Closebiz; + InstructionLib *Closestan; + Closebiz= getCmdByCheckName(0,"CLOSE"); + Closestan= getCmdByCheckName(1,"CLOSE"); + if(Closestan!=nullptr && instrcutLibstan!=nullptr) + { + if(standardEngine.getState()) + { + //读取配置指令 + QStringList sList = Closestan->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + standardEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } } } + } } - autoAdujstData(sLabel,i,dStdValue,dataRes); - Delay_MSec(2000); + // + if(Closebiz!=nullptr && instrcutLibbiz!=nullptr) + { + if(deviceEngine.getState()) + { + //读取配置指令 + QStringList sList = Closebiz->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + deviceEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + }; + + } + + } caliDataList.insert(sLabel,dataRes); @@ -1673,3 +1928,45 @@ } return IsSucc; } +void CheckWindow::ItemUnitSplit(QString Value,QString &data,QString &unit) +{ + QString sData2=Value; + QString sNewData,sUnit; + // 正则表达式匹配数字 + QRegularExpression reLetters("[a-zA-ZΩΜΩ]"); + QRegularExpression reLetters1("[^a-zA-ZΩΜΩ]"); + data=sData2.replace(reLetters,""); + unit= Value.replace(reLetters1,""); + +} +void CheckWindow::CheckBackColorUpdate(bool State,int row) +{ + QBrush colorBrush(Qt::white); + if(State) + { + QColor lightGreenColor(173, 216, 230); + colorBrush.setColor(lightGreenColor); + } + for (int col = 0; col < ui->tableWidgetCheck->columnCount(); ++col) { + QTableWidgetItem *item = ui->tableWidgetCheck->item(row, col); + if (item) { + item->setBackground(colorBrush); + } + } +} +QString CheckWindow::Removeunit(QString data) +{ + QRegularExpression re("[a-zA-ZΩΜΩ]"); + return data.replace(re,""); +} +bool CheckWindow::showDialog(QString title,QString mess) +{ + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, title, mess, + QMessageBox::Yes|QMessageBox::No); + if (reply == QMessageBox::Yes) { + return true; + } else { + return false; + } +} diff --git a/softwareDirectory/AutoVerScheme/checkwindow.h b/softwareDirectory/AutoVerScheme/checkwindow.h index 5dacafa..fb6784f 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.h +++ b/softwareDirectory/AutoVerScheme/checkwindow.h @@ -92,6 +92,12 @@ QString TranTypeUnit(QString sUnit); void Oscilloscopetextflow(); void closeDevice(); + double tranunitSplit(QString sData,bool reverse=false); + void ItemUnitSplit(QString Value,QString &data,QString &unit); + void CheckBackColorUpdate(bool State,int row); + QString Removeunit(QString data); + bool showDialog(QString title,QString mess); + int TextCount; void openGageResult(); private: Ui::CheckWindow *ui; diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp index 9810a45..f6f5a32 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp @@ -136,6 +136,7 @@ void DialogCheckResult::on_pushButton_3_clicked() { + checkitemlist.clear(); SaveDeviceMeasureInfo measInfo; BaseCommonApi api; measInfo.id = QString::number(api.generateId()); @@ -239,6 +240,73 @@ BaseCommonApi::SearchSelectTable(QString::number(iEquipType),&measItem); } } + //示波器检定装置 + else if(iEquipType==13) + { + checkitemlist.insert("时基",1); + checkitemlist.insert("直流增益",2); + checkitemlist.insert("直流偏置",3); + checkitemlist.insert("频带宽度",4); + checkitemlist.insert("触发灵敏度",5); + checkitemlist.insert("上升时间",6); + checkitemlist.insert("输入电阻",7); + checkitemlist.insert("校准信号",8); + QString Value,Unit; + //ItemUnitSplit + for (int i = 0; i < dataRes.count(); ++i) { + DeviceOscilloscopeCalibration measItem; + measItem.id = QString::number(api.generateId()); + measItem.data_id = measInfo.id; + measItem.data_type = getDictebyItemName(getValueByHeader(i,sLabel,"检定项目")); + ItemUnitSplit(getValueByHeader(i,sLabel,"周期时标信号"),Value,Unit); + measItem.cycle_signal=Value; + measItem.cycle_signal_unit=Unit; + measItem.time_base_absolute_error=getValueByHeader(i,sLabel,"时基绝对误差△T/ns"); + measItem.time_base_relative_error=getValueByHeader(i,sLabel,"时基相对误差△δ"); + ItemUnitSplit(getValueByHeader(i,sLabel,"技术指标"),Value,Unit); + measItem.technical_index=Value; + measItem.technical_index_unit=Unit; + measItem.conclusion=getValueByHeader(i,sLabel,"结论"); + measItem.thoroughfare=getValueByHeader(i,sLabel,"通道"); + ItemUnitSplit(getValueByHeader(i,sLabel,"阻抗"),Value,Unit); + measItem.impedance=Value; + measItem.impedance_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"幅度/DIV"),Value,Unit); + measItem.vertical_deflect_coefficient=Value; + measItem.vertical_deflect_coefficient_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"标准值"),Value,Unit); + measItem.standard_value=Value; + measItem.standard_value_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"测量值"),Value,Unit); + measItem.measure_value=Value; + measItem.measure_value_unit=Unit; + measItem.relative_error=getValueByHeader(i,sLabel,"相对误差"); + measItem.error_value=getValueByHeader(i,sLabel,"误差"); + ItemUnitSplit(getValueByHeader(i,sLabel,"频带宽度"),Value,Unit); + measItem.band_width=Value; + measItem.band_width_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"参考幅度"),Value,Unit); + measItem.reference_amplitude=Value; + measItem.reference_amplitude=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"测量幅度"),Value,Unit); + measItem.measure_amplitude=Value; + measItem.measure_amplitude_unit=Unit; + measItem.decibel_number=getValueByHeader(i,sLabel,"分贝数(dB)"); + measItem.trigger_type=getValueByHeader(i,sLabel,"触发类型"); + ItemUnitSplit(getValueByHeader(i,sLabel,"标称值"),Value,Unit); + measItem.nominal_value=Value; + measItem.nominal_value_unit=Unit; + measItem.data_type=getValueByHeader(i,sLabel,"项目"); + ItemUnitSplit(getValueByHeader(i,sLabel,"顶部测量值"),Value,Unit); + measItem.top_measure_value=Value; + measItem.top_measure_value_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"底部测量值"),Value,Unit); + measItem.bottom_measure_value=Value; + measItem.bottom_measure_value_unit=Unit; + //decibel_number + BaseCommonApi::InsertDeviceOscilloscopeCalibration(measItem); + } + } } // for(SaveDeviceMeasureCalibrator& item:measureCalList){ // item.id = QString::number(api.generateId()); @@ -342,3 +410,23 @@ { } +int DialogCheckResult::getDictebyItemName(QString Name) +{ + int NewName=0; + if(checkitemlist.keys().contains(Name)) + { + NewName=checkitemlist.value(Name); + } + return NewName; +} +void DialogCheckResult::ItemUnitSplit(QString Value,QString &data,QString &unit) +{ + QString sData2=Value; + QString sNewData,sUnit; + // 正则表达式匹配数字 + QRegularExpression reLetters("[a-zA-ZΩΜΩ]"); + QRegularExpression reLetters1("[^a-zA-ZΩΜΩ]"); + data=sData2.replace(reLetters,""); + unit= Value.replace(reLetters1,""); + +} diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.h b/softwareDirectory/AutoVerScheme/dialogcheckresult.h index 538aa41..d72eddf 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.h +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.h @@ -42,6 +42,9 @@ int curHeadIdx=-1; int iEquipType; QList catoryList; + QMap checkitemlist; + int getDictebyItemName(QString Name); + void ItemUnitSplit(QString Value,QString &data,QString &unit); }; #endif // DIALOGCHECKRESULT_H diff --git a/softwareDirectory/AutoVerScheme/formaddrsetting.cpp b/softwareDirectory/AutoVerScheme/formaddrsetting.cpp index a820ec9..ea066fc 100644 --- a/softwareDirectory/AutoVerScheme/formaddrsetting.cpp +++ b/softwareDirectory/AutoVerScheme/formaddrsetting.cpp @@ -42,9 +42,8 @@ ui->tableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); ui->tableWidget->setColumnHidden(0, true); ui->tableWidget->setColumnWidth(1, 80); - ui->tableWidget->setColumnWidth(2, 60); - ui->tableWidget->setColumnWidth(3, 60); - ui->tableWidget->setColumnWidth(5, 100); + ui->tableWidget->setColumnWidth(2, 80); + ui->tableWidget->setColumnWidth(3, 100); cmdList = BaseCommonApi::getInstructionLib(sId); CheckItemNameList.clear(); @@ -183,7 +182,7 @@ BaseCommonApi baseApi; qint64 id = baseApi.generateId(); cmd.id = QString::number(id); - cmd.type = iType; + cmd.type =QString::number(iType); QString sName = ""; if(iType==0){ if(checkMode){ @@ -349,3 +348,12 @@ { this->ui->stackedWidget->setCurrentIndex(0); } + +void FormAddrSetting::on_ExportCmdInfo_clicked() +{ + QString fileName = QFileDialog::getSaveFileName(this, tr("CmdInfo"), "", tr("Text Files (*.txt)")); + if (fileName.isEmpty()) { + return; + } + +} diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index f4a7d86..c0a9da5 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -1893,30 +1893,30 @@ QList BaseCommonApi::getInstructionLib(QString verification_program_id) { QList result; - QSqlQuery query; - query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); - query.bindValue(":verification_program_id", verification_program_id); - if (query.exec()) { - while (query.next()) { - InstructionLib instruction; - instruction.id = query.value("id").toString(); - instruction.device_id = query.value("device_id").toString(); - instruction.device_name = query.value("device_name").toString(); - instruction.instruct_config = query.value("instruct_config").toString(); - instruction.instruct_read = query.value("instruct_read").toString(); - instruction.type = query.value("type").toString(); - instruction.belong_vername = query.value("belong_vername").toString(); - instruction.belong_checkname = query.value("belong_checkname").toString(); - instruction.verification_program_id = query.value("verification_program_id").toString(); - instruction.create_time = query.value("create_time").toDateTime(); - instruction.update_time = query.value("update_time").toDateTime(); - instruction.param = query.value("param").toString(); - result.append(instruction); - } - } else { - qDebug() << "Query execution failed: " << query.lastError().text(); - } - return result; + QSqlQuery query; + query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); + query.bindValue(":verification_program_id", verification_program_id); + if (query.exec()) { + while (query.next()) { + InstructionLib instruction; + instruction.id = query.value("id").toString(); + instruction.device_id = query.value("device_id").toString(); + instruction.device_name = query.value("device_name").toString(); + instruction.instruct_config = query.value("instruct_config").toString(); + instruction.instruct_read = query.value("instruct_read").toString(); + instruction.type = query.value("type").toString(); + instruction.belong_vername = query.value("belong_vername").toString(); + instruction.belong_checkname = query.value("belong_checkname").toString(); + instruction.verification_program_id = query.value("verification_program_id").toString(); + instruction.create_time = query.value("create_time").toDateTime(); + instruction.update_time = query.value("update_time").toDateTime(); + instruction.param = query.value("param").toString(); + result.append(instruction); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + return result; }; //查询检定项用于在新增指令时筛选 例如DCV ACI 如果equipment_item_category_id为空查询所有 QList BaseCommonApi::getParams(QString belong_standard_equipment_id,QString equipment_item_category_id) @@ -3978,7 +3978,7 @@ resultData.clear(); QSqlQuery query; - query.prepare("SELECT * FROM biz_business_device_measure_item_data_oscilloscope bbdmido" + query.prepare("SELECT *,bbdmii.band_width as BW FROM biz_business_device_measure_item_data_oscilloscope bbdmido" " JOIN biz_business_device_measure_item_info bbdmii ON bbdmii.id = bbdmido.item_id " " WHERE bbdmido.item_id = :itemId ORDER BY bbdmido.update_time DESC"); // 将参数绑定到占位符 @@ -3991,7 +3991,7 @@ result.append(query.value("time_base").toString());//时基 result.append(query.value("current_gain").toString());//直流增益(示波器-数字) result.append(query.value("current_bias").toString());//直流偏置(示波器-数字) - result.append(query.value("band_width").toString());//频带宽度 (示波器-数字/模拟) + result.append(query.value("BW").toString());//频带宽度 (示波器-数字/模拟) result.append(query.value("trigger_sensitivity").toString());//触发灵敏度(示波器-数字/模拟) result.append(query.value("rise_time").toString());//上升时间(示波器-数字/模拟) result.append(query.value("input_resistance").toString());//输入电阻 (示波器-数字/模拟) @@ -4017,6 +4017,7 @@ result.append(query.value("nominal_value").toString());//标称值 result.append(query.value("nominal_value_unit").toString());//标称值单位 result.append(query.value("data_type").toString());// + result.append(query.value("item_type").toString());// result.append(query.value("create_time").toString()); result.append(query.value("update_time").toString()); resultData.append(result); @@ -4069,7 +4070,6 @@ QStringList head; //添加列头 head <<"序号"<<"检定项目"<<"通道"<<"阻抗" <<"幅度/DIV" <<"标准值" - <<"单位" <<"测量值"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4078,9 +4078,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[28]);//标准值 - Data.append(row[29]);//标准值单位 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//相对误差 Data.append(row[13]);//技术指标 @@ -4091,7 +4090,7 @@ VerificationItem = "直流偏置"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)"<<"标准值" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV"<<"标准值" <<"测量值"<<"误差"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4100,8 +4099,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[19]);//标准值 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//误差 Data.append("");//相对误差 @@ -4113,7 +4112,7 @@ VerificationItem = "频带宽度"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" <<"标准值" << "频带宽度" <<"参考幅度" <<"参考幅度单位" <<"测量幅度" <<"测量幅度单位" <<"分贝数(dB)" <<"技术指标" << "结论"; HeadMapList->insert(VerificationItem,head); @@ -4123,12 +4122,13 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[22]);//频带宽度 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 + Data.append(row[22]+row[23]);//频带宽度 Data.append("");//参考幅度 - Data.append("");//参考幅度单位 + Data.append(row[19]);//参考幅度单位 Data.append("");//测量幅度 - Data.append("");//测量幅度单位 + Data.append(row[19]);//测量幅度单位 Data.append("");//分贝数(dB) Data.append(row[13]);//技术指标 Data.append("");//结论 @@ -4150,14 +4150,15 @@ Data.append(row[27]);//信号频率 Data.append(row[28]);//标称值 Data.append("");//测量值 + Data.append("");//结论 trigger_sensitivity.append(Data); } if (!row.isEmpty() && row[7]=="1" && row[30] =="6") { VerificationItem = "上升时间"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" - <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" + <<"标准值" <<"测量值"<<"单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 QStringList Data; @@ -4165,9 +4166,10 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 - Data.append("");//测量值单位 + Data.append("ns");//测量值单位 Data.append(row[13]);//技术指标 Data.append("");//结论 rise_timeList.append(Data); @@ -4176,7 +4178,7 @@ VerificationItem = "输入电阻"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"幅度/DIV" <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4185,7 +4187,7 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[28]+row[29]);//标称值 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) Data.append("");//测量值 Data.append("");//测量值单位 Data.append(row[13]);//技术指标 @@ -4203,13 +4205,13 @@ QStringList Data; Data.append(row[0]); //ID Data.append(VerificationItem); //检定项目 - Data.append(row[30]);//项目 + Data.append(row[31]);//项目 Data.append(row[28]+row[29]);//标称值 Data.append("");//顶部测量值 Data.append("");//底部测量值 Data.append("");//测量值 Data.append("");//测量值单位 - Data.append(row[13]);//技术指标 + Data.append("");//相对误差 calibrating_signalList.append(Data); } diff --git a/softwareDirectory/AutoVerScheme/checkwindow.cpp b/softwareDirectory/AutoVerScheme/checkwindow.cpp index cf8f54a..6e9fd04 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.cpp +++ b/softwareDirectory/AutoVerScheme/checkwindow.cpp @@ -57,6 +57,14 @@ unitTransList.insert("Ω",1); unitTransList.insert("KΩ",0.001); unitTransList.insert("MΩ",0.000001); + unitTransList.insert("HZ",1); + unitTransList.insert("kHZ",0.001); + unitTransList.insert("MHZ",0.000001); + unitTransList.insert("GHZ",0.000000001); + unitTransList.insert("S",1); + unitTransList.insert("MS",1E+3); + unitTransList.insert("PS",1E+12); + unitTransList.insert("NS",1E+9); //统一定义命令占位符 cmdPlaceHolderList.insert("{CH}","通道"); cmdPlaceHolderList.insert("{RANV}","量程"); @@ -69,15 +77,19 @@ cmdPlaceHolderList.insert("{STVAL}","标准值"); cmdPlaceHolderList.insert("{RAN}","量程"); cmdPlaceHolderList.insert("{FREQ}","频率"); + cmdPlaceHolderList.insert("{BW}","频带宽度"); cmdPlaceHolderList.insert("{UNIT}","单位"); cmdPlaceHolderList.insert("{FUNIT}","频率单位"); cmdPlaceHolderList.insert("{OHM}","阻抗"); + cmdPlaceHolderList.insert("{POS}","周期时标信号"); //示波器 cmdPlaceHolderList.insert("{OHM}","阻抗"); //转换 unitTypeTransList.insert("Ω","OHM"); unitTypeTransList.insert("KΩ","KOHM"); unitTypeTransList.insert("MΩ","MOHM"); + unitTypeTransList.insert("50Ω","0"); + unitTypeTransList.insert("1MΩ","1"); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -421,16 +433,19 @@ int idx2= getIndexByHeader(sLabel,"标准值"); int idx3= getIndexByHeader(sLabel,"单位"); int chname= getIndexByHeader(sLabel,"通道"); + if(idx==-1){idx=1;};if(idx2==-1){idx2=5;};if(idx3==-1){idx3=4;}; ui->tableWidget_Point->setItem(row, 0, new QTableWidgetItem(dataRes[i][idx])); ui->tableWidget_Point->setItem(row, 1, new QTableWidgetItem(dataRes[i][idx2]+"("+dataRes[i][idx3]+")")); ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; + if(chname!=-1&&!chList.contains(dataRes[i][chname])) { chList.append(dataRes[i][chname]); } } + // ======================================================================================== // 按钮设置显示 // ==================================================================================== @@ -444,7 +459,7 @@ //设置第一个按钮选中状态 if(index==0){ button->setChecked(true);} //button->setc(true); - // 设置按钮样式表 + // 设置按钮样式表 button->setStyleSheet("QPushButton {" "border: 1px solid white;" // 白色边框 "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 @@ -510,6 +525,8 @@ ui->HeadListLayout->addWidget(button); } } + std::sort(chList.begin(), chList.end()); + if(chList.count()==0){chList.append("CH1");}; ui->stackedWidget_2->setCurrentIndex(1); initCheckTable(0); } @@ -1136,6 +1153,21 @@ } return dTmp; } +double CheckWindow::tranunitSplit(QString sData,bool reverse) +{ + + QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); + if(re.match(sData).hasMatch()) + { + QString sData2=sData; + QString sNewData,sUnit; + ItemUnitSplit(sData,sNewData,sUnit); + return transUnit(sNewData,sUnit,reverse); + }else{ + return sData.toDouble(); + } + +} QString CheckWindow::TranTypeUnit(QString sUnit) { QString NewsUnit=sUnit; @@ -1151,24 +1183,25 @@ if(dex==-1) dex=getIndexByHeader(sLabel,"标准器示值"); if(dex==-1) + dex=getIndexByHeader(sLabel,"标称值"); + if(dex==-1) return QString::number(TestValue); - QString StanValue=data[dex]; - int decimalPlaces = 0; - int decimalPos = StanValue.indexOf('.'); + + QString StanValue=Removeunit(data[dex]); + int decimalPlaces = 0; + int decimalPos = StanValue.indexOf('.'); if (decimalPos == -1) { decimalPlaces=1; }else{ decimalPlaces=StanValue.length() - decimalPos - 1; } - - QString formattedTestValue = QString::number(TestValue, 'f', decimalPlaces); return formattedTestValue; } QString CheckWindow::transCmd(QString sCmd,QString sLabel,QStringList data,bool devicetype) { QString sNewCmd = sCmd; - if(sNewCmd.contains("DELAY:")){ + if(sNewCmd.contains("{DELAY:")){ QRegExp re("DELAY:(\\d+)"); int delay=0; if (re.indexIn(sNewCmd) != -1) { @@ -1184,15 +1217,28 @@ if(sCmd.contains(key)){ int idx= getIndexByHeader(sLabel,cmdPlaceHolderList.value(key)); if(idx!=-1){ - if(devicetype) + if(devicetype || key=="{CH}") { NewUnit = TranTypeUnit(data[idx]); //转换 Ω->OHM sNewCmd = sNewCmd.replace(key,NewUnit); continue; } - int idx2= getIndexByHeader(sLabel,"单位"); - QString unit = data[idx2]; - double dTmp = transUnit(data[idx],unit,true); + double dTmp; + QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); + if(re.match(data[idx]).hasMatch()) + { + dTmp = tranunitSplit(data[idx],true); + }else + { + int idx2= getIndexByHeader(sLabel,"单位"); + if(idx2!=-1) + { + QString unit = data[idx2]; + dTmp = transUnit(data[idx],unit,true); + }else{ + dTmp=data[idx].toDouble(); + }; + } sNewCmd = sNewCmd.replace(key,QString::number(dTmp)); } @@ -1200,6 +1246,7 @@ } return sNewCmd; } + //_text void CheckWindow::on_pushButton_start_clicked() { @@ -1281,9 +1328,9 @@ void CheckWindow::autoAdujstData(QString sLabel,int i,double dStdValue,QList& dataRes){ double dError; - QString newdStdValue,newdError; + QString newdStdValue,newdError,Value; if(iEquipType==1 || iEquipType==13){ - if(qIsFinite(dStdValue)){ + if(dStdValue==FP_INFINITE){ bool bOk = false; dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,5,&bOk); @@ -1293,7 +1340,10 @@ dStdValue=0; } } - newdStdValue= TranDecimals(sLabel,dataRes[i],dStdValue); + // ItemUnitSplit + + newdStdValue= TranDecimals(sLabel, dataRes[i],dStdValue); + int idx= getIndexByHeader(sLabel,"示值"); if(idx!=-1) { @@ -1320,11 +1370,16 @@ if(idx!=-1) { int idx2=getIndexByHeader(sLabel,"标准值"); - double dTmp = dataRes[i][idx2].toDouble(); - dError = (dStdValue-dTmp); - newdError=TranDecimals(sLabel,dataRes[i],dError); - dataRes[i][idx] = newdError; - ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); + if(idx2==-1) + idx2=getIndexByHeader(sLabel,"标称值"); + if(idx2!=-1){ + double dTmp = dataRes[i][idx2].toDouble(); + dError = (dStdValue-dTmp); + newdError=TranDecimals(sLabel,dataRes[i],dError); + dataRes[i][idx] = newdError; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); + } + } idx= getIndexByHeader(sLabel,"结论"); if(idx!=-1) @@ -1333,6 +1388,61 @@ ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem("符合指标")); //测量值 } + idx= getIndexByHeader(sLabel,"测量幅度"); + if(idx!=-1) + { + QString textValue= ui->tableWidgetCheck->item(i,idx)->text(); + + if(textValue==""){ + dataRes[i][idx] = newdStdValue; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); //测试 + }else + { + idx= getIndexByHeader(sLabel,"参考幅度"); + QString refvalue= newdStdValue; + dataRes[i][idx] = refvalue; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(refvalue)); //参考 + // 计算a除以b的对数(以10为底) + double logResult = std::log10( refvalue.toDouble() / textValue.toDouble()); + double result = 20 * logResult; + idx= getIndexByHeader(sLabel,"分贝数(dB)"); + if(idx!=-1) + { + QString newresult; + newresult=TranDecimals(sLabel, dataRes[i],result); + dataRes[i][idx] = newresult; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newresult)); //分贝数 + } + + } + } + idx= getIndexByHeader(sLabel,"周期时标信号"); + if(idx!=-1) + { + double ErrorCal; + QString sign=""; + if(dStdValue>0.2){sign="-";}; + + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动输入","请输入△T/ns值",0,-100000, 100000,5,&bOk); + if (bOk) { + }else{ + dStdValue=0; + } + dStdValue=transUnit(QString::number(dStdValue),"ns",true); + ErrorCal=std::fabs(dStdValue); + idx= getIndexByHeader(sLabel,"时基绝对误差△T/ns"); + if(idx!=-1){ + dataRes[i][idx] =sign+QString::number(ErrorCal); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal))); //测量值 + } + + idx= getIndexByHeader(sLabel,"时基相对误差△δ"); + { + dataRes[i][idx] =sign+QString::number(ErrorCal/0.01); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal/0.01))); //测量值 + } + } BaseCommonApi::SaveLogInfo(1,QString("转换前 测试值 %1").arg(dStdValue)); BaseCommonApi::SaveLogInfo(1,QString("转换后 测试值 %1").arg(newdStdValue)); @@ -1468,37 +1578,118 @@ } void CheckWindow::Oscilloscopetextflow() { + connectDevice(); + for (int _ch=0;_chshowDialog("通道切换提示",QString("请切换 %1 通道").arg(chList[_ch]))){continue;} for(int i=0;i dataRes = caliDataList.value(sLabel); - BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(_ch).arg(sLabel)); + BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(chList[_ch]).arg(sLabel)); QString sParam; + QString ValueUnit; + InstructionLib *instrcutLibOhm; for (int i = 0; i < dataRes.count(); ++i) { + TextCount=1; int _dex= getIndexByHeader(sLabel,"通道"); - if(_dex==-1){sParam=_ch;}else{sParam=dataRes[i][_dex];} + if(_dex==-1){sParam=chList[_ch];}else{sParam=dataRes[i][_dex];} if(sParam!=chList[_ch]){continue;}; + CheckBackColorUpdate(true,i); QString sRet=""; QString newCmd; double dStdValue=FP_INFINITE; QString newdStdValue; - //标准器输出 - BaseCommonApi::SaveLogInfo(1,QString("标准器输出")); - QString sParam; int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam; if(idx!=-1) sParam = dataRes[i][idx]; - if(standardEngine.getState() || 1==1){ - InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); + InstructionLib *instrcutLibbiz=getCmdByCheckName(0,sParam); + InstructionLib *instrcutLibstan=getCmdByCheckName(1,sParam); + //INIT 被检设备 - 标准设备 + BaseCommonApi::SaveLogInfo(1,QString("INIT")); + InstructionLib *InItbiz; + InstructionLib *InItstan; + InItbiz= getCmdByCheckName(0,"INIT"); + InItstan= getCmdByCheckName(1,"INIT"); + if(InItbiz!=nullptr && instrcutLibbiz!=nullptr) + { + if(deviceEngine.getState()) + { + //设置电阻值+ + instrcutLibOhm= getCmdByCheckName(0,"电阻"); + if(instrcutLibOhm!=nullptr){ + QStringList ohmList = instrcutLibOhm->instruct_config.split(";"); + int idxohm= getIndexByHeader(sLabel,"阻抗"); + if(idxohm!=-1) + { + QString onmname="50Ω"; + QString CmdOhm; + onmname=dataRes[i][idxohm]; + if(onmname=="50Ω"){CmdOhm=ohmList[0];}else{CmdOhm=ohmList[1];}; + newCmd = transCmd(CmdOhm,sLabel,dataRes[i],true); + deviceEngine.sendData(newCmd); + } + } + //读取配置指令 + + QStringList sList = InItbiz->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + deviceEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + }; + + } + + if(InItstan!=nullptr && instrcutLibstan!=nullptr) + { + if(standardEngine.getState()) + { + //读取配置指令 + QStringList sList = InItstan->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + standardEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + } + + } + + if(sParam=="频带宽度"){TextCount=2;}; + for (int d=0;dinstruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + if(d==1&& sCmd.contains("{BW}")) + { + sCmd.replace("{BW}","50000"); + } + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + if(newCmd!=""){ standardEngine.sendData(newCmd); qDebug() << "standard cmds:" << newCmd; @@ -1509,10 +1700,9 @@ } //被检设备读数 BaseCommonApi::SaveLogInfo(1,QString("被检设备输出")); - if(deviceEngine.getState() || 1==1){ - InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); + if(deviceEngine.getState()){ + if(instrcutLibbiz!=nullptr){ + QStringList sList = instrcutLibbiz->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); @@ -1522,18 +1712,83 @@ } } } - - newCmd = transCmd(instrcutLib->instruct_read,sLabel,dataRes[i]); + newCmd = transCmd(instrcutLibbiz->instruct_read,sLabel,dataRes[i]); if(newCmd!=""){ qDebug() << "query cmds:" << newCmd; + sRet = deviceEngine.queryData(newCmd); idx= getIndexByHeader(sLabel,"单位"); - dStdValue = transUnit(sRet,dataRes[i][idx]); + //ValueUnit + if(idx!=-1) + { + ValueUnit=dataRes[i][idx]; + }else + { + int idx= getIndexByHeader(sLabel,"标准值"); + if(idx==-1) + idx= getIndexByHeader(sLabel,"标称值"); + if(idx!=-1) + ItemUnitSplit(dataRes[i][idx],ValueUnit,ValueUnit); + + } + dStdValue = transUnit(sRet,ValueUnit); + + } + } + + } + + + autoAdujstData(sLabel,i,dStdValue,dataRes); + CheckBackColorUpdate(false,i); + Delay_MSec(2000); + } + //CLOSE 被检设备 - 标准设备 + BaseCommonApi::SaveLogInfo(1,QString("CLOSE")); + InstructionLib *Closebiz; + InstructionLib *Closestan; + Closebiz= getCmdByCheckName(0,"CLOSE"); + Closestan= getCmdByCheckName(1,"CLOSE"); + if(Closestan!=nullptr && instrcutLibstan!=nullptr) + { + if(standardEngine.getState()) + { + //读取配置指令 + QStringList sList = Closestan->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + standardEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } } } + } } - autoAdujstData(sLabel,i,dStdValue,dataRes); - Delay_MSec(2000); + // + if(Closebiz!=nullptr && instrcutLibbiz!=nullptr) + { + if(deviceEngine.getState()) + { + //读取配置指令 + QStringList sList = Closebiz->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + deviceEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + }; + + } + + } caliDataList.insert(sLabel,dataRes); @@ -1673,3 +1928,45 @@ } return IsSucc; } +void CheckWindow::ItemUnitSplit(QString Value,QString &data,QString &unit) +{ + QString sData2=Value; + QString sNewData,sUnit; + // 正则表达式匹配数字 + QRegularExpression reLetters("[a-zA-ZΩΜΩ]"); + QRegularExpression reLetters1("[^a-zA-ZΩΜΩ]"); + data=sData2.replace(reLetters,""); + unit= Value.replace(reLetters1,""); + +} +void CheckWindow::CheckBackColorUpdate(bool State,int row) +{ + QBrush colorBrush(Qt::white); + if(State) + { + QColor lightGreenColor(173, 216, 230); + colorBrush.setColor(lightGreenColor); + } + for (int col = 0; col < ui->tableWidgetCheck->columnCount(); ++col) { + QTableWidgetItem *item = ui->tableWidgetCheck->item(row, col); + if (item) { + item->setBackground(colorBrush); + } + } +} +QString CheckWindow::Removeunit(QString data) +{ + QRegularExpression re("[a-zA-ZΩΜΩ]"); + return data.replace(re,""); +} +bool CheckWindow::showDialog(QString title,QString mess) +{ + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, title, mess, + QMessageBox::Yes|QMessageBox::No); + if (reply == QMessageBox::Yes) { + return true; + } else { + return false; + } +} diff --git a/softwareDirectory/AutoVerScheme/checkwindow.h b/softwareDirectory/AutoVerScheme/checkwindow.h index 5dacafa..fb6784f 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.h +++ b/softwareDirectory/AutoVerScheme/checkwindow.h @@ -92,6 +92,12 @@ QString TranTypeUnit(QString sUnit); void Oscilloscopetextflow(); void closeDevice(); + double tranunitSplit(QString sData,bool reverse=false); + void ItemUnitSplit(QString Value,QString &data,QString &unit); + void CheckBackColorUpdate(bool State,int row); + QString Removeunit(QString data); + bool showDialog(QString title,QString mess); + int TextCount; void openGageResult(); private: Ui::CheckWindow *ui; diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp index 9810a45..f6f5a32 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp @@ -136,6 +136,7 @@ void DialogCheckResult::on_pushButton_3_clicked() { + checkitemlist.clear(); SaveDeviceMeasureInfo measInfo; BaseCommonApi api; measInfo.id = QString::number(api.generateId()); @@ -239,6 +240,73 @@ BaseCommonApi::SearchSelectTable(QString::number(iEquipType),&measItem); } } + //示波器检定装置 + else if(iEquipType==13) + { + checkitemlist.insert("时基",1); + checkitemlist.insert("直流增益",2); + checkitemlist.insert("直流偏置",3); + checkitemlist.insert("频带宽度",4); + checkitemlist.insert("触发灵敏度",5); + checkitemlist.insert("上升时间",6); + checkitemlist.insert("输入电阻",7); + checkitemlist.insert("校准信号",8); + QString Value,Unit; + //ItemUnitSplit + for (int i = 0; i < dataRes.count(); ++i) { + DeviceOscilloscopeCalibration measItem; + measItem.id = QString::number(api.generateId()); + measItem.data_id = measInfo.id; + measItem.data_type = getDictebyItemName(getValueByHeader(i,sLabel,"检定项目")); + ItemUnitSplit(getValueByHeader(i,sLabel,"周期时标信号"),Value,Unit); + measItem.cycle_signal=Value; + measItem.cycle_signal_unit=Unit; + measItem.time_base_absolute_error=getValueByHeader(i,sLabel,"时基绝对误差△T/ns"); + measItem.time_base_relative_error=getValueByHeader(i,sLabel,"时基相对误差△δ"); + ItemUnitSplit(getValueByHeader(i,sLabel,"技术指标"),Value,Unit); + measItem.technical_index=Value; + measItem.technical_index_unit=Unit; + measItem.conclusion=getValueByHeader(i,sLabel,"结论"); + measItem.thoroughfare=getValueByHeader(i,sLabel,"通道"); + ItemUnitSplit(getValueByHeader(i,sLabel,"阻抗"),Value,Unit); + measItem.impedance=Value; + measItem.impedance_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"幅度/DIV"),Value,Unit); + measItem.vertical_deflect_coefficient=Value; + measItem.vertical_deflect_coefficient_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"标准值"),Value,Unit); + measItem.standard_value=Value; + measItem.standard_value_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"测量值"),Value,Unit); + measItem.measure_value=Value; + measItem.measure_value_unit=Unit; + measItem.relative_error=getValueByHeader(i,sLabel,"相对误差"); + measItem.error_value=getValueByHeader(i,sLabel,"误差"); + ItemUnitSplit(getValueByHeader(i,sLabel,"频带宽度"),Value,Unit); + measItem.band_width=Value; + measItem.band_width_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"参考幅度"),Value,Unit); + measItem.reference_amplitude=Value; + measItem.reference_amplitude=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"测量幅度"),Value,Unit); + measItem.measure_amplitude=Value; + measItem.measure_amplitude_unit=Unit; + measItem.decibel_number=getValueByHeader(i,sLabel,"分贝数(dB)"); + measItem.trigger_type=getValueByHeader(i,sLabel,"触发类型"); + ItemUnitSplit(getValueByHeader(i,sLabel,"标称值"),Value,Unit); + measItem.nominal_value=Value; + measItem.nominal_value_unit=Unit; + measItem.data_type=getValueByHeader(i,sLabel,"项目"); + ItemUnitSplit(getValueByHeader(i,sLabel,"顶部测量值"),Value,Unit); + measItem.top_measure_value=Value; + measItem.top_measure_value_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"底部测量值"),Value,Unit); + measItem.bottom_measure_value=Value; + measItem.bottom_measure_value_unit=Unit; + //decibel_number + BaseCommonApi::InsertDeviceOscilloscopeCalibration(measItem); + } + } } // for(SaveDeviceMeasureCalibrator& item:measureCalList){ // item.id = QString::number(api.generateId()); @@ -342,3 +410,23 @@ { } +int DialogCheckResult::getDictebyItemName(QString Name) +{ + int NewName=0; + if(checkitemlist.keys().contains(Name)) + { + NewName=checkitemlist.value(Name); + } + return NewName; +} +void DialogCheckResult::ItemUnitSplit(QString Value,QString &data,QString &unit) +{ + QString sData2=Value; + QString sNewData,sUnit; + // 正则表达式匹配数字 + QRegularExpression reLetters("[a-zA-ZΩΜΩ]"); + QRegularExpression reLetters1("[^a-zA-ZΩΜΩ]"); + data=sData2.replace(reLetters,""); + unit= Value.replace(reLetters1,""); + +} diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.h b/softwareDirectory/AutoVerScheme/dialogcheckresult.h index 538aa41..d72eddf 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.h +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.h @@ -42,6 +42,9 @@ int curHeadIdx=-1; int iEquipType; QList catoryList; + QMap checkitemlist; + int getDictebyItemName(QString Name); + void ItemUnitSplit(QString Value,QString &data,QString &unit); }; #endif // DIALOGCHECKRESULT_H diff --git a/softwareDirectory/AutoVerScheme/formaddrsetting.cpp b/softwareDirectory/AutoVerScheme/formaddrsetting.cpp index a820ec9..ea066fc 100644 --- a/softwareDirectory/AutoVerScheme/formaddrsetting.cpp +++ b/softwareDirectory/AutoVerScheme/formaddrsetting.cpp @@ -42,9 +42,8 @@ ui->tableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); ui->tableWidget->setColumnHidden(0, true); ui->tableWidget->setColumnWidth(1, 80); - ui->tableWidget->setColumnWidth(2, 60); - ui->tableWidget->setColumnWidth(3, 60); - ui->tableWidget->setColumnWidth(5, 100); + ui->tableWidget->setColumnWidth(2, 80); + ui->tableWidget->setColumnWidth(3, 100); cmdList = BaseCommonApi::getInstructionLib(sId); CheckItemNameList.clear(); @@ -183,7 +182,7 @@ BaseCommonApi baseApi; qint64 id = baseApi.generateId(); cmd.id = QString::number(id); - cmd.type = iType; + cmd.type =QString::number(iType); QString sName = ""; if(iType==0){ if(checkMode){ @@ -349,3 +348,12 @@ { this->ui->stackedWidget->setCurrentIndex(0); } + +void FormAddrSetting::on_ExportCmdInfo_clicked() +{ + QString fileName = QFileDialog::getSaveFileName(this, tr("CmdInfo"), "", tr("Text Files (*.txt)")); + if (fileName.isEmpty()) { + return; + } + +} diff --git a/softwareDirectory/AutoVerScheme/formaddrsetting.h b/softwareDirectory/AutoVerScheme/formaddrsetting.h index da19531..897cadd 100644 --- a/softwareDirectory/AutoVerScheme/formaddrsetting.h +++ b/softwareDirectory/AutoVerScheme/formaddrsetting.h @@ -4,6 +4,9 @@ #include #include "basecommonapi.h" #include "CheckBoxTableHeader.h" +#include +#include +#include namespace Ui { class FormAddrSetting; @@ -36,6 +39,8 @@ void on_pushButton_4_clicked(); + void on_ExportCmdInfo_clicked(); + private: Ui::FormAddrSetting *ui; QList cmdList; diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index f4a7d86..c0a9da5 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -1893,30 +1893,30 @@ QList BaseCommonApi::getInstructionLib(QString verification_program_id) { QList result; - QSqlQuery query; - query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); - query.bindValue(":verification_program_id", verification_program_id); - if (query.exec()) { - while (query.next()) { - InstructionLib instruction; - instruction.id = query.value("id").toString(); - instruction.device_id = query.value("device_id").toString(); - instruction.device_name = query.value("device_name").toString(); - instruction.instruct_config = query.value("instruct_config").toString(); - instruction.instruct_read = query.value("instruct_read").toString(); - instruction.type = query.value("type").toString(); - instruction.belong_vername = query.value("belong_vername").toString(); - instruction.belong_checkname = query.value("belong_checkname").toString(); - instruction.verification_program_id = query.value("verification_program_id").toString(); - instruction.create_time = query.value("create_time").toDateTime(); - instruction.update_time = query.value("update_time").toDateTime(); - instruction.param = query.value("param").toString(); - result.append(instruction); - } - } else { - qDebug() << "Query execution failed: " << query.lastError().text(); - } - return result; + QSqlQuery query; + query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); + query.bindValue(":verification_program_id", verification_program_id); + if (query.exec()) { + while (query.next()) { + InstructionLib instruction; + instruction.id = query.value("id").toString(); + instruction.device_id = query.value("device_id").toString(); + instruction.device_name = query.value("device_name").toString(); + instruction.instruct_config = query.value("instruct_config").toString(); + instruction.instruct_read = query.value("instruct_read").toString(); + instruction.type = query.value("type").toString(); + instruction.belong_vername = query.value("belong_vername").toString(); + instruction.belong_checkname = query.value("belong_checkname").toString(); + instruction.verification_program_id = query.value("verification_program_id").toString(); + instruction.create_time = query.value("create_time").toDateTime(); + instruction.update_time = query.value("update_time").toDateTime(); + instruction.param = query.value("param").toString(); + result.append(instruction); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + return result; }; //查询检定项用于在新增指令时筛选 例如DCV ACI 如果equipment_item_category_id为空查询所有 QList BaseCommonApi::getParams(QString belong_standard_equipment_id,QString equipment_item_category_id) @@ -3978,7 +3978,7 @@ resultData.clear(); QSqlQuery query; - query.prepare("SELECT * FROM biz_business_device_measure_item_data_oscilloscope bbdmido" + query.prepare("SELECT *,bbdmii.band_width as BW FROM biz_business_device_measure_item_data_oscilloscope bbdmido" " JOIN biz_business_device_measure_item_info bbdmii ON bbdmii.id = bbdmido.item_id " " WHERE bbdmido.item_id = :itemId ORDER BY bbdmido.update_time DESC"); // 将参数绑定到占位符 @@ -3991,7 +3991,7 @@ result.append(query.value("time_base").toString());//时基 result.append(query.value("current_gain").toString());//直流增益(示波器-数字) result.append(query.value("current_bias").toString());//直流偏置(示波器-数字) - result.append(query.value("band_width").toString());//频带宽度 (示波器-数字/模拟) + result.append(query.value("BW").toString());//频带宽度 (示波器-数字/模拟) result.append(query.value("trigger_sensitivity").toString());//触发灵敏度(示波器-数字/模拟) result.append(query.value("rise_time").toString());//上升时间(示波器-数字/模拟) result.append(query.value("input_resistance").toString());//输入电阻 (示波器-数字/模拟) @@ -4017,6 +4017,7 @@ result.append(query.value("nominal_value").toString());//标称值 result.append(query.value("nominal_value_unit").toString());//标称值单位 result.append(query.value("data_type").toString());// + result.append(query.value("item_type").toString());// result.append(query.value("create_time").toString()); result.append(query.value("update_time").toString()); resultData.append(result); @@ -4069,7 +4070,6 @@ QStringList head; //添加列头 head <<"序号"<<"检定项目"<<"通道"<<"阻抗" <<"幅度/DIV" <<"标准值" - <<"单位" <<"测量值"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4078,9 +4078,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[28]);//标准值 - Data.append(row[29]);//标准值单位 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//相对误差 Data.append(row[13]);//技术指标 @@ -4091,7 +4090,7 @@ VerificationItem = "直流偏置"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)"<<"标准值" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV"<<"标准值" <<"测量值"<<"误差"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4100,8 +4099,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[19]);//标准值 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//误差 Data.append("");//相对误差 @@ -4113,7 +4112,7 @@ VerificationItem = "频带宽度"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" <<"标准值" << "频带宽度" <<"参考幅度" <<"参考幅度单位" <<"测量幅度" <<"测量幅度单位" <<"分贝数(dB)" <<"技术指标" << "结论"; HeadMapList->insert(VerificationItem,head); @@ -4123,12 +4122,13 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[22]);//频带宽度 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 + Data.append(row[22]+row[23]);//频带宽度 Data.append("");//参考幅度 - Data.append("");//参考幅度单位 + Data.append(row[19]);//参考幅度单位 Data.append("");//测量幅度 - Data.append("");//测量幅度单位 + Data.append(row[19]);//测量幅度单位 Data.append("");//分贝数(dB) Data.append(row[13]);//技术指标 Data.append("");//结论 @@ -4150,14 +4150,15 @@ Data.append(row[27]);//信号频率 Data.append(row[28]);//标称值 Data.append("");//测量值 + Data.append("");//结论 trigger_sensitivity.append(Data); } if (!row.isEmpty() && row[7]=="1" && row[30] =="6") { VerificationItem = "上升时间"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" - <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" + <<"标准值" <<"测量值"<<"单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 QStringList Data; @@ -4165,9 +4166,10 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 - Data.append("");//测量值单位 + Data.append("ns");//测量值单位 Data.append(row[13]);//技术指标 Data.append("");//结论 rise_timeList.append(Data); @@ -4176,7 +4178,7 @@ VerificationItem = "输入电阻"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"幅度/DIV" <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4185,7 +4187,7 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[28]+row[29]);//标称值 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) Data.append("");//测量值 Data.append("");//测量值单位 Data.append(row[13]);//技术指标 @@ -4203,13 +4205,13 @@ QStringList Data; Data.append(row[0]); //ID Data.append(VerificationItem); //检定项目 - Data.append(row[30]);//项目 + Data.append(row[31]);//项目 Data.append(row[28]+row[29]);//标称值 Data.append("");//顶部测量值 Data.append("");//底部测量值 Data.append("");//测量值 Data.append("");//测量值单位 - Data.append(row[13]);//技术指标 + Data.append("");//相对误差 calibrating_signalList.append(Data); } diff --git a/softwareDirectory/AutoVerScheme/checkwindow.cpp b/softwareDirectory/AutoVerScheme/checkwindow.cpp index cf8f54a..6e9fd04 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.cpp +++ b/softwareDirectory/AutoVerScheme/checkwindow.cpp @@ -57,6 +57,14 @@ unitTransList.insert("Ω",1); unitTransList.insert("KΩ",0.001); unitTransList.insert("MΩ",0.000001); + unitTransList.insert("HZ",1); + unitTransList.insert("kHZ",0.001); + unitTransList.insert("MHZ",0.000001); + unitTransList.insert("GHZ",0.000000001); + unitTransList.insert("S",1); + unitTransList.insert("MS",1E+3); + unitTransList.insert("PS",1E+12); + unitTransList.insert("NS",1E+9); //统一定义命令占位符 cmdPlaceHolderList.insert("{CH}","通道"); cmdPlaceHolderList.insert("{RANV}","量程"); @@ -69,15 +77,19 @@ cmdPlaceHolderList.insert("{STVAL}","标准值"); cmdPlaceHolderList.insert("{RAN}","量程"); cmdPlaceHolderList.insert("{FREQ}","频率"); + cmdPlaceHolderList.insert("{BW}","频带宽度"); cmdPlaceHolderList.insert("{UNIT}","单位"); cmdPlaceHolderList.insert("{FUNIT}","频率单位"); cmdPlaceHolderList.insert("{OHM}","阻抗"); + cmdPlaceHolderList.insert("{POS}","周期时标信号"); //示波器 cmdPlaceHolderList.insert("{OHM}","阻抗"); //转换 unitTypeTransList.insert("Ω","OHM"); unitTypeTransList.insert("KΩ","KOHM"); unitTypeTransList.insert("MΩ","MOHM"); + unitTypeTransList.insert("50Ω","0"); + unitTypeTransList.insert("1MΩ","1"); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -421,16 +433,19 @@ int idx2= getIndexByHeader(sLabel,"标准值"); int idx3= getIndexByHeader(sLabel,"单位"); int chname= getIndexByHeader(sLabel,"通道"); + if(idx==-1){idx=1;};if(idx2==-1){idx2=5;};if(idx3==-1){idx3=4;}; ui->tableWidget_Point->setItem(row, 0, new QTableWidgetItem(dataRes[i][idx])); ui->tableWidget_Point->setItem(row, 1, new QTableWidgetItem(dataRes[i][idx2]+"("+dataRes[i][idx3]+")")); ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; + if(chname!=-1&&!chList.contains(dataRes[i][chname])) { chList.append(dataRes[i][chname]); } } + // ======================================================================================== // 按钮设置显示 // ==================================================================================== @@ -444,7 +459,7 @@ //设置第一个按钮选中状态 if(index==0){ button->setChecked(true);} //button->setc(true); - // 设置按钮样式表 + // 设置按钮样式表 button->setStyleSheet("QPushButton {" "border: 1px solid white;" // 白色边框 "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 @@ -510,6 +525,8 @@ ui->HeadListLayout->addWidget(button); } } + std::sort(chList.begin(), chList.end()); + if(chList.count()==0){chList.append("CH1");}; ui->stackedWidget_2->setCurrentIndex(1); initCheckTable(0); } @@ -1136,6 +1153,21 @@ } return dTmp; } +double CheckWindow::tranunitSplit(QString sData,bool reverse) +{ + + QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); + if(re.match(sData).hasMatch()) + { + QString sData2=sData; + QString sNewData,sUnit; + ItemUnitSplit(sData,sNewData,sUnit); + return transUnit(sNewData,sUnit,reverse); + }else{ + return sData.toDouble(); + } + +} QString CheckWindow::TranTypeUnit(QString sUnit) { QString NewsUnit=sUnit; @@ -1151,24 +1183,25 @@ if(dex==-1) dex=getIndexByHeader(sLabel,"标准器示值"); if(dex==-1) + dex=getIndexByHeader(sLabel,"标称值"); + if(dex==-1) return QString::number(TestValue); - QString StanValue=data[dex]; - int decimalPlaces = 0; - int decimalPos = StanValue.indexOf('.'); + + QString StanValue=Removeunit(data[dex]); + int decimalPlaces = 0; + int decimalPos = StanValue.indexOf('.'); if (decimalPos == -1) { decimalPlaces=1; }else{ decimalPlaces=StanValue.length() - decimalPos - 1; } - - QString formattedTestValue = QString::number(TestValue, 'f', decimalPlaces); return formattedTestValue; } QString CheckWindow::transCmd(QString sCmd,QString sLabel,QStringList data,bool devicetype) { QString sNewCmd = sCmd; - if(sNewCmd.contains("DELAY:")){ + if(sNewCmd.contains("{DELAY:")){ QRegExp re("DELAY:(\\d+)"); int delay=0; if (re.indexIn(sNewCmd) != -1) { @@ -1184,15 +1217,28 @@ if(sCmd.contains(key)){ int idx= getIndexByHeader(sLabel,cmdPlaceHolderList.value(key)); if(idx!=-1){ - if(devicetype) + if(devicetype || key=="{CH}") { NewUnit = TranTypeUnit(data[idx]); //转换 Ω->OHM sNewCmd = sNewCmd.replace(key,NewUnit); continue; } - int idx2= getIndexByHeader(sLabel,"单位"); - QString unit = data[idx2]; - double dTmp = transUnit(data[idx],unit,true); + double dTmp; + QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); + if(re.match(data[idx]).hasMatch()) + { + dTmp = tranunitSplit(data[idx],true); + }else + { + int idx2= getIndexByHeader(sLabel,"单位"); + if(idx2!=-1) + { + QString unit = data[idx2]; + dTmp = transUnit(data[idx],unit,true); + }else{ + dTmp=data[idx].toDouble(); + }; + } sNewCmd = sNewCmd.replace(key,QString::number(dTmp)); } @@ -1200,6 +1246,7 @@ } return sNewCmd; } + //_text void CheckWindow::on_pushButton_start_clicked() { @@ -1281,9 +1328,9 @@ void CheckWindow::autoAdujstData(QString sLabel,int i,double dStdValue,QList& dataRes){ double dError; - QString newdStdValue,newdError; + QString newdStdValue,newdError,Value; if(iEquipType==1 || iEquipType==13){ - if(qIsFinite(dStdValue)){ + if(dStdValue==FP_INFINITE){ bool bOk = false; dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,5,&bOk); @@ -1293,7 +1340,10 @@ dStdValue=0; } } - newdStdValue= TranDecimals(sLabel,dataRes[i],dStdValue); + // ItemUnitSplit + + newdStdValue= TranDecimals(sLabel, dataRes[i],dStdValue); + int idx= getIndexByHeader(sLabel,"示值"); if(idx!=-1) { @@ -1320,11 +1370,16 @@ if(idx!=-1) { int idx2=getIndexByHeader(sLabel,"标准值"); - double dTmp = dataRes[i][idx2].toDouble(); - dError = (dStdValue-dTmp); - newdError=TranDecimals(sLabel,dataRes[i],dError); - dataRes[i][idx] = newdError; - ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); + if(idx2==-1) + idx2=getIndexByHeader(sLabel,"标称值"); + if(idx2!=-1){ + double dTmp = dataRes[i][idx2].toDouble(); + dError = (dStdValue-dTmp); + newdError=TranDecimals(sLabel,dataRes[i],dError); + dataRes[i][idx] = newdError; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); + } + } idx= getIndexByHeader(sLabel,"结论"); if(idx!=-1) @@ -1333,6 +1388,61 @@ ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem("符合指标")); //测量值 } + idx= getIndexByHeader(sLabel,"测量幅度"); + if(idx!=-1) + { + QString textValue= ui->tableWidgetCheck->item(i,idx)->text(); + + if(textValue==""){ + dataRes[i][idx] = newdStdValue; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); //测试 + }else + { + idx= getIndexByHeader(sLabel,"参考幅度"); + QString refvalue= newdStdValue; + dataRes[i][idx] = refvalue; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(refvalue)); //参考 + // 计算a除以b的对数(以10为底) + double logResult = std::log10( refvalue.toDouble() / textValue.toDouble()); + double result = 20 * logResult; + idx= getIndexByHeader(sLabel,"分贝数(dB)"); + if(idx!=-1) + { + QString newresult; + newresult=TranDecimals(sLabel, dataRes[i],result); + dataRes[i][idx] = newresult; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newresult)); //分贝数 + } + + } + } + idx= getIndexByHeader(sLabel,"周期时标信号"); + if(idx!=-1) + { + double ErrorCal; + QString sign=""; + if(dStdValue>0.2){sign="-";}; + + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动输入","请输入△T/ns值",0,-100000, 100000,5,&bOk); + if (bOk) { + }else{ + dStdValue=0; + } + dStdValue=transUnit(QString::number(dStdValue),"ns",true); + ErrorCal=std::fabs(dStdValue); + idx= getIndexByHeader(sLabel,"时基绝对误差△T/ns"); + if(idx!=-1){ + dataRes[i][idx] =sign+QString::number(ErrorCal); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal))); //测量值 + } + + idx= getIndexByHeader(sLabel,"时基相对误差△δ"); + { + dataRes[i][idx] =sign+QString::number(ErrorCal/0.01); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal/0.01))); //测量值 + } + } BaseCommonApi::SaveLogInfo(1,QString("转换前 测试值 %1").arg(dStdValue)); BaseCommonApi::SaveLogInfo(1,QString("转换后 测试值 %1").arg(newdStdValue)); @@ -1468,37 +1578,118 @@ } void CheckWindow::Oscilloscopetextflow() { + connectDevice(); + for (int _ch=0;_chshowDialog("通道切换提示",QString("请切换 %1 通道").arg(chList[_ch]))){continue;} for(int i=0;i dataRes = caliDataList.value(sLabel); - BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(_ch).arg(sLabel)); + BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(chList[_ch]).arg(sLabel)); QString sParam; + QString ValueUnit; + InstructionLib *instrcutLibOhm; for (int i = 0; i < dataRes.count(); ++i) { + TextCount=1; int _dex= getIndexByHeader(sLabel,"通道"); - if(_dex==-1){sParam=_ch;}else{sParam=dataRes[i][_dex];} + if(_dex==-1){sParam=chList[_ch];}else{sParam=dataRes[i][_dex];} if(sParam!=chList[_ch]){continue;}; + CheckBackColorUpdate(true,i); QString sRet=""; QString newCmd; double dStdValue=FP_INFINITE; QString newdStdValue; - //标准器输出 - BaseCommonApi::SaveLogInfo(1,QString("标准器输出")); - QString sParam; int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam; if(idx!=-1) sParam = dataRes[i][idx]; - if(standardEngine.getState() || 1==1){ - InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); + InstructionLib *instrcutLibbiz=getCmdByCheckName(0,sParam); + InstructionLib *instrcutLibstan=getCmdByCheckName(1,sParam); + //INIT 被检设备 - 标准设备 + BaseCommonApi::SaveLogInfo(1,QString("INIT")); + InstructionLib *InItbiz; + InstructionLib *InItstan; + InItbiz= getCmdByCheckName(0,"INIT"); + InItstan= getCmdByCheckName(1,"INIT"); + if(InItbiz!=nullptr && instrcutLibbiz!=nullptr) + { + if(deviceEngine.getState()) + { + //设置电阻值+ + instrcutLibOhm= getCmdByCheckName(0,"电阻"); + if(instrcutLibOhm!=nullptr){ + QStringList ohmList = instrcutLibOhm->instruct_config.split(";"); + int idxohm= getIndexByHeader(sLabel,"阻抗"); + if(idxohm!=-1) + { + QString onmname="50Ω"; + QString CmdOhm; + onmname=dataRes[i][idxohm]; + if(onmname=="50Ω"){CmdOhm=ohmList[0];}else{CmdOhm=ohmList[1];}; + newCmd = transCmd(CmdOhm,sLabel,dataRes[i],true); + deviceEngine.sendData(newCmd); + } + } + //读取配置指令 + + QStringList sList = InItbiz->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + deviceEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + }; + + } + + if(InItstan!=nullptr && instrcutLibstan!=nullptr) + { + if(standardEngine.getState()) + { + //读取配置指令 + QStringList sList = InItstan->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + standardEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + } + + } + + if(sParam=="频带宽度"){TextCount=2;}; + for (int d=0;dinstruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + if(d==1&& sCmd.contains("{BW}")) + { + sCmd.replace("{BW}","50000"); + } + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + if(newCmd!=""){ standardEngine.sendData(newCmd); qDebug() << "standard cmds:" << newCmd; @@ -1509,10 +1700,9 @@ } //被检设备读数 BaseCommonApi::SaveLogInfo(1,QString("被检设备输出")); - if(deviceEngine.getState() || 1==1){ - InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); + if(deviceEngine.getState()){ + if(instrcutLibbiz!=nullptr){ + QStringList sList = instrcutLibbiz->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); @@ -1522,18 +1712,83 @@ } } } - - newCmd = transCmd(instrcutLib->instruct_read,sLabel,dataRes[i]); + newCmd = transCmd(instrcutLibbiz->instruct_read,sLabel,dataRes[i]); if(newCmd!=""){ qDebug() << "query cmds:" << newCmd; + sRet = deviceEngine.queryData(newCmd); idx= getIndexByHeader(sLabel,"单位"); - dStdValue = transUnit(sRet,dataRes[i][idx]); + //ValueUnit + if(idx!=-1) + { + ValueUnit=dataRes[i][idx]; + }else + { + int idx= getIndexByHeader(sLabel,"标准值"); + if(idx==-1) + idx= getIndexByHeader(sLabel,"标称值"); + if(idx!=-1) + ItemUnitSplit(dataRes[i][idx],ValueUnit,ValueUnit); + + } + dStdValue = transUnit(sRet,ValueUnit); + + } + } + + } + + + autoAdujstData(sLabel,i,dStdValue,dataRes); + CheckBackColorUpdate(false,i); + Delay_MSec(2000); + } + //CLOSE 被检设备 - 标准设备 + BaseCommonApi::SaveLogInfo(1,QString("CLOSE")); + InstructionLib *Closebiz; + InstructionLib *Closestan; + Closebiz= getCmdByCheckName(0,"CLOSE"); + Closestan= getCmdByCheckName(1,"CLOSE"); + if(Closestan!=nullptr && instrcutLibstan!=nullptr) + { + if(standardEngine.getState()) + { + //读取配置指令 + QStringList sList = Closestan->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + standardEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } } } + } } - autoAdujstData(sLabel,i,dStdValue,dataRes); - Delay_MSec(2000); + // + if(Closebiz!=nullptr && instrcutLibbiz!=nullptr) + { + if(deviceEngine.getState()) + { + //读取配置指令 + QStringList sList = Closebiz->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + deviceEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + }; + + } + + } caliDataList.insert(sLabel,dataRes); @@ -1673,3 +1928,45 @@ } return IsSucc; } +void CheckWindow::ItemUnitSplit(QString Value,QString &data,QString &unit) +{ + QString sData2=Value; + QString sNewData,sUnit; + // 正则表达式匹配数字 + QRegularExpression reLetters("[a-zA-ZΩΜΩ]"); + QRegularExpression reLetters1("[^a-zA-ZΩΜΩ]"); + data=sData2.replace(reLetters,""); + unit= Value.replace(reLetters1,""); + +} +void CheckWindow::CheckBackColorUpdate(bool State,int row) +{ + QBrush colorBrush(Qt::white); + if(State) + { + QColor lightGreenColor(173, 216, 230); + colorBrush.setColor(lightGreenColor); + } + for (int col = 0; col < ui->tableWidgetCheck->columnCount(); ++col) { + QTableWidgetItem *item = ui->tableWidgetCheck->item(row, col); + if (item) { + item->setBackground(colorBrush); + } + } +} +QString CheckWindow::Removeunit(QString data) +{ + QRegularExpression re("[a-zA-ZΩΜΩ]"); + return data.replace(re,""); +} +bool CheckWindow::showDialog(QString title,QString mess) +{ + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, title, mess, + QMessageBox::Yes|QMessageBox::No); + if (reply == QMessageBox::Yes) { + return true; + } else { + return false; + } +} diff --git a/softwareDirectory/AutoVerScheme/checkwindow.h b/softwareDirectory/AutoVerScheme/checkwindow.h index 5dacafa..fb6784f 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.h +++ b/softwareDirectory/AutoVerScheme/checkwindow.h @@ -92,6 +92,12 @@ QString TranTypeUnit(QString sUnit); void Oscilloscopetextflow(); void closeDevice(); + double tranunitSplit(QString sData,bool reverse=false); + void ItemUnitSplit(QString Value,QString &data,QString &unit); + void CheckBackColorUpdate(bool State,int row); + QString Removeunit(QString data); + bool showDialog(QString title,QString mess); + int TextCount; void openGageResult(); private: Ui::CheckWindow *ui; diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp index 9810a45..f6f5a32 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp @@ -136,6 +136,7 @@ void DialogCheckResult::on_pushButton_3_clicked() { + checkitemlist.clear(); SaveDeviceMeasureInfo measInfo; BaseCommonApi api; measInfo.id = QString::number(api.generateId()); @@ -239,6 +240,73 @@ BaseCommonApi::SearchSelectTable(QString::number(iEquipType),&measItem); } } + //示波器检定装置 + else if(iEquipType==13) + { + checkitemlist.insert("时基",1); + checkitemlist.insert("直流增益",2); + checkitemlist.insert("直流偏置",3); + checkitemlist.insert("频带宽度",4); + checkitemlist.insert("触发灵敏度",5); + checkitemlist.insert("上升时间",6); + checkitemlist.insert("输入电阻",7); + checkitemlist.insert("校准信号",8); + QString Value,Unit; + //ItemUnitSplit + for (int i = 0; i < dataRes.count(); ++i) { + DeviceOscilloscopeCalibration measItem; + measItem.id = QString::number(api.generateId()); + measItem.data_id = measInfo.id; + measItem.data_type = getDictebyItemName(getValueByHeader(i,sLabel,"检定项目")); + ItemUnitSplit(getValueByHeader(i,sLabel,"周期时标信号"),Value,Unit); + measItem.cycle_signal=Value; + measItem.cycle_signal_unit=Unit; + measItem.time_base_absolute_error=getValueByHeader(i,sLabel,"时基绝对误差△T/ns"); + measItem.time_base_relative_error=getValueByHeader(i,sLabel,"时基相对误差△δ"); + ItemUnitSplit(getValueByHeader(i,sLabel,"技术指标"),Value,Unit); + measItem.technical_index=Value; + measItem.technical_index_unit=Unit; + measItem.conclusion=getValueByHeader(i,sLabel,"结论"); + measItem.thoroughfare=getValueByHeader(i,sLabel,"通道"); + ItemUnitSplit(getValueByHeader(i,sLabel,"阻抗"),Value,Unit); + measItem.impedance=Value; + measItem.impedance_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"幅度/DIV"),Value,Unit); + measItem.vertical_deflect_coefficient=Value; + measItem.vertical_deflect_coefficient_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"标准值"),Value,Unit); + measItem.standard_value=Value; + measItem.standard_value_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"测量值"),Value,Unit); + measItem.measure_value=Value; + measItem.measure_value_unit=Unit; + measItem.relative_error=getValueByHeader(i,sLabel,"相对误差"); + measItem.error_value=getValueByHeader(i,sLabel,"误差"); + ItemUnitSplit(getValueByHeader(i,sLabel,"频带宽度"),Value,Unit); + measItem.band_width=Value; + measItem.band_width_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"参考幅度"),Value,Unit); + measItem.reference_amplitude=Value; + measItem.reference_amplitude=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"测量幅度"),Value,Unit); + measItem.measure_amplitude=Value; + measItem.measure_amplitude_unit=Unit; + measItem.decibel_number=getValueByHeader(i,sLabel,"分贝数(dB)"); + measItem.trigger_type=getValueByHeader(i,sLabel,"触发类型"); + ItemUnitSplit(getValueByHeader(i,sLabel,"标称值"),Value,Unit); + measItem.nominal_value=Value; + measItem.nominal_value_unit=Unit; + measItem.data_type=getValueByHeader(i,sLabel,"项目"); + ItemUnitSplit(getValueByHeader(i,sLabel,"顶部测量值"),Value,Unit); + measItem.top_measure_value=Value; + measItem.top_measure_value_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"底部测量值"),Value,Unit); + measItem.bottom_measure_value=Value; + measItem.bottom_measure_value_unit=Unit; + //decibel_number + BaseCommonApi::InsertDeviceOscilloscopeCalibration(measItem); + } + } } // for(SaveDeviceMeasureCalibrator& item:measureCalList){ // item.id = QString::number(api.generateId()); @@ -342,3 +410,23 @@ { } +int DialogCheckResult::getDictebyItemName(QString Name) +{ + int NewName=0; + if(checkitemlist.keys().contains(Name)) + { + NewName=checkitemlist.value(Name); + } + return NewName; +} +void DialogCheckResult::ItemUnitSplit(QString Value,QString &data,QString &unit) +{ + QString sData2=Value; + QString sNewData,sUnit; + // 正则表达式匹配数字 + QRegularExpression reLetters("[a-zA-ZΩΜΩ]"); + QRegularExpression reLetters1("[^a-zA-ZΩΜΩ]"); + data=sData2.replace(reLetters,""); + unit= Value.replace(reLetters1,""); + +} diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.h b/softwareDirectory/AutoVerScheme/dialogcheckresult.h index 538aa41..d72eddf 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.h +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.h @@ -42,6 +42,9 @@ int curHeadIdx=-1; int iEquipType; QList catoryList; + QMap checkitemlist; + int getDictebyItemName(QString Name); + void ItemUnitSplit(QString Value,QString &data,QString &unit); }; #endif // DIALOGCHECKRESULT_H diff --git a/softwareDirectory/AutoVerScheme/formaddrsetting.cpp b/softwareDirectory/AutoVerScheme/formaddrsetting.cpp index a820ec9..ea066fc 100644 --- a/softwareDirectory/AutoVerScheme/formaddrsetting.cpp +++ b/softwareDirectory/AutoVerScheme/formaddrsetting.cpp @@ -42,9 +42,8 @@ ui->tableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); ui->tableWidget->setColumnHidden(0, true); ui->tableWidget->setColumnWidth(1, 80); - ui->tableWidget->setColumnWidth(2, 60); - ui->tableWidget->setColumnWidth(3, 60); - ui->tableWidget->setColumnWidth(5, 100); + ui->tableWidget->setColumnWidth(2, 80); + ui->tableWidget->setColumnWidth(3, 100); cmdList = BaseCommonApi::getInstructionLib(sId); CheckItemNameList.clear(); @@ -183,7 +182,7 @@ BaseCommonApi baseApi; qint64 id = baseApi.generateId(); cmd.id = QString::number(id); - cmd.type = iType; + cmd.type =QString::number(iType); QString sName = ""; if(iType==0){ if(checkMode){ @@ -349,3 +348,12 @@ { this->ui->stackedWidget->setCurrentIndex(0); } + +void FormAddrSetting::on_ExportCmdInfo_clicked() +{ + QString fileName = QFileDialog::getSaveFileName(this, tr("CmdInfo"), "", tr("Text Files (*.txt)")); + if (fileName.isEmpty()) { + return; + } + +} diff --git a/softwareDirectory/AutoVerScheme/formaddrsetting.h b/softwareDirectory/AutoVerScheme/formaddrsetting.h index da19531..897cadd 100644 --- a/softwareDirectory/AutoVerScheme/formaddrsetting.h +++ b/softwareDirectory/AutoVerScheme/formaddrsetting.h @@ -4,6 +4,9 @@ #include #include "basecommonapi.h" #include "CheckBoxTableHeader.h" +#include +#include +#include namespace Ui { class FormAddrSetting; @@ -36,6 +39,8 @@ void on_pushButton_4_clicked(); + void on_ExportCmdInfo_clicked(); + private: Ui::FormAddrSetting *ui; QList cmdList; diff --git a/softwareDirectory/AutoVerScheme/formaddrsetting.ui b/softwareDirectory/AutoVerScheme/formaddrsetting.ui index 2a6a347..ff367be 100644 --- a/softwareDirectory/AutoVerScheme/formaddrsetting.ui +++ b/softwareDirectory/AutoVerScheme/formaddrsetting.ui @@ -175,7 +175,7 @@ - + 72 diff --git a/softwareDirectory/AutoVerScheme/basecommonapi.cpp b/softwareDirectory/AutoVerScheme/basecommonapi.cpp index f4a7d86..c0a9da5 100644 --- a/softwareDirectory/AutoVerScheme/basecommonapi.cpp +++ b/softwareDirectory/AutoVerScheme/basecommonapi.cpp @@ -1893,30 +1893,30 @@ QList BaseCommonApi::getInstructionLib(QString verification_program_id) { QList result; - QSqlQuery query; - query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); - query.bindValue(":verification_program_id", verification_program_id); - if (query.exec()) { - while (query.next()) { - InstructionLib instruction; - instruction.id = query.value("id").toString(); - instruction.device_id = query.value("device_id").toString(); - instruction.device_name = query.value("device_name").toString(); - instruction.instruct_config = query.value("instruct_config").toString(); - instruction.instruct_read = query.value("instruct_read").toString(); - instruction.type = query.value("type").toString(); - instruction.belong_vername = query.value("belong_vername").toString(); - instruction.belong_checkname = query.value("belong_checkname").toString(); - instruction.verification_program_id = query.value("verification_program_id").toString(); - instruction.create_time = query.value("create_time").toDateTime(); - instruction.update_time = query.value("update_time").toDateTime(); - instruction.param = query.value("param").toString(); - result.append(instruction); - } - } else { - qDebug() << "Query execution failed: " << query.lastError().text(); - } - return result; + QSqlQuery query; + query.prepare("SELECT * FROM zd_instruction_library WHERE verification_program_id = :verification_program_id "); + query.bindValue(":verification_program_id", verification_program_id); + if (query.exec()) { + while (query.next()) { + InstructionLib instruction; + instruction.id = query.value("id").toString(); + instruction.device_id = query.value("device_id").toString(); + instruction.device_name = query.value("device_name").toString(); + instruction.instruct_config = query.value("instruct_config").toString(); + instruction.instruct_read = query.value("instruct_read").toString(); + instruction.type = query.value("type").toString(); + instruction.belong_vername = query.value("belong_vername").toString(); + instruction.belong_checkname = query.value("belong_checkname").toString(); + instruction.verification_program_id = query.value("verification_program_id").toString(); + instruction.create_time = query.value("create_time").toDateTime(); + instruction.update_time = query.value("update_time").toDateTime(); + instruction.param = query.value("param").toString(); + result.append(instruction); + } + } else { + qDebug() << "Query execution failed: " << query.lastError().text(); + } + return result; }; //查询检定项用于在新增指令时筛选 例如DCV ACI 如果equipment_item_category_id为空查询所有 QList BaseCommonApi::getParams(QString belong_standard_equipment_id,QString equipment_item_category_id) @@ -3978,7 +3978,7 @@ resultData.clear(); QSqlQuery query; - query.prepare("SELECT * FROM biz_business_device_measure_item_data_oscilloscope bbdmido" + query.prepare("SELECT *,bbdmii.band_width as BW FROM biz_business_device_measure_item_data_oscilloscope bbdmido" " JOIN biz_business_device_measure_item_info bbdmii ON bbdmii.id = bbdmido.item_id " " WHERE bbdmido.item_id = :itemId ORDER BY bbdmido.update_time DESC"); // 将参数绑定到占位符 @@ -3991,7 +3991,7 @@ result.append(query.value("time_base").toString());//时基 result.append(query.value("current_gain").toString());//直流增益(示波器-数字) result.append(query.value("current_bias").toString());//直流偏置(示波器-数字) - result.append(query.value("band_width").toString());//频带宽度 (示波器-数字/模拟) + result.append(query.value("BW").toString());//频带宽度 (示波器-数字/模拟) result.append(query.value("trigger_sensitivity").toString());//触发灵敏度(示波器-数字/模拟) result.append(query.value("rise_time").toString());//上升时间(示波器-数字/模拟) result.append(query.value("input_resistance").toString());//输入电阻 (示波器-数字/模拟) @@ -4017,6 +4017,7 @@ result.append(query.value("nominal_value").toString());//标称值 result.append(query.value("nominal_value_unit").toString());//标称值单位 result.append(query.value("data_type").toString());// + result.append(query.value("item_type").toString());// result.append(query.value("create_time").toString()); result.append(query.value("update_time").toString()); resultData.append(result); @@ -4069,7 +4070,6 @@ QStringList head; //添加列头 head <<"序号"<<"检定项目"<<"通道"<<"阻抗" <<"幅度/DIV" <<"标准值" - <<"单位" <<"测量值"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4078,9 +4078,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[28]);//标准值 - Data.append(row[29]);//标准值单位 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//相对误差 Data.append(row[13]);//技术指标 @@ -4091,7 +4090,7 @@ VerificationItem = "直流偏置"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)"<<"标准值" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV"<<"标准值" <<"测量值"<<"误差"<<"相对误差"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4100,8 +4099,8 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[19]);//标准值 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 Data.append("");//误差 Data.append("");//相对误差 @@ -4113,7 +4112,7 @@ VerificationItem = "频带宽度"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" <<"标准值" << "频带宽度" <<"参考幅度" <<"参考幅度单位" <<"测量幅度" <<"测量幅度单位" <<"分贝数(dB)" <<"技术指标" << "结论"; HeadMapList->insert(VerificationItem,head); @@ -4123,12 +4122,13 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) - Data.append(row[22]);//频带宽度 + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 + Data.append(row[22]+row[23]);//频带宽度 Data.append("");//参考幅度 - Data.append("");//参考幅度单位 + Data.append(row[19]);//参考幅度单位 Data.append("");//测量幅度 - Data.append("");//测量幅度单位 + Data.append(row[19]);//测量幅度单位 Data.append("");//分贝数(dB) Data.append(row[13]);//技术指标 Data.append("");//结论 @@ -4150,14 +4150,15 @@ Data.append(row[27]);//信号频率 Data.append(row[28]);//标称值 Data.append("");//测量值 + Data.append("");//结论 trigger_sensitivity.append(Data); } if (!row.isEmpty() && row[7]=="1" && row[30] =="6") { VerificationItem = "上升时间"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"垂直偏转系数(/div)" - <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; + head <<"序号"<<"检定项目"<<"通道"<<"阻抗"<<"幅度/DIV" + <<"标准值" <<"测量值"<<"单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 QStringList Data; @@ -4165,9 +4166,10 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[16]+row[17]);//阻抗 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) + Data.append(row[20]+row[21]);//标准值 Data.append("");//测量值 - Data.append("");//测量值单位 + Data.append("ns");//测量值单位 Data.append(row[13]);//技术指标 Data.append("");//结论 rise_timeList.append(Data); @@ -4176,7 +4178,7 @@ VerificationItem = "输入电阻"; QStringList head; //添加列头 - head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"垂直偏转系数(/div)" + head <<"序号"<<"检定项目"<<"通道"<<"标称值"<<"幅度/DIV" <<"测量值"<<"测量值单位"<<"技术指标" <<"结论"; HeadMapList->insert(VerificationItem,head); //添加数据 @@ -4185,7 +4187,7 @@ Data.append(VerificationItem); //检定项目 Data.append(row[15]);//通道 Data.append(row[28]+row[29]);//标称值 - Data.append(row[17]);//垂直偏转系数(/div) + Data.append(row[18]+row[19]);//垂直偏转系数(/div) Data.append("");//测量值 Data.append("");//测量值单位 Data.append(row[13]);//技术指标 @@ -4203,13 +4205,13 @@ QStringList Data; Data.append(row[0]); //ID Data.append(VerificationItem); //检定项目 - Data.append(row[30]);//项目 + Data.append(row[31]);//项目 Data.append(row[28]+row[29]);//标称值 Data.append("");//顶部测量值 Data.append("");//底部测量值 Data.append("");//测量值 Data.append("");//测量值单位 - Data.append(row[13]);//技术指标 + Data.append("");//相对误差 calibrating_signalList.append(Data); } diff --git a/softwareDirectory/AutoVerScheme/checkwindow.cpp b/softwareDirectory/AutoVerScheme/checkwindow.cpp index cf8f54a..6e9fd04 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.cpp +++ b/softwareDirectory/AutoVerScheme/checkwindow.cpp @@ -57,6 +57,14 @@ unitTransList.insert("Ω",1); unitTransList.insert("KΩ",0.001); unitTransList.insert("MΩ",0.000001); + unitTransList.insert("HZ",1); + unitTransList.insert("kHZ",0.001); + unitTransList.insert("MHZ",0.000001); + unitTransList.insert("GHZ",0.000000001); + unitTransList.insert("S",1); + unitTransList.insert("MS",1E+3); + unitTransList.insert("PS",1E+12); + unitTransList.insert("NS",1E+9); //统一定义命令占位符 cmdPlaceHolderList.insert("{CH}","通道"); cmdPlaceHolderList.insert("{RANV}","量程"); @@ -69,15 +77,19 @@ cmdPlaceHolderList.insert("{STVAL}","标准值"); cmdPlaceHolderList.insert("{RAN}","量程"); cmdPlaceHolderList.insert("{FREQ}","频率"); + cmdPlaceHolderList.insert("{BW}","频带宽度"); cmdPlaceHolderList.insert("{UNIT}","单位"); cmdPlaceHolderList.insert("{FUNIT}","频率单位"); cmdPlaceHolderList.insert("{OHM}","阻抗"); + cmdPlaceHolderList.insert("{POS}","周期时标信号"); //示波器 cmdPlaceHolderList.insert("{OHM}","阻抗"); //转换 unitTypeTransList.insert("Ω","OHM"); unitTypeTransList.insert("KΩ","KOHM"); unitTypeTransList.insert("MΩ","MOHM"); + unitTypeTransList.insert("50Ω","0"); + unitTypeTransList.insert("1MΩ","1"); getCheckDevice(); //ui->stackedWidget_2->setCurrentIndex(1); //ui->tableWidgetDevice->verticalHeader()->sectionResizeMode(QHeaderView::Stretch); @@ -421,16 +433,19 @@ int idx2= getIndexByHeader(sLabel,"标准值"); int idx3= getIndexByHeader(sLabel,"单位"); int chname= getIndexByHeader(sLabel,"通道"); + if(idx==-1){idx=1;};if(idx2==-1){idx2=5;};if(idx3==-1){idx3=4;}; ui->tableWidget_Point->setItem(row, 0, new QTableWidgetItem(dataRes[i][idx])); ui->tableWidget_Point->setItem(row, 1, new QTableWidgetItem(dataRes[i][idx2]+"("+dataRes[i][idx3]+")")); ui->tableWidget_Point->setItem(row, 2, new QTableWidgetItem("1")); row++; + if(chname!=-1&&!chList.contains(dataRes[i][chname])) { chList.append(dataRes[i][chname]); } } + // ======================================================================================== // 按钮设置显示 // ==================================================================================== @@ -444,7 +459,7 @@ //设置第一个按钮选中状态 if(index==0){ button->setChecked(true);} //button->setc(true); - // 设置按钮样式表 + // 设置按钮样式表 button->setStyleSheet("QPushButton {" "border: 1px solid white;" // 白色边框 "border-bottom: 2px solid rgba(0, 255, 255, 1);" // 浅蓝色下划线 @@ -510,6 +525,8 @@ ui->HeadListLayout->addWidget(button); } } + std::sort(chList.begin(), chList.end()); + if(chList.count()==0){chList.append("CH1");}; ui->stackedWidget_2->setCurrentIndex(1); initCheckTable(0); } @@ -1136,6 +1153,21 @@ } return dTmp; } +double CheckWindow::tranunitSplit(QString sData,bool reverse) +{ + + QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); + if(re.match(sData).hasMatch()) + { + QString sData2=sData; + QString sNewData,sUnit; + ItemUnitSplit(sData,sNewData,sUnit); + return transUnit(sNewData,sUnit,reverse); + }else{ + return sData.toDouble(); + } + +} QString CheckWindow::TranTypeUnit(QString sUnit) { QString NewsUnit=sUnit; @@ -1151,24 +1183,25 @@ if(dex==-1) dex=getIndexByHeader(sLabel,"标准器示值"); if(dex==-1) + dex=getIndexByHeader(sLabel,"标称值"); + if(dex==-1) return QString::number(TestValue); - QString StanValue=data[dex]; - int decimalPlaces = 0; - int decimalPos = StanValue.indexOf('.'); + + QString StanValue=Removeunit(data[dex]); + int decimalPlaces = 0; + int decimalPos = StanValue.indexOf('.'); if (decimalPos == -1) { decimalPlaces=1; }else{ decimalPlaces=StanValue.length() - decimalPos - 1; } - - QString formattedTestValue = QString::number(TestValue, 'f', decimalPlaces); return formattedTestValue; } QString CheckWindow::transCmd(QString sCmd,QString sLabel,QStringList data,bool devicetype) { QString sNewCmd = sCmd; - if(sNewCmd.contains("DELAY:")){ + if(sNewCmd.contains("{DELAY:")){ QRegExp re("DELAY:(\\d+)"); int delay=0; if (re.indexIn(sNewCmd) != -1) { @@ -1184,15 +1217,28 @@ if(sCmd.contains(key)){ int idx= getIndexByHeader(sLabel,cmdPlaceHolderList.value(key)); if(idx!=-1){ - if(devicetype) + if(devicetype || key=="{CH}") { NewUnit = TranTypeUnit(data[idx]); //转换 Ω->OHM sNewCmd = sNewCmd.replace(key,NewUnit); continue; } - int idx2= getIndexByHeader(sLabel,"单位"); - QString unit = data[idx2]; - double dTmp = transUnit(data[idx],unit,true); + double dTmp; + QRegularExpression re("(?=.*[0-9])(?=.*[a-zA-ZΩΜΩ])"); + if(re.match(data[idx]).hasMatch()) + { + dTmp = tranunitSplit(data[idx],true); + }else + { + int idx2= getIndexByHeader(sLabel,"单位"); + if(idx2!=-1) + { + QString unit = data[idx2]; + dTmp = transUnit(data[idx],unit,true); + }else{ + dTmp=data[idx].toDouble(); + }; + } sNewCmd = sNewCmd.replace(key,QString::number(dTmp)); } @@ -1200,6 +1246,7 @@ } return sNewCmd; } + //_text void CheckWindow::on_pushButton_start_clicked() { @@ -1281,9 +1328,9 @@ void CheckWindow::autoAdujstData(QString sLabel,int i,double dStdValue,QList& dataRes){ double dError; - QString newdStdValue,newdError; + QString newdStdValue,newdError,Value; if(iEquipType==1 || iEquipType==13){ - if(qIsFinite(dStdValue)){ + if(dStdValue==FP_INFINITE){ bool bOk = false; dStdValue = QInputDialog::getDouble(this,"手动测试","请输入被检示值",0,-100000, 100000,5,&bOk); @@ -1293,7 +1340,10 @@ dStdValue=0; } } - newdStdValue= TranDecimals(sLabel,dataRes[i],dStdValue); + // ItemUnitSplit + + newdStdValue= TranDecimals(sLabel, dataRes[i],dStdValue); + int idx= getIndexByHeader(sLabel,"示值"); if(idx!=-1) { @@ -1320,11 +1370,16 @@ if(idx!=-1) { int idx2=getIndexByHeader(sLabel,"标准值"); - double dTmp = dataRes[i][idx2].toDouble(); - dError = (dStdValue-dTmp); - newdError=TranDecimals(sLabel,dataRes[i],dError); - dataRes[i][idx] = newdError; - ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); + if(idx2==-1) + idx2=getIndexByHeader(sLabel,"标称值"); + if(idx2!=-1){ + double dTmp = dataRes[i][idx2].toDouble(); + dError = (dStdValue-dTmp); + newdError=TranDecimals(sLabel,dataRes[i],dError); + dataRes[i][idx] = newdError; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdError)); + } + } idx= getIndexByHeader(sLabel,"结论"); if(idx!=-1) @@ -1333,6 +1388,61 @@ ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem("符合指标")); //测量值 } + idx= getIndexByHeader(sLabel,"测量幅度"); + if(idx!=-1) + { + QString textValue= ui->tableWidgetCheck->item(i,idx)->text(); + + if(textValue==""){ + dataRes[i][idx] = newdStdValue; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newdStdValue)); //测试 + }else + { + idx= getIndexByHeader(sLabel,"参考幅度"); + QString refvalue= newdStdValue; + dataRes[i][idx] = refvalue; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(refvalue)); //参考 + // 计算a除以b的对数(以10为底) + double logResult = std::log10( refvalue.toDouble() / textValue.toDouble()); + double result = 20 * logResult; + idx= getIndexByHeader(sLabel,"分贝数(dB)"); + if(idx!=-1) + { + QString newresult; + newresult=TranDecimals(sLabel, dataRes[i],result); + dataRes[i][idx] = newresult; + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(newresult)); //分贝数 + } + + } + } + idx= getIndexByHeader(sLabel,"周期时标信号"); + if(idx!=-1) + { + double ErrorCal; + QString sign=""; + if(dStdValue>0.2){sign="-";}; + + bool bOk = false; + dStdValue = QInputDialog::getDouble(this,"手动输入","请输入△T/ns值",0,-100000, 100000,5,&bOk); + if (bOk) { + }else{ + dStdValue=0; + } + dStdValue=transUnit(QString::number(dStdValue),"ns",true); + ErrorCal=std::fabs(dStdValue); + idx= getIndexByHeader(sLabel,"时基绝对误差△T/ns"); + if(idx!=-1){ + dataRes[i][idx] =sign+QString::number(ErrorCal); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal))); //测量值 + } + + idx= getIndexByHeader(sLabel,"时基相对误差△δ"); + { + dataRes[i][idx] =sign+QString::number(ErrorCal/0.01); + ui->tableWidgetCheck->setItem(i,idx,new QTableWidgetItem(sign+QString::number(ErrorCal/0.01))); //测量值 + } + } BaseCommonApi::SaveLogInfo(1,QString("转换前 测试值 %1").arg(dStdValue)); BaseCommonApi::SaveLogInfo(1,QString("转换后 测试值 %1").arg(newdStdValue)); @@ -1468,37 +1578,118 @@ } void CheckWindow::Oscilloscopetextflow() { + connectDevice(); + for (int _ch=0;_chshowDialog("通道切换提示",QString("请切换 %1 通道").arg(chList[_ch]))){continue;} for(int i=0;i dataRes = caliDataList.value(sLabel); - BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(_ch).arg(sLabel)); + BaseCommonApi::SaveLogInfo(1,QString("开始 %1 %2 测试").arg(chList[_ch]).arg(sLabel)); QString sParam; + QString ValueUnit; + InstructionLib *instrcutLibOhm; for (int i = 0; i < dataRes.count(); ++i) { + TextCount=1; int _dex= getIndexByHeader(sLabel,"通道"); - if(_dex==-1){sParam=_ch;}else{sParam=dataRes[i][_dex];} + if(_dex==-1){sParam=chList[_ch];}else{sParam=dataRes[i][_dex];} if(sParam!=chList[_ch]){continue;}; + CheckBackColorUpdate(true,i); QString sRet=""; QString newCmd; double dStdValue=FP_INFINITE; QString newdStdValue; - //标准器输出 - BaseCommonApi::SaveLogInfo(1,QString("标准器输出")); - QString sParam; int idx= getIndexByHeader(sLabel,"检定项目"); + QString sParam; if(idx!=-1) sParam = dataRes[i][idx]; - if(standardEngine.getState() || 1==1){ - InstructionLib *instrcutLib = getCmdByCheckName(1,sParam); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); + InstructionLib *instrcutLibbiz=getCmdByCheckName(0,sParam); + InstructionLib *instrcutLibstan=getCmdByCheckName(1,sParam); + //INIT 被检设备 - 标准设备 + BaseCommonApi::SaveLogInfo(1,QString("INIT")); + InstructionLib *InItbiz; + InstructionLib *InItstan; + InItbiz= getCmdByCheckName(0,"INIT"); + InItstan= getCmdByCheckName(1,"INIT"); + if(InItbiz!=nullptr && instrcutLibbiz!=nullptr) + { + if(deviceEngine.getState()) + { + //设置电阻值+ + instrcutLibOhm= getCmdByCheckName(0,"电阻"); + if(instrcutLibOhm!=nullptr){ + QStringList ohmList = instrcutLibOhm->instruct_config.split(";"); + int idxohm= getIndexByHeader(sLabel,"阻抗"); + if(idxohm!=-1) + { + QString onmname="50Ω"; + QString CmdOhm; + onmname=dataRes[i][idxohm]; + if(onmname=="50Ω"){CmdOhm=ohmList[0];}else{CmdOhm=ohmList[1];}; + newCmd = transCmd(CmdOhm,sLabel,dataRes[i],true); + deviceEngine.sendData(newCmd); + } + } + //读取配置指令 + + QStringList sList = InItbiz->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + deviceEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + }; + + } + + if(InItstan!=nullptr && instrcutLibstan!=nullptr) + { + if(standardEngine.getState()) + { + //读取配置指令 + QStringList sList = InItstan->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + standardEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + } + + } + + if(sParam=="频带宽度"){TextCount=2;}; + for (int d=0;dinstruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + if(d==1&& sCmd.contains("{BW}")) + { + sCmd.replace("{BW}","50000"); + } + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + if(newCmd!=""){ standardEngine.sendData(newCmd); qDebug() << "standard cmds:" << newCmd; @@ -1509,10 +1700,9 @@ } //被检设备读数 BaseCommonApi::SaveLogInfo(1,QString("被检设备输出")); - if(deviceEngine.getState() || 1==1){ - InstructionLib *instrcutLib = getCmdByCheckName(0,sParam); - if(instrcutLib!=nullptr){ - QStringList sList = instrcutLib->instruct_config.split(";"); + if(deviceEngine.getState()){ + if(instrcutLibbiz!=nullptr){ + QStringList sList = instrcutLibbiz->instruct_config.split(";"); if(sList.length()>0){ for (QString& sCmd : sList){ newCmd = transCmd(sCmd,sLabel,dataRes[i]); @@ -1522,18 +1712,83 @@ } } } - - newCmd = transCmd(instrcutLib->instruct_read,sLabel,dataRes[i]); + newCmd = transCmd(instrcutLibbiz->instruct_read,sLabel,dataRes[i]); if(newCmd!=""){ qDebug() << "query cmds:" << newCmd; + sRet = deviceEngine.queryData(newCmd); idx= getIndexByHeader(sLabel,"单位"); - dStdValue = transUnit(sRet,dataRes[i][idx]); + //ValueUnit + if(idx!=-1) + { + ValueUnit=dataRes[i][idx]; + }else + { + int idx= getIndexByHeader(sLabel,"标准值"); + if(idx==-1) + idx= getIndexByHeader(sLabel,"标称值"); + if(idx!=-1) + ItemUnitSplit(dataRes[i][idx],ValueUnit,ValueUnit); + + } + dStdValue = transUnit(sRet,ValueUnit); + + } + } + + } + + + autoAdujstData(sLabel,i,dStdValue,dataRes); + CheckBackColorUpdate(false,i); + Delay_MSec(2000); + } + //CLOSE 被检设备 - 标准设备 + BaseCommonApi::SaveLogInfo(1,QString("CLOSE")); + InstructionLib *Closebiz; + InstructionLib *Closestan; + Closebiz= getCmdByCheckName(0,"CLOSE"); + Closestan= getCmdByCheckName(1,"CLOSE"); + if(Closestan!=nullptr && instrcutLibstan!=nullptr) + { + if(standardEngine.getState()) + { + //读取配置指令 + QStringList sList = Closestan->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + standardEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } } } + } } - autoAdujstData(sLabel,i,dStdValue,dataRes); - Delay_MSec(2000); + // + if(Closebiz!=nullptr && instrcutLibbiz!=nullptr) + { + if(deviceEngine.getState()) + { + //读取配置指令 + QStringList sList = Closebiz->instruct_config.split(";"); + if(sList.length()>0){ + for (QString& sCmd : sList){ + newCmd = transCmd(sCmd,sLabel,dataRes[i]); + + if(newCmd!=""){ + deviceEngine.sendData(newCmd); + qDebug() << "standard cmds:" << newCmd; + } + } + } + }; + + } + + } caliDataList.insert(sLabel,dataRes); @@ -1673,3 +1928,45 @@ } return IsSucc; } +void CheckWindow::ItemUnitSplit(QString Value,QString &data,QString &unit) +{ + QString sData2=Value; + QString sNewData,sUnit; + // 正则表达式匹配数字 + QRegularExpression reLetters("[a-zA-ZΩΜΩ]"); + QRegularExpression reLetters1("[^a-zA-ZΩΜΩ]"); + data=sData2.replace(reLetters,""); + unit= Value.replace(reLetters1,""); + +} +void CheckWindow::CheckBackColorUpdate(bool State,int row) +{ + QBrush colorBrush(Qt::white); + if(State) + { + QColor lightGreenColor(173, 216, 230); + colorBrush.setColor(lightGreenColor); + } + for (int col = 0; col < ui->tableWidgetCheck->columnCount(); ++col) { + QTableWidgetItem *item = ui->tableWidgetCheck->item(row, col); + if (item) { + item->setBackground(colorBrush); + } + } +} +QString CheckWindow::Removeunit(QString data) +{ + QRegularExpression re("[a-zA-ZΩΜΩ]"); + return data.replace(re,""); +} +bool CheckWindow::showDialog(QString title,QString mess) +{ + QMessageBox::StandardButton reply; + reply = QMessageBox::question(this, title, mess, + QMessageBox::Yes|QMessageBox::No); + if (reply == QMessageBox::Yes) { + return true; + } else { + return false; + } +} diff --git a/softwareDirectory/AutoVerScheme/checkwindow.h b/softwareDirectory/AutoVerScheme/checkwindow.h index 5dacafa..fb6784f 100644 --- a/softwareDirectory/AutoVerScheme/checkwindow.h +++ b/softwareDirectory/AutoVerScheme/checkwindow.h @@ -92,6 +92,12 @@ QString TranTypeUnit(QString sUnit); void Oscilloscopetextflow(); void closeDevice(); + double tranunitSplit(QString sData,bool reverse=false); + void ItemUnitSplit(QString Value,QString &data,QString &unit); + void CheckBackColorUpdate(bool State,int row); + QString Removeunit(QString data); + bool showDialog(QString title,QString mess); + int TextCount; void openGageResult(); private: Ui::CheckWindow *ui; diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp index 9810a45..f6f5a32 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.cpp @@ -136,6 +136,7 @@ void DialogCheckResult::on_pushButton_3_clicked() { + checkitemlist.clear(); SaveDeviceMeasureInfo measInfo; BaseCommonApi api; measInfo.id = QString::number(api.generateId()); @@ -239,6 +240,73 @@ BaseCommonApi::SearchSelectTable(QString::number(iEquipType),&measItem); } } + //示波器检定装置 + else if(iEquipType==13) + { + checkitemlist.insert("时基",1); + checkitemlist.insert("直流增益",2); + checkitemlist.insert("直流偏置",3); + checkitemlist.insert("频带宽度",4); + checkitemlist.insert("触发灵敏度",5); + checkitemlist.insert("上升时间",6); + checkitemlist.insert("输入电阻",7); + checkitemlist.insert("校准信号",8); + QString Value,Unit; + //ItemUnitSplit + for (int i = 0; i < dataRes.count(); ++i) { + DeviceOscilloscopeCalibration measItem; + measItem.id = QString::number(api.generateId()); + measItem.data_id = measInfo.id; + measItem.data_type = getDictebyItemName(getValueByHeader(i,sLabel,"检定项目")); + ItemUnitSplit(getValueByHeader(i,sLabel,"周期时标信号"),Value,Unit); + measItem.cycle_signal=Value; + measItem.cycle_signal_unit=Unit; + measItem.time_base_absolute_error=getValueByHeader(i,sLabel,"时基绝对误差△T/ns"); + measItem.time_base_relative_error=getValueByHeader(i,sLabel,"时基相对误差△δ"); + ItemUnitSplit(getValueByHeader(i,sLabel,"技术指标"),Value,Unit); + measItem.technical_index=Value; + measItem.technical_index_unit=Unit; + measItem.conclusion=getValueByHeader(i,sLabel,"结论"); + measItem.thoroughfare=getValueByHeader(i,sLabel,"通道"); + ItemUnitSplit(getValueByHeader(i,sLabel,"阻抗"),Value,Unit); + measItem.impedance=Value; + measItem.impedance_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"幅度/DIV"),Value,Unit); + measItem.vertical_deflect_coefficient=Value; + measItem.vertical_deflect_coefficient_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"标准值"),Value,Unit); + measItem.standard_value=Value; + measItem.standard_value_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"测量值"),Value,Unit); + measItem.measure_value=Value; + measItem.measure_value_unit=Unit; + measItem.relative_error=getValueByHeader(i,sLabel,"相对误差"); + measItem.error_value=getValueByHeader(i,sLabel,"误差"); + ItemUnitSplit(getValueByHeader(i,sLabel,"频带宽度"),Value,Unit); + measItem.band_width=Value; + measItem.band_width_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"参考幅度"),Value,Unit); + measItem.reference_amplitude=Value; + measItem.reference_amplitude=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"测量幅度"),Value,Unit); + measItem.measure_amplitude=Value; + measItem.measure_amplitude_unit=Unit; + measItem.decibel_number=getValueByHeader(i,sLabel,"分贝数(dB)"); + measItem.trigger_type=getValueByHeader(i,sLabel,"触发类型"); + ItemUnitSplit(getValueByHeader(i,sLabel,"标称值"),Value,Unit); + measItem.nominal_value=Value; + measItem.nominal_value_unit=Unit; + measItem.data_type=getValueByHeader(i,sLabel,"项目"); + ItemUnitSplit(getValueByHeader(i,sLabel,"顶部测量值"),Value,Unit); + measItem.top_measure_value=Value; + measItem.top_measure_value_unit=Unit; + ItemUnitSplit(getValueByHeader(i,sLabel,"底部测量值"),Value,Unit); + measItem.bottom_measure_value=Value; + measItem.bottom_measure_value_unit=Unit; + //decibel_number + BaseCommonApi::InsertDeviceOscilloscopeCalibration(measItem); + } + } } // for(SaveDeviceMeasureCalibrator& item:measureCalList){ // item.id = QString::number(api.generateId()); @@ -342,3 +410,23 @@ { } +int DialogCheckResult::getDictebyItemName(QString Name) +{ + int NewName=0; + if(checkitemlist.keys().contains(Name)) + { + NewName=checkitemlist.value(Name); + } + return NewName; +} +void DialogCheckResult::ItemUnitSplit(QString Value,QString &data,QString &unit) +{ + QString sData2=Value; + QString sNewData,sUnit; + // 正则表达式匹配数字 + QRegularExpression reLetters("[a-zA-ZΩΜΩ]"); + QRegularExpression reLetters1("[^a-zA-ZΩΜΩ]"); + data=sData2.replace(reLetters,""); + unit= Value.replace(reLetters1,""); + +} diff --git a/softwareDirectory/AutoVerScheme/dialogcheckresult.h b/softwareDirectory/AutoVerScheme/dialogcheckresult.h index 538aa41..d72eddf 100644 --- a/softwareDirectory/AutoVerScheme/dialogcheckresult.h +++ b/softwareDirectory/AutoVerScheme/dialogcheckresult.h @@ -42,6 +42,9 @@ int curHeadIdx=-1; int iEquipType; QList catoryList; + QMap checkitemlist; + int getDictebyItemName(QString Name); + void ItemUnitSplit(QString Value,QString &data,QString &unit); }; #endif // DIALOGCHECKRESULT_H diff --git a/softwareDirectory/AutoVerScheme/formaddrsetting.cpp b/softwareDirectory/AutoVerScheme/formaddrsetting.cpp index a820ec9..ea066fc 100644 --- a/softwareDirectory/AutoVerScheme/formaddrsetting.cpp +++ b/softwareDirectory/AutoVerScheme/formaddrsetting.cpp @@ -42,9 +42,8 @@ ui->tableWidget->horizontalHeader()->setSectionResizeMode(i,QHeaderView::Stretch); ui->tableWidget->setColumnHidden(0, true); ui->tableWidget->setColumnWidth(1, 80); - ui->tableWidget->setColumnWidth(2, 60); - ui->tableWidget->setColumnWidth(3, 60); - ui->tableWidget->setColumnWidth(5, 100); + ui->tableWidget->setColumnWidth(2, 80); + ui->tableWidget->setColumnWidth(3, 100); cmdList = BaseCommonApi::getInstructionLib(sId); CheckItemNameList.clear(); @@ -183,7 +182,7 @@ BaseCommonApi baseApi; qint64 id = baseApi.generateId(); cmd.id = QString::number(id); - cmd.type = iType; + cmd.type =QString::number(iType); QString sName = ""; if(iType==0){ if(checkMode){ @@ -349,3 +348,12 @@ { this->ui->stackedWidget->setCurrentIndex(0); } + +void FormAddrSetting::on_ExportCmdInfo_clicked() +{ + QString fileName = QFileDialog::getSaveFileName(this, tr("CmdInfo"), "", tr("Text Files (*.txt)")); + if (fileName.isEmpty()) { + return; + } + +} diff --git a/softwareDirectory/AutoVerScheme/formaddrsetting.h b/softwareDirectory/AutoVerScheme/formaddrsetting.h index da19531..897cadd 100644 --- a/softwareDirectory/AutoVerScheme/formaddrsetting.h +++ b/softwareDirectory/AutoVerScheme/formaddrsetting.h @@ -4,6 +4,9 @@ #include #include "basecommonapi.h" #include "CheckBoxTableHeader.h" +#include +#include +#include namespace Ui { class FormAddrSetting; @@ -36,6 +39,8 @@ void on_pushButton_4_clicked(); + void on_ExportCmdInfo_clicked(); + private: Ui::FormAddrSetting *ui; QList cmdList; diff --git a/softwareDirectory/AutoVerScheme/formaddrsetting.ui b/softwareDirectory/AutoVerScheme/formaddrsetting.ui index 2a6a347..ff367be 100644 --- a/softwareDirectory/AutoVerScheme/formaddrsetting.ui +++ b/softwareDirectory/AutoVerScheme/formaddrsetting.ui @@ -175,7 +175,7 @@ - + 72 diff --git a/softwareDirectory/AutoVerScheme/indexwindow.cpp b/softwareDirectory/AutoVerScheme/indexwindow.cpp index 060b86e..48bc362 100644 --- a/softwareDirectory/AutoVerScheme/indexwindow.cpp +++ b/softwareDirectory/AutoVerScheme/indexwindow.cpp @@ -55,6 +55,13 @@ //调用样式 loadStyle(":/qss/Index.css"); + QString Value="12.00mv",Value2="12.00mv",data,unit; + QRegularExpression reLetters("[a-zA-Z]"); + QRegularExpression reLetters1("[^a-zA-Z]"); + unit= Value.replace(reLetters1,""); + // 提取数字 + data= Value2.replace(reLetters,""); + DatabaseConnection *Conn=DatabaseConnection::getInstance(); //数据库连接 目前先放这里 后续需要放到登录界面