Merge remote-tracking branch 'origin/JiZhi'

jizhi
bobpan 5 years ago
commit 8688d31cf6

@ -16,7 +16,7 @@
#define CANDIDATE_CIRCLE_RATIO1 0.25 // 25% -- If only 25% of the circle is detected, it may be a candidate for validation #define CANDIDATE_CIRCLE_RATIO1 0.25 // 25% -- If only 25% of the circle is detected, it may be a candidate for validation
#define CANDIDATE_CIRCLE_RATIO2 0.33 // 33% -- If only 33% of the circle is detected, it may be a candidate for validation #define CANDIDATE_CIRCLE_RATIO2 0.33 // 33% -- If only 33% of the circle is detected, it may be a candidate for validation
#define HALF_CIRCLE_RATIO 0.50 // 50% -- If 50% of a circle is detected at any point during joins, we immediately make it a candidate #define HALF_CIRCLE_RATIO 0.50 // 50% -- If 50% of a circle is detected at any point during joins, we immediately make it a candidate
#define FULL_CIRCLE_RATIO 0.67 // 67% -- If 67% of the circle is detected, we assume that it is fully covered #define FULL_CIRCLE_RATIO 0.87 // 67% -- If 67% of the circle is detected, we assume that it is fully covered
// Ellipse thresholds // Ellipse thresholds
#define CANDIDATE_ELLIPSE_RATIO 0.50 // 50% -- If 50% of the ellipse is detected, it may be candidate for validation #define CANDIDATE_ELLIPSE_RATIO 0.50 // 50% -- If 50% of the ellipse is detected, it may be candidate for validation
@ -217,7 +217,8 @@ private:
int *segmentStartLines; int *segmentStartLines;
BufferManager *bm; BufferManager *bm;
Info *info; //Info *info;
std::vector<Info> info;
NFALUT *nfa; NFALUT *nfa;
void GenerateCandidateCircles(); void GenerateCandidateCircles();

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -159,15 +159,45 @@ QString CAlgorithmFluorescence::bestMatch(const QMap<QString, IWheelModel*>* mod
if (bestName.toUpper() == hubName1) if (bestName.toUpper() == hubName1)
{ {
if (innerCircleNumSum > 1) if (innerCircleNumSum > 1)
{
QStringList modelList = pLocal->defectList;
QString modelName = modelList.takeFirst();
bool bFind = false;
while (modelList.size())
{
if (modelName == hubName1)
{ {
bestName = hubName2; bestName = hubName2;
bFind = true;
break;
}
}
if (!bFind)
{
bestName = QString();
}
} }
} }
else if (bestName.toUpper() == hubName2) else if (bestName.toUpper() == hubName2)
{ {
if (innerCircleNumSum < 2) if (innerCircleNumSum < 2)
{
QStringList modelList = pLocal->defectList;
bool bFind = false;
while (modelList.size())
{
QString modelName = modelList.takeFirst();
if (modelName == hubName1)
{ {
bestName = hubName1; bestName = hubName1;
bFind = true;
break;
}
}
if (!bFind)
{
bestName = QString();
}
} }
} }
@ -216,7 +246,6 @@ QString CAlgorithmFluorescence::bestMatch(const QMap<QString, IWheelModel*>* mod
return bestName; return bestName;
} }
int CAlgorithmFluorescence::IImageAnalysis(class IImageObject* pImgObj, TP_ALGORITHM_OPTION* pOpt, class IDetectorEngine* pDE) int CAlgorithmFluorescence::IImageAnalysis(class IImageObject* pImgObj, TP_ALGORITHM_OPTION* pOpt, class IDetectorEngine* pDE)
{ {
QMutexLocker locker(&mutex); QMutexLocker locker(&mutex);
@ -240,7 +269,7 @@ int CAlgorithmFluorescence::IImageAnalysis(class IImageObject* pImgObj, TP_ALGOR
bool useDiameter = vMap.value("useDiameter", 0).toBool(); bool useDiameter = vMap.value("useDiameter", 0).toBool();
double dD2H = vMap.value("d2h", -1).toDouble(); double dD2H = vMap.value("d2h", -1).toDouble();
int nthreshold = vMap.value("Threshold", 15).toInt(); int nthreshold = vMap.value("Threshold", 15).toInt();
bool bUseBackground = vMap.value("useBackground").toBool(); bool bUseBackground = vMap.value("useBackground",false).toBool();//true 使用背景图抠图 false 不使用背景
if (nthreshold <= 0) if (nthreshold <= 0)
nthreshold = 15; nthreshold = 15;
@ -251,7 +280,7 @@ int CAlgorithmFluorescence::IImageAnalysis(class IImageObject* pImgObj, TP_ALGOR
Mat matBack = getBackGroundImage(pImgObj, bReload);//获取背景图 Mat matBack = getBackGroundImage(pImgObj, bReload);//获取背景图
Mat matMatch;//装载抠图后的图像 Mat matMatch;//装载抠图后的图像
if (IsCutedImg == 0){ if (IsCutedImg == 0){
if (matSrc.size().height != matBack.size().height || matSrc.size().width != matBack.size().width) if (bUseBackground == true && (matSrc.size().height != matBack.size().height || matSrc.size().width != matBack.size().width))
{ {
rltMap.insert("error", 0); rltMap.insert("error", 0);
pImgObj->IVariantMapToUI(rltMap); pImgObj->IVariantMapToUI(rltMap);
@ -262,12 +291,17 @@ int CAlgorithmFluorescence::IImageAnalysis(class IImageObject* pImgObj, TP_ALGOR
bReload = false; bReload = false;
} }
//imageSegementation(matSrc); //imageSegementation(matSrc);
matMatch = ImageProcess::findCircleObject(matSrc, matBack, nthreshold/*15*/, &lCircle/* NULL*/); matMatch = ImageProcess::findCircleObject(matSrc, matBack, bUseBackground, nthreshold/*15*/, &lCircle/* NULL*/);
} }
else{ else{
matMatch = matSrc; matMatch = matSrc;
} }
if (matMatch.empty())
{
rltMap.insert("noCircle", 0);
pImgObj->IVariantMapToUI(rltMap);
return 0;
}
//Mat matMatch = ImageProcess::findCircleObject(matSrc, matBack, 15, NULL/* &lCircle*/); //Mat matMatch = ImageProcess::findCircleObject(matSrc, matBack, 15, NULL/* &lCircle*/);
//double dDiameter = dD2H * matMatch.rows; //double dDiameter = dD2H * matMatch.rows;
double dDiameter = dD2H * lCircle.fRadius * 2; double dDiameter = dD2H * lCircle.fRadius * 2;
@ -295,7 +329,11 @@ int CAlgorithmFluorescence::IImageAnalysis(class IImageObject* pImgObj, TP_ALGOR
pResult->m_dScore = dValue; pResult->m_dScore = dValue;
} }
} }
else { //else {
//}
else if (matMatch.empty())
{
} }
qDebug() << "pull result"; qDebug() << "pull result";
pResult->m_pixSrc = QtCVUtils::cvMatToQPixmap(matSrc);//!>原图像发送值UI 用于保存备份和调试 pResult->m_pixSrc = QtCVUtils::cvMatToQPixmap(matSrc);//!>原图像发送值UI 用于保存备份和调试

@ -41,15 +41,11 @@ Mat findEdge2(const Mat &Src)
return ret; return ret;
} }
#define REAIZE 2 #define REAIZE 2
cv::Mat ImageProcess::findCircleObject(const Mat &src, const Mat& backgroundImg, int nThres /*= 20*/, luffy_base::luffyCircle *pCircle /*= NULL*/) cv::Mat ImageProcess::findCircleObject(const Mat &src, const Mat& backgroundImg, bool useBackgroundFlag, int nThres /*= 20*/, luffy_base::luffyCircle *pCircle /*= NULL*/)
{ {
#ifdef MOTO_DETECT//摩轮型号识别抠图算法 #ifdef MOTO_DETECT//摩轮型号识别抠图算法
if (!useBackgroundFlag)
if (src.empty() || backgroundImg.empty() || src.rows < 500) { {
return Mat();
}
//_EnhanImg_sharpen();
assert(backgroundImg.type() == CV_8UC1);
Mat detectImg; Mat detectImg;
cv::resize(src, detectImg, cv::Size(src.cols / REAIZE, src.rows / REAIZE)); cv::resize(src, detectImg, cv::Size(src.cols / REAIZE, src.rows / REAIZE));
int bBaseX = detectImg.cols; int bBaseX = detectImg.cols;
@ -66,9 +62,9 @@ cv::Mat ImageProcess::findCircleObject(const Mat &src, const Mat& backgroundImg,
{ {
int startX = EDCircle[i].center.x - EDCircle[i].r; int startX = EDCircle[i].center.x - EDCircle[i].r;
int startY = EDCircle[i].center.y - EDCircle[i].r; int startY = EDCircle[i].center.y - EDCircle[i].r;
if (startX < 0 || startY <0) if (startX < 0 || startY < 0)
continue; continue;
if (EDCircle[i].center.x + EDCircle[i].r>bBaseX || EDCircle[i].center.y + EDCircle[i].r>bBaseY) if (EDCircle[i].center.x + EDCircle[i].r > bBaseX || EDCircle[i].center.y + EDCircle[i].r > bBaseY)
continue; continue;
if (EDCircle[i].r > maxR) if (EDCircle[i].r > maxR)
{ {
@ -86,7 +82,7 @@ cv::Mat ImageProcess::findCircleObject(const Mat &src, const Mat& backgroundImg,
if (startX > 0 && startY > 0 && hight > 0 \ if (startX > 0 && startY > 0 && hight > 0 \
&& startX < src.cols &&startY < src.rows \ && startX < src.cols &&startY < src.rows \
&&hight < src.cols&&hight < src.rows \ &&hight < src.cols&&hight < src.rows \
&& startX+hight<src.cols && startY+hight<src.rows) && startX + hight < src.cols && startY + hight < src.rows)
{ {
Mat cutMat = src(Rect(startX, startY, hight, hight)); Mat cutMat = src(Rect(startX, startY, hight, hight));
if (cutMat.data != NULL) if (cutMat.data != NULL)
@ -105,15 +101,23 @@ cv::Mat ImageProcess::findCircleObject(const Mat &src, const Mat& backgroundImg,
//float fScale = src.cols / ALG_RESIZE_IMAGE_WIDTH; //float fScale = src.cols / ALG_RESIZE_IMAGE_WIDTH;
//pCircle->fRadius = hight*1.0 / fScale; //pCircle->fRadius = hight*1.0 / fScale;
pCircle->fRadius = radius * REAIZE; pCircle->fRadius = radius * REAIZE;
//2021-05-10 增加图像大小判断 对超过900像素的图像进行再一次压缩
if (cutMat.cols >= 900 || cutMat.rows >= 900)
{
Mat newCutImg;
cv::resize(cutMat, newCutImg, cv::Size(cutMat.cols / REAIZE, cutMat.rows / REAIZE));
pCircle->fRadius = pCircle->fRadius / REAIZE;
return newCutImg;
}
return cutMat; return cutMat;
} }
} }
} }
return Mat(); return Mat();
}
else
{
if (src.empty() || backgroundImg.empty() || src.rows < 500) { if (src.empty() || backgroundImg.empty() || src.rows < 500) {
return Mat(); return Mat();
} }
@ -129,7 +133,7 @@ cv::Mat ImageProcess::findCircleObject(const Mat &src, const Mat& backgroundImg,
luffy_threshold::Threshold(foregroundImg, imgBinary, nThres);//0421 luffy_threshold::Threshold(foregroundImg, imgBinary, nThres);//0421
Mat dilatedImgBin; Mat dilatedImgBin;
dilate(imgBinary, dilatedImgBin, Mat::ones(21,21, CV_32FC1)); dilate(imgBinary, dilatedImgBin, Mat::ones(21, 21, CV_32FC1));
erode(dilatedImgBin, imgBinary, Mat::ones(21, 21, CV_32FC1)); erode(dilatedImgBin, imgBinary, Mat::ones(21, 21, CV_32FC1));
openOper(imgBinary, Mat::ones(1, 11, CV_32FC1)); openOper(imgBinary, Mat::ones(1, 11, CV_32FC1));
@ -190,7 +194,7 @@ cv::Mat ImageProcess::findCircleObject(const Mat &src, const Mat& backgroundImg,
Mat hit; vector<Point> pts; Mat hit; vector<Point> pts;
luffy_hit::firstHit4Circle(matBinary, hit, pts, pCircle->ptCenter, 0, pCircle->fRadius + 20, 360, luffy_hit::emHitOut2In);//luffy_hit::emHitOut2In luffy_hit::firstHit4Circle(matBinary, hit, pts, pCircle->ptCenter, 0, pCircle->fRadius + 20, 360, luffy_hit::emHitOut2In);//luffy_hit::emHitOut2In
std::map<double, cv::Point> mp; std::map<double, cv::Point> mp;
std::for_each(pts.begin(), pts.end(), [&]( Point p){ std::for_each(pts.begin(), pts.end(), [&](Point p) {
double dis = fabs(luffy_math::disofPoints(pCircle->ptCenter, p)); double dis = fabs(luffy_math::disofPoints(pCircle->ptCenter, p));
mp[dis] = p; mp[dis] = p;
}); });
@ -216,7 +220,7 @@ cv::Mat ImageProcess::findCircleObject(const Mat &src, const Mat& backgroundImg,
pCircle->ptCenter = ptCenter2; pCircle->ptCenter = ptCenter2;
Rect rt(ptCenter2.x - fRadius2 + nOffset, ptCenter2.y - fRadius2 + nOffset, 2 * fRadius2, 2 * fRadius2); Rect rt(ptCenter2.x - fRadius2 + nOffset, ptCenter2.y - fRadius2 + nOffset, 2 * fRadius2, 2 * fRadius2);
if (rt.x < 0 || rt.y < 0 || rt.x + rt.width > matBinary.cols || rt.y + rt.height > matBinary.rows ) { if (rt.x < 0 || rt.y < 0 || rt.x + rt.width > matBinary.cols || rt.y + rt.height > matBinary.rows) {
return Mat(); return Mat();
} }
rt &= Rect(0, 0, matBinary.cols, matBinary.rows); rt &= Rect(0, 0, matBinary.cols, matBinary.rows);
@ -228,6 +232,8 @@ cv::Mat ImageProcess::findCircleObject(const Mat &src, const Mat& backgroundImg,
} }
} }
return dst; return dst;
}
#else//汽轮型号识别抠图算法 #else//汽轮型号识别抠图算法
/* /*
@ -242,13 +248,14 @@ cv::Mat ImageProcess::findCircleObject(const Mat &src, const Mat& backgroundImg,
if (src.empty() || backgroundImg.empty() || src.rows < 500) { if (src.empty() || backgroundImg.empty() || src.rows < 500) {
return Mat(); return Mat();
} }
bool findFlag = false;
/*第一阶梯找圆*/ /*第一阶梯找圆*/
assert(backgroundImg.type() == CV_8UC1); assert(backgroundImg.type() == CV_8UC1);
Mat detectImg; Mat detectImg;
cv::resize(src, detectImg, cv::Size(src.cols / REAIZE, src.rows / REAIZE)); cv::resize(src, detectImg, cv::Size(src.cols / REAIZE, src.rows / REAIZE));
int bBaseX = detectImg.cols; int bBaseX = detectImg.cols;
int bBaseY = detectImg.rows; int bBaseY = detectImg.rows;
Mat upLight_Img = detectImg + 1.5*detectImg;//20200423 修改 对图像进行叠加,增强目标亮度 Mat upLight_Img = detectImg + 1.5 * detectImg;//20200423 修改 对图像进行叠加,增强目标亮度
blur(upLight_Img, upLight_Img, Size(3, 3)); blur(upLight_Img, upLight_Img, Size(3, 3));
EDCircles edcircles(upLight_Img); EDCircles edcircles(upLight_Img);
vector<mCircle> EDCircle = edcircles.getCircles(); vector<mCircle> EDCircle = edcircles.getCircles();
@ -260,7 +267,7 @@ cv::Mat ImageProcess::findCircleObject(const Mat &src, const Mat& backgroundImg,
int startY = EDCircle[i].center.y - EDCircle[i].r; int startY = EDCircle[i].center.y - EDCircle[i].r;
if (startX < 0 || startY <0) if (startX < 0 || startY <0)
continue; continue;
if (EDCircle[i].center.x + EDCircle[i].r>bBaseX || EDCircle[i].center.y + EDCircle[i].r>bBaseY) if (EDCircle[i].center.x + EDCircle[i].r> bBaseX || EDCircle[i].center.y + EDCircle[i].r>bBaseY)
continue; continue;
if (EDCircle[i].r > maxR) if (EDCircle[i].r > maxR)
{ {

@ -21,7 +21,7 @@ public:
ImageProcess(); ImageProcess();
~ImageProcess(); ~ImageProcess();
static cv::Mat findCircleObject(const Mat &src, const Mat& backgroundImg, int nThres = 20, luffy_base::luffyCircle *pCircle = NULL); static cv::Mat findCircleObject(const Mat &src, const Mat& backgroundImg, bool useBackgroundFlag, int nThres = 20, luffy_base::luffyCircle *pCircle = NULL);
static cv::Mat getForeImage(const Mat & src, const Mat &backgroundImg); static cv::Mat getForeImage(const Mat & src, const Mat &backgroundImg);
}; };

@ -53,6 +53,7 @@ void DetectState::init(QString strPath)
m_Debug = detectImage.value("Debug").toInt(1001); m_Debug = detectImage.value("Debug").toInt(1001);
saveGood = detectImage.value("Save_Good").toInt(0); saveGood = detectImage.value("Save_Good").toInt(0);
saveBad = detectImage.value("Save_Bad").toInt(0); saveBad = detectImage.value("Save_Bad").toInt(0);
m_UseBackground = detectImage.value("UseBackground").toInt(0);
saveCutGood = detectImage.value("SaveCut_Good").toInt(0); saveCutGood = detectImage.value("SaveCut_Good").toInt(0);
saveCutBad = detectImage.value("SaveCut_Bad").toInt(0); saveCutBad = detectImage.value("SaveCut_Bad").toInt(0);
m_SaveImgDirPath = detectImage.value("SaveImgPath").toString(); m_SaveImgDirPath = detectImage.value("SaveImgPath").toString();
@ -213,8 +214,10 @@ void DetectState::saveDeteImage()
DetectImage.insert("Save_Bad", saveBad); DetectImage.insert("Save_Bad", saveBad);
DetectImage.insert("Save_Good", saveGood); DetectImage.insert("Save_Good", saveGood);
DetectImage.insert("SaveImgPath",m_SaveImgDirPath); DetectImage.insert("SaveImgPath",m_SaveImgDirPath);
DetectImage.insert("UseBackground", m_UseBackground);
jsMyself.insert("DetectImage", DetectImage); jsMyself.insert("DetectImage", DetectImage);
QJsonObject autosystemobj; QJsonObject autosystemobj;
autosystemobj.insert("AutoSendTick2COM", m_AutoSendTick2COM); autosystemobj.insert("AutoSendTick2COM", m_AutoSendTick2COM);
autosystemobj.insert("AutoSendTick2Net", m_AutoSendTick2Net); autosystemobj.insert("AutoSendTick2Net", m_AutoSendTick2Net);

@ -76,7 +76,7 @@ public:
int m_showThressValue; int m_showThressValue;
int m_showThressList; int m_showThressList;
int m_UseCutImg; int m_UseCutImg;
int m_UseBackground{0};
bool bLockDetect{ false }; bool bLockDetect{ false };
}; };

@ -11,7 +11,7 @@ struct IPConfig
QString m_ClientAddress; QString m_ClientAddress;
int m_ClientPort; int m_ClientPort;
IPConfig(){ IPConfig(){
m_TcpAddress = "192.168.0.240"; m_TcpAddress = "192.168.0.110";
m_ClientAddress = "192.168.0.119"; m_ClientAddress = "192.168.0.119";
m_TcpPort = 2000; m_TcpPort = 2000;
m_ClientPort = 2000; m_ClientPort = 2000;

@ -144,7 +144,6 @@ Q_SLOT void QCamSettingDlg::onButtonClicked()
} }
else if ("m_pbOpen" == strObj) else if ("m_pbOpen" == strObj)
{ {
if (m_pCoreCtl) if (m_pCoreCtl)
{ {
if (tr("关闭") == ui.m_pbOpen->text()) if (tr("关闭") == ui.m_pbOpen->text())

@ -236,6 +236,7 @@ void QSystemSettingDlg::addPicRoot(QTreeWidget *pTreewidget, QString strName)
picitems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("抠图后")))); picitems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("抠图后"))));
picitems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("原图")))); picitems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("原图"))));
picitems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("原图")))); picitems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("原图"))));
picitems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("背景图"))));
picitems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("检测结果")))); picitems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("检测结果"))));
picitems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("图像保存路径")))); picitems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("图像保存路径"))));
picitems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("设置保存路径")))); picitems.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(tr("设置保存路径"))));
@ -266,6 +267,12 @@ void QSystemSettingDlg::addPicRoot(QTreeWidget *pTreewidget, QString strName)
connect(m_saveImgSrc_bad, SIGNAL(stateChanged(int)), this, SLOT(onCheckstateChanged(int))); connect(m_saveImgSrc_bad, SIGNAL(stateChanged(int)), this, SLOT(onCheckstateChanged(int)));
m_saveImgSrc_bad->setChecked(DetectState::instance()->saveBad == (int)true); m_saveImgSrc_bad->setChecked(DetectState::instance()->saveBad == (int)true);
QCheckBox *m_useBackground = new QCheckBox;
m_useBackground->setText(tr("使用背景图"));
m_useBackground->setObjectName("m_useBackground");
connect(m_useBackground, SIGNAL(stateChanged(int)), this, SLOT(onCheckstateChanged(int)));
m_useBackground->setChecked(DetectState::instance()->m_UseBackground == (int)true);
QCheckBox *m_ResAll2A = new QCheckBox; QCheckBox *m_ResAll2A = new QCheckBox;
m_ResAll2A->setText(tr("轮毂全去A通道")); m_ResAll2A->setText(tr("轮毂全去A通道"));
m_ResAll2A->setObjectName("m_ResAll2A"); m_ResAll2A->setObjectName("m_ResAll2A");
@ -295,16 +302,18 @@ void QSystemSettingDlg::addPicRoot(QTreeWidget *pTreewidget, QString strName)
pTreewidget->setItemWidget(picitems.at(2), 1, m_saveImgRes_bad); pTreewidget->setItemWidget(picitems.at(2), 1, m_saveImgRes_bad);
pTreewidget->setItemWidget(picitems.at(3), 1, m_saveImgSrc_good); pTreewidget->setItemWidget(picitems.at(3), 1, m_saveImgSrc_good);
pTreewidget->setItemWidget(picitems.at(4), 1, m_saveImgSrc_bad); pTreewidget->setItemWidget(picitems.at(4), 1, m_saveImgSrc_bad);
pTreewidget->setItemWidget(picitems.at(5), 1, m_ResAll2A); pTreewidget->setItemWidget(picitems.at(5), 1, m_useBackground);
pTreewidget->setItemWidget(picitems.at(6), 1, m_pLbShowPath); pTreewidget->setItemWidget(picitems.at(6), 1, m_ResAll2A);
pTreewidget->setItemWidget(picitems.at(7), 1, pbSetSavePath); pTreewidget->setItemWidget(picitems.at(7), 1, m_pLbShowPath);
pTreewidget->setItemWidget(picitems.at(8), 1, pbOpenImgPath); pTreewidget->setItemWidget(picitems.at(8), 1, pbSetSavePath);
pTreewidget->setItemWidget(picitems.at(9), 1, pSavePara); pTreewidget->setItemWidget(picitems.at(9), 1, pbOpenImgPath);
pTreewidget->setItemWidget(picitems.at(10), 1, pSavePara);
m_listObj.append(pChangeBGbp); m_listObj.append(pChangeBGbp);
m_listObj.append(m_saveImgRes_bad); m_listObj.append(m_saveImgRes_bad);
m_listObj.append(m_saveImgRes_good); m_listObj.append(m_saveImgRes_good);
m_listObj.append(m_saveImgSrc_bad); m_listObj.append(m_saveImgSrc_bad);
m_listObj.append(m_useBackground);
m_listObj.append(m_saveImgSrc_good); m_listObj.append(m_saveImgSrc_good);
m_listObj.append(m_ResAll2A); m_listObj.append(m_ResAll2A);
m_listObj.append(m_pLbShowPath); m_listObj.append(m_pLbShowPath);
@ -322,6 +331,7 @@ void QSystemSettingDlg::addPicRoot(QTreeWidget *pTreewidget, QString strName)
picitems.at(7)->setSizeHint(1, QSize(100, 40)); picitems.at(7)->setSizeHint(1, QSize(100, 40));
picitems.at(8)->setSizeHint(1, QSize(100, 40)); picitems.at(8)->setSizeHint(1, QSize(100, 40));
picitems.at(9)->setSizeHint(1, QSize(100, 40)); picitems.at(9)->setSizeHint(1, QSize(100, 40));
picitems.at(10)->setSizeHint(1, QSize(100, 40));
} }
void QSystemSettingDlg::addPLCRoot(QTreeWidget *pTreewidget, QString strName) void QSystemSettingDlg::addPLCRoot(QTreeWidget *pTreewidget, QString strName)
@ -709,6 +719,9 @@ Q_SLOT void QSystemSettingDlg::onCheckstateChanged(int state)
else if (strObj == "m_saveImgSrc_bad") { else if (strObj == "m_saveImgSrc_bad") {
DetectState::instance()->saveBad = int(state == 2); DetectState::instance()->saveBad = int(state == 2);
} }
else if (strObj == "m_useBackground") {
DetectState::instance()->m_UseBackground = int(state == 2);
}
else if (strObj == "m_ResAll2A") { else if (strObj == "m_ResAll2A") {
DetectState::instance()->m_bObjAll2A = (state == 2 ? true : false); DetectState::instance()->m_bObjAll2A = (state == 2 ? true : false);
} }
@ -839,7 +852,7 @@ Q_SLOT void QSystemSettingDlg::onChangeBG()
QStringList backgroundFile = fileDialog.selectedFiles(); QStringList backgroundFile = fileDialog.selectedFiles();
if (backgroundFile.size() > 0) if (backgroundFile.size() > 0)
{ {
QString DstPath = /*m_pCtrl->appRoot() +*/ "\\user\\background.png"; QString DstPath = QApplication::applicationDirPath()+ "\\user\\background.png";
QString sourcePath = backgroundFile.at(0); QString sourcePath = backgroundFile.at(0);
DstPath.replace("\\", "/"); DstPath.replace("\\", "/");
if (sourcePath == DstPath) { if (sourcePath == DstPath) {

@ -18,14 +18,22 @@
#include "saveimgthread.h" #include "saveimgthread.h"
#include "lpGlobalData.h" #include "lpGlobalData.h"
#include "qpulpewidget.h" #include "qpulpewidget.h"
#define VERSION_HUB "3.0.0.1"
#define VERSION_ALG "3.0.0.1" #include "QZkJsonParser.h"
#define UPDATE_TIME "2021-02-20"
#define VERSION_HUB "3.0.0.2"
#define VERSION_ALG "3.0.0.2"
#define UPDATE_TIME "2021-05-08"
#pragma execution_character_set("utf-8") #pragma execution_character_set("utf-8")
lpMainWin::lpMainWin(QWidget *parent) lpMainWin::lpMainWin(QWidget *parent)
: QMainWindow(parent) : QMainWindow(parent)
{ {
{//加载语言设置
QSettings languageSetting("hubdetect.ini", QSettings::IniFormat);
QString strLanguage = languageSetting.value("language", "Chinese").toString();
SetLanguage(strLanguage);
}
this->setWindowIcon(QIcon(":/image/leaper")); this->setWindowIcon(QIcon(":/image/leaper"));
QMySplashScreen m_screen; QMySplashScreen m_screen;
m_screen.show(); m_screen.show();
@ -82,11 +90,7 @@ lpMainWin::lpMainWin(QWidget *parent)
ui.mainToolBar->addWidget(pbutton); ui.mainToolBar->addWidget(pbutton);
ui.mainToolBar->addAction(ui.action_about); ui.mainToolBar->addAction(ui.action_about);
} }
{//加载语言设置
QSettings languageSetting("hubdetect.ini", QSettings::IniFormat);
QString strLanguage = languageSetting.value("language", "Chinese").toString();
SetLanguage(strLanguage);
}
{ {
m_pLbCurrentTime = new QLabel(tr("系统时间")); m_pLbCurrentTime = new QLabel(tr("系统时间"));
m_pLbBanci = new QLabel(tr("班次信息")); m_pLbBanci = new QLabel(tr("班次信息"));
@ -250,6 +254,10 @@ lpMainWin::lpMainWin(QWidget *parent)
m_timerID = startTimer(1000); m_timerID = startTimer(1000);
//m_PulseTimer.start(1000); //m_PulseTimer.start(1000);
connect(this, SIGNAL(sgAutoExposure()), this, SLOT(onAutoExposure()));
QString strPath = QApplication::applicationDirPath();
readExposureTimeConfig(strPath);
} }
lpMainWin::~lpMainWin() lpMainWin::~lpMainWin()
@ -394,6 +402,8 @@ bool lpMainWin::onInitCoreCtrl()
FuncCallBack_StrImg strImgfunc = std::bind(&lpMainWin::INewCameraImage, this, std::placeholders::_1, std::placeholders::_2); FuncCallBack_StrImg strImgfunc = std::bind(&lpMainWin::INewCameraImage, this, std::placeholders::_1, std::placeholders::_2);
m_pCoreCtrl->IRegisterImageCallBack(strImgfunc); m_pCoreCtrl->IRegisterImageCallBack(strImgfunc);
m_camKey = m_pCoreCtrl->ICameraKeys().first();
return true; return true;
} }
@ -524,16 +534,95 @@ void lpMainWin::INewCameraImage(const QString& camKey, QImage img)
void lpMainWin::IVariantMapToUI(const QString& camKey, const QVariantMap& vMap) void lpMainWin::IVariantMapToUI(const QString& camKey, const QVariantMap& vMap)
{ {
emit(sgShowImgState(tr("显示识别结果"))); emit(sgShowImgState(tr("显示识别结果")));
Result2Ui *pResult = (Result2Ui*)vMap.value("result").toLongLong();
if (pResult == nullptr)
{
pResult = new Result2Ui();
}
// 当没抠出轮毂和NG时自动调整曝光时间重新拍照最多调整的次数为5次
if (m_autoExposureSwitch)
{
if (vMap.contains("noCircle"))
{
if (m_exposureTimeCount == 0)
{
int curExposure = getCurExposureTime();
if (curExposure != m_exposureTimeArray[0])
{
emit(sgShowMsgdlg(tr("当前曝光时间未识别到轮毂!")));
emit sgAutoExposure();
m_exposureTimeCount++;
delete pResult;
return;
}
}
m_exposureTimeCount++;
if (m_exposureTimeCount >= m_exposureTimeArray.size())
{
// m_exposureTimeCount = 0;
emit(sgShowMsgdlg(tr("调整5次曝光时间后依然未能识别到轮毂")));
}
else
{
emit(sgShowMsgdlg(tr("当前曝光时间未识别到轮毂!")));
emit sgAutoExposure();
delete pResult;
return;
}
}
bool ngFlag = (pResult->m_strModel.isEmpty()) && (m_exposureTimeCount < m_exposureTimeArray.size());
if (ngFlag)
{
if (m_exposureTimeCount == 0)
{
int curExposure = getCurExposureTime();
if (curExposure != m_exposureTimeArray[0])
{
emit(sgShowMsgdlg(tr("当前曝光时间未识别到轮毂!")));
emit sgAutoExposure();
pResult->m_strModel = "NG";
saveImage(pResult);
m_exposureTimeCount++;
delete pResult;
return;
}
}
m_exposureTimeCount++;
if (m_exposureTimeCount >= m_exposureTimeArray.size())
{
// m_exposureTimeCount = 0;
emit(sgShowMsgdlg(tr("调整5次曝光时间后依然未能识别到轮毂")));
}
else
{
emit(sgShowMsgdlg(tr("当前曝光时间未识别到轮毂!")));
emit sgAutoExposure();
pResult->m_strModel = "NG";
saveImage(pResult);
delete pResult;
return;
}
}
}
if (vMap.contains("error")) if (vMap.contains("error"))
{ {
m_exposureTimeCount = 0;
emit(sgShowMsgdlg(tr("相机图像和背景图不一样,请更换检测背景!"))); emit(sgShowMsgdlg(tr("相机图像和背景图不一样,请更换检测背景!")));
return; return;
} }
Result2Ui *pResult = (Result2Ui*)vMap.value("result").toLongLong();
onShowResult(pResult); onShowResult(pResult);
if (m_pDebugDlg) { if (m_pDebugDlg) {
m_pDebugDlg->onShowResult(pResult); m_pDebugDlg->onShowResult(pResult);
} }
saveImage(pResult);
if (m_autoExposureSwitch)
{
m_exposureTimeCount = 0;
int exp = m_exposureTimeArray[m_exposureTimeCount];
m_pCoreCtrl->ISetExposureTime(m_camKey, exp);
}
// m_pUi->processResult(pResult); // m_pUi->processResult(pResult);
static int ErrorNum = 0; static int ErrorNum = 0;
if (m_pNet) { if (m_pNet) {
@ -560,6 +649,7 @@ void lpMainWin::IVariantMapToUI(const QString& camKey, const QVariantMap& vMap)
SendResultBee(LIGHT_BEE, 3); SendResultBee(LIGHT_BEE, 3);
} }
} }
if (DetectState::instance()->m_SendDetectStr2Net) if (DetectState::instance()->m_SendDetectStr2Net)
SendResultStr2PLC(pResult);//发送检测结果字符到PLC SendResultStr2PLC(pResult);//发送检测结果字符到PLC
if (DetectState::instance()->m_SendChannelRes2COM) if (DetectState::instance()->m_SendChannelRes2COM)
@ -568,7 +658,6 @@ void lpMainWin::IVariantMapToUI(const QString& camKey, const QVariantMap& vMap)
SendResultChannel2PLC(pResult);//发送检测结果通道到PLC SendResultChannel2PLC(pResult);//发送检测结果通道到PLC
m_pCtrl->saveResult(pResult); m_pCtrl->saveResult(pResult);
saveImage(pResult);
delete pResult; delete pResult;
} }
@ -601,6 +690,7 @@ QVariant lpMainWin::IGetVariantById(int id)
vMap.insert("useDiameter", DetectState::instance()->bUseDiameter); vMap.insert("useDiameter", DetectState::instance()->bUseDiameter);
vMap.insert("Threshold", DetectState::instance()->m_AlgThres); vMap.insert("Threshold", DetectState::instance()->m_AlgThres);
vMap.insert("IsCutImg", DetectState::instance()->m_UseCutImg); vMap.insert("IsCutImg", DetectState::instance()->m_UseCutImg);
vMap.insert("useBackground", DetectState::instance()->m_UseBackground>0?true:false);//使用背景图
void* address = (void*)m_pCtrl->getAllModelMapPtr(); void* address = (void*)m_pCtrl->getAllModelMapPtr();
long long varadr = (long long)address; long long varadr = (long long)address;
@ -1132,7 +1222,11 @@ Q_SLOT void lpMainWin::onTrigRecv(int m_value)
//if (DetectState::instance()->m_CameraTrigeType == 0)//软件触发模式 //if (DetectState::instance()->m_CameraTrigeType == 0)//软件触发模式
{ {
if (DetectState::instance()->IsDetect == true) { if (DetectState::instance()->IsDetect == true) {
//CC_Action(CC_AC_NEXT); // if (m_exposureTimeCount != 0)
// {
// m_pCoreCtrl->ISetExposureTime(m_camKey, m_exposureTimeArray[m_exposureTimeCount]);
// }
onTriggerCam(); onTriggerCam();
qWarning() << "soft ctrol camera :" << "(" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss zzz") << ")"; qWarning() << "soft ctrol camera :" << "(" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss zzz") << ")";
} }
@ -1482,6 +1576,8 @@ void lpMainWin::saveImage(Result2Ui* pRes)
if (pRes == nullptr) if (pRes == nullptr)
return; return;
qDebug() << "satrt tread save Image"; qDebug() << "satrt tread save Image";
QString curExposureTimeStr = QString::number(getCurExposureTime());
QDir testDir; QDir testDir;
bool IsTestDir = testDir.exists(DetectState::instance()->m_SaveImgDirPath); bool IsTestDir = testDir.exists(DetectState::instance()->m_SaveImgDirPath);
if (!IsTestDir) if (!IsTestDir)
@ -1518,6 +1614,7 @@ void lpMainWin::saveImage(Result2Ui* pRes)
QString errorSourceDir = fileSavePath + "\\Error"; QString errorSourceDir = fileSavePath + "\\Error";
filename += QString("_%1_%2_").arg((int)pRes->m_dThickness).arg((int)pRes->m_dDiameter); filename += QString("_%1_%2_").arg((int)pRes->m_dThickness).arg((int)pRes->m_dDiameter);
filename += QDateTime::currentDateTime().toString("hhmmsszzz"); filename += QDateTime::currentDateTime().toString("hhmmsszzz");
filename = filename + "_" + curExposureTimeStr;
if (DetectState::instance()->saveBad == 1) { if (DetectState::instance()->saveBad == 1) {
errorSourceDir += "\\Source"; errorSourceDir += "\\Source";
QString resultpath = errorSourceDir + "\\" + filename + ".png"; QString resultpath = errorSourceDir + "\\" + filename + ".png";
@ -1572,3 +1669,47 @@ Q_SLOT void lpMainWin::onwfPulseTimer()
// frame.data8 = 50; // frame.data8 = 50;
// SendDataToCom(0x43, frame); // SendDataToCom(0x43, frame);
} }
bool lpMainWin::readExposureTimeConfig(const QString& strPath)
{
QString filePath = strPath + "\\config\\exposure.json";
QJsonObject jsonObj = QZkJsonParser::ReadJsonAuto(filePath);
if (jsonObj.empty())
{
qDebug() << "Json file parsing failed!";
return false;
}
QJsonObject exposureObj = jsonObj.value("exposureTime").toObject();
QJsonObject::iterator objIterEnd = exposureObj.end();
for (auto objIter = exposureObj.begin(); objIter != objIterEnd; objIter++)
{
int exposureTime = objIter.value().toInt();
m_exposureTimeArray.emplace_back(exposureTime);
}
m_autoExposureSwitch = jsonObj.value("switch").toInt();
return true;
}
int lpMainWin::getCurExposureTime()
{
TP_CAMERA_OPTION camOpt;
m_pCoreCtrl->IGetCameraOption(m_camKey, camOpt);
return camOpt.exposure;
}
Q_SLOT void lpMainWin::onAutoExposure()
{
if (m_exposureTimeCount >= 0)
{
if (m_exposureTimeArray.size() <= m_exposureTimeCount)
return;
int exp = m_exposureTimeArray[m_exposureTimeCount];
qDebug() << "exp:" << exp;
m_pCoreCtrl->ISetExposureTime(m_camKey, exp);
}
onTriggerCam();
}

@ -61,12 +61,12 @@ signals:
void operate(); void operate();
void sgNetData(int, QVariantMap); void sgNetData(int, QVariantMap);
void sgAutoExposure();
private: private:
Q_SLOT void onLogInOut(QString strName, int level, int state); Q_SLOT void onLogInOut(QString strName, int level, int state);
Q_SLOT void onActionClicked(); Q_SLOT void onActionClicked();
Q_SLOT void onButtonClicked(); Q_SLOT void onButtonClicked();
Q_SLOT void onAutoExposure();
protected: protected:
bool onInitCoreCtrl(); bool onInitCoreCtrl();
@ -189,6 +189,16 @@ private:
int m_timerID{ 0 };//定时器 更新状态栏信息 int m_timerID{ 0 };//定时器 更新状态栏信息
quint64 m_runTimeCount{ 0 }; quint64 m_runTimeCount{ 0 };
private:
int m_exposureTimeCount{ 0 };
QString m_camKey;
std::vector<int> m_exposureTimeArray;
bool m_autoExposureSwitch{false};
bool readExposureTimeConfig(const QString& strPath);
int getCurExposureTime();
}; };
#endif #endif

File diff suppressed because it is too large Load Diff

@ -1238,13 +1238,13 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="42"/> <location filename="QSystemSettingDlg.cpp" line="42"/>
<location filename="QSystemSettingDlg.cpp" line="329"/> <location filename="QSystemSettingDlg.cpp" line="339"/>
<source>PLC</source> <source>PLC</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="43"/> <location filename="QSystemSettingDlg.cpp" line="43"/>
<location filename="QSystemSettingDlg.cpp" line="442"/> <location filename="QSystemSettingDlg.cpp" line="452"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1287,328 +1287,338 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="239"/> <location filename="QSystemSettingDlg.cpp" line="239"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="240"/> <location filename="QSystemSettingDlg.cpp" line="240"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="241"/> <location filename="QSystemSettingDlg.cpp" line="241"/>
<location filename="QSystemSettingDlg.cpp" line="281"/> <source></source>
<source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="242"/> <location filename="QSystemSettingDlg.cpp" line="242"/>
<location filename="QSystemSettingDlg.cpp" line="285"/> <location filename="QSystemSettingDlg.cpp" line="288"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="243"/> <location filename="QSystemSettingDlg.cpp" line="243"/>
<location filename="QSystemSettingDlg.cpp" line="292"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="QSystemSettingDlg.cpp" line="244"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="246"/> <location filename="QSystemSettingDlg.cpp" line="247"/>
<location filename="QSystemSettingDlg.cpp" line="258"/> <location filename="QSystemSettingDlg.cpp" line="259"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="252"/> <location filename="QSystemSettingDlg.cpp" line="253"/>
<location filename="QSystemSettingDlg.cpp" line="264"/> <location filename="QSystemSettingDlg.cpp" line="265"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="270"/> <location filename="QSystemSettingDlg.cpp" line="271"/>
<source>使</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="QSystemSettingDlg.cpp" line="277"/>
<source>A</source> <source>A</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="275"/> <location filename="QSystemSettingDlg.cpp" line="282"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="289"/> <location filename="QSystemSettingDlg.cpp" line="296"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="332"/> <location filename="QSystemSettingDlg.cpp" line="342"/>
<location filename="QSystemSettingDlg.cpp" line="483"/> <location filename="QSystemSettingDlg.cpp" line="493"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="333"/> <location filename="QSystemSettingDlg.cpp" line="343"/>
<source>(ms)</source> <source>(ms)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="334"/> <location filename="QSystemSettingDlg.cpp" line="344"/>
<source>(ms)</source> <source>(ms)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="335"/> <location filename="QSystemSettingDlg.cpp" line="345"/>
<source>(ms)</source> <source>(ms)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="336"/> <location filename="QSystemSettingDlg.cpp" line="346"/>
<source>(ms)</source> <source>(ms)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="337"/> <location filename="QSystemSettingDlg.cpp" line="347"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="338"/> <location filename="QSystemSettingDlg.cpp" line="348"/>
<source>(ms)</source> <source>(ms)</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="339"/> <location filename="QSystemSettingDlg.cpp" line="349"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="340"/> <location filename="QSystemSettingDlg.cpp" line="350"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="341"/> <location filename="QSystemSettingDlg.cpp" line="351"/>
<location filename="QSystemSettingDlg.cpp" line="393"/> <location filename="QSystemSettingDlg.cpp" line="403"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="342"/> <location filename="QSystemSettingDlg.cpp" line="352"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="344"/> <location filename="QSystemSettingDlg.cpp" line="354"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="382"/> <location filename="QSystemSettingDlg.cpp" line="392"/>
<source>n</source> <source>n</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="386"/> <location filename="QSystemSettingDlg.cpp" line="396"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="387"/> <location filename="QSystemSettingDlg.cpp" line="397"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="394"/> <location filename="QSystemSettingDlg.cpp" line="404"/>
<source>PLC</source> <source>PLC</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="400"/> <location filename="QSystemSettingDlg.cpp" line="410"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="401"/> <location filename="QSystemSettingDlg.cpp" line="411"/>
<source>便</source> <source>便</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="445"/> <location filename="QSystemSettingDlg.cpp" line="455"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="446"/> <location filename="QSystemSettingDlg.cpp" line="456"/>
<source>绿</source> <source>绿</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="447"/> <location filename="QSystemSettingDlg.cpp" line="457"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="448"/> <location filename="QSystemSettingDlg.cpp" line="458"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="450"/> <location filename="QSystemSettingDlg.cpp" line="460"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="451"/> <location filename="QSystemSettingDlg.cpp" line="461"/>
<source>绿</source> <source>绿</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="452"/> <location filename="QSystemSettingDlg.cpp" line="462"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="453"/> <location filename="QSystemSettingDlg.cpp" line="463"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="479"/> <location filename="QSystemSettingDlg.cpp" line="489"/>
<source>使</source> <source>使</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="484"/> <location filename="QSystemSettingDlg.cpp" line="494"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="485"/> <location filename="QSystemSettingDlg.cpp" line="495"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="486"/> <location filename="QSystemSettingDlg.cpp" line="496"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="487"/> <location filename="QSystemSettingDlg.cpp" line="497"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="488"/> <location filename="QSystemSettingDlg.cpp" line="498"/>
<location filename="QSystemSettingDlg.cpp" line="520"/> <location filename="QSystemSettingDlg.cpp" line="530"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="489"/> <location filename="QSystemSettingDlg.cpp" line="499"/>
<location filename="QSystemSettingDlg.cpp" line="526"/> <location filename="QSystemSettingDlg.cpp" line="536"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="490"/> <location filename="QSystemSettingDlg.cpp" line="500"/>
<location filename="QSystemSettingDlg.cpp" line="532"/> <location filename="QSystemSettingDlg.cpp" line="542"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="491"/> <location filename="QSystemSettingDlg.cpp" line="501"/>
<location filename="QSystemSettingDlg.cpp" line="538"/> <location filename="QSystemSettingDlg.cpp" line="548"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="492"/> <location filename="QSystemSettingDlg.cpp" line="502"/>
<location filename="QSystemSettingDlg.cpp" line="544"/> <location filename="QSystemSettingDlg.cpp" line="554"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="493"/> <location filename="QSystemSettingDlg.cpp" line="503"/>
<source>使</source> <source>使</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="494"/> <location filename="QSystemSettingDlg.cpp" line="504"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="495"/> <location filename="QSystemSettingDlg.cpp" line="505"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="496"/> <location filename="QSystemSettingDlg.cpp" line="506"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="497"/> <location filename="QSystemSettingDlg.cpp" line="507"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="498"/> <location filename="QSystemSettingDlg.cpp" line="508"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="550"/> <location filename="QSystemSettingDlg.cpp" line="560"/>
<source>使</source> <source>使</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="556"/> <location filename="QSystemSettingDlg.cpp" line="566"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="562"/> <location filename="QSystemSettingDlg.cpp" line="572"/>
<source>使</source> <source>使</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="568"/> <location filename="QSystemSettingDlg.cpp" line="578"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="574"/> <location filename="QSystemSettingDlg.cpp" line="584"/>
<location filename="QSystemSettingDlg.cpp" line="580"/> <location filename="QSystemSettingDlg.cpp" line="590"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="585"/> <location filename="QSystemSettingDlg.cpp" line="595"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="834"/> <location filename="QSystemSettingDlg.cpp" line="847"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="863"/> <location filename="QSystemSettingDlg.cpp" line="876"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="863"/> <location filename="QSystemSettingDlg.cpp" line="876"/>
<source>.</source> <source>.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="865"/> <location filename="QSystemSettingDlg.cpp" line="878"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="QSystemSettingDlg.cpp" line="983"/> <location filename="QSystemSettingDlg.cpp" line="996"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -2069,7 +2079,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="lpMainWin.ui" line="252"/> <location filename="lpMainWin.ui" line="252"/>
<location filename="lpMainWin.cpp" line="798"/> <location filename="lpMainWin.cpp" line="800"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -2131,7 +2141,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="lpMainWin.ui" line="645"/> <location filename="lpMainWin.ui" line="645"/>
<location filename="lpMainWin.cpp" line="93"/> <location filename="lpMainWin.cpp" line="94"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -2167,7 +2177,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="lpMainWin.ui" line="872"/> <location filename="lpMainWin.ui" line="872"/>
<location filename="lpMainWin.cpp" line="745"/> <location filename="lpMainWin.cpp" line="747"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -2203,7 +2213,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="lpMainWin.ui" line="970"/> <location filename="lpMainWin.ui" line="970"/>
<location filename="lpMainWin.cpp" line="689"/> <location filename="lpMainWin.cpp" line="691"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -2224,282 +2234,282 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="lpMainWin.ui" line="1026"/> <location filename="lpMainWin.ui" line="1026"/>
<location filename="lpMainWin.cpp" line="771"/> <location filename="lpMainWin.cpp" line="773"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="33"/> <location filename="lpMainWin.cpp" line="38"/>
<source>.....</source> <source>.....</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="78"/> <location filename="lpMainWin.cpp" line="83"/>
<location filename="lpMainWin.cpp" line="79"/> <location filename="lpMainWin.cpp" line="84"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="91"/> <location filename="lpMainWin.cpp" line="92"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="92"/> <location filename="lpMainWin.cpp" line="93"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="94"/> <location filename="lpMainWin.cpp" line="95"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="151"/> <location filename="lpMainWin.cpp" line="152"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="166"/> <location filename="lpMainWin.cpp" line="167"/>
<source>...</source> <source>...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="223"/> <location filename="lpMainWin.cpp" line="224"/>
<location filename="lpMainWin.cpp" line="789"/> <location filename="lpMainWin.cpp" line="791"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="526"/> <location filename="lpMainWin.cpp" line="527"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="529"/> <location filename="lpMainWin.cpp" line="530"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="553"/> <location filename="lpMainWin.cpp" line="554"/>
<source>!!!%1</source> <source>!!!%1</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="555"/> <location filename="lpMainWin.cpp" line="556"/>
<source>,</source> <source>,</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="582"/> <location filename="lpMainWin.cpp" line="583"/>
<source>,...</source> <source>,...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="628"/> <location filename="lpMainWin.cpp" line="630"/>
<source> </source> <source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="633"/> <location filename="lpMainWin.cpp" line="635"/>
<source> </source> <source> </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="653"/> <location filename="lpMainWin.cpp" line="655"/>
<location filename="lpMainWin.cpp" line="665"/> <location filename="lpMainWin.cpp" line="667"/>
<location filename="lpMainWin.cpp" line="680"/> <location filename="lpMainWin.cpp" line="682"/>
<location filename="lpMainWin.cpp" line="806"/> <location filename="lpMainWin.cpp" line="808"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="653"/> <location filename="lpMainWin.cpp" line="655"/>
<location filename="lpMainWin.cpp" line="680"/> <location filename="lpMainWin.cpp" line="682"/>
<source>.</source> <source>.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="655"/> <location filename="lpMainWin.cpp" line="657"/>
<location filename="lpMainWin.cpp" line="667"/> <location filename="lpMainWin.cpp" line="669"/>
<location filename="lpMainWin.cpp" line="682"/> <location filename="lpMainWin.cpp" line="684"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="665"/> <location filename="lpMainWin.cpp" line="667"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="668"/> <location filename="lpMainWin.cpp" line="670"/>
<location filename="lpMainWin.cpp" line="808"/> <location filename="lpMainWin.cpp" line="810"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="708"/> <location filename="lpMainWin.cpp" line="710"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="719"/> <location filename="lpMainWin.cpp" line="721"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="758"/> <location filename="lpMainWin.cpp" line="760"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="791"/> <location filename="lpMainWin.cpp" line="793"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="799"/> <location filename="lpMainWin.cpp" line="801"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="806"/> <location filename="lpMainWin.cpp" line="808"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="807"/> <location filename="lpMainWin.cpp" line="809"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="814"/> <location filename="lpMainWin.cpp" line="816"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="845"/> <location filename="lpMainWin.cpp" line="847"/>
<source>:</source> <source>:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="848"/> <location filename="lpMainWin.cpp" line="850"/>
<source>:</source> <source>:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="855"/> <location filename="lpMainWin.cpp" line="857"/>
<source>:</source> <source>:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="855"/> <location filename="lpMainWin.cpp" line="857"/>
<source>...</source> <source>...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="855"/> <location filename="lpMainWin.cpp" line="857"/>
<source>...</source> <source>...</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="870"/> <location filename="lpMainWin.cpp" line="872"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="870"/> <location filename="lpMainWin.cpp" line="872"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="884"/> <location filename="lpMainWin.cpp" line="886"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="934"/> <location filename="lpMainWin.cpp" line="936"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="961"/> <location filename="lpMainWin.cpp" line="963"/>
<location filename="lpMainWin.cpp" line="986"/> <location filename="lpMainWin.cpp" line="988"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="1036"/> <location filename="lpMainWin.cpp" line="1038"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="1040"/> <location filename="lpMainWin.cpp" line="1042"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="1093"/> <location filename="lpMainWin.cpp" line="1095"/>
<source>PLC</source> <source>PLC</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="1147"/> <location filename="lpMainWin.cpp" line="1149"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="1149"/> <location filename="lpMainWin.cpp" line="1151"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="1263"/> <location filename="lpMainWin.cpp" line="1265"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="1264"/> <location filename="lpMainWin.cpp" line="1266"/>
<source>线使</source> <source>线使</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="1265"/> <location filename="lpMainWin.cpp" line="1267"/>
<source>访</source> <source>访</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="1266"/> <location filename="lpMainWin.cpp" line="1268"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="1267"/> <location filename="lpMainWin.cpp" line="1269"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="1268"/> <location filename="lpMainWin.cpp" line="1270"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="1269"/> <location filename="lpMainWin.cpp" line="1271"/>
<source> (c) </source> <source> (c) </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="1278"/> <location filename="lpMainWin.cpp" line="1280"/>
<source></source> <source></source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="1436"/> <location filename="lpMainWin.cpp" line="1438"/>
<source>()</source> <source>()</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="lpMainWin.cpp" line="1441"/> <location filename="lpMainWin.cpp" line="1443"/>
<source> 1000</source> <source> 1000</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

Loading…
Cancel
Save