基础代码更新

This commit is contained in:
rci
2024-09-27 15:54:51 +08:00
parent 845c8f3e7f
commit 4837ca2bde
293 changed files with 320 additions and 79155 deletions
@@ -1,4 +1,4 @@
#include "Hd_CameraModule_3DKeyence.h"
#include "Hd_CameraModule_3DKeyence.h"
#include <exception>
#include <QTextCodec>
@@ -6,16 +6,16 @@
#include <qmutex.h>
const int MAX_LJXA_XDATANUM = 3200;
const unsigned int BUFFER_FULL_COUNT = 30000;
int _imageAvailable[MAX_LJXA_DEVICENUM] = { 0 };
unsigned short* _luminanceBuf[MAX_LJXA_DEVICENUM] = { 0 };
unsigned short* _heightBuf[MAX_LJXA_DEVICENUM] = { 0 };
int _lastImageSizeHeight[MAX_LJXA_DEVICENUM];
//const int MAX_LJXA_XDATANUM = 3200;
//const unsigned int BUFFER_FULL_COUNT = 30000;
//
//int _imageAvailable[MAX_LJXA_DEVICENUM] = { 0 };
//unsigned short* _luminanceBuf[MAX_LJXA_DEVICENUM] = { 0 };
//unsigned short* _heightBuf[MAX_LJXA_DEVICENUM] = { 0 };
//int _lastImageSizeHeight[MAX_LJXA_DEVICENUM];
int imgIndex = 0;
QMutex* m_mutex;
QMutex* m_mutex=nullptr;
QQueue< cv::Mat> heightMatS;//高度图
QQueue<cv::Mat> luminanceMatS;//灰度图
//data == "rest_newProductIn"时要结束run;机台报警,取图超时,复位后重新拍的情况。
@@ -334,62 +334,63 @@ bool Hd_CameraModule_3DKeyence::initParas(QByteArray& initData)
if (getImageTimeOut < 50)
getImageTimeOut = 1000;
}*/
if (valueList[i].contains("ip"))
QString valuei = byteArrayToUnicode(valueList[i]);
if (valuei.contains("ip"))
{
//ip#192.168.0.1
QByteArrayList valueL = valueList[i].split('#');
QStringList valueL = valuei.split("#");
if (valueL.size() == 2)
{
QByteArrayList valueL1 = valueL[1].split('.');
QStringList valueL1 = valueL[1].split(".");
if (valueL1.size() == 4)
{
EthernetConfig.abyIpAddress[0] = valueL.at(0).toInt();
EthernetConfig.abyIpAddress[1] = valueL.at(1).toInt();
EthernetConfig.abyIpAddress[2] = valueL.at(2).toInt();
EthernetConfig.abyIpAddress[3] = valueL.at(3).toInt();
EthernetConfig.abyIpAddress[0] = valueL1.at(0).toInt();
EthernetConfig.abyIpAddress[1] = valueL1.at(1).toInt();
EthernetConfig.abyIpAddress[2] = valueL1.at(2).toInt();
EthernetConfig.abyIpAddress[3] = valueL1.at(3).toInt();
}
}
}
if (valueList[i].contains("port"))
if (valuei.contains("port"))
{
//port#24691
QByteArrayList valueL = valueList[i].split('#');
QStringList valueL = valuei.split('#');
if (valueL.size() == 2)
{
EthernetConfig.wPortNo = valueL[1].toInt();
}
}
if (valueList[i].contains("xImageSize"))
if (valuei.contains("xImageSize"))
{
//xImageSize#1600
QByteArrayList valueL = valueList[i].split('#');
QStringList valueL = valuei.split('#');
if (valueL.size() == 2)
{
xImageSize = valueL[1].toInt();
}
}
if (valueList[i].contains("yImageSize"))
if (valuei.contains("yImageSize"))
{
//yImageSize#2000
QByteArrayList valueL = valueList[i].split('#');
QStringList valueL = valuei.split('#');
if (valueL.size() == 2)
{
yImageSize = valueL[1].toInt();
}
}
if (valueList[i].contains("y_pitch_um"))
if (valuei.contains("y_pitch_um"))
{
//y_pitch_um#40
QByteArrayList valueL = valueList[i].split('#');
QStringList valueL = valuei.split('#');
if (valueL.size() == 2)
{
y_pitch_um = valueL[1].toInt();
y_pitch_um = valueL[1].toDouble();
}
}
if (valueList[i].contains("取图超时"))
if (valuei.contains("取图超时"))
{
//timeout_ms#2900
QByteArrayList valueL = valueList[i].split('#');
QStringList valueL = valuei.split('#');
if (valueL.size() == 2)
{
timeout_ms = valueL[1].toInt();
@@ -485,6 +486,10 @@ bool Hd_CameraModule_3DKeyence::InitHighSpeed()
}
errCode = LJX8IF_StartHighSpeedDataCommunication(deviceId); // 正式开始高速通讯
qDebug() << __FUNCTION__ << " line:" << __LINE__ << " errCode: " << errCode;
//Start HighSpeed
_imageAvailable[deviceId] = 0;
_lastImageSizeHeight[deviceId] = 0;
}
catch (const QString ev)
{
@@ -506,6 +511,8 @@ bool Hd_CameraModule_3DKeyence::run()
try
{
if (_imageAvailable[deviceId] == 0)
{
JumpFlag = false;
errCode = LJX8IF_StartHighSpeedDataCommunication(deviceId); // 正式开始高速通讯
qDebug() << __FUNCTION__ << " line:" << __LINE__ << " errCode: " << errCode;
@@ -551,9 +558,6 @@ bool Hd_CameraModule_3DKeyence::run()
}
int errCode;
//Start HighSpeed
_imageAvailable[deviceId] = 0;
_lastImageSizeHeight[deviceId] = 0;
//StartMeasure(Batch Start)
if (use_external_batchStart > 0)
@@ -579,12 +583,15 @@ bool Hd_CameraModule_3DKeyence::run()
}
if (_imageAvailable[deviceId])
{
qCritical() << " [info] " << __FUNCTION__ << " line:" << __LINE__ <<" deviceId::" << deviceId << " checkImg getImg time" << ts<<" imgIndex" << imgIndex++ ;
qCritical() << " [info] " << __FUNCTION__ << " line:" << __LINE__ << " deviceId::" << deviceId << " checkImg getImg time" << ts << " imgIndex" << imgIndex++;
break;
}
Sleep(1);
}
Sleep(1);
}
if (_imageAvailable[deviceId] != 1)
{
qCritical() << __FUNCTION__ << " line:" << __LINE__ << "_imageAvailable[deviceId] != 1";
@@ -603,6 +610,9 @@ bool Hd_CameraModule_3DKeyence::run()
// KeyModify 20230301 清理控制器里的缓存数据,此处是考虑超时情况下,对数据的清理操作。
errCode = LJX8IF_ClearMemory(deviceId);
qCritical() << __FUNCTION__ << " line:" << __LINE__ << " errCode:" << errCode;
//Start HighSpeed
_imageAvailable[deviceId] = 0;
_lastImageSizeHeight[deviceId] = 0;
return false;
}
qDebug() << __FUNCTION__ << " line:" << __LINE__ << "test";
@@ -648,6 +658,9 @@ bool Hd_CameraModule_3DKeyence::run()
heightMatS.enqueue(cv::Mat(yImageSize, xImageSize, CV_16U, heightImage));
m_mutex->unlock();
qDebug() << __FUNCTION__ << " line:" << __LINE__ << " success to acquire 3d image! camera_name: " << camera_name;
//Start HighSpeed
_imageAvailable[deviceId] = 0;
_lastImageSizeHeight[deviceId] = 0;
return true;
}
catch (QString ev)
@@ -1,4 +1,4 @@
#ifndef Hd_CameraModule_3DKeyence_H
#ifndef Hd_CameraModule_3DKeyence_H
#define Hd_CameraModule_3DKeyence_H
#include <QtCore/qglobal.h>
@@ -31,7 +31,15 @@ typedef struct {
float z_pitch_um;
} LJXA_ACQ_GETPARAM;
const int MAX_LJXA_DEVICENUM = 6;
const int MAX_LJXA_XDATANUM = 3200;
const unsigned int BUFFER_FULL_COUNT = 30000;
static int _imageAvailable[MAX_LJXA_DEVICENUM] = { 0 };
static unsigned short* _luminanceBuf[MAX_LJXA_DEVICENUM] = { 0 };
static unsigned short* _heightBuf[MAX_LJXA_DEVICENUM] = { 0 };
static int _lastImageSizeHeight[MAX_LJXA_DEVICENUM];
class Hd_CameraModule_3DKeyence :public Base
{
@@ -43,18 +51,18 @@ public:
bool readData(std::vector<cv::Mat>& mats, QByteArray& data);
//实例对象把数据写入到类
bool writeData(std::vector<cv::Mat>& mat, QByteArray& data);
bool initParas(QByteArray&);
bool initParas(QByteArray& initData);
bool run();
int LJXA_ACQ_OpenDevice(int lDeviceId, LJX8IF_ETHERNET_CONFIG* EthernetConfig, int HighSpeedPortNo);
int LJXA_ACQ_StartAsync(int lDeviceId, LJXA_ACQ_SETPARAM* setParam);
int LJXA_ACQ_AcquireAsync(int lDeviceId, unsigned short* heightImage, unsigned short* luminanceImage, LJXA_ACQ_SETPARAM* setParam, LJXA_ACQ_GETPARAM* getParam);
//int LJXA_ACQ_StartAsync(int lDeviceId, LJXA_ACQ_SETPARAM* setParam);
//int LJXA_ACQ_AcquireAsync(int lDeviceId, unsigned short* heightImage, unsigned short* luminanceImage, LJXA_ACQ_SETPARAM* setParam, LJXA_ACQ_GETPARAM* getParam);
void LJXA_ACQ_CloseDevice(int lDeviceId);
bool decodeInitData(QByteArray byte,QVector<QByteArray> &vector_data);
bool InitHighSpeed();
private:
int LJXA_ACQ_Acquire(int lDeviceId, unsigned short* heightImage, unsigned short* luminanceImage, LJXA_ACQ_SETPARAM* setParam, LJXA_ACQ_GETPARAM* getParam);
//int LJXA_ACQ_Acquire(int lDeviceId, unsigned short* heightImage, unsigned short* luminanceImage, LJXA_ACQ_SETPARAM* setParam, LJXA_ACQ_GETPARAM* getParam);
LJX8IF_HIGH_SPEED_PRE_START_REQ *startReq_ptr = nullptr;
LJX8IF_PROFILE_INFO *profileInfo_ptr = nullptr;
@@ -69,7 +77,7 @@ private:
int yImageSize = 0; // Number of Y lines.
float y_pitch_um = 0; // Data pitch of Y data. (e.g. your encoder setting)
int timeout_ms = 0; // Timeout value for the acquiring image (in milisecond).
int use_external_batchStart = 0; // Set "1" if you controll the batch start timing externally. (e.g. terminal input) 0内部触发,1外部触发
int use_external_batchStart = 1; // Set "1" if you controll the batch start timing externally. (e.g. terminal input) 0内部触发,1外部触发
std::string outputFilePath1 = "sample_height.csv";
std::string outputFilePath2 = "sample_height.tif";
std::string outputFilePath3 = "sample_luminance.tif";
+9 -8
View File
@@ -1,4 +1,4 @@
#ifndef __BASECLASS_H__
#ifndef __BASECLASS_H__
#define __BASECLASS_H__
#include <iostream>
@@ -16,15 +16,16 @@ public:
bool status = true; //相机状态(判断相机是否断开连接)
std::string paras; //传输数据
std::vector<cv::Mat> m_mat; //传输图片
std::string moduleName; //模块名称
std::string moduleName = ""; //模块名称
public:
Base(){}
virtual ~Base(){}
virtual bool readData(std::vector<cv::Mat>&,QByteArray&){return true;}
virtual bool writeData(std::vector<cv::Mat>&,QByteArray&){return true;}
virtual bool initParas(QByteArray&){return true;}
virtual bool run() {return true;}
Base() {}
virtual ~Base() {}
virtual bool readData(std::vector<cv::Mat>&, QByteArray&) { return true; }
virtual bool writeData(std::vector<cv::Mat>&, QByteArray&) { return true; }
virtual bool initParas(QByteArray&) { return true; }
virtual bool run() { return true; }
virtual bool checkStatus() { return true; }
};