LTAnna 3Dシミュレーション
Anna3DViewer.dll、DeviceMap、Lua制御を組み合わせ、半導体製造装置の搬送ロボット、ステージ、アライナ、キャリア、ウェハなどの動きを3Dで再現します。実機レス検証、教育、デモ、デバッグに活用できます。
1. Anna3DViewer.dllの位置づけ
Anna3DViewer.dllは、LTAnna.exeの機能拡張DLL仕様に準拠した3D表示・機構シミュレーション用DLLです。Luaから3D画面表示、モデル読込、コンテナ探索、軸制御、カメラ操作、イベント連携を行い、装置動作を視覚的に検証できます。
Lua向け3D操作API
LTAnnaのLuaスクリプトから、Annaで始まる公開関数を通じて3Dモデルや軸動作を制御します。
機構シミュレーション
ロボット、スライダー、ステージ、ハンド、アライナ、搬送対象物などの動きを3D上で再現します。
実機レス検証
PLCやDeviceMapと接続することで、実機が無い段階でも搬送ロジックやGUI操作を検証できます。
2. レイヤ構成
3Dシミュレーションは、LTAnna、Anna3DViewer.dll、3Dエンジン、OpenGL描画基盤が分担して動作します。
| LTAnna.exe | Lua実行基盤。拡張DLLをロードし、LuaからAnnaで始まるpublic static関数を呼び出します。 |
|---|---|
| Anna3DViewer.dll | Lua向け3D操作API層。3Dビューア生成、モデル読込、コンテナ操作、軸定義、動作制御、コールバックを担当します。 |
| LTech3D.dll | 3Dエンジン層。モデル、コンテナ、メッシュ、軸、カメラなどの内部処理を担当します。 |
| OpenTK | OpenGLコンテキスト、GLControl、描画基盤を提供します。 |
3. 基本ライフサイクル
3D画面を表示し、OpenGL描画可能状態を作ってからモデルを読み込む順序が重要です。
最小起動例
Anna3DShow(RUNTIMEID, gui3DQue, true, title3D) Anna3DLoad(mqoFile)
順序の理由
OpenGLコンテキスト生成前にモデルロードすると、描画リソースを確保できずエラーになる可能性があります。Show → Loadの順序を守ります。
終了処理
アプリ終了時は、3D画面、GUI、DeviceMap、TaskLoopなどの終了順序を整理し、残存スレッドや表示リソースを残さないようにします。
初期化時の確認
- DLLがロードされている
- gui3DQueが生成済み
- モデルファイルパスが正しい
- 表示スレッドが起動している
4. モデル形式と読込設計
Anna3DViewerではSTLとMQOを扱えます。固定物と可動機構でモデル形式やコンテナ設計を使い分けます。
STL
固定物、治具、外装、単純な部品形状に向きます。部品名や階層情報を持たないため、動かす場合は仮コンテナ名の確認が必要です。
MQO
部品名、階層、材質を活かした機構制御に向きます。可動部品を名前付きコンテナとして設計しやすい形式です。
複数ロード
Anna3DLoadは複数回呼び出し可能です。装置本体、治具、搬送対象物、背景部品を分けてロードできます。
モデル階層イメージ
World ├─ EquipmentBody │ ├─ StageX │ ├─ RobotBase │ ├─ ArmRotate │ └─ Hand ├─ Carrier01 │ ├─ Slot01 │ ├─ Slot02 │ └─ ... └─ WorkObjectCloneGroup
5. コンテナ設計ルール
3D制御では、コンテナ名と階層構造が非常に重要です。Luaから検索・制御する単位を、事前にモデル設計として決めます。
可動単位で分割
回転、直動、表示ON/OFF、ハイライト、Attach/Detachする部品は、独立したコンテナとして分けます。
名前を固定
Luaではコンテナ名で検索するため、可動部の名前を仕様として固定します。モデル差し替え時も名前を維持します。
World起点
シーン全体のルートはWorldです。探索、構造把握、座標変換の起点として扱います。
親子関係
親コンテナを動かすと子コンテナも連動します。ロボット、ハンド、保持物の関係は親子構造で表現します。
表示切替
装置状態、センサー状態、異常部位の可視化には、コンテナ単位の表示/非表示やハイライトを使用します。
命名レビュー
モデル設計時に、Lua側で使うコンテナ名一覧を出力・レビューし、仕様書化しておくと保守しやすくなります。
6. 代表API分類
Anna3DViewer.dllは、初期化、モデル、コンテナ、カメラ、軸、表示効果などのAPI群で構成されます。
| 初期化・表示 | Anna3DShow、Anna3DLoad、Anna3DVisible、Anna3DTitleBarVisible、Anna3DBackGroundImage |
|---|---|
| コンテナ管理 | Anna3DFindContainer、Anna3DFindChildContainer、Anna3DGetContainerList、Anna3DAddMeshContainer |
| 座標変換 | Anna3DConvertLocalPosToWorldPosなど。親子階層を持つ機構で重要です。 |
| カメラ制御 | 現在カメラ取得、カメラ位置設定、親コンテナ設定、カメラ位置リスト読込/書込。 |
| 表示効果 | 表示/非表示、ハイライト、背景画像、テクスチャ更新など。 |
| 軸・動作 | Rotate、Slider、軸完了イベント、タイマーイベントなど。 |
7. 軸制御:Rotate / Slider
機構動作は、回転軸と直動軸を組み合わせて表現します。軸オブジェクトは、対象コンテナ、速度、現在位置、目標位置、Busy状態を持つ設計にします。
Rotate
ロボットθ軸、アーム回転、アライナ回転、扉の開閉など、角度で表せる動作に使用します。
Slider
X軸、Z軸、リフト、スライダー、直動ステージなど、直線移動で表せる動作に使用します。
速度と完了
速度、目標値、現在値、Busy状態を管理し、動作完了時にOnAxisCompで次のシーケンスへ進めます。
軸完了イベントの考え方
function OnAxisComp(sender)
-- senderはSliderまたはRotate軸の管理オブジェクト
-- sender.mcon_.name などで対象コンテナを識別
-- 完了した軸に応じて次のコマンドへ進める
end
設計上の注意
- 同時に動く軸と順番に動く軸を分ける
- Busy中に同一軸へ再指令しない
- 停止・一時停止・再開を設計する
- 可動範囲外の指令を防ぐ
8. タイマーとイベント駆動
3Dシミュレーションでは、周期タイマーと軸完了イベントを使って、描画更新とシーケンス進行を分けます。
OnTimerBeat
30ms周期などで呼ばれるタイマーイベントです。msecには累積時間が入り、時間経過に応じた更新処理に利用できます。
OnAxisComp
軸動作完了時に発生します。FIFOコマンドや搬送シーケンスの次ステップへ進むトリガになります。
イベント内処理
イベント内で重い処理を行わず、必要に応じてキューへ積む設計にすると安定します。
9. クローンと搬送対象物管理
ウェハ、キャリア、治具など同一形状を複数扱う場合は、クローンを利用して効率よく管理します。
MakeClone
元コンテナの階層をコピーし、搬送対象物やスロット内オブジェクトを複数生成します。
Attach / Detach
搬送対象物をハンドに持たせる、ステージに置く、といった処理は親子関係の付け替えとして表現できます。
SlotMap連携
スロット状態に応じて、クローン表示、非表示、位置更新、色変更を行うことで状態を視覚化できます。
搬送対象物管理の例
Carrier ├─ Slot01 : WorkObjectClone01 ├─ Slot02 : Empty ├─ Slot03 : WorkObjectClone03 └─ ... RobotHand └─ HoldingObject -- Get後に親をHandへ変更
10. DeviceMap連携による外部制御
DeviceMapを使うと、外部PLCシミュレータや装置制御アプリから3Dシミュレータへ搬送指示を送れます。Trigger + パラメータ方式が扱いやすい構成です。
入力信号
外部制御側から、動作種別、搬送元、搬送先、速度、対象スロットなどをDeviceMap経由で渡します。
Trigger方式
パラメータを設定した後、最後にTriggerを更新して、3D側に新しい指令として認識させます。
完了通知
動作完了、異常、Busy解除などをDeviceMapへ書き戻し、外部制御側へ通知します。
搬送指示例
SIM_Command.I2Value = 100 -- MoveFromToなどのコマンド SIM_FromStage.I2Value = 1 SIM_ToStage.I2Value = 5 SIM_TargetSlot.I2Value = 12 -- パラメータ設定後、最後にTrigger更新 SIM_Trigger.U2Value = SIM_Trigger.U2Value + 1
順序の注意
- Triggerより前にパラメータを書く
- 書込み直後の即時反映に依存しない
- Busy中の二重指令を防ぐ
- 完了信号を必ず返す
11. GUI連携
3Dシミュレーションは、GUIAppやGUIAppBaseと連携することで、ユーザー操作、状態表示、ログ表示、手動運転を統合できます。
GUIキュー
LuaとGUIをキューやWindowsメッセージで接続し、表示更新と装置ロジックを分離します。
手動操作
原点復帰、Get、Put、Move、Mapping、表示切替、カメラ切替などをGUIボタンから実行できます。
状態表示
Busy、Ready、Alarm、センサー状態、スロット状態、通信状態を画面上に表示できます。
12. カメラ・表示効果・デバッグ
3D画面は、装置説明、開発デバッグ、顧客向けデモに使われるため、見やすい視点と状態表示が重要です。
カメラプリセット
正面、上面、ロボット周辺、ポート周辺などのカメラ位置を登録し、ボタンで切り替えます。
追従カメラ
カメラを移動体コンテナの子にすることで、ロボットやハンドを追従表示できます。
ハイライト
選択中ステージ、異常箇所、搬送元、搬送先などを強調表示すると、デバッグ効率が上がります。
テクスチャ更新
パネル表示や状態表示をテクスチャ更新で表現できます。装置状態の可視化に有効です。
ログ連携
軸指令、完了イベント、DeviceMap入力、GUI操作をログ化すると、搬送異常の原因追跡が容易になります。
デバッグ表示
コンテナ名一覧、現在座標、軸Busy、FIFO内容などを表示できると、モデル調整とロジック検証がしやすくなります。
13. 代表的な装置シミュレータ構成
半導体製造装置向け3Dシミュレータでは、キャリアポート、アライナ、搬送ロボット、スライダー、Mapping Sensorなどを組み合わせて搬送動作を再現します。
装置要素
- キャリアポート
- アライナ
- 搬送ロボット
- スライダー
- Mapping Sensor
- 処理ステージ
ソフト構成
- LTAnna.exe
- Anna3DViewer.dll
- DeviceMap
- GUIApp.DLL
- Lua搬送シーケンス
搬送機能
- Move
- Get
- Put
- Mapping
- Align
- Pause / Resume / Stop
3Dシミュレーション動画
以下のプレーヤーから、半導体製造装置向け3Dシミュレーション動画をページ内で再生できます。
動画が表示されない場合は、閲覧環境でYouTubeへの接続が制限されているか、ローカルHTMLからの埋め込み再生がブラウザ側で制限されている可能性があります。
YouTubeで直接開く14. 実装時チェックリスト
3Dシミュレーションを安定して運用するための確認項目です。
モデル
- 可動単位でコンテナ分割されている
- Luaから使うコンテナ名が固定されている
- World配下の階層が把握できている
- モデルファイルパスが正しい
軸・動作
- Show → Loadの順序を守っている
- 可動範囲チェックがある
- Busy中の二重指令を防いでいる
- OnAxisCompで完了処理している
連携
- DeviceMapのTrigger順序が正しい
- GUI操作とLuaロジックが分離されている
- ログで指令と完了を追跡できる
- 終了時にリソースを解放している