案例分享:康标达(Computar)工业镜头调试工具v1.0.0(支持搜索打开镜头,获取设备信息,初始化,设置缩放、对焦、光圈和滤镜相关属性)

需求

  1.搜索镜头,打开镜头,关闭镜头;
  2.获取镜头所有信息,协议版本、固件版本、修订版本、I2C地址、镜头型号、温度;
  3.获取设备支持的功能,是否支持缩放、对焦、光圈、滤镜等功能;
  4.打开设备后,判断是否已初始化,不必每次打开都初始化对应功能,避免调整已经设置好的位置;
  5.支持的功能,可获取所有属性和对应的动态属性,上下限制;
  6.支持的功能,可动态获取对应的设置值;
  7.支持的功能,可设置步长,目标地址,电机速度,补偿开关等;
  8.高度封装的模块化设计,子线程异步交互;
  9.完整的日志信息,记录每次操作;
  10.高度完善的封装类,脱离设备驱动层;

 

相关博客

  《康标达工业镜头开发笔记(一):康标达(Computar)工业镜头介绍、搭建SDK基础环境》

 

Demo_v1.0.0

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述

工具运行包下载地址

  QQ技术群,找到博主群,加进Q群,点击“文件”搜索“lensTool”,群内与博文同步更新)

 

模块化

  在这里插入图片描述

 

Demo关键源码

LenManager.pri

INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD

HEADERS += \
    $$PWD/LensManager.h \
    $$PWD/lensCommon.h

SOURCES += \
    $$PWD/LensManager.cpp

# 镜头sdk
LENS_SDK_DIR = $$PWD/lensSdkX64
INCLUDEPATH += $$LENS_SDK_DIR/include

LIBS += -L$$LENS_SDK_DIR/lib
LIBS += -lSLABHIDtoSMBus

HEADERS += \
    $$PWD/lensSdkX64/include/SLABCP2112.h \
    $$PWD/lensSdkX64/include/Types.h \
    $$PWD/lensSdkX64/include/configVal.h \
    $$PWD/lensSdkX64/include/devAddr.h \
    $$PWD/lensSdkX64/include/silabs_defs.h \
    $$PWD/lensSdkX64/include/silabs_sal.h

SOURCES += \
    $$PWD/lensSdkX64/src/LensCtrl.c \
    $$PWD/lensSdkX64/src/UsbCtrl.c

LensManaer.h

#ifndef LensManager_H
#define LensManager_H

#include <QObject>
#include <QMutex>
#include <QMutexLocker>

#include "lensCommon.h"

class LensManager : public QObject
{
    Q_OBJECT
private:
    explicit LensManager(QObject *parent = 0);

public:
    static LensManager * getInstance();

signals:
    void signal_logMessage(QString s);                                          // 信号: 日志信息

signals:
    void signal_searchLensNumResult(bool ok, int numDevices);                   // 信号: 搜索摄像头数量结果
    void signal_searchLensInfoResult(bool ok, QList<LensInfo> listLensInfo);    // 信号: 搜索摄像头信息结果
    void signal_openDeviceResult(bool succeed, LensInfo lensInfo);              // 信号: 打开设备结果
    void signal_getGeneralInfoResult(bool ok, LensInfo lensInfo);               // 信号: 获取镜头通用信息
    void signal_closeDeviceResult();                                            // 信号: 关闭设备

signals:            // 缩放: 滤镜操作结果
    void signal_getZoomInfoResult   (bool ok, LensInfo lensInfo);
    void signal_initializeZoomResult(bool ok, LensInfo lensInfo);
    void signal_setZoomBacklash     (bool ok, LensInfo lensInfo);
    void signal_setZoomSpeedResult  (bool ok, LensInfo lensInfo);
    void signal_setZoomPosResult    (bool ok, LensInfo lensInfo);

signals:            // 信号: 对焦操作结果
    void signal_getFocusInfoResult   (bool ok, LensInfo lensInfo);
    void signal_initializeFocusResult(bool ok, LensInfo lensInfo);
    void signal_setFocusBacklash     (bool ok, LensInfo lensInfo);
    void signal_setFocusSpeedResult  (bool ok, LensInfo lensInfo);
    void signal_setFocusPosResult    (bool ok, LensInfo lensInfo);

signals:            // 信号: 光圈操作结果
    void signal_getIrisInfoResult   (bool ok, LensInfo lensInfo);
    void signal_initializeIrisResult(bool ok, LensInfo lensInfo);
    void signal_setIrisBacklash     (bool ok, LensInfo lensInfo);
    void signal_setIrisSpeedResult  (bool ok, LensInfo lensInfo);
    void signal_setIrisPosResult    (bool ok, LensInfo lensInfo);

signals:            // 信号: 滤镜操作结果
    void signal_getFilterInfoResult   (bool ok, LensInfo lensInfo);
    void signal_initializeFilterResult(bool ok, LensInfo lensInfo);
    void signal_setFilterPosResult    (bool ok, LensInfo lensInfo);

public slots:
    void slot_start();
    void slot_stop();

public slots:
    void slot_searchLensNum();                  // 搜索镜头数量
    void slot_searchLensInfo();                 // 搜索镜头信息
    void slot_openDevice(LensInfo lensInfo);    // 打开镜头
    void slot_getGeneralInfo();                 // 获取通用信息
    void slot_closeDevice();                    // 关闭镜头

public slots:       // 缩放
    void slot_getZoomInfo();                   // 对焦: 取信息
    void slot_initializeZoom();                // 对焦: 初始化
    void slot_setZoomBacklash(bool on);        // 对焦: 回差补偿
    void slot_setZoomSpeed(quint16 speed);     // 对焦: 设置移动速度
    void slot_setZoomPos(quint16 pos);         // 对焦: 设置位置

public slots:       // 对焦
    void slot_getFocusInfo();                   // 对焦: 取信息
    void slot_initializeFocus();                // 对焦: 初始化
    void slot_setFocusBacklash(bool on);        // 对焦: 回差补偿
    void slot_setFocusSpeed(quint16 speed);     // 对焦: 设置移动速度
    void slot_setFocusPos(quint16 pos);         // 对焦: 设置位置

public slots:       // 光圈
    void slot_getIrisInfo();                   // 对焦: 取信息
    void slot_initializeIris();                // 对焦: 初始化
    void slot_setIrisBacklash(bool on);        // 对焦: 回差补偿
    void slot_setIrisSpeed(quint16 speed);     // 对焦: 设置移动速度
    void slot_setIrisPos(quint16 pos);         // 对焦: 设置位置

public slots:       // 滤镜
    void slot_getFilterInfo();                   // 对焦: 取信息
    void slot_initializeFilter();                // 对焦: 初始化
    void slot_setFilterPos(quint16 pos);         // 对焦: 设置位置


/*↓↓↓↓↓↓↓↓↓↓  封装底层api,不对外开放 ↓↓↓↓↓↓↓↓↓↓*/
...

/*↑↑↑↑↑↑↑↑↑↑  封装底层api,不对外开放 ↑↑↑↑↑↑↑↑↑↑*/


private:
    bool _running;

private:
    static LensManager * _pInstance;
    static QMutex _mutex;

private:
    LensInfo _lensInfo;                         // 当前镜头
};

#endif // LensManager_H

LensWidget.h

#ifndef LENSWIDGET_H
#define LENSWIDGET_H

#include <QWidget>
#include <QThread>

#include "LensManager.h"

namespace Ui {
class LensWidget;
}

class LensWidget : public QWidget
{
    Q_OBJECT

public:
    explicit LensWidget(QWidget *parent = nullptr);
    ~LensWidget();

protected:
    void initControl();
    void clearControl();
    void updateGeneralInfo(LensInfo lensInfo);
    void updateZoomInfo(LensInfo lensInfo);
    void updateFocusInfo(LensInfo lensInfo);
    void updateIrisInfo(LensInfo lensInfo);
    void updateFilterInfo(LensInfo lensInfo);

protected:
    void logMessage(QString str);

protected slots:
    void slot_logMessage(QString s);

protected slots:
    void slot_searchLensNumResult(bool ok, int num);
    void slot_searchLensInfoResult(bool ok, QList<LensInfo> listLensInfo);
    void slot_openDeviceResult(bool succeed, LensInfo lensInfo);
    void slot_getGeneralInfoResult(bool ok, LensInfo lensInfo);
    void slot_closeDeviceResult();

private slots:          // 通用按钮
    void on_pushButton_searchLensInfo_clicked();
    void on_pushButton_open_clicked();
    void on_pushButton_close_clicked();
    void on_pushButton_getGeneralInfo_clicked();
    void on_pushButton_clearLogMessage_clicked();

/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 缩放 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
protected slots:        // 槽函数 对焦操作结果
    void slot_getZoomInfoResult   (bool ok, LensInfo lensInfo);
    void slot_initializeZoomResult(bool ok, LensInfo lensInfo);
    void slot_setZoomBacklash     (bool ok, LensInfo lensInfo);
    void slot_setZoomPosResult    (bool ok, LensInfo lensInfo);
    void slot_setZoomSpeedResult  (bool ok, LensInfo lensInfo);

private slots:          // 缩放相关操作
    void on_pushButton_zoom_init_clicked();
    void on_pushButton_zoom_getInfo_clicked();
    void on_pushButton_zoom_doStepSub_clicked();
    void on_pushButton_zoom_doStepAdd_clicked();
    void on_pushButton_zoom_jumpAddress_clicked();
    void on_pushButton_zoom_setSpeed_clicked();
    void on_pushButton_zoom_on_clicked();
    void on_pushButton_zoom_off_clicked();

    void on_horizontalSlider_zoom_currentValue_valueChanged(int value);
    void on_horizontalSlider_zoom_currentValue_sliderReleased();
    void on_horizontalSlider_zoom_currentValue_actionTriggered(int action);
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 缩放 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/

/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 对焦 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
protected slots:        // 槽函数 对焦操作结果
    void slot_getFocusInfoResult   (bool ok, LensInfo lensInfo);
    void slot_initializeFocusResult(bool ok, LensInfo lensInfo);
    void slot_setFocusBacklash     (bool ok, LensInfo lensInfo);
    void slot_setFocusPosResult    (bool ok, LensInfo lensInfo);
    void slot_setFocusSpeedResult  (bool ok, LensInfo lensInfo);

private slots:          // 对焦相关操作
    void on_pushButton_focus_init_clicked();
    void on_pushButton_focus_getInfo_clicked();
    void on_pushButton_focus_doStepSub_clicked();
    void on_pushButton_focus_doStepAdd_clicked();
    void on_pushButton_focus_jumpAddress_clicked();
    void on_pushButton_focus_setSpeed_clicked();
    void on_pushButton_focus_on_clicked();
    void on_pushButton_focus_off_clicked();

    void on_horizontalSlider_focus_currentValue_valueChanged(int value);
    void on_horizontalSlider_focus_currentValue_sliderReleased();
    void on_horizontalSlider_focus_currentValue_actionTriggered(int action);
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 对焦 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/


/*↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 光圈 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
protected slots:        // 槽函数 对焦操作结果
    void slot_getIrisInfoResult   (bool ok, LensInfo lensInfo);
    void slot_initializeIrisResult(bool ok, LensInfo lensInfo);
    void slot_setIrisBacklash     (bool ok, LensInfo lensInfo);
    void slot_setIrisPosResult    (bool ok, LensInfo lensInfo);
    void slot_setIrisSpeedResult  (bool ok, LensInfo lensInfo);

private slots:          // 光圈相关操作
    void on_pushButton_iris_init_clicked();
    void on_pushButton_iris_getInfo_clicked();
    void on_pushButton_iris_doStepSub_clicked();
    void on_pushButton_iris_doStepAdd_clicked();
    void on_pushButton_iris_jumpAddress_clicked();
    void on_pushButton_iris_setSpeed_clicked();
    void on_pushButton_iris_on_clicked();
    void on_pushButton_iris_off_clicked();

    void on_horizontalSlider_iris_currentValue_valueChanged(int value);
    void on_horizontalSlider_iris_currentValue_sliderReleased();
    void on_horizontalSlider_iris_currentValue_actionTriggered(int action);
/*↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 光圈 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑*/

protected:
    void timerEvent(QTimerEvent *event);

private:
    Ui::LensWidget *ui;

private:
    LensManager *_pLensManager;
    QThread *_pLensManagerThread;

private:
    QList<LensInfo> _listLensInfo;
    LensInfo _lensInfo;
};

#endif // LENSWIDGET_H
 

工具工程模板v1.1.0

  在这里插入图片描述

posted @ 2026-08-11 11:21  长沙红胖子Qt·西安  阅读(2)  评论(0)    收藏  举报