基础代码更新
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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; }
|
||||
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user