设置参数

SDK通过GenICam标准协议实现读取和设置设备参数,并提供了一套相机和采集卡均通用的参数配置接口。通过接口,您可获取和配置包括整型、枚举型、浮点型、布尔型、字符串型和命令型总共6种类型的参数节点。

查询节点名称和类型

调用用于获取和设置节点的接口时,您需传入节点名称和节点类型。
您可通过客户端查询节点的名称和类型。
  1. 通过客户端连接设备。

  2. 在客户端属性树上选中某个属性的参数,即可在属性下方查看该参数的节点信息。

    注解
    若您使用的客户端版本高于等于4.4.0,您还可以查看节点的调用示例。

    下图以Width参数为例。

    查看width参数的节点信息
注解
更多操作详情,请参见客户端用户手册。

获取和配置节点

您可参照本节的示例代码,在您的程序中获取和配置节点值。
您可配置总共6种类型的参数节点,包括:整型枚举型浮点型布尔型字符串型命令型

GigE相机专有配置

若您使用的相机为GigE相机,您可设置最佳包大小设置重发包
  • 设置最佳包大小

    在打开GigE相机并开始取流前,您可通过 MV_CC_GetOptimalPacketSize() 探测当前网络,获取当前网络最佳通信的数据包大小。

    您可以使用该数据包大小配置相机发送流数据时的数据包大小,从而充分利用带宽并提高流数据的传输速度。

    // 探测网络最佳包大小(仅支持GigE相机)
    if (stDeviceList.pDeviceInfo[nIndex]->nTLayerType == MV_GIGE_DEVICE)
    {
    int nPacketSize = MV_CC_GetOptimalPacketSize(handle);
    if (nPacketSize > 0)
    {
    // 配置相机的包大小
    nRet = MV_CC_SetIntValueEx(handle,"GevSCPSPacketSize",nPacketSize);
    Check(nRet);
    }
    }
  • 设置重发包

    GigE设备通过网络进行数据通信,在网络拥塞等异常情况下,可能造成SDK侧收到的数据包不完整。可以通过重发命令控制设备对不完整部分进行重传。

    注意
    • 重发包需要相机支持,才可以使用。
    • 网络偶尔拥塞时,您可通过重发解决偶尔丢包问题。
    • 网络持续拥塞时,建议您首先排查并优化网络。若直接开启重发包,可能会造成网络拥塞加剧,请谨慎使用。
    • 您可参考如下示例,在应用程序中调用 MV_GIGE_SetResend() 开启重发包功能。

      unsigned int bEnable = true; // 1. 是否开启重发包
      unsigned int nMaxResendPercent = 10; // 2. 最大重发比
      unsigned int nResendTimeout = 50; // 3. 重发超时时间,单位ms
      nRet = MV_GIGE_SetResend(handle, bEnable, nMaxResendPercent, nResendTimeout);
      Check(nRet);
      1. bEnable,代表是否开启重发包功能。
      2. nMaxResendPercent,设置重发当前帧丢包数据的比例,超过部分不重发,以避免加剧网络拥塞。当该值设置为100时,SDK重发当前帧的所有丢包。
      3. nResendTimeout,设置重发包超时时间。在当前帧结束后开始计时,若计时时间超出该值,则SDK不再请求重发该丢包数据。
    • 在发送重发命令后,若SDK未收到设备响应和重发的数据,您需要控制SDK继续发送重发请求。

      您可参考如下示例,调用 MV_GIGE_SetResendTimeInterval() 控制单个重发包的间隔和 MV_GIGE_SetResendMaxRetryTimes() 设置最大重发次数。

      // 配置重发包间隔
      unsigned int nMillisec = 10;
      Check(nRet);
      // 配置重发包最大重发的次数
      unsigned int nRetryTimes = 20;
      Check(nRet);
      • nMillisec,重发包间隔默认10ms,代表两次重传命令请求的时间间隔。时间间隔越小,占用的网络资源越多,网络和设备压力越大。
      • nRetryTimes,默认值20,表示对于单个丢包数据,SDK最多请求20次重传命令。


U3V相机专有配置

若您使用的相机为U3V相机,您可调节其控制链路流链路,以兼容和解决对应的异常。
  • 控制链路用于传入控制命令。若控制链路异常,可能导致传输控制命令慢,导致接口超时返回异常。

    此时,您可参照如下代码示例,在您的程序中调用 MV_USB_SetSyncTimeOut() 调节控制链路的超时时间,从而兼容对此类异常进行兼容。

    // 默认超时时间1000ms
    unsigned int nMills = 1000;
    // 设置U3V相机同步读写超时时间
    Check(nRet);
  • 流链路用于传入流数据。若流链路带宽不足或系统资源不足,可能导致传输失败、资源创建失败。

    您可参照如下代码示例,在您的程序中调用 MV_USB_SetTransferSize() 调节流数据包的大小,或调用 MV_USB_SetTransferWays() 调节U3V流通道个数,减少资源占用。

    // 配置U3V相机流数据的最大数据包大小
    unsigned int nTransferSize = 1*1024*1024; // 默认1MB
    nRet = MV_USB_SetTransferSize(handle,nTransferSize);
    Check(nRet);
    // 配置SDK内部U3V的流通道缓存个数
    Unsigned int nTransferWay = 2;
    nRet = MV_USB_SetTransferWays(handle,nTransferWay);
    Check(nRet);


串口设备专有配置

串口设备通过串口连接,并且通信协议符合GenCP协议。对于此类设备,您可通过 MV_CAMERALINK_DEVICE() 类型枚举。
注解
当前,串口设备包括:光源控制器和Camera Link相机。
当设备通过串口通信时,您可以改变波特率,从而优化传输速度。具体步骤如下:
  1. 调用 MV_CAML_GetSupportBaudrates() 获取当前设备和主机之间支持的波特率。
  2. 调用 MV_CAML_SetDeviceBaudrate() 设置设备的波特率。
// 获取主机和当前设备支持的波特率
unsigned int nBaudrateAblity = 0;
nRet = MV_CAML_GetSupportBaudrates(handle,&nBaudrateAblity);
Check(nRet);
// 检测是否支持,并配置115200波特率
if (nBaudrateAblity & MV_CAML_BAUDRATE_115200)
{
Check(nRet);
}



上一篇: 初始化采集卡 下一篇: 事件及异常