ソフトウェアと連携

安定したSDK取得:バッファ、タイムアウト、再接続

正常画像を返すループでも、バッファ漏れや再接続後の旧画像再利用が起こります。実SDKの寿命と切断通知を確認します。付録はメーカー非依存の疑似コードで、実行可能なDeyi APIではありません。

サンプルを送って技術相談する
安定したSDK取得:バッファ、タイムアウト、再接続
技術説明用の図。実写写真や実施済み試験の証拠ではありません。

課題と前提条件

正常画像を返すループでも、バッファ漏れや再接続後の旧画像再利用が起こります。実SDKの寿命と切断通知を確認します。付録はメーカー非依存の疑似コードで、実行可能なDeyi APIではありません。

試験の準備

仮に2000×1500のMono8なら一枚3MB、8バッファで24MBです。メタデータと処理コピーは含みません。対象機器識別子と再接続ごとの取得世代を定義します。

取得ループ設計前にSDKの取得と寿命の規定を読みます。バッファ割当者、結果所有者、ドライバーへ戻る時点、返却後の保持参照の有効性を確認します。取り外し通知と実行スレッドも確認します。通知内でのブロックが禁止なら状態変更と終了調整を別にします。再列挙の先頭ではなく規定された安定識別で装置を選びます。寸法、形式、ペイロード、トリガー、転送を承認設定として残します。下の概念操作名はDeyiのSDKインターフェースを約束しません。

作業手順

  1. サイズと形式を設定後、SDKが報告するペイロード量からバッファを確保します。
  2. 待機時間を有限にし、トリガーなし、転送異常、機器切断を分けます。
  3. 文書の所有権ルールに従ってコピーまたは保持してから取得結果を解放します。
  4. 切断時はワーカーを停止し、未返却バッファを戻して旧世代の結果を破棄します。
  5. 指定機器だけ再接続し、設定を再確認して新世代で開始します。
VENDOR-NEUTRAL PSEUDOCODE — conceptual operations, not SDK API names
connect(expected_device_identity)
verify_configuration_and_payload()
generation = new_generation()
while connected:
    result = none
    owned_image = none
    try:
        result = acquire_with_deadline()
        if result.is_valid:
            owned_image = copy_or_retain_under_documented_rules(result)
            process(owned_image, generation)
        else:
            record_acquisition_fault(result, generation)
    finally:
        release_owned_image_if_present(owned_image)
        release_grab_result_if_present(result)
on_coordinator_receives_device_removed:
    invalidate_current_generation()
    stop_and_join_workers()
    return_all_buffers()
    discard_old_generation_results()
    reconnect_expected_device_and_verify_configuration()
    generation = new_generation()

有限期限で取得し、データへ触る前に結果を確認します。外部トリガーなしの時間切れと転送失敗・取り外しは復旧が異なります。処理前に世代と画像またはイベント識別を付けます。アプリ所有領域へコピーするか、規定した所有保持を使います。通常完了でも例外でも解放します。処理キューに上限と満杯時処置を定めます。メモリ無制限増加は滞留対策ではなく、前の画像を新要求に使うのも欠落の代用ではありません。

仮定に基づく試験記録

以下は説明用の仮定であり、Deyiの実測結果ではありません。実際に承認した試験記録に置き換えてください。

仮定に基づく試験記録
記録項目仮定値
待ち行列容量8
非圧縮画像データ3 MB
保存容量24 MB
試験数1000

設定した撮像速度を維持して処理側を意図的に遅くします。取得世代、フレーム識別子、キュー深さ、使用中バッファ数、タイムアウト理由を記録します。画像をコピーする場合、24 MBの計算にはコピーを含みません。参照を保持するならSDKが認める寿命が必要です。finally節は処理例外でも解放する概念を示します。再接続後に旧世代の遅延結果を投入し、現行の検査結果にならないことを確認します。

取り外し後は該当世代の新処理を止め、使用中資源を解放する前にワーカー終了を調整します。SDK契約に従い未完操作を終了し、バッファを戻して旧結果を捨てます。予定装置へ再接続し、既定値が同じとせず設定を検証します。新しいバッファを割り当てる前に現在のペイロード情報を読み戻し、新セッションの準備が完了してから新世代を作ります。旧通知とキュー結果は画像番号が似ても世代で拒否します。原バッファ計算は一部で、コピー、キュー、アルゴリズム作業領域も実測予算に含めます。

工程を示す二つの図

安定したSDK取得:バッファ、タイムアウト、再接続 — 1

取得から処理へ所有権を渡し、利用完了後に解放します。

  1. 取得
  2. 保持またはコピー
  3. 処理
  4. 解放
技術説明用の図。実写写真や実施済み試験の証拠ではありません。
図解を原寸で表示

安定したSDK取得:バッファ、タイムアウト、再接続 — 2

タイムアウト、切断、正常終了は別の状態遷移です。

  1. 待機期限
  2. 機器切断
  3. 正常終了
技術説明用の図。実写写真や実施済み試験の証拠ではありません。
図解を原寸で表示

トラブルの切り分け

  • メモリ増加は未解放結果や無制限の処理待ちを確認します。
  • 画像破損はドライバーへ返却後の参照を確認します。
  • 旧画像が繰り返される場合は待ち行列と世代管理を確認します。

受入確認と引き継ぎ

仮の1000画像試験に加え、切断、復旧、終了、低速処理を試します。メモリが有限で、旧世代が混ざらず、異常が明示されることを確認します。24MBは総メモリではありません。

試験前に受入基準を定め、元の証拠を保存してください。本例は供給対象モデルの機能を保証するものではありません。

継続取得、中断、遅い処理で受入を行います。使用中バッファ、キュー、プロセスメモリ、世代遷移、各要求の最終理由を残します。管理した取り外し・復旧と取得待機中の終了を試します。終了が完了し、ワーカーが解放後資源へ触れず、旧画像が新検査にならないことを示します。処理例外でfinallyも試します。再開前に識別と設定を照合します。1000フレームは機能試験で長期漏れや信頼性保証ではありません。SDK版、所有、キュー、復旧、異常証拠を渡し、実コードは専用資料で確認します。

出典と技術資料

出典は、本記事の手法と限界を確認するための資料です。確認例は選定の参考であり、量産での受入判定には実際のサンプルによる証拠が必要です。

  1. Programming with pylon CBasler確認日
  2. pylon .NET SamplesBasler確認日

技術相談

検査の課題と確認データを共有してください。

サンプル画像、現在の構成、失敗した確認手順をお送りください。視野、ワーキングディスタンス、ライン速度、受入基準が分かると具体的な検討につながります。

サンプルを送って技術相談する
相談

RFQの直接連絡

検査条件を技術担当に相談できます。

サンプル画像、参考型番、視野、ワーク距離、ライン速度を共有してください。

目安: 24時間以内に選定メモ
欠陥リスクを先に確認