課題と前提条件
正常画像を返すループでも、バッファ漏れや再接続後の旧画像再利用が起こります。実SDKの寿命と切断通知を確認します。付録はメーカー非依存の疑似コードで、実行可能なDeyi APIではありません。
試験の準備
仮に2000×1500のMono8なら一枚3MB、8バッファで24MBです。メタデータと処理コピーは含みません。対象機器識別子と再接続ごとの取得世代を定義します。
取得ループ設計前にSDKの取得と寿命の規定を読みます。バッファ割当者、結果所有者、ドライバーへ戻る時点、返却後の保持参照の有効性を確認します。取り外し通知と実行スレッドも確認します。通知内でのブロックが禁止なら状態変更と終了調整を別にします。再列挙の先頭ではなく規定された安定識別で装置を選びます。寸法、形式、ペイロード、トリガー、転送を承認設定として残します。下の概念操作名はDeyiのSDKインターフェースを約束しません。
作業手順
- サイズと形式を設定後、SDKが報告するペイロード量からバッファを確保します。
- 待機時間を有限にし、トリガーなし、転送異常、機器切断を分けます。
- 文書の所有権ルールに従ってコピーまたは保持してから取得結果を解放します。
- 切断時はワーカーを停止し、未返却バッファを戻して旧世代の結果を破棄します。
- 指定機器だけ再接続し、設定を再確認して新世代で開始します。
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
取得から処理へ所有権を渡し、利用完了後に解放します。
- 取得
- 保持またはコピー
- 処理
- 解放
安定したSDK取得:バッファ、タイムアウト、再接続 — 2
タイムアウト、切断、正常終了は別の状態遷移です。
- 待機期限
- 機器切断
- 正常終了
トラブルの切り分け
- メモリ増加は未解放結果や無制限の処理待ちを確認します。
- 画像破損はドライバーへ返却後の参照を確認します。
- 旧画像が繰り返される場合は待ち行列と世代管理を確認します。
受入確認と引き継ぎ
仮の1000画像試験に加え、切断、復旧、終了、低速処理を試します。メモリが有限で、旧世代が混ざらず、異常が明示されることを確認します。24MBは総メモリではありません。
試験前に受入基準を定め、元の証拠を保存してください。本例は供給対象モデルの機能を保証するものではありません。
継続取得、中断、遅い処理で受入を行います。使用中バッファ、キュー、プロセスメモリ、世代遷移、各要求の最終理由を残します。管理した取り外し・復旧と取得待機中の終了を試します。終了が完了し、ワーカーが解放後資源へ触れず、旧画像が新検査にならないことを示します。処理例外でfinallyも試します。再開前に識別と設定を照合します。1000フレームは機能試験で長期漏れや信頼性保証ではありません。SDK版、所有、キュー、復旧、異常証拠を渡し、実コードは専用資料で確認します。
出典と技術資料
出典は、本記事の手法と限界を確認するための資料です。確認例は選定の参考であり、量産での受入判定には実際のサンプルによる証拠が必要です。
- Programming with pylon CBasler確認日
- pylon .NET SamplesBasler確認日
部品と選定の参考資料
- スマート カメラ vs PC ベースのビジョン システム
- GigE vs USB3 産業用カメラ
- マシンビジョンシステム
- machine vision software · 英語の参考資料
- EAN-13 追跡:ライン受入
- EAN-13 追跡:復号とデータ検証
- 液面高さ検査の処理を受け入れ連携する
- 可視液位の代理値を扱うAI支援フローを検証する
- 検査記録、画像、部品識別子を関連付けて保存する
- OCR ラベル照合:受入と PLC 契約
- OCR ラベル照合:ネイティブ処理と厳密照合
- 開いた包装の完全性検査を受け入れ連携する
- AI支援で開いた包装の完全性処理を構築
- PLCと視覚装置のハンドシェイクを状態機械で定義する
- 封口・接着剤外観:ライン受入
- 封口・接着剤外観:判定ワークフロー
- SKU・色分選:受入と未知クラス搬送
- SKU・色分選:色と商品の判定規則
- 表面欠陥検査:受入とライン出力
- 表面欠陥検査:範囲を限定した AI 評価
- トリガーからPLC判定までの遅延を負荷試験する
- 視覚レシピ一式を版管理し復旧を検証する

