This commit is contained in:
2025-10-17 17:55:45 +08:00
parent ee6f767c42
commit cecda7ccd7
7 changed files with 42 additions and 31 deletions
+13 -1
View File
@@ -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
View File
@@ -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();
+6 -14
View File
@@ -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:
+1 -1
View File
@@ -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&param : 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;
}