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

若该文为原创文章,转载请注明原文出处

本文章博客地址:https://hpzwl.blog.csdn.net/article/details/163643823

长沙红胖子Qt·西安(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中...

开发专栏:项目实战

需求

  1.搜索镜头,打开镜头,关闭镜头;

  2.获取镜头所有信息,协议版本、固件版本、修订版本、I2C地址、镜头型号、温度;

  3.获取设备支持的功能,是否支持缩放、对焦、光圈、滤镜等功能;

  4.打开设备后,判断是否已初始化,不必每次打开都初始化对应功能,避免调整已经设置好的位置;

  5.支持的功能,可获取所有属性和对应的动态属性,上下限制;

  6.支持的功能,可动态获取对应的设置值;

  7.支持的功能,可设置步长,目标地址,电机速度,补偿开关等;

  8.高度封装的模块化设计,子线程异步交互;

  9.完整的日志信息,记录每次操作;

  10.高度完善的封装类,脱离设备驱动层;

相关博客

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

Demo_v1.0.0

  

  

  

  

  

工具运行包下载地址

  windows:https://download.csdn.net/download/qq21497936/93255931

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

模块化

  

Demo关键源码

LenManager.pri

cpp 复制代码
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

cpp 复制代码
#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

cpp 复制代码
#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

  

本文章博客地址:https://hpzwl.blog.csdn.net/article/details/163643823

相关推荐
长沙红胖子Qt7 天前
康标达工业镜头开发笔记(一):康标达(Computar)工业镜头介绍、搭建SDK基础环境
机器视觉·工业镜头·康标达·computar·sdk二次开发
fundoit4 个月前
Modbus调试软件实战指南:从基础连接到高级脚本的全方位调试方案
modbus·mthings·调试工具
特立独行的猫a5 个月前
ESP32小智AI的WebSocket 调试工具的实现,小智AI后台交互过程揭秘(二、技术原理与实现过程详解 )
人工智能·websocket·网络协议·esp32·调试工具·小智ai
w_31234541 年前
支持多网络协议的测试工具(postman被无视版)
网络协议·测试工具·postman·调试工具
serene942 年前
OPC UA 客户端开发工具,模拟器,可视化GUI
物联网·数据可视化·opc·opc ua·客户端工具·调试工具
特立独行的猫a2 年前
Python实现基于WebSocket的stomp协议调试助手工具
网络·websocket·网络协议·调试工具·stomp协议
serene942 年前
BACnet初学者教程,第一章:BACnet/IP介绍
bacnet·教程·模拟器·调试工具·bacnet 教程
serene942 年前
BACnet初学者教程,第二章:BACnet/IP的一些基本设计标准
物联网·bacnet·教程·模拟器·调试工具·楼宇自动化
serene942 年前
modbus初学者教程,第一章:Modbus背景介绍
物联网·教程·开发工具·modbus·工业·调试工具·工程师