跳转到内容

Light Control Feature Set#

Light Control Feature Set 可让您通过 pylon 软件控制多达 4 个光源设备。

Light Control Feature Set 基于 SLP 协议,该协议使相机和光源设备可以直接相互通信。光源设备可以是第三方光源,也可以是来自 Basler 相机光源产品组合的光源。如果要使用第三方光源,则需要 Basler SLP 频闪控制器,以启用相机和光源之间的通信。如果您选择 Basler 光源,由于其中已经包含了控制器功能,因此不需要单独的控制器。两种选件均为即插即用。

该功能的使用#

配置 Basler 光源/光源控制器#

  1. 如果尚未连接控制器和光源,请执行连接。
  2. pylon Viewer 中启用轮询
  3. BslLightControlMode 参数设置为 On
    BslLightControlSource 参数将显示相机的哪条 GPIO 线路用于控制光源功能。
    如果连接新的控制器,则系统会自动为它分配下一个可用的光源设备 ID。
  4. 执行 BslLightControlEnumerateDevices 命令。
  5. 如果您的环境中有多个 Basler 光源或光源控制器,请将 BslLightDeviceSelector 参数设置为要配置的设备。
    请确保没有光源设备 ID 冲突
  6. 指定您要使用电流或电压还是通过 BslLightDeviceControlMode 参数来控制光源设备。

    信息

    请注意,在您每次从电流切换到电压时(反之亦然),控制器存在短暂的初始化阶段,在此期间,所有连接的光源设备将亮起。此阶段可能会持续长达 15 s,这是正常现象。

  7. BslLightDeviceMaxCurrent 参数设置为光源的最大额定电流。
    这样可以确保您的光源不会受到损坏,并且可以通过 BslLightDeviceBrightness 参数安全地使用整个电流范围。
    BslLightDeviceOperationMode 参数设置为 Off时,您只能更改 BslLightDeviceMaxCurrent 参数值。

  8. BslLightDeviceBrightness 参数设置为所需亮度。
    此参数的设置范围为 0 到 100%。100% 对应于您使用 BslLightDeviceMaxCurrent 参数指定的电流。50% 会将电流减小一半。控制器不使用脉宽调制 (PWM)。
  9. 设置 BslLightDeviceOperationMode 参数设置为所需模式:
    • On这将使光源连续发光。
    • Strobe将光源设置为频闪模式。您可以使用 BslLightDeviceStrobeModeBslLightDeviceStrobeDuration 参数配置频闪模式

配置频闪模式#

频闪模式的优点之一是,它可以帮助延长光源的预期寿命。通过不连续操作而是像闪光灯一样在需要时工作,LED 产生的热量更少。这减慢了光源的老化过程。另一个优点是,在频闪模式下,您可以使光源过载,也就是将提供的电流增加到最大 10 A,这会增加光源的亮度。这样做之前,请阅读过载模式部分中的说明。

如果已将 BslLightDeviceOperationMode 参数设置为 Strobe,则使用 BslLightControlTriggerMode 参数来确定如何触发光源。根据您的相机型号,可以使用不同的触发模式:

信息

与 Light Control Feature Set 有关的闪烁窗口信号的实现目前仍在开发中。特别是在闪烁窗口信号非常短的情况下,结果可能不尽如人意(所得到的图像中的部分行可能太亮,而其他一些行可能太暗)。

要控制单次频闪脉冲的持续时间,必须使用 BslLightDeviceStrobeMode 参数指定要自动还是手动进行频闪操作。

  • Automatic各频闪pulse的持续时间由 ExposureTime 参数控制。频闪会持续您指定的曝光时间。如果您在达到其性能上限时操作相机,则可能会出现过度触发。有关更多信息,请参见故障排除部分。
  • Manual您可以使用 BslLightDeviceStrobeDuration 参数自定义单次频闪脉冲的持续时间。

信息

如果您使用触发宽度曝光模式Sequencer 功能或相机的任何自动功能(例如,Auto Exposure、Auto Gain),则必须使用手动频闪模式。

信息

相机使用同一条线路触发光源并传输光源控制参数设置的任何更改。由于参数更改优先,因此在此期间,该线路将不可用于触发信号,并且频闪操作将被中断。为了避免这种情况,请检查 BslLightControlStatus。如果值为 Ready,则表示光源设备已准备好接收触发条件。此外,应该仅在禁用频闪模式时更改参数设置。

过载模式#

使光源过载意味着您可以增加电流,从而在光源处于频闪模式时提高光源强度。

注意 – 错误的操作可能会损坏您的光源。

请仔细阅读本节中的说明,以免损坏连接的光源,并确保光源不会过早老化。

使用过载模式时,必须考虑以下方面,以免损坏您的光源:

  • 由于增加的电流会导致 LED 发热量增大,因此必须在各次频闪脉冲之间留出足够的时间,以保证光源再次冷却。根据经验,脉冲强度越高,两次脉冲之间应留出的时间越长。
  • 注意不要意外切换到连续光源操作。过载电流可能会立即损坏您的光源。
  • 如果不确定光源在频闪模式下可以承受的最大电流,请与光源的制造商联系。通常,它比 Basler SLP 频闪控制器可以提供的 10A 小得多。
  • 考虑曝光时间,因为这会影响脉冲的长度和占空比。

更改光源设备 ID#

要更改光源的 ID:

  1. BslLightControlMode 参数设置为 On
  2. BslLightDeviceOperationMode 参数设置为 Off
  3. BslLightDeviceSelector 参数设置为您要更改其 ID 的 Basler 光源/控制器。
  4. BslLightDeviceChangeID 参数设置为所需的值。
    该 ID 将立即更改。

信息

使用不止一个光源控制器

使用多个光源控制器时,必须确保其 ID 各不相同。使用具有相同 ID 的控制器会导致通信错误。如果您是第一次连接新的控制器,因为所有控制器出厂时的光源设备 ID 都设置为 7,因此可能会出现重复的 ID。当从另一个系统连接现有的控制器时,由于控制器会记住设置好的光源设备 ID,因此也会出现重复的 ID。防止冲突的最佳方法是逐一连接控制器,并在连接控制器后始终分配一个新的唯一 ID。

故障排除#

检查和清除错误#

光源/光源控制器能检测到可以纠正的错误。检查 BslLightDeviceLastError 参数以找出发生了什么错误。纠正错误后,可以从列表中清除它。

最多可以存储 25 个错误。如果发生第 26 个错误,则最早的错误将被覆盖,依此类推。

如果您连接了多个光源/光源控制器,BslLightControlErrorStatus 会告诉您哪个设备出现了问题。

检查和清除错误是一个反复迭代过程,具体取决于发生了多少个错误。

To check and clear errors:

  1. 要检查最近发生的错误,请获取 BslLightDeviceLastError 参数的值。
  2. 更正相应的错误。
  3. 要从错误列表中删除最后一个错误,请执行 BslLightDeviceClearLastError 命令。
  4. 不断获取并删除最后一个错误,直到 BslLightDeviceLastError 参数显示 NoError 为止。

可用错误代码

含义
无错误 自上次清除错误存储器以来,光源/光源控制器未检测到任何错误。
通信故障 如果光源/光源控制器和相机之间的数据传输错误,则会发生通信错误。原因可能是使用了过长的线缆或线路上的噪音过大。
连接错误 如果光源/光源控制器和相机之间的连接断开或发生了通信错误,则会发生连接错误。其他原因还可能包括连接松动或控制器完全断开。
硬件错误 光源/光源控制器发生技术故障。断开并重新连接电源可以解决此问题。有关更多信息,请参见重启控制器电源

在自动频闪模式下过度触发#

如果您在达到其性能上限时操作相机,则可能会出现过度触发光源/光源控制器。过度触发表示光源/光源控制器接收到未准备好接收的触发,例如,因为其仍处在关闭光源的过程中。这意味着触发将被忽略且该光源在下次曝光时不会亮起。为了更好地理解此问题,请参考以下示例。

如果相机能够以 100 fps 操作且将曝光时间设置为 50 ms,即相机可以每秒 20 帧进行快速连续采集,而曝光之间不会暂停。这意味着必须正好在两次曝光之间的边缘处触发光源/光源控制器。实际上,这几乎是无法实现的,因为固有抖动会造成以下情况:有时在触发信号达到时,光源仍关闭。在这种情况下,触发将被忽略且生成的图像太暗。

由于抖动是不规则的,没有精确的方法可防止此情况的发生。如果您注意到其中一些图像比其他的要暗,则考虑是否可以选择以连续模式操作光源。您还可以尝试调整帧速率,例如,使用 19 fps,而不是 20 fps。

重启控制器#

重启控制器电源后,最多可能需要五分钟才能使控制器再次可用。这是正常现象。如果您使用多个控制器,即使其他控制器没有遇到任何故障,也需要重启其他控制器的电源。

第一张图像太暗#

BslLightControlMode 设置为 On 时,在实际打开光源设备之前最多会有 1 秒的延迟。因此,第一张图像可能过暗。可以丢弃该图像,或者,如果需要所有图像,则仅在适当的延迟之后开始图像采集(例如,可以使用计时器)。

详情#

显示所有相机型号

相机型号 可用光源控制触发模式
a2A1920-51gcBAS 不支持的功能
a2A1920-51gcPRO 不支持的功能
a2A1920-51gmBAS 不支持的功能
a2A1920-51gmPRO 不支持的功能
a2A1920-160ucBAS 不支持的功能
a2A1920-160ucPRO 不支持的功能
a2A1920-160umBAS 不支持的功能
a2A1920-160umPRO 不支持的功能
a2A2590-22gcBAS 不支持的功能
a2A2590-22gcPRO 不支持的功能
a2A2590-22gmBAS 不支持的功能
a2A2590-22gmPRO 不支持的功能
a2A2590-60ucBAS 不支持的功能
a2A2590-60ucPRO 不支持的功能
a2A2590-60umBAS 不支持的功能
a2A2590-60umPRO 不支持的功能
a2A3840-13gcBAS 不支持的功能
a2A3840-13gcPRO 不支持的功能
a2A3840-13gmBAS 不支持的功能
a2A3840-13gmPRO 不支持的功能
a2A3840-45ucBAS 不支持的功能
a2A3840-45ucPRO 不支持的功能
a2A3840-45umBAS 不支持的功能
a2A3840-45umPRO 不支持的功能
acA640-90gc 不支持的功能
acA640-90gm 不支持的功能
acA640-90uc 不支持的功能
acA640-90um 不支持的功能
acA640-120gc 不支持的功能
acA640-120gm 不支持的功能
acA640-120uc 不支持的功能
acA640-120um 不支持的功能
acA640-121gm 不支持的功能
acA640-300gc 曝光激活
acA640-300gm 曝光激活
acA640-750uc 曝光激活
acA640-750um 曝光激活
acA720-290gc 曝光激活
acA720-290gm 曝光激活
acA720-520uc 曝光激活
acA720-520um 曝光激活
acA780-75gc 不支持的功能
acA780-75gm 不支持的功能
acA800-200gc 曝光激活
acA800-200gm 曝光激活
acA800-510uc 曝光激活
acA800-510um 曝光激活
acA1280-60gc 不支持的功能
acA1280-60gm 不支持的功能
acA1300-22gc 不支持的功能
acA1300-22gm 不支持的功能
acA1300-30gc 不支持的功能
acA1300-30gm 不支持的功能
acA1300-30uc 不支持的功能
acA1300-30um 不支持的功能
acA1300-60gc 不支持的功能
acA1300-60gm 不支持的功能
acA1300-60gmNIR 不支持的功能
acA1300-75gc 曝光激活
acA1300-75gm 曝光激活
acA1300-200uc 曝光激活
acA1300-200um 曝光激活
acA1440-73gc 曝光激活
acA1440-73gm 曝光激活
acA1440-220uc 曝光激活
acA1440-220um 曝光激活
acA1600-20gc 不支持的功能
acA1600-20gm 不支持的功能
acA1600-20uc 不支持的功能
acA1600-20um 不支持的功能
acA1600-60gc 不支持的功能
acA1600-60gm 不支持的功能
acA1920-25gc 不支持的功能
acA1920-25gm 不支持的功能
acA1920-25uc 不支持的功能
acA1920-25um 不支持的功能
acA1920-40gc 曝光激活
acA1920-40gm 曝光激活
acA1920-40uc 曝光激活
acA1920-40ucMED 不支持的功能
acA1920-40um 曝光激活
acA1920-40umMED 不支持的功能
acA1920-48gc 曝光激活
acA1920-48gm 曝光激活
acA1920-50gc 曝光激活
acA1920-50gm 曝光激活
acA1920-150uc 曝光激活
acA1920-150um 曝光激活
acA1920-155uc 曝光激活
acA1920-155ucMED 不支持的功能
acA1920-155um 曝光激活
acA1920-155umMED 不支持的功能
acA2000-50gc 不支持的功能
acA2000-50gm 不支持的功能
acA2000-50gmNIR 不支持的功能
acA2000-165uc 不支持的功能
acA2000-165um 不支持的功能
acA2000-165umNIR 不支持的功能
acA2040-25gc 不支持的功能
acA2040-25gm 不支持的功能
acA2040-25gmNIR 不支持的功能
acA2040-35gc 曝光激活
acA2040-35gm 曝光激活
acA2040-55uc 曝光激活
acA2040-55um 曝光激活
acA2040-90uc 不支持的功能
acA2040-90um 不支持的功能
acA2040-90umNIR 不支持的功能
acA2040-120uc 曝光激活
acA2040-120um 曝光激活
acA2440-20gc 曝光激活
acA2440-20gm 曝光激活
acA2440-35uc 曝光激活
acA2440-35ucMED 不支持的功能
acA2440-35um 曝光激活
acA2440-35umMED 不支持的功能
acA2440-75uc 曝光激活
acA2440-75ucMED 不支持的功能
acA2440-75um 曝光激活
acA2440-75umMED 不支持的功能
acA2500-14gc 不支持的功能
acA2500-14gm 不支持的功能
acA2500-14uc 不支持的功能
acA2500-14um 不支持的功能
acA2500-20gc 曝光激活
acA2500-20gcMED 不支持的功能
acA2500-20gm 曝光激活
acA2500-20gmMED 不支持的功能
acA2500-60uc 曝光激活
acA2500-60um 曝光激活
acA3088-16gc 曝光激活
闪烁窗口
acA3088-16gm 曝光激活
闪烁窗口
acA3088-57uc 曝光激活
闪烁窗口
acA3088-57um 曝光激活
闪烁窗口
acA3800-10gc 不支持的功能
acA3800-10gm 不支持的功能
acA3800-14uc 不支持的功能
acA3800-14um 不支持的功能
acA4024-8gc 曝光激活
闪烁窗口
acA4024-8gm 曝光激活
闪烁窗口
acA4024-29uc 曝光激活
闪烁窗口
acA4024-29um 曝光激活
闪烁窗口
acA4096-11gc 曝光激活
acA4096-11gm 曝光激活
acA4096-30uc 曝光激活
acA4096-30ucMED 不支持的功能
acA4096-30um 曝光激活
acA4096-30umMED 不支持的功能
acA4096-40uc 曝光激活
acA4096-40ucMED 不支持的功能
acA4096-40um 曝光激活
acA4096-40umMED 不支持的功能
acA4112-8gc 曝光激活
acA4112-8gm 曝光激活
acA4112-20uc 曝光激活
acA4112-20ucMED 不支持的功能
acA4112-20um 曝光激活
acA4112-20umMED 不支持的功能
acA4112-30uc 曝光激活
acA4112-30ucMED 不支持的功能
acA4112-30um 曝光激活
acA4112-30umMED 不支持的功能
acA4600-7gc 不支持的功能
acA4600-10uc 不支持的功能
acA5472-5gc 曝光激活
闪烁窗口
acA5472-5gm 曝光激活
闪烁窗口
acA5472-17uc 曝光激活
闪烁窗口
acA5472-17ucMED 不支持的功能
acA5472-17um 曝光激活
闪烁窗口
boA4096-93cc 不支持的功能
boA4096-93cm 不支持的功能
boA4112-68cc 不支持的功能
boA4112-68cm 不支持的功能
daA1280-54lc 不支持的功能
daA1280-54lm 不支持的功能
daA1280-54uc 不支持的功能
daA1280-54um 不支持的功能
daA1600-60lc 不支持的功能
daA1600-60lm 不支持的功能
daA1600-60uc 不支持的功能
daA1600-60um 不支持的功能
daA1920-15um 不支持的功能
daA1920-30uc 不支持的功能
daA1920-30um 不支持的功能
daA2500-14lc 不支持的功能
daA2500-14lm 不支持的功能
daA2500-14uc 不支持的功能
daA2500-14um 不支持的功能
daA2500-60mc 不支持的功能
daA2500-60mci 不支持的功能
daA4200-30mci 不支持的功能
puA1280-54uc 不支持的功能
puA1280-54um 不支持的功能
puA1600-60uc 不支持的功能
puA1600-60um 不支持的功能
puA1920-30uc 不支持的功能
puA1920-30um 不支持的功能
puA2500-14uc 不支持的功能
puA2500-14um 不支持的功能

示例代码#

// Enable the light control mode
camera.BslLightControlMode.SetValue(BslLightControlMode_On);
//Enumerate the light devices
camera.BslLightControlEnumerateDevices.Execute();
//Select light device 1
camera.BslLightDeviceSelector.SetValue(BslLightDeviceSelector_Device1);
//Set the maximum current of device 1 to 100 mA
camera.BslLightDeviceMaxCurrent.SetValue(100.0);
//Set the brightness to 100 %
camera.BslLightDeviceBrightness.SetValue(100.0);
//Set the operation mode to continuous
camera.BslLightDeviceOperationMode.SetValue(BslLightDeviceOperationMode_On);
INodeMap& nodemap = camera.GetNodeMap();
// Enable the light control mode
CEnumerationPtr(nodemap.GetNode("BslLightControlMode"))->FromString("On");
// Enumerate the light devices
CCommandPtr(nodemap.GetNode("BslLightControlEnumerateDevices"))->Execute();
// Select light device 1
CEnumerationPtr(nodemap.GetNode("BslLightDeviceSelector"))->FromString("Device1");
// Set the maximum current of device 1 to 100 mA
CFloatPtr(nodemap.GetNode("BslLightDeviceMaxCurrent"))->SetValue(100.0);
// Set the brightness to 100 %
CFloatPtr(nodemap.GetNode("BslLightDeviceBrightness"))->SetValue(100.0);
// Set the operation mode to continuous
CEnumerationPtr(nodemap.GetNode("BslLightDeviceOperationMode"))->FromString("On");
INodeMap& nodemap = camera.GetNodeMap();
// Enable the light control mode
CEnumParameter(nodemap, "BslLightControlMode").SetValue("On");
// Enumerate the light devices
CCommandParameter(nodemap, "BslLightControlEnumerateDevices").Execute();
// Select light device 1
CEnumParameter(nodemap, "BslLightDeviceSelector").SetValue("Device1");
// Set the maximum current of device 1 to 100 mA
CFloatParameter(nodemap, "BslLightDeviceMaxCurrent").SetValue(100.0);
// Set the brightness to 100 %
CFloatParameter(nodemap, "BslLightDeviceBrightness").SetValue(100.0);
// Set the operation mode to continuous
CEnumParameter(nodemap, "BslLightDeviceOperationMode").SetValue("On");
// Enable the light control mode
camera.Parameters[PLCamera.BslLightControlMode].SetValue(PLCamera.BslLightControlMode.On);
// Enumerate the light devices
camera.Parameters[PLCamera.BslLightControlEnumerateDevices].Execute();
// Select light device 1
camera.Parameters[PLCamera.BslLightDeviceSelector].SetValue(PLCamera.BslLightDeviceSelector.Device1);
// Set the maximum current of device 1 to 100 mA
camera.Parameters[PLCamera.BslLightDeviceMaxCurrent].SetValue(100.0);
// Set the brightness to 100 %
camera.Parameters[PLCamera.BslLightDeviceBrightness].SetValue(100.0);
// Set the operation mode to continuous
camera.Parameters[PLCamera.BslLightDeviceOperationMode].SetValue(PLCamera.BslLightDeviceOperationMode.On);
// Enable the light control mode
Pylon.DeviceFeatureFromString(hdev, "BslLightControlMode", "On");
// Enumerate the light devices
Pylon.DeviceExecuteCommandFeature(hdev, "BslLightControlEnumerateDevices");
// Select light device 1
Pylon.DeviceFeatureFromString(hdev, "BslLightDeviceSelector", "Device1");
// Set the maximum current of device 1 to 100 mA
Pylon.DeviceSetFloatFeature(hdev, "BslLightDeviceMaxCurrent", 100.0);
// Set the brightness to 100 %
Pylon.DeviceSetFloatFeature(hdev, "BslLightDeviceBrightness", 100.0);
// Set the operation mode to continuous
Pylon.DeviceFeatureFromString(hdev, "BslLightDeviceOperationMode", "On");
/* Macro to check for errors */
#define CHECK(errc) if (GENAPI_E_OK != errc) printErrorAndExit(errc)
GENAPIC_RESULT errRes = GENAPI_E_OK;  /* Return value of pylon methods */
/* Enable the light control mode */
errRes = PylonDeviceFeatureFromString(hdev, "BslLightControlMode", "On");
CHECK(errRes);
/* Enumerate the light devices */
errRes = PylonDeviceExecuteCommandFeature(hdev, "BslLightControlEnumerateDevices");
CHECK(errRes);
/* Select light device 1 */
errRes = PylonDeviceFeatureFromString(hdev, "BslLightDeviceSelector", "Device1");
CHECK(errRes);
/* Set the maximum current of device 1 to 100 mA */
errRes = PylonDeviceSetFloatFeature(hdev, "BslLightDeviceMaxCurrent", 100.0);
CHECK(errRes);
/* Set the brightness to 100 % */
errRes = PylonDeviceSetFloatFeature(hdev, "BslLightDeviceBrightness", 100.0);
CHECK(errRes);
/* Set the operation mode to continuous */
errRes = PylonDeviceFeatureFromString(hdev, "BslLightDeviceOperationMode", "On");
CHECK(errRes);

您也可以使用 pylon Viewer 轻松设置参数。