备份
This commit is contained in:
+13
-1
@@ -20,6 +20,18 @@ struct showImgPack{
|
||||
showImgPack() {};
|
||||
showImgPack(QString name,QString type) : type(type), name(name) {}
|
||||
};
|
||||
|
||||
enum valueType {
|
||||
finsInt,
|
||||
finsFloat
|
||||
};
|
||||
|
||||
struct PlcValueViewerStruct {
|
||||
QString valueName;
|
||||
int valueAddr;
|
||||
valueType type;
|
||||
};
|
||||
|
||||
class qtFuncBridge : public QObject {
|
||||
Q_OBJECT
|
||||
signals:
|
||||
@@ -66,7 +78,7 @@ signals:
|
||||
|
||||
//排障
|
||||
void runCommand_addBtn(const QString& btnName, const QString& tip, const QString& uuid);
|
||||
void runCommand_addPlcValueViewer(const QString& groupName,std::vector<std::pair<QString, int>> viewerNameAndAddress);
|
||||
void runCommand_addPlcValueViewer(const QString& groupName,std::vector<PlcValueViewerStruct> viewerNameAndAddress);
|
||||
void runCommand_refeshPlcValueViewer(int address,int value);
|
||||
|
||||
//性能监测
|
||||
|
||||
+2
-2
@@ -231,7 +231,7 @@ public:
|
||||
evaluate(i, byteArray);}, "");
|
||||
//注册清除完成信号触发器 任意触发地址归零时触发一次
|
||||
_serviceManager->_triggerManager->registerCallback(address[i].triggerAddr, 0, [this, i](int triggerPos, int triggerValue, QByteArray& byteArray) {
|
||||
_serviceManager->_triggerManager->writeShort("D" + address[0].completeAddr + "_0"); }, "D" + address[0].completeAddr.toStdString() + "清零");
|
||||
_serviceManager->_triggerManager->writeShort("D" + address[i].completeAddr + "_0"); }, "D" + address[0].completeAddr.toStdString() + "清零");
|
||||
}
|
||||
for (int i = 0; i < address.size(); i++) {
|
||||
_serviceManager->_triggerManager->registerPlcValueViewer(viewerNameIN + "_" + QString::number(i),
|
||||
@@ -246,7 +246,7 @@ public:
|
||||
}
|
||||
//获取图片并进行检测
|
||||
void evaluate(int batteryOffset, QByteArray& byteArray) {
|
||||
_serviceManager->_triggerManager->writeShort("D" + address[0].completeAddr + "_1");//完成信号 固定只发在第0位
|
||||
_serviceManager->_triggerManager->writeShort("D" + address[batteryOffset].completeAddr + "_1");//完成信号 根据偏移发送
|
||||
std::string sn = _serviceManager->_triggerManager->readSnFromQByteArray(byteArray, address[batteryOffset].snAddr, false, false, -1);
|
||||
auto camera = _serviceManager->_cameraManager->getCamera(cameraName);
|
||||
camera->clearCache();
|
||||
|
||||
@@ -181,15 +181,7 @@ public:
|
||||
#pragma endregion
|
||||
#pragma region 接收数据
|
||||
void reciveCommond();
|
||||
//int read(int dmPos, QByteArray byte)
|
||||
//{
|
||||
// int triggerPos = (dmPos - startPos) * 2;
|
||||
// if (byte.size() < triggerPos)
|
||||
// return false;
|
||||
// int val1 = byte.at(triggerPos) * 256;
|
||||
// int val2 = static_cast<unsigned char>(byte.at(triggerPos + 1));
|
||||
// return val1 + val2;
|
||||
//}
|
||||
|
||||
QVariant read(int dmPos) {
|
||||
QByteArray readByte;
|
||||
mutex.lock();
|
||||
@@ -393,12 +385,12 @@ public:
|
||||
}
|
||||
|
||||
//SUB
|
||||
void registerPlcValueViewer(const QString& groupName, const std::vector<std::pair<QString, int>>& viewerNameAndAddress) {
|
||||
for (auto& data : viewerNameAndAddress) {
|
||||
if (data.second < 0)continue;
|
||||
plcValueViewerDatas.push_back({ data.second, -1 });
|
||||
void registerPlcValueViewer(const QString& groupName, const std::vector<PlcValueViewerStruct>& plcViewerDatas) {
|
||||
for (auto& data : plcViewerDatas) {
|
||||
if (data.valueAddr < 0)continue;
|
||||
plcValueViewerDatas.push_back({ data.valueAddr, -1 });
|
||||
}
|
||||
emit bridge->runCommand_addPlcValueViewer(groupName, viewerNameAndAddress);
|
||||
emit bridge->runCommand_addPlcValueViewer(groupName, plcViewerDatas);
|
||||
}
|
||||
void checkPlcValueViewer(readAllStruct& _struct, QByteArray& byteArray) {
|
||||
QMutexLocker locer(&mutex);
|
||||
|
||||
@@ -9,7 +9,7 @@ public:
|
||||
QFont font2 = QFont("微软雅黑", 10, QFont::Bold);
|
||||
QFont font3 = QFont("微软雅黑", 6, QFont::Bold);
|
||||
plcValueViewer(const QString& groupNameIN,
|
||||
const std::vector<std::pair<QString, int>>& viewerNameAndAddress,
|
||||
const std::vector<PlcValueViewerStruct>& viewerNameAndAddress,
|
||||
QMap<int, std::vector<QLabel*>>& plcViwerLineedits)
|
||||
:groupName(groupNameIN){
|
||||
|
||||
@@ -20,7 +20,7 @@ public:
|
||||
|
||||
layout->addWidget(groupNameLabel);
|
||||
for (auto& data : viewerNameAndAddress) {
|
||||
plcViwerLineedits[data.second].push_back(addViewer(data.first));
|
||||
plcViwerLineedits[data.valueAddr].push_back(addViewer(data.valueName));
|
||||
}
|
||||
widget->setMaximumHeight(100);
|
||||
}
|
||||
@@ -91,13 +91,13 @@ public slots:
|
||||
}
|
||||
});
|
||||
}
|
||||
void addPlcValueViewer(const QString& groupName,std::vector<std::pair<QString, int>> viewerNameAndAddress) {
|
||||
void addPlcValueViewer(const QString& groupName,std::vector<PlcValueViewerStruct> viewerNameAndAddress) {
|
||||
auto widget = new plcValueViewer(groupName, viewerNameAndAddress, plcViwerLineedits);
|
||||
plcValueViewerLayout->addWidget(widget->widget,Qt::AlignTop);
|
||||
}
|
||||
void refreshPlcValueViewer(int address, int value) {
|
||||
void refreshPlcValueViewer(int address, QVariant value) {
|
||||
for (auto& lineedit : plcViwerLineedits[address]) {
|
||||
lineedit->setText(QString::number(value));
|
||||
lineedit->setText(value.toString());
|
||||
}
|
||||
}
|
||||
private:
|
||||
|
||||
@@ -215,7 +215,7 @@ int main(int argc, char* argv[])
|
||||
qRegisterMetaType<cv::Mat>("mat");
|
||||
qRegisterMetaType<std::vector<std::string>>("vectorstring");
|
||||
qRegisterMetaType<std::vector<std::pair<QString, int>>>("constvpqi");
|
||||
|
||||
qRegisterMetaType<PlcValueViewerStruct>("PlcValueViewerStruct");
|
||||
#pragma endregion
|
||||
QApplication a(argc, argv);
|
||||
_core.initDatabase(); // 初始化数据库
|
||||
|
||||
@@ -6,8 +6,9 @@ void exceptionResume(std::shared_ptr<detData> data, canyeParams* _detParams, sx_
|
||||
data->oriImgs[0].copyTo(Paint);
|
||||
if (Paint.channels() == 1)
|
||||
cvtColor(Paint, Paint, cv::COLOR_GRAY2BGR);
|
||||
TextRendererZH textPainter(Paint.cols, Paint.rows, 15);
|
||||
textPainter.putText(Paint, "NG", cv::Point(1000, 50), cv::Scalar(0, 255, 0));
|
||||
|
||||
TextRendererZH textPainter(Paint.cols, Paint.rows, 300);
|
||||
textPainter.putText(Paint, why.toStdString(), cv::Point(500, 50), cv::Scalar(0, 255, 0));
|
||||
cv::resize(Paint, Paint, cv::Size(), 0.5, 0.5);
|
||||
data->resultImgs.push_back(Paint);
|
||||
data->service->_triggerManager->writeShort("D" + address.resultAddr + "_1");//结果反馈
|
||||
@@ -26,6 +27,7 @@ bool yizhuCanYe(std::shared_ptr<detData> data, canyeParams* _detParams, sx_581_a
|
||||
QByteArray plcResult = "1";
|
||||
QString detResult = "OK";
|
||||
cv::Mat sourceImg = data->oriImgs[0];
|
||||
//sourceImg = cv::imread("D://readSnEmpty13-12-30-14Camera1_13-12-32-38_Count0.bmp");
|
||||
cv::Mat Paint;
|
||||
sourceImg.copyTo(Paint);
|
||||
|
||||
@@ -40,6 +42,10 @@ bool yizhuCanYe(std::shared_ptr<detData> data, canyeParams* _detParams, sx_581_a
|
||||
//cv::resize(workImg, workImg, cv::Size(), 0.25, 0.25);
|
||||
cv::Mat dingWeiResultImg = ~_detParams->segDingWei->Evaluate(workImg);
|
||||
cv::Rect dingWeiRect = findMaxAreaContour(dingWeiResultImg);
|
||||
if (dingWeiRect.x == 0 && dingWeiRect.y == 0 || dingWeiRect.width < 10 || dingWeiRect.height < 10) {
|
||||
exceptionResume(data, _detParams, address, "定位注液孔失败");
|
||||
return true;
|
||||
}
|
||||
cv::Point2f center(dingWeiRect.x + dingWeiRect.width / 2, dingWeiRect.y + dingWeiRect.height / 2);
|
||||
cv::Mat centerImg;
|
||||
cv::Rect cutArea = cv::Rect(center.x - 64, center.y - 64, 128, 128);
|
||||
@@ -47,14 +53,15 @@ bool yizhuCanYe(std::shared_ptr<detData> data, canyeParams* _detParams, sx_581_a
|
||||
////////////////////////////////////
|
||||
int res = 0;
|
||||
res = _detParams->clsCanYe->Evaluate(centerImg);
|
||||
data->segOriginImgs.push_back(centerImg);
|
||||
if (res == 0){
|
||||
|
||||
cv::putText(Paint, "OK", cv::Point(Paint.cols - 500, 0), 10,10,cv::Scalar(0, 255, 0));
|
||||
cv::putText(Paint, "OK", cv::Point(100, 500), 1,20,cv::Scalar(0, 255, 0), 10);
|
||||
cv::rectangle(Paint, cv::Rect(cutArea.x * 4, cutArea.y * 4, cutArea.width * 4, cutArea.height * 4), cv::Scalar(0, 255, 0), 3);
|
||||
}
|
||||
else{
|
||||
|
||||
cv::putText(Paint, "NG", cv::Point(Paint.cols - 500, 0), 10, 10, cv::Scalar(0, 255, 0));
|
||||
cv::putText(Paint, "NG", cv::Point(100, 500), 1, 20, cv::Scalar(0, 255, 0), 10);
|
||||
cv::rectangle(Paint, cv::Rect(cutArea.x * 4, cutArea.y * 4, cutArea.width * 4, cutArea.height * 4), cv::Scalar(0, 0, 255), 3);
|
||||
plcResult = "2";
|
||||
data->aiDetOK = false;
|
||||
|
||||
@@ -12,7 +12,7 @@ public:
|
||||
handdleAI::pSegmentation* segDanYe = nullptr;
|
||||
handdleAI::pClassification* clsCanYe = nullptr;
|
||||
bool YiZhu = true;
|
||||
bool DOGLIVE = false;
|
||||
bool DOGLIVE = true;
|
||||
};
|
||||
|
||||
bool yizhuCanYe(std::shared_ptr <detData> data, canyeParams* _detParams, sx_581_address address);
|
||||
@@ -32,9 +32,9 @@ public:
|
||||
for (auto¶m : canyeDetParams) {
|
||||
if (param.DOGLIVE == false)
|
||||
continue;
|
||||
param.segDingWei = handdleAI::CreateSegObjS("./handleaiModels/canye/pSeg_DingWei.BHD", 16, 0);
|
||||
param.segDanYe = handdleAI::CreateSegObjS("./handleaiModels/canye/pSeg_CanYe.BHD", 16, 0);
|
||||
param.clsCanYe = handdleAI::CreateClsObjV3("./handleaiModels/canye/pCls_CanYe.BHD", 0, 1);
|
||||
param.segDingWei = handdleAI::CreateSegObjS("./handleaiModels/yiCiZhuYe/pSeg_DingWei.BHD", 16, 0);
|
||||
param.segDanYe = handdleAI::CreateSegObjS("./handleaiModels/yiCiZhuYe/pSeg_CanYe.BHD", 16, 0);
|
||||
param.clsCanYe = handdleAI::CreateClsObjV3("./handleaiModels/yiCiZhuYe/pCls_CanYe.BHD", 0, 1);
|
||||
}
|
||||
initOnce = true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user