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

前言

  康标达(Computar)工业镜头SDK二次开发笔记,本篇介绍基基本信息和搭建基础sdk二次开发环境模板。

 

题外话

  相较于传统手动调焦工业镜头,这款自带步进电机、支持上位机软件实时控制对焦、光圈、变焦,非常适合自动化在线视觉检测、多工况切换成像、精密视觉标定场景。
  大多文章只讲工业相机调用、OpenCV 图像处理,极少有完整的康标达镜头SDK二次开发实操内容,因此打算整理系列开发笔记,从硬件认知、环境搭建、指令调用、代码封装一步步记录,方便后续复用,也给做机器视觉电控镜头开发的同行参考。

 

康标达(Computar)

概述

  康标达(Computar)隶属于日本 CBC 集团,是专注机器视觉赛道的专业工业镜头品牌,核心面向自动化工业检测场景,不生产民用消费级摄影镜头,是国内智能制造、视觉检测项目主流选用的日系工业镜头品牌。
  Computar 电控变焦镜头(电动镜头),内置步进马达驱动 Focus(对焦)、Zoom(变焦)、Iris(光圈)三组执行机构,高端型号扩展 Filter 滤镜切换模组;通讯接口主流为SMBus/I2C、RS485 两种方案,采购选型时务必确认接口类型,二者 SDK 与硬件接线互不兼容。

核心功能

  • Zoom:变焦控制,调整镜头焦距,改变视场大小
  • Focus:对焦控制,调节成像清晰度
  • Iris:光圈控制,调整通光量、景深
  • Filter:滤镜模组切换(选配型号支持)
  • 位置读取:实时读取当前焦段、对焦位置、光圈绝对坐标
  • 参数记忆:支持上位机保存多组位置预设值,一键切换工况

特性

上电硬件初始化行为

  镜头上电后,部分型号会执行自动初始化回零动作:马达自动移动至机械原点。
  多镜头并行控制场景:系统运行中新增镜头连接、反复重连设备时,不希望每次通讯建立就执行初始化回零。镜头移位会导致现场标定失效、成像视野跳变。但是可以通过软件跳过初始化,仅握手通讯。

各路模组独立状态标志

  镜头不存在全局统一初始化标志位。Zoom 缩放、Focus 对焦、Iris 光圈、Filter 滤镜,四路执行机构相互独立,各自拥有独立【初始化完成标志位】。
  各路电机初始化状态、运动状态互不耦合,可以单独判断单路模组工作状态。

多镜头组网限制

  I2C 版本:依靠设备地址区分多镜头,可修改镜头从机地址实现多路挂载;
  RS485 版本:总线式组网,依靠设备 ID 区分;
  需要做好地址管理,避免多镜头总线冲突。

SDK编程环境

  获取sdk后,基本信息如下:

  • 操作系统:Windows 10 / Windows 11(优先)
  • 开发框架:C++ / Qt(推荐,便于搭建可视化调试上位机)
  • 编译器:MSVC2019 / MSVC2022
  • 辅助工具:官方 Demo 调试软件、串口 / I2C 总线抓包工具
  • 图像处理配套:OpenCV(可选,用于实时成像观测镜头调节效果)

  sdk demo给一个简单的无界面demo的工程,经过笔者二次阅读理解之后,分理出可用的最小接口sdk部分,并进行模块化处理之后:
  由于本人追求精益求精,构架设计,有部分是.c代码,发现提供的sdk中,代码同类相似功能有几种编码和设计小思路区别,导致的差异,进行了少量的代码分层处理和思路修正,尽可能的统一。存在的几个问题:

  • extern变量飞,main函数中的定义全局变量飞到底层api控制中,导致api接口无法与main分割;
  • 同类功能类似变量获取上下限值,一种是机械上下限,一种是功能是软件上下限
  • 部分变量在控制底层封装中就赋值,部分是业务中赋值。

  花了不少时间研究其定义和设计思路,并尽可能不动sdk的前提下,进行了少量新增修正,总体代码还是可以的,而且有代码参考运行看结果远比没有好,还是感谢的,不然需要去看文档寄存器了熟悉研究了其工作量比预估翻倍,参考单片机寄存器通讯的I2C通讯一样。

 

基础SDK二次开发环境搭建步骤

步骤一:获取sdk

  这里直接是用进行二次整理的sdk,起步。
  在这里插入图片描述

步骤二:新建工程和相机模块

  建立工程:
   在这里插入图片描述

  然后新建相机模块:
  在这里插入图片描述

  工程展示如下:
  在这里插入图片描述

步骤三:引入sdk

  在这里插入图片描述

  在pri中:
  在这里插入图片描述

# 镜头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

  因为有部分控制.c代码接口,需要一起编译,添加.了c文件以及所有头文件。

步骤四:demo代码测试基础

  添加头文件:

#ifdef __cplusplus
extern "C" {
#endif

#include "configVal.h"
#include "SLABCP2112.h"
#include "devAddr.h"
#include "LensCtrl.h"
#ifdef __cplusplus
}
#endif

  在这里插入图片描述

步骤五:运行结果

  测试可以搜索到:
  在这里插入图片描述

 

模块化

  在这里插入图片描述

 

Demo关键源码

  头文件包含:

#ifdef __cplusplus
extern "C" {
#endif

#include "configVal.h"
#include "SLABCP2112.h"
#include "devAddr.h"
#include "LensCtrl.h"
#ifdef __cplusplus
}
#endif

  源码:

void LensManager::testEnv()
{
    /*
    typedef unsigned long       DWORD;
    */

    // 步骤一: 搜索usb镜头
    DWORD numDevis;
    int ret = HidSmbus_GetNumDevices(&numDevis, VID, PID);
    LOG << "搜索到镜头数量:" << ret;
}
 

工程模板v1.0.0

  在这里插入图片描述

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