プロジェクト概要
本プロジェクトは、半導体プロセス装置で使用されるWindows上位制御ソフトを対象としました。Qt/C++アプリケーションが温調器、針弁、真空計、シャッター制御器、産業用カメラと通信し、SQLiteに装置サンプル、コマンドイベント、カメラフレームのメタデータを保存します。現行ソフトを停止せず、温度データの断続、コマンド確認不足、カメラのフレームレート低下、記録の無通知停止を切り分けることが主な目的でした。
納品は二つの独立した経路で行いました。保守経路では既存アプリケーションに限定的かつロールバック可能な修正を適用し、Windows x64インストーラーを作成しました。v2経路では別ディレクトリと別AppIdを用い、シリアルポート、データベース、カメラ、スクリプトの責務を再構成しました。現場の設定と履歴データを保持し、安全確認のない状態では装置に接続し得るプログラムを起動していません。
システム範囲と技術構成
| 領域 | 技術・装置 | 実施内容 |
|---|---|---|
| 上位制御 | Windows 10/11 x64、Qt 5.12.12、C++、MSVC | 診断、安定化、Releaseビルド、インストーラー |
| 温度制御 | 10台のModbus RTU温調器、9600 baud | 読出し短縮、直列トランザクション、書込み応答とSP回読 |
| 針弁・シャッター | EI-BISYNCH、装置固有応答 | プロトコル解析、ACK/NAK、状態検証 |
| 産業用カメラ | Galaxy SDK、基準露光125 ms | 最新フレーム、ACK修正、取得・保存ウォッチドッグ |
| データ・スクリプト | SQLite、JPEG、工程スクリプト | 単一書込み、時刻分離、模擬実行、失敗境界 |
現場データに基づく診断
約8.89時間分の履歴ログとデータベースを読み取り専用で確認しました。COM5では受信バッファが128バイトを超えた後のクリアが5,168回記録され、10台の温調器の有効更新間隔は設定値の2秒より明らかに長くなっていました。コードでは高頻度ポーリングが各装置から約35レジスタ、約75バイトの応答を取得していました。GUI処理、遅いデータベースバッチ、150 msの待ち時間が、遅延応答と次要求の混在を起こしやすくしていました。
同じPCの履歴カメラ記録では、旧基準版のJPEG書込みが8.006 FPS、性能低下版が3.919 FPSでした。どちらのサンプルにも隣接JPEGの完全一致はありませんでした。原因は、原始フレームのACKがカメラWorkerのキューに戻され、次のブロッキング取得がACKより先に実行される点でした。この数値は回帰の特定に使用したもので、修正版の現場受入結果ではありません。
既存アプリケーションの限定修正
保守経路は既存UI、装置設定、データフォルダー、工程スクリプト入口を維持しました。変更前に対象ファイルをバックアップし、パッチアーカイブとインストーラーのSHA-256を記録しました。インストーラーは既存のMBE_Data、Scriptfile、装置設定を保持し、インストール後に制御ソフトを自動起動しません。
- 温度の高頻度読出しをPV、SP、Working SPに必要な範囲へ縮小し、代表的な応答を約75バイトから約15バイトへ変更しました。
- Sub温度書込みはModbus
0x06応答を照合し、その後SPを読みます。応答なし、または不一致の場合は失敗として扱います。 - カメラ取得をWorker駆動とし、プレビューと原始記録はそれぞれ1フレームのみを処理中に保持します。
- 既に摂氏の工学値に対する二重の10分の1換算を削除しました。
Ramp Rateの装置回読
Ramp Rateは固定値を表示せず、起動時に--を表示してから装置レジスタ0x0023を読みます。安定状態では3秒ごとに1台を読み、10台で約30秒の一巡です。PV/SPの高頻度要求にRamp Rateを含めないため、9600 baudバスの毎回の応答を長くしません。
この修正は表示値の由来を明確にするものです。装置データ受信後にのみ数値を表示します。現場パネルで値を変更した後の同期は1.0.3を実機運転して確認する必要があり、完了済みの装置受入とはしていません。
カメラ取得と保存経路
プレビューと記録は最新フレーム方式です。GUIやJPEGエンコーダが一時的に遅い場合、中間フレームを置換し、イベントキューを無制限に増やしません。原始フレームACKは次のブロッキング取得の後ろに並べず、原子フラグを直接解除します。ファイル名とデータベースには実取得時刻を記録し、保存開始・完了時刻は別項目にします。
1.0.3では二つのウォッチドッグを追加しました。カメラが開いていても3秒間原始フレームが来ない場合は取得を閉じて再オープンし、再起動要求には10秒のクールダウンを設けます。保存処理または最終永続化から3秒を超えた場合は停滞状態を解除し、最新フレームで再試行します。ドライバー、USB、ディスク、データベース異常の現場診断は別途必要です。
独立v2アーキテクチャ試験
v2は別ソースツリー、別AppId、別インストール先を使用し、稼働中の旧版を置き換えません。既定ではシリアル接続、監視、カメラオープン、起動時シャッター命令を実行しません。物理シリアルポートは一つのPortWorkerだけが所有し、ポーリング、手動命令、スクリプト命令を一つの優先度付きトランザクションキューで処理します。
SQLiteの書込み接続は一つだけで、装置サンプルとカメラメタデータを時間または件数の閾値でまとめてコミットします。履歴は別の読取り専用接続を使用します。取得、プレビュー、JPEG記録を分離し、スクリプトは短い状態機械ステップで進みます。応答または目標値回読が失敗した時点で処理を停止します。
ビルド、封装、データ保持
保守版1.0.3はCMakeとMSVCのRelease x64でビルドし、Inno Setup 6.7.3で封装しました。Release実行ファイルは1,727,488バイトです。ステージには78ファイル、合計66,292,772バイトが含まれ、Galaxy SDK、Qt、SQLiteドライバー、VC Runtime、装置設定を確認し、Qt Debug DLLは含まれていません。
インストーラー版は1.0.3.20260728、サイズは19,884,961バイトです。実行ファイル、パッチ、インストーラーの完全なSHA-256を納品記録に保存しました。Authenticode署名は未実施で、Windowsが不明な発行元を表示する可能性があります。
検証結果と適用境界
| 検証項目 | 記録結果 | 境界 |
|---|---|---|
| 履歴診断 | 8.89時間、COM5バッファクリア5,168回 | 旧版の問題を示すが、修正結果ではない |
| 履歴カメラ比較 | 基準8.006 FPS、低下版3.919 FPS | ACK回帰の診断用で、1.0.3現場試験ではない |
| 保守版Release | Windows x64ビルドと6項目の静的確認を完了 | コンパイルとコード経路の確認であり、実機受入ではない |
| 保守版CTest | 終了コード0、出力はNo tests were found | 自動テスト未登録として記録 |
| v2試験 | Debug全量ビルド、CTest 1/1、11分類の非実機確認 | プロトコル、状態、スクリプト、保存。装置未接続 |
| 現場装置 | 1.0.3とv2の接続試験は未実施 | Ramp Rate、復旧、Sub書込み、8時間運転は未受入 |
現場安全と受入計画
アプリケーション起動後はシリアル装置やカメラへ接続し、制御命令を送る可能性があります。そのため、遠隔作業では無人のデスクトップ上で新ビルドを起動せず、既存プロセスも停止しませんでした。現場担当者が安全状態を確認した後、監視、単独命令、カメラ、針弁とシャッター、スクリプト、統合運転の順で確認します。
- 30分監視し、各温調器のサンプル間隔、タイムアウト率、最大空白を算出します。
- 安全なSub目標を複数回書き、
0x06応答、SP回読、装置表示、PVを照合します。 - 露光、解像度、保存先を固定し、取得FPS、保存FPS、スキップ、端末間遅延を計測します。
- カメラリンクを切断・復帰し、ログ、プレビュー、記録の回復を確認します。
- 8時間の統合記録後に旧版の置換可否を判断します。
再利用できる開発方法
この方法は、稼働継続とロールバックを求められる既存産業用Windowsソフトに適用できます。半導体装置、真空系、温調、産業用カメラ、多ポート収集、研究設備、工程スクリプトなどが対象です。ログ、データベース、プロトコル経路から再現可能な根拠を作り、小範囲修正と独立アーキテクチャ試験をリスクに応じて使い分けます。
類似案件に必要な入力
初期評価には装置プロトコル、シリアルトポロジー、レジスタ表、カメラSDKとサンプル、現行ソースとビルド環境、履歴ログとデータベース、安全境界、ロールバック方法、サンプル周期・命令成功・FPS・遅延・連続運転の数値条件が必要です。実機時間がない場合も静的診断、非実機試験、インストーラー確認、受入計画は作成できますが、現場受入の代わりにはなりません。
よくある質問
新規開発ですか、既存システムの保守ですか。
両方です。保守経路は限定修正と1.0.3インストーラーを作成し、v2経路はスレッド、トランザクション、データ所有を検証する独立試験線です。
なぜSSHから新ビルドを起動しなかったのですか。
起動するとカメラやシリアルポートを占有し、装置命令を送る可能性があります。現場担当者が安全状態を確認していないため、ソース、ビルド、封装、静的確認までとしました。
8.006 FPSは修正後の測定値ですか。
いいえ。同じPCの履歴基準値で、3.919 FPSは低下版です。ACK調度問題の特定に使った比較であり、修正版は条件を固定して再測定する必要があります。
すべての装置機能をテストしましたか。
していません。保守版は自動テスト未登録、v2は一つの試験プログラムで11分類の非実機確認を実施しました。実装置と長時間運転は現場受入項目です。
現場データと設定をどのように保護しましたか。
変更前バックアップ、パッチとインストーラーのハッシュ、データ・スクリプト・既存設定の保持、v2の別AppIdと別ディレクトリを使用しました。切替は現場受入後に判断します。

Online
Phone
WeChat
Top