From aaa021ec979cd8c2df0478871e6d623e2536e965 Mon Sep 17 00:00:00 2001 From: "bob.pan" Date: Mon, 11 Oct 2021 14:02:06 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=B7=BB=E5=8A=A0tpMain=E5=92=8Cvalu?= =?UTF-8?q?eMain=E7=9B=B8=E5=85=B3=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tpvs17/caliValve/calivalve_en.ts | 9 + tpvs17/lpdesigner/lpdesigner_en.ts | 367 +++++++------- tpvs17/tpMain/QAlgParamDlg.cpp | 8 +- tpvs17/tpMain/QModelMgrDlg.cpp | 4 +- tpvs17/tpMain/QPLCDevice.cpp | 2 +- tpvs17/tpMain/lpImageCaliUI.cpp | 14 +- tpvs17/tpMain/lpMainWin.cpp | 21 +- tpvs17/tpMain/lpMainWin.ui | 12 +- tpvs17/tpMain/lpSystemConfigUI.cpp | 30 +- tpvs17/tpMain/lpSystemConfigUI.h | 1 + tpvs17/tpMain/lpmain_en.qm | Bin 45695 -> 34245 bytes tpvs17/tpMain/lpmain_en.ts | 718 +++++++++++++++------------ tpvs17/tpMain/lpmain_zh.ts | 457 ++++++++++------- tpvs17/valueMainUI/config.ini | 1 + tpvs17/valueMainUI/lpConfigUI.cpp | 14 + tpvs17/valueMainUI/lpConfigUI.h | 1 + tpvs17/valueMainUI/valueMainUI.cpp | 14 +- tpvs17/valueMainUI/valuemainui_en.ts | 162 +++--- 18 files changed, 1044 insertions(+), 791 deletions(-) diff --git a/tpvs17/caliValve/calivalve_en.ts b/tpvs17/caliValve/calivalve_en.ts index ea43461..6206393 100644 --- a/tpvs17/caliValve/calivalve_en.ts +++ b/tpvs17/caliValve/calivalve_en.ts @@ -43,5 +43,14 @@ Number of spokes Number of spokes + + 参考线模板 + Reference line template + Reference line template + + + + + diff --git a/tpvs17/lpdesigner/lpdesigner_en.ts b/tpvs17/lpdesigner/lpdesigner_en.ts index 8b202e1..88e105c 100644 --- a/tpvs17/lpdesigner/lpdesigner_en.ts +++ b/tpvs17/lpdesigner/lpdesigner_en.ts @@ -4,50 +4,50 @@ AlgoDlg - + 算法 algorithm algorithm - + 名称: Name: Name: - + 算法库: AlgoLib: AlgoLib: - - + + 请选择 Select Select - + ROI: ROI: ROI: - + 描述: Depict: Depict: - + 确定 OK OK - + 取消 Cancel Cancel @@ -56,82 +56,109 @@ AlgorithmParamMgrDialog - + 算法设置 Algo Setting Algo Setting - + 编号 Num Num - + 名称 Name Name - + 类型 Type Type - + Value Value - + 描述 depict - depict + detail - + 新增 Add Add - + 编辑 Edit Edit - + 删除 Delete Delete - + 上移 Up Up - + 下移 Down Down - + 关闭 Close Close + + CDsgParamDlg + + + 提示 + Info + + + + 请设置标定图再进行ROI标定! + Please set the Standard Image and then Use the function! + + + + 确认 + OK + + CMainFrame - + + + + + + (√) + + + + Param File (*.json) @@ -139,181 +166,205 @@ MainFrame - + 标定 calibration calibration - + 保存 Save Save - + + 修改完参数需要保存才能生效!!! + The parameters need to be saved to take effect!! + + + 解决方案资源管理 Manager Manager - 导入图片: Load Image: - Load Image: + Load Image: - 拍摄 Triger - Triger + Triger - - > - - - - + 输出结果: Output: Output: - + + 加载标定图像 + Load Image + + + 清空结果 Clear Clear - + Pixel info: ... - + 算法列表 List List - - + + 编号 Num Num - - + + 名称 Name Name - + ROI - + + + 描述 + Detail + + + 参数列表 Params Params - + 类型 Type Type - + Value Value - - test + + add + + + + + del + + + + + save ParamDlg - + 参数信息 ParamInfo ParamInfo - + 输出参数: Output: Output: - + None - + 算法: Algo: Algo: - + 描述: Depict: Depict: - + 值: Value: Value: - + 类型: Type: Type: - + 名称: Name: Name: - + 是否保存 Save or Not Save or Not - + 是否锁定 Lock or not Lock or not - + + 是否显示 + Show or not + + + 设置ROI Set ROI Set ROI - + 确定 OK OK - + 取消 Cancel Cancel @@ -322,191 +373,183 @@ QObject - + 标定数据保存完成! ...Save finish! - ...Save finish! + Save finish! - + 保存失败! Save Failed! - Save Failed! + Save failed! - 工位%1 Station%1 - Station%1 + Station%1 - + 运行 Run Run - 选择算法 Select Algo - Select Algo + Select Algo - - + 编辑 Edit Edit - + 输入参数设置 Input Setting Input Setting - + 输出参数设置 Output Setting Output Setting - + 更新关联算法参数 Update Algo Connection Update Algo Connection - + 更新关联完成 Update Connection Finish Update Connection Finish - + Error,更新关联失败!!! Error,Update Failed!!! Error,Update Failed!!! - + 算法名称: Algo Name: Algo Name: - + 图片名称: Image Name: Image Name: - + 加载算法失败,请检查是否配置相应的算法库 - 加载标定图片 Load Image - Load Image + Load Image - + 设置当前为标定图 Use Cur Image Use Cur Image - - + 提示 Info Info - 配置已修改过,是否保存相关参数到文件中? Save or Not? - Save or Not? + Save or Not? - + 编号 Num Num - + 名称 Name Name - + 类型 Type Type - + Value Value - + 描述 Depict Depict - + 确认删除? Sure Delete? Sure Delete? - - + Yes Yes - - + No No - + 编辑参数 Edit Edit - - - - + + + + 错误提示 Error Error - - - - + + + + 加载算法库失败 Load Algo Failed Load Algo Failed - - + + 显示定位线 @@ -514,13 +557,13 @@ Show Line - + 警告 Warning Warning - + 系统检测到有ROI未进行绑定,请绑定后继续!!! ROI did not Lock,Please Lock and Continue!!! ROI did not Lock,Please Lock and Continue!!! @@ -532,34 +575,34 @@ Hide Line - - + + 解绑 Unbind - - + + 绑定 Bind - + 解除径向绑定 Unbind radial - + 径向解锁 Radial unlocking - + 删除 Delete - + 径向绑定 Radial binding @@ -567,149 +610,135 @@ RoiDlg - + ROI检测区域配置 ROI Setting ROI Setting - + + 步长 + Step + + + + + + + + ... + + + + 确定 OK OK - + 取消 Cancel Cancel - + 工具 Tool Tool - + 颜色 Color Color - + circle circle - 矩形 rectangle - rectangle + rectangle - 椭圆 ellipse - ellipse + ellipse - + 十字标定线 Cross marker Cross marker - + 绘图区域: ROI Area: ROI Area: - + Pixel info: - 控制台: console: - console: + console: - - X: - - - - 宽: W: - W: + W: - Y: Y: - Y: + Y: - H - H - - - - + - - - - - - - + H - 上 - Up + Up - Left - Left + Left - 确认 OK - OK + OK - Right - Right + Right - Down - Down + Down - 设置图片 Set Image - Set Image + Set Image - 从相机获取图片 Triger - Triger + Triger diff --git a/tpvs17/tpMain/QAlgParamDlg.cpp b/tpvs17/tpMain/QAlgParamDlg.cpp index 3454c5b..ca9cc30 100644 --- a/tpvs17/tpMain/QAlgParamDlg.cpp +++ b/tpvs17/tpMain/QAlgParamDlg.cpp @@ -1,4 +1,4 @@ -#include "QAlgParamDlg.h" +#include "QAlgParamDlg.h" #include "qshowimg.h" #include #include @@ -102,7 +102,7 @@ void QAlgParamDlg::getParam() Q_SLOT void QAlgParamDlg::onChangeBG() { QFileDialog fileDialog; - fileDialog.setWindowTitle(tr("ѡıͼ")); + fileDialog.setWindowTitle(tr("请选择您的背景图")); fileDialog.setNameFilter("Picture(*.bmp *.jpg *.png)"); fileDialog.setFileMode(QFileDialog::ExistingFiles); if (fileDialog.exec() == QDialog::Accepted) @@ -131,9 +131,9 @@ Q_SLOT void QAlgParamDlg::onChangeBG() //return false; } //emit sgChangeBG(DstPath); - QMessageBox infobox(QMessageBox::Information, tr("ʾ"), tr("ͼɣ."), QMessageBox::Yes, NULL); + QMessageBox infobox(QMessageBox::Information, tr("提示"), tr("背景图更新完成,请重启本软件."), QMessageBox::Yes, NULL); infobox.setWindowIcon(QIcon(":/image/leaper")); - infobox.setButtonText(QMessageBox::Yes, tr("ȷ")); + infobox.setButtonText(QMessageBox::Yes, tr("确认")); infobox.exec(); } } diff --git a/tpvs17/tpMain/QModelMgrDlg.cpp b/tpvs17/tpMain/QModelMgrDlg.cpp index 266b28c..c799bae 100644 --- a/tpvs17/tpMain/QModelMgrDlg.cpp +++ b/tpvs17/tpMain/QModelMgrDlg.cpp @@ -491,7 +491,7 @@ Q_SLOT void QModelMgrDlg::onTextChanged(const QString& str) else { QStringList strFilter = models.filter(str); m_pModelLists->setModelList(strFilter); - QString m_str = QString("%1 %2 个型号").arg(tr("共")).arg(strFilter.size()).arg(tr("个型号")); + QString m_str = QString("%1 %2 ").arg(tr("共")).arg(strFilter.size()).arg(tr("个型号")); ui.ModelMgr_label_Model_number->setText(m_str); } } @@ -996,7 +996,7 @@ void QModelMgrDlg::showEvent(QShowEvent *event) strModels.removeAll("NG"); m_pModelLists->setModelList(strModels); - QString m_str = QString("%1 %2 个型号").arg(tr("共")).arg(strModels.size()).arg(tr("个型号")); + QString m_str = QString("%1 %2 ").arg(tr("共")).arg(strModels.size()).arg(tr("个型号")); ui.ModelMgr_label_Model_number->setText(m_str); } } diff --git a/tpvs17/tpMain/QPLCDevice.cpp b/tpvs17/tpMain/QPLCDevice.cpp index 16fff75..ab14ab2 100644 --- a/tpvs17/tpMain/QPLCDevice.cpp +++ b/tpvs17/tpMain/QPLCDevice.cpp @@ -161,7 +161,7 @@ bool QPLCDevice::getClinetInfo(QString &client) { if (m_clientList.size() > 0) { - client = m_clientList.first(); + client = QString("%1[%2]").arg(m_clientList.last()).arg(m_clientList.size()); return true; } return false; diff --git a/tpvs17/tpMain/lpImageCaliUI.cpp b/tpvs17/tpMain/lpImageCaliUI.cpp index 4cb750b..0eaac70 100644 --- a/tpvs17/tpMain/lpImageCaliUI.cpp +++ b/tpvs17/tpMain/lpImageCaliUI.cpp @@ -1,4 +1,4 @@ -#include "lpImageCaliUI.h" +#include "lpImageCaliUI.h" #include "QFileDialog" #include "lpGlobalConfig.h" @@ -79,7 +79,7 @@ void lpImageCaliUI::showEvent(QShowEvent *event) m_srcImgView->setLabelVisible(true); m_srcImgView->setLockAll(true); } - ui.m_pbLock->setText(tr("")); + ui.m_pbLock->setText(tr("解锁")); } Q_SLOT void lpImageCaliUI::onButtonClicked() @@ -87,7 +87,7 @@ Q_SLOT void lpImageCaliUI::onButtonClicked() QString strObj = sender()->objectName(); if (strObj == "m_pbLoadImg") { - QString fileName = QFileDialog::getOpenFileName(this, tr("ѡ궨ͼ"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)")); + QString fileName = QFileDialog::getOpenFileName(this, tr("选择标定图"), "/home/jana", tr("Image Files (*.png *.jpg *.bmp)")); if (!fileName.isEmpty()) { QString DstPath = QApplication::applicationDirPath() + "\\user\\StandImage.png"; @@ -153,8 +153,8 @@ Q_SLOT void lpImageCaliUI::onButtonClicked() else if("m_pbLock" == strObj) { QString str = ui.m_pbLock->text(); - if (str == "") { - ui.m_pbLock->setText(tr("")); + if (str == "解锁") { + ui.m_pbLock->setText(tr("上锁")); if (m_srcImgView) { m_srcImgView->setLockAll(false); @@ -165,7 +165,7 @@ Q_SLOT void lpImageCaliUI::onButtonClicked() { m_srcImgView->setLockAll(true); } - ui.m_pbLock->setText(tr("")); + ui.m_pbLock->setText(tr("解锁")); } } } @@ -220,7 +220,7 @@ void lpImageCaliUI::AddPoint(QPoint &p,QString strName) Q_SLOT void lpImageCaliUI::onRoiLockIng(QString strName) { - ui.label_info->setText("ܲ,"); + ui.label_info->setText("不能操作,请解锁"); ui.label_info->setStyleSheet("background-color: rgb(255, 68, 55);"); if (m_timerID == 0) { diff --git a/tpvs17/tpMain/lpMainWin.cpp b/tpvs17/tpMain/lpMainWin.cpp index 4b8713f..9342ca0 100644 --- a/tpvs17/tpMain/lpMainWin.cpp +++ b/tpvs17/tpMain/lpMainWin.cpp @@ -22,9 +22,9 @@ #include "databasesql.h" #include "lpCryptokey.h" -#define VERSION_HUB "3.0.1.5" +#define VERSION_HUB "3.0.1.6" #define VERSION_ALG "3.0.1.4" -#define UPDATE_TIME "2021-10-09" +#define UPDATE_TIME "2021-10-11" #pragma execution_character_set("utf-8") #define MODEL_UI_ICON_NONE ":/image/no-img" @@ -85,18 +85,20 @@ static cv::Mat QImageToMat(QImage image) { lpMainWin::lpMainWin(QWidget *parent) : QMainWindow(parent) { - this->setWindowIcon(QIcon(":/image/leaper")); - qRegisterMetaType("TimeStruct"); - onInitCoreCtrl();//初始化CoreCtrl模块 相机相关处理模块 - onInitEngineCtrl(); ui.setupUi(this); - onInitAbout(); - setupTrayIcon(); {//加载语言设置 QSettings languageSetting("hubdetect.ini", QSettings::IniFormat); QString strLanguage = languageSetting.value("language", "Chinese").toString(); SetLanguage(strLanguage); } + this->setWindowIcon(QIcon(":/image/leaper")); + qRegisterMetaType("TimeStruct"); + onInitCoreCtrl();//初始化CoreCtrl模块 相机相关处理模块 + onInitEngineCtrl(); + + onInitAbout(); + setupTrayIcon(); + lpGlobalConfig::instance()->loadStandParam(); { QGridLayout *pLayout = new QGridLayout(ui.cam_win_1); @@ -129,8 +131,8 @@ lpMainWin::lpMainWin(QWidget *parent) QMenu *pToolMenu = new QMenu(this); pToolMenu->addAction(ui.actioncamSetting); - pToolMenu->addAction(ui.action_ImageCali);//图像标定 pToolMenu->addAction(ui.actionSystemSeting); + pToolMenu->addAction(ui.action_ImageCali);//图像标定 pToolMenu->addAction(ui.actionalgo); pToolMenu->addAction(ui.action_debug); @@ -222,6 +224,7 @@ lpMainWin::lpMainWin(QWidget *parent) m_pAlgParamDlg = new QAlgParamDlg();//算法参数调试页面 connect(m_pSystemConfigUI, SIGNAL(sgUpdateInfo()), this, SLOT(setWindowTitleInfo()));//系统标题 + connect(m_pSystemConfigUI, SIGNAL(sgLanguageChange(QString)), this, SLOT(onLanguageChange(QString))); } onSetModel(); { diff --git a/tpvs17/tpMain/lpMainWin.ui b/tpvs17/tpMain/lpMainWin.ui index 642c8ef..e92d398 100644 --- a/tpvs17/tpMain/lpMainWin.ui +++ b/tpvs17/tpMain/lpMainWin.ui @@ -7,7 +7,7 @@ 0 0 1025 - 704 + 707 @@ -205,7 +205,7 @@ - 识别定位检测 + @@ -419,7 +419,7 @@ font: 75 24pt "Consolas"; 匹配值 - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + Qt::AlignCenter @@ -578,6 +578,9 @@ font: 75 24pt "Consolas"; 定位耗时 + + Qt::AlignCenter + @@ -605,6 +608,9 @@ font: 75 24pt "Consolas"; 识别耗时 + + Qt::AlignCenter + diff --git a/tpvs17/tpMain/lpSystemConfigUI.cpp b/tpvs17/tpMain/lpSystemConfigUI.cpp index 921d40c..4267605 100644 --- a/tpvs17/tpMain/lpSystemConfigUI.cpp +++ b/tpvs17/tpMain/lpSystemConfigUI.cpp @@ -1,4 +1,4 @@ -#include "lpSystemConfigUI.h" +#include "lpSystemConfigUI.h" #include "lpGlobalConfig.h" #include #include "QSettings" @@ -28,12 +28,12 @@ Q_SLOT void lpSystemConfigUI::onButtonClicked() { QString strObj = sender()->objectName(); if (strObj == "m_pbApply") { - lpGlobalConfig::instance()->bSaveCutNGImg = ui.checkBox_saveNGCutImg->isChecked();//ʶ - lpGlobalConfig::instance()->bSaveCutOKImg = ui.checkBox_saveOKCutImg->isChecked();//ʶ - lpGlobalConfig::instance()->bSaveSrcNGImg = ui.checkBox_saveNGSrcImg->isChecked();//ʶ - lpGlobalConfig::instance()->bSaveSrcOKImg = ui.checkBox_saveOKSrcImg->isChecked();//ʶ - lpGlobalConfig::instance()->bSaveSrcOKImg_value = ui.checkBox_saveValue_OKSrcImg->isChecked();//λ - lpGlobalConfig::instance()->bSaveSrcNGImg_value = ui.checkBox_saveValue_NGSrcImg->isChecked();//λ + lpGlobalConfig::instance()->bSaveCutNGImg = ui.checkBox_saveNGCutImg->isChecked();//识别 + lpGlobalConfig::instance()->bSaveCutOKImg = ui.checkBox_saveOKCutImg->isChecked();//识别 + lpGlobalConfig::instance()->bSaveSrcNGImg = ui.checkBox_saveNGSrcImg->isChecked();//识别 + lpGlobalConfig::instance()->bSaveSrcOKImg = ui.checkBox_saveOKSrcImg->isChecked();//识别 + lpGlobalConfig::instance()->bSaveSrcOKImg_value = ui.checkBox_saveValue_OKSrcImg->isChecked();//定位 + lpGlobalConfig::instance()->bSaveSrcNGImg_value = ui.checkBox_saveValue_NGSrcImg->isChecked();//定位 lpGlobalConfig::instance()->m_SaveImgDirPath = ui.lineEdit->text(); //lpGlobalConfig::instance()->tcpServerPort = ui.lineEdit_2->text().toInt(); lpGlobalConfig::instance()->tcpServerPort = ui.lineEdit_3->text().toInt(); @@ -45,7 +45,7 @@ Q_SLOT void lpSystemConfigUI::onButtonClicked() QString strLanguage = ui.comboBox->currentText(); QSettings languageSetting("hubdetect.ini", QSettings::IniFormat); languageSetting.setValue("language", strLanguage); - + emit sgLanguageChange(strLanguage); ui.m_label_SaveInfo->setVisible(true); m_timerID = startTimer(1000); emit sgUpdateInfo(); @@ -54,7 +54,7 @@ Q_SLOT void lpSystemConfigUI::onButtonClicked() this->close(); } else if (strObj == "m_pbSetPath") { - QString str = QFileDialog::getExistingDirectory(this, "ѡļ"); + QString str = QFileDialog::getExistingDirectory(this, "选择文件夹"); if (!str.isEmpty()) { ui.lineEdit->setText(str); @@ -65,12 +65,12 @@ Q_SLOT void lpSystemConfigUI::onButtonClicked() void lpSystemConfigUI::showEvent(QShowEvent *event) { ui.m_label_SaveInfo->setVisible(false); - ui.checkBox_saveNGCutImg->setChecked(lpGlobalConfig::instance()->bSaveCutNGImg);//ʶ - ui.checkBox_saveOKCutImg->setChecked(lpGlobalConfig::instance()->bSaveCutOKImg);//ʶ - ui.checkBox_saveNGSrcImg->setChecked(lpGlobalConfig::instance()->bSaveSrcNGImg);//ʶ - ui.checkBox_saveOKSrcImg->setChecked(lpGlobalConfig::instance()->bSaveSrcOKImg);//ʶ - ui.checkBox_saveValue_OKSrcImg->setChecked(lpGlobalConfig::instance()->bSaveSrcOKImg_value);//λ - ui.checkBox_saveValue_NGSrcImg->setChecked(lpGlobalConfig::instance()->bSaveSrcNGImg_value);//λ + ui.checkBox_saveNGCutImg->setChecked(lpGlobalConfig::instance()->bSaveCutNGImg);//识别 + ui.checkBox_saveOKCutImg->setChecked(lpGlobalConfig::instance()->bSaveCutOKImg);//识别 + ui.checkBox_saveNGSrcImg->setChecked(lpGlobalConfig::instance()->bSaveSrcNGImg);//识别 + ui.checkBox_saveOKSrcImg->setChecked(lpGlobalConfig::instance()->bSaveSrcOKImg);//识别 + ui.checkBox_saveValue_OKSrcImg->setChecked(lpGlobalConfig::instance()->bSaveSrcOKImg_value);//定位 + ui.checkBox_saveValue_NGSrcImg->setChecked(lpGlobalConfig::instance()->bSaveSrcNGImg_value);//定位 //ui.lineEdit_2->setText(QString("%1").arg(lpGlobalConfig::instance()->tcpServerPort)); ui.lineEdit_3->setText(QString("%1").arg(lpGlobalConfig::instance()->tcpServerPort)); diff --git a/tpvs17/tpMain/lpSystemConfigUI.h b/tpvs17/tpMain/lpSystemConfigUI.h index 4a48ec2..6311f59 100644 --- a/tpvs17/tpMain/lpSystemConfigUI.h +++ b/tpvs17/tpMain/lpSystemConfigUI.h @@ -13,6 +13,7 @@ public: ~lpSystemConfigUI(); signals: void sgUpdateInfo(); + void sgLanguageChange(QString); protected: Q_SLOT void onButtonClicked(); virtual void showEvent(QShowEvent *event); diff --git a/tpvs17/tpMain/lpmain_en.qm b/tpvs17/tpMain/lpmain_en.qm index fd5bc7392e05d222871a82dfaaa34785af1ebebe..413b0229c882a0d48c630a7bfa2e4023a4873500 100644 GIT binary patch delta 9898 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 EUoQ!g(*OVf literal 45695 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 diff --git a/tpvs17/tpMain/lpmain_en.ts b/tpvs17/tpMain/lpmain_en.ts index 9f17259..057badd 100644 --- a/tpvs17/tpMain/lpmain_en.ts +++ b/tpvs17/tpMain/lpmain_en.ts @@ -26,8 +26,8 @@ 型号 - Model - Model + Name + Name @@ -106,7 +106,7 @@ 轮毂型号 Name: - Name: + Name @@ -119,19 +119,19 @@ 直径(mm) Diameter(mm): - Diameter(mm): + Diameter 厚度(mm) Thickness(mm): - Thickness(mm): + Thickness 旋转次数 Rotations: - Rotations: + Rota @@ -201,6 +201,104 @@ Text day + + QAlgParamDlg + + + 算法参数设置 + Algo Param Setting + + + + 圆半径大小过滤: + Circle Filter Size: + + + + 检测背景图更换: + Background Image: + + + + 查看检测背景 + Change + + + + 二级圆定位: + Circle Param: + + + + 边缘宽度: + Edge Width: + + + + 从深到浅 + Dark to Write + + + + 从浅到深 + Write to Dark + + + + 边缘对比度: + AC Thres: + + + + 边缘转换: + Polarity: + + + + 是否使用图像增强 + Use Image Enhancement + + + + 是否使用背景图找圆算法 + Use Background Algo + + + + 参数已生效!!! + Apply Success!!! + + + + 应用 + Apply + + + + 退出 + Close + + + + 请选择您的背景图 + Please select your background Image + + + + 提示 + Info + + + + 背景图更新完成,请重启本软件. + Background image updated, please restart this software. + + + + 确认 + OK + + QCamSettingDlg @@ -211,7 +309,7 @@ 序列号: - Serial Number: + Serial: @@ -221,12 +319,12 @@ 相机类型: - Camera Type: + Type: 虚拟相机 - Virtual Camera + Virtual @@ -246,12 +344,12 @@ 设置 - Setting + Set 图像高度: - Image Height: + Height: @@ -266,7 +364,7 @@ 图像宽度: - Image Width: + Width: @@ -278,7 +376,7 @@ 图像格式: - Image Format + Format: @@ -293,17 +391,17 @@ 内触发 - Internal trigger + Internal 外触发 - External trigger + External 软触发 - Soft trigger + Soft @@ -451,49 +549,49 @@ 注册 - + Register 退出 - + Close 机器码: - + Serial: 注册码: - + License: 激活 - + Active 请输入注册码 - + Please input License 激活状态: - + State: 未激活 - + No Active 提示 - + Info @@ -540,19 +638,19 @@ p, li { white-space: pre-wrap; } 直径mm: - diameter(mm): + Diameter(mm): 开始模拟检测 - Start simulation test + Continus 采集一张 - Collect one + Signal @@ -659,7 +757,7 @@ p, li { white-space: pre-wrap; } 缩略图: - Thumbnail: + Image: @@ -708,12 +806,12 @@ p, li { white-space: pre-wrap; } 轮毂信息: - Wheel information: + Info: 型号 - Model + Name @@ -733,12 +831,12 @@ p, li { white-space: pre-wrap; } 旋转次数 - Rotations + Rotate - + 缩略图 - Thumbnail + Image @@ -761,60 +859,60 @@ p, li { white-space: pre-wrap; } Add to train - + 基本操作 - Basic operation + Operation - - + + 删除模板 Delete - + 训练当前模板 - Training + Train - + 训练模板 Train - + 添加新的模板 - Add new + Add - + 新建模板 New - + 训练所有模板,消耗时间会较长 Training all templates will take longer - + 训练全部 Train all - + 确认修改,每次修改模板的参数后都要确认修改才有效 Confirm the modification, every time you modify the parameters of the template, you must confirm the modification to be effective - + 修改确认 - Confirm + Mod - + 修改型号名 - Modify name + Mod Name @@ -964,7 +1062,7 @@ p, li { white-space: pre-wrap; } 共 - common + with @@ -1197,15 +1295,14 @@ p, li { white-space: pre-wrap; } 识别定位一体系统 - + Detection System QSettingDlg - QSettingDlg - QSettingDlg + QSettingDlg @@ -1218,12 +1315,12 @@ p, li { white-space: pre-wrap; } 退出 - Exit + Close 我要更换背景 - Change background + Change @@ -1231,7 +1328,7 @@ p, li { white-space: pre-wrap; } pic - + 没有用于检测的背景图,请更换检测背景 There is no background image for testing. Please change the testing background @@ -1938,32 +2035,32 @@ p, li { white-space: pre-wrap; } 相机视场标定 - + Camera Standard 操作 - + Operator 选择标定图像 - + Select Image P1_X: - + P1_Y: - + P2_Y: - + @@ -1971,69 +2068,69 @@ p, li { white-space: pre-wrap; } 1200 - 1200 + 1200 P2_X: - + 两点实际距离mm: - + 2 Point DistanceL: 两点像素距离px: - + 2 Pixel Distance: 像素比例值(mm/px): - + scale(mm/px): + + 解锁 - + Unlock 物理X方向偏移: - + Real X Offset: 物理Y方向偏移: - + Real Y Offset: 应用 - Use + Apply 退出 - + Close - - - - ���� - + + Image Files (*.png *.jpg *.bmp) + - ѡ���궨ͼ - + 选择标定图 + Select Image - - Image Files (*.png *.jpg *.bmp) - + + 上锁 + Lock @@ -2051,18 +2148,13 @@ p, li { white-space: pre-wrap; } 状态信息 - Status information - - - - 识别定位检测 - + Status - + 开始检测 - Start testing + Start @@ -2080,7 +2172,7 @@ p, li { white-space: pre-wrap; } 匹配值 - Match value + Score 直径(mm) @@ -2090,18 +2182,12 @@ p, li { white-space: pre-wrap; } 时间(s) Time(s) - - - 匹配值 - 通道 - Channel - - + 0 0 @@ -2125,17 +2211,17 @@ p, li { white-space: pre-wrap; } Thickness(mm) - + 统计结果 - Statistical results + Static - + modelID_detect modelID_detect - + count count @@ -2144,17 +2230,17 @@ p, li { white-space: pre-wrap; } Exchange class reset - + 型号数量 - Model number + Model Number - + 模板管理 - Template management + Model Manager - + 数据查询 History @@ -2165,143 +2251,148 @@ p, li { white-space: pre-wrap; } 0.0 - 0.0 + 0.0 角度 - + Angle (0.0) - + 圆心坐标 - + Center 定位结果 - + Result 定位耗时 - + time - + 识别耗时 - + time - + 分数 - + Score - + 型号管理 - + Model Manager - + 检测勾选 - + Model Check - + 辅助工具 - Auxiliary tools + Debg Tool - + 班次设置 - Classes setting + Classes Setting - + 光栅标定 - Raster calibration + Raster Setting - + IP设置 - IP settings + IP Setting - - + + 关于 About - + 登录 Login - + 用户管理 User Management - + 系统设置 - System settings + System Setting - - + + 相机配置 - Camera configuration + Cam Setting - + 定位标定 - + Model Standard - - + + 图像标定 - + Image Standard - - + + 注册产品 - + Register + + + + + 算法设置 + Algo Setting 加载必要模块..... Load the necessary modules..... - + 工具 Tool - + 系统时间 - System time + Time 班次信息 Classes information - 用户: - User: + User: - + 历史 History @@ -2310,9 +2401,9 @@ p, li { white-space: pre-wrap; } System initialization complete... - + 显示识别结果 - Display recognition results + Show Results 相机图像和背景图不一样,请更换检测背景! @@ -2327,137 +2418,175 @@ p, li { white-space: pre-wrap; } , Caused by not opening the detection function - + 获得图像,正在计算中... - Get the image, is calculating... + Detecting... - + 注 销 Logout - + 登 录 Login - - + + 该功能未启用. The feature is not enabled. - - - - - + + + + + + + + + 确认 - Ok + OK - + 你确定要注销 - Are you sure you want to log out + Are you sure you logout 班次管理 Classes management - + 调试工具 - DebugTool + Debug Tool - + 系统参数设置 - System parameter setting + System Setting - + 停止检测 - Stop detecting + Stop - + 帮助 - + Help - - + + 本系统未注册激活 - + The System don't Active + + + + 用户: + User: + + + + Corectrl模块加载失败,请检查! + Corectrl model load failed,please Check Error! + + + + camera.json文件出错,请检查! + camera.json is Failed,please Check Error! + + + + lpbengine模块加载失败,请检查! + lpbengine model load failed,please Check Error! + + + + lpdesigner模块加载失败,请检查! + lpdesigner model load failed,please Check Error! - - + + 请停止检测再使用该功能. - + Please Stop Detect,and then Use this. - + 注册 - + Register - + + 算法参数 + Algo Setting + + + 按下了开始检测按钮,检测功能开启 Press the start detection button, the detection function is turned on - + 按下了停止检测按钮,检测功能关闭 Press the stop detection button, the detection function is closed - + 轮毂型号识别定位一体系统 - + Hub model identification and positioning system - - + + 后台运行 - + Run Background - + 退出 - + Exit - + 显示界面 - - - - - - - - - + Show Widget + + + + + + + + + + + + 提示 - Prompt + Info - + 将清空所有数据 All data will be cleared - + 确定 - Ok + OK - - + + 取消 Cancel @@ -2470,27 +2599,27 @@ p, li { white-space: pre-wrap; } After adjusting the exposure time for 5 times, the wheel hub is still not recognized! - + 按下了清零按钮,数据全部清零 Press the reset button, all data are cleared - + d - + h - + m - + s @@ -2499,16 +2628,16 @@ p, li { white-space: pre-wrap; } System time: - + 运行时长: - Running time: + Run: 检测状态: Status: - + 检测中... Detecting... @@ -2529,21 +2658,15 @@ p, li { white-space: pre-wrap; } Current user: - - 运行时长: - 模板库发送完成 - Template library sending completed - - - + 已停止检测... - + Stopping... - - + + 正在检测型号数 - Number of models + Models 已连接 @@ -2554,17 +2677,17 @@ p, li { white-space: pre-wrap; } Disconnected - + PLC已收到相关设置参数! The PLC has received the relevant setting parameters! - + 已打开 Opened - + 已关闭 Closed @@ -2573,37 +2696,37 @@ p, li { white-space: pre-wrap; } Wheel Type Identification System - + 本软件由杭州利珀科技开发,用于轮毂型号识别和分类,可搭配流水线运输系统使用 This software is developed by Leaper in Hangzhou. It is used for hub type identification and classification. It can be used with pipeline transportation system - + 若需要进一步了解该产品的相关信息,请访问我们的网站 For more information about this product, please visit our website - + 软件版本 Software Version - + 算法版本 - Algorithm version + Algorithm Version - + 最后更新时间 Last update time - + 版权 (c) 属 杭州利珀科技有限公司 所有 - Copyright(C) belongs to Hangzhou Lipper Technology Co., Ltd. + Copyright(C) belongs to Hangzhou Lipper Technology Company - + 关闭 Shut down @@ -2621,142 +2744,117 @@ p, li { white-space: pre-wrap; } lpSystemConfigUI - + - + 系统语言设置: - + Change Language: - + 语言 - Language + Language - + 图像保存相关: - + Image Save Params: - + 是否保存识别NG抠图 - + Save NG Cut Image - + 是否保存识别OK抠图 - + Save OK Cut Image - + 是否保存识别NG原始图 - + Save NG Src Image - + 是否保存识别OK原始图 - + Save OK Src Image - + 是否保存定位NG原始图 - + Save NG Position Image - + 是否保存定位OK原始图 - + Save OK Position Image - + 图像存储路径: - + Image Save Path: - + 设置 - Setting + Set - + 通讯配置: - + Connection: - + TCP服务端口: - + TcpServer Port: - - webSocket端口: - - - - + 其他: - + Others: - + 本系统标题: - + Title: - + 启动时默认后台运行 - + Auto Run Background - + 关闭主窗口时在后台运行 - - - - - 算法参数: - + Run Background when Close - - 过滤小于 - - - - - 的圆(单位:像素) - - - - - 是否使用图像增强 - - - - + 系统参数已保存且生效!!! - + Apply Successful!! - + 应用 - Use + Apply - + 退出 - + Close Chinese - + English - + diff --git a/tpvs17/tpMain/lpmain_zh.ts b/tpvs17/tpMain/lpmain_zh.ts index b2fe83d..cb76d39 100644 --- a/tpvs17/tpMain/lpmain_zh.ts +++ b/tpvs17/tpMain/lpmain_zh.ts @@ -83,6 +83,104 @@ + + QAlgParamDlg + + + 算法参数设置 + + + + + 圆半径大小过滤: + + + + + 检测背景图更换: + + + + + 查看检测背景 + + + + + 二级圆定位: + + + + + 边缘宽度: + + + + + 从深到浅 + + + + + 从浅到深 + + + + + 边缘对比度: + + + + + 边缘转换: + + + + + 是否使用图像增强 + + + + + 是否使用背景图找圆算法 + + + + + 参数已生效!!! + + + + + 应用 + + + + + 退出 + + + + + 请选择您的背景图 + + + + + 提示 + + + + + 背景图更新完成,请重启本软件. + + + + + 确认 + + + QCamSettingDlg @@ -415,7 +513,7 @@ p, li { white-space: pre-wrap; } - + 缩略图 @@ -440,58 +538,58 @@ p, li { white-space: pre-wrap; } - + 基本操作 - - + + 删除模板 - + 训练当前模板 - + 训练模板 - + 添加新的模板 - + 新建模板 - + 训练所有模板,消耗时间会较长 - + 训练全部 - + 确认修改,每次修改模板的参数后都要确认修改才有效 - + 修改确认 - + 修改型号名 @@ -843,14 +941,6 @@ p, li { white-space: pre-wrap; } - - QSettingDlg - - - QSettingDlg - - - QShowImg @@ -874,7 +964,7 @@ p, li { white-space: pre-wrap; } - + 没有用于检测的背景图,请更换检测背景 @@ -1200,6 +1290,8 @@ p, li { white-space: pre-wrap; } + + 解锁 @@ -1224,20 +1316,18 @@ p, li { white-space: pre-wrap; } - - - - ���� + + Image Files (*.png *.jpg *.bmp) - ѡ���궨ͼ + 选择标定图 - - Image Files (*.png *.jpg *.bmp) + + 上锁 @@ -1258,14 +1348,9 @@ p, li { white-space: pre-wrap; } 状态信息 - - - 识别定位检测 - - - + 开始检测 @@ -1279,18 +1364,12 @@ p, li { white-space: pre-wrap; } 匹配值 - - - 匹配值 - 通道 - - - + 0 @@ -1306,32 +1385,32 @@ p, li { white-space: pre-wrap; } - + 统计结果 - + modelID_detect - + count - + 型号数量 - + 模板管理 - + 数据查询 @@ -1366,345 +1445,378 @@ p, li { white-space: pre-wrap; } - + 识别耗时 - + 分数 - + 型号管理 - + 检测勾选 - + 辅助工具 - + 班次设置 - + 光栅标定 - + IP设置 - - + + 关于 - + 登录 - + 用户管理 - + 系统设置 - - + + 相机配置 - + 定位标定 - - + + 图像标定 - - + + 注册产品 - + + + 算法设置 + + + + 工具 - + 帮助 - - + + 本系统未注册激活 - + 系统时间 - - 用户: - - - - + 历史 - + 停止检测 - + 显示识别结果 - + 获得图像,正在计算中... - + 注 销 - + 登 录 - - - - - - + + + + + + + + + + 提示 - - + + 该功能未启用. - - - - - + + + + + + + + + 确认 - + + 用户: + + + + + Corectrl模块加载失败,请检查! + + + + + camera.json文件出错,请检查! + + + + + lpbengine模块加载失败,请检查! + + + + + lpdesigner模块加载失败,请检查! + + + + 你确定要注销 - - + + 取消 - + 调试工具 - - + + 请停止检测再使用该功能. - + 系统参数设置 - + 注册 - + + 算法参数 + + + + 按下了开始检测按钮,检测功能开启 - + 按下了停止检测按钮,检测功能关闭 - + 将清空所有数据 - + 确定 - + 按下了清零按钮,数据全部清零 - + - + - + - + - + 轮毂型号识别定位一体系统 - - + + 后台运行 - + 退出 - + 显示界面 - + 运行时长: - + 检测中... - - 运行时长: - 模板库发送完成 - - - - + 已停止检测... - - + + 正在检测型号数 - + PLC已收到相关设置参数! - + 已打开 - + 已关闭 - + 本软件由杭州利珀科技开发,用于轮毂型号识别和分类,可搭配流水线运输系统使用 - + 若需要进一步了解该产品的相关信息,请访问我们的网站 - + 软件版本 - + 算法版本 - + 最后更新时间 - + 版权 (c) 属 杭州利珀科技有限公司 所有 - + 关闭 @@ -1717,127 +1829,102 @@ p, li { white-space: pre-wrap; } - + 系统语言设置: - + 语言 - + 图像保存相关: - + 是否保存识别NG抠图 - + 是否保存识别OK抠图 - + 是否保存识别NG原始图 - + 是否保存识别OK原始图 - + 是否保存定位NG原始图 - + 是否保存定位OK原始图 - + 图像存储路径: - + 设置 - + 通讯配置: - + TCP服务端口: - - webSocket端口: - - - - + 其他: - + 本系统标题: - + 启动时默认后台运行 - + 关闭主窗口时在后台运行 - - 算法参数: - - - - - 过滤小于 - - - - - 的圆(单位:像素) - - - - - 是否使用图像增强 - - - - + 系统参数已保存且生效!!! - + 应用 - + 退出 diff --git a/tpvs17/valueMainUI/config.ini b/tpvs17/valueMainUI/config.ini index 72cc841..9a24c15 100644 --- a/tpvs17/valueMainUI/config.ini +++ b/tpvs17/valueMainUI/config.ini @@ -6,3 +6,4 @@ appPathB=E:/wheelValve/Release/runner17_B/Enchanter_B.exe doubleStation=true portA=10110 portB=10111 +serverPort=1000 diff --git a/tpvs17/valueMainUI/lpConfigUI.cpp b/tpvs17/valueMainUI/lpConfigUI.cpp index 24096e9..43a0404 100644 --- a/tpvs17/valueMainUI/lpConfigUI.cpp +++ b/tpvs17/valueMainUI/lpConfigUI.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #pragma execution_character_set("utf-8") /*ϵͳҳ*/ @@ -22,6 +23,10 @@ lpConfigUI::lpConfigUI(QWidget *parent) onInitCheckBox(); connect(ui.checkBox_AutoRun, SIGNAL(stateChanged(int)), this, SLOT(onCheckBoxChanged(int))); connect(ui.checkBox_DesktopShort, SIGNAL(stateChanged(int)), this, SLOT(onCheckBoxChanged(int))); + + ui.comboBox->clear(); + ui.comboBox->addItem(tr("Chinese"), "Chinese"); + ui.comboBox->addItem(tr("English"), "English"); } lpConfigUI::~lpConfigUI() @@ -52,6 +57,11 @@ Q_SLOT void lpConfigUI::onButtonClicked() lpConfig::instance()->saveConfig(); ui.label_5->setVisible(true); m_timerID = startTimer(1000); + + QString strLanguage = ui.comboBox->currentText(); + QSettings languageSetting("hubdetect.ini", QSettings::IniFormat); + languageSetting.setValue("language", strLanguage); + emit sgLanguageChange(strLanguage); emit sgUpdateConfig(); } else if ("pushButton_4" == strObj) @@ -68,6 +78,10 @@ void lpConfigUI::showEvent(QShowEvent *event) ui.lineEdit_BPort->setText(QString("%1").arg(lpConfig::instance()->portB)); ui.checkBox_doubleStation->setChecked(lpConfig::instance()->doubleStation); ui.lineEdit_serverPort->setText(QString("%1").arg(lpConfig::instance()->plcServerPort)); + + QSettings languageSetting("hubdetect.ini", QSettings::IniFormat); + QString strLanguage = languageSetting.value("language", "Chinese").toString(); + ui.comboBox->setCurrentText(strLanguage); } void lpConfigUI::timerEvent(QTimerEvent *event) diff --git a/tpvs17/valueMainUI/lpConfigUI.h b/tpvs17/valueMainUI/lpConfigUI.h index 06ecf54..b66e691 100644 --- a/tpvs17/valueMainUI/lpConfigUI.h +++ b/tpvs17/valueMainUI/lpConfigUI.h @@ -18,6 +18,7 @@ private: Q_SLOT void onCheckBoxChanged(int state); signals: void sgUpdateConfig(); + void sgLanguageChange(QString); protected: Q_SLOT void onButtonClicked(); diff --git a/tpvs17/valueMainUI/valueMainUI.cpp b/tpvs17/valueMainUI/valueMainUI.cpp index d6e2ecc..4141400 100644 --- a/tpvs17/valueMainUI/valueMainUI.cpp +++ b/tpvs17/valueMainUI/valueMainUI.cpp @@ -20,6 +20,13 @@ valueMainUI::valueMainUI(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); + + {//加载语言设置 + QSettings languageSetting("hubdetect.ini", QSettings::IniFormat); + QString strLanguage = languageSetting.value("language", "Chinese").toString(); + SetLanguage(strLanguage); + } + setupTrayIcon();//后台任务栏初始化 setWindowIcon(QIcon(WINDOWICON)); setWindowTitle(tr("识别定位一体检测系统")); @@ -106,6 +113,7 @@ valueMainUI::valueMainUI(QWidget *parent) //子页面初始化 m_pConfigUI = new lpConfigUI();//系统配置 connect(m_pConfigUI, SIGNAL(sgUpdateConfig()), this, SLOT(onUpdateConfig())); + connect(m_pConfigUI, SIGNAL(sgLanguageChange(QString)), this, SLOT(onLanguageChange(QString))); m_pDebugUI = new lpDebugUI();//调试测试 connect(m_pDebugUI, SIGNAL(sgButtonClicked(int)), this, SLOT(onDebugClicked(int))); m_pTcpDebugUI = new QTCPDebugUI();//通讯测试页面 @@ -119,11 +127,7 @@ valueMainUI::valueMainUI(QWidget *parent) connect(m_pPlcDevice, SIGNAL(sgSendDataCallBack(QByteArray)), this, SLOT(onShowSendTcpData(QByteArray))); connect(m_pPlcDevice, SIGNAL(sgRecvDataCallBack(QByteArray)), this, SLOT(onShowRecvTcpData(QByteArray))); } - {//加载语言设置 - QSettings languageSetting("hubdetect.ini", QSettings::IniFormat); - QString strLanguage = languageSetting.value("language", "Chinese").toString(); - SetLanguage(strLanguage); - } + { m_SysTimerID = startTimer(1000);//系统定时刷新定时器 m_timerStartID = startTimer(1000);//启动从机客户端 diff --git a/tpvs17/valueMainUI/valuemainui_en.ts b/tpvs17/valueMainUI/valuemainui_en.ts index a94963c..de29e53 100644 --- a/tpvs17/valueMainUI/valuemainui_en.ts +++ b/tpvs17/valueMainUI/valuemainui_en.ts @@ -8,34 +8,34 @@ 警告 - + Warning A侧检测程序未连接,请检查配置或通讯 - + A application don't connectd,please check connection 关闭 - + Exit B侧检测程序未连接,请检查配置或通讯 - + B application don't connectd,please check connection 本检测系统正在运行,您真的要关闭? - + Are you sure exitd the system? 后台运行 - + Run Background @@ -43,17 +43,17 @@ QTCPDebugUI - + TCP Debug 显示接收数据 - + Show Recv Data 显示发送数据 - + Show Send Data @@ -62,17 +62,17 @@ line item is not created - + line item is already created - + rect item is already created - + @@ -80,103 +80,103 @@ lpConfigUI - + 工位配置: - + Station: A侧检测程序端口: - + A TcpServer Port: A侧检测所在路径: - + A application's path: 设置 - + Set B侧检测程序端口: - + B TcpServer Port: B侧检测所在路径: - + B application's path: 使用双工位 - + Use two Stations 参数已保存!!! - + Apply Successful!!! 应用 - + Apply 退出 - + Close 机台PLC通讯: - + PLC Device: TCP服务端口: - + Local TcpServer Port: 1000 - + 系统相关: - + System: 开机自启动 - + Auto Startup 添加到桌面快捷方式 - + Add Desktop Shortcut 语言: - + Language: 中文 - + Chinese English - + English @@ -184,27 +184,27 @@ lpDebugUI - + A侧触发一次 - + A Triger Once B侧触发一次 - + B Triger Once A侧定时触发 - + A Triger More B侧定时触发 - + B Triger More @@ -212,181 +212,181 @@ 识别定位一体检测系统 - + Identification System A侧连接状态 - + A Connect State B侧连接状态 - + B Connect State PLC连接状态 - + PLC Connect state 时间 - + Time 工具 - + Tool 天 - + D 时 - + H 分 - + M 秒 - + S 型号 %1,定位角度 %2 ° - + Model %1,Angle %2 ° 型号 %1,定位异常 - + Model %1,Positon Error 型号 %1,定位模板未标定 - + Model %1,No Standard 型号 %1,没有相关定位模板 - + 型号 %1,定位模板未标定 型号识别失败 - + Model Error 型号 %1,定位角度 %2° - + Model %1,Angle %2 ° 调试页面 - + Debug Page 系统参数配置页面 - + System Setting 通讯调试页面 - + Tcp Test Page 连接超时,尝试重新连接检测软件 - + Connect TimeOut,try to reconnect A侧设备已连接(检测中) - + A Connected(Detecting) A侧设备已连接(暂停中) - + A Connected(Stop) A侧设备未连接 - + A Disconnect B侧设备已连接(检测中) - + B Connected(Detecting) B侧设备已连接(暂停中) - + B Connected(Stop) B侧设备未连接 - + B Disconnect PLC客户端 %1 - + PLC %1 PLC客户端未连接 - + PLC Disconnect 运行时长: - + Run: 检测系统已离线!!! - + Detection System is off line! 检测系统已在线... - + Detection System is on line... 后台运行 - + Run Background 退出 - + Exit 显示界面 - + Show Widget @@ -394,56 +394,56 @@ valueMainUI - + B侧检测工位 - + B Station 检测结果 - + Result A侧检测工位 - + A Station toolBar - + A侧设置 - + A Setting B侧设置 - + B Setting 系统设置 - + System Setting 调试 - + Debug Tool 通讯调试 - + TCP Test