LTech / LTAnna

LTAnna.exe
装置制御実行基盤

LTAnnaは、Luaスクリプトと.NET拡張DLLを組み合わせて、半導体製造装置・搬送装置・SECS/GEM通信・PLC連携・GUI・3Dシミュレーションを構築する軽量な実行基盤です。

LTAnna.exeLua実行・装置制御・起動管理
Startup.lua / OnStart()プロジェクト初期化・DLLロード
UserScript / UserDll業務ロジックと機能拡張
LTGem / DeviceMap / GUI / 3D通信・PLC・表示・シミュレーション連携

1. LTAnnaの概要

LTAnnaは、Luaスクリプトを中核にした軽量な装置制御実行基盤です。実行エンジン、拡張DLL、スクリプト、ログ、GUIを分離し、案件ごとの差分をUserScript/UserDll側へ閉じ込めやすい構成にします。

Luaベースの制御エンジン

装置シーケンス、状態遷移、イベント処理、通信イベントの分岐をLuaで記述します。C#側を再ビルドせず、装置仕様の変更をスクリプト側で調整しやすくします。

.NET DLLによる拡張

通信、PLC、GUI、3D、ユーティリティなどを.NET DLLとして分離し、LuaからAnnaで始まるpublic static関数を呼び出します。

装置向け長時間運用

CSVログ、日付単位ローテーション、保存日数管理、標準フォルダ構成により、実運用で保守しやすい構成を目指します。

Lua装置ロジック
DLL機能拡張
Log運用記録
IPC装置間連携

2. 実行環境と前提条件

LTAnna.exeは.NET Framework 4.6、NLua、KeraLuaを前提にした実行環境です。Luaの軽量性を活かしながら、C# DLLによる拡張性を持ちます。

実行基盤LTAnna.exe
フレームワーク.NET Framework 4.6
Lua連携NLua v1.5.9 / KeraLua v1.2.14
拡張方式.NET Framework DLL。LuaからAnnaで始まるpublic static関数を呼び出します。
ライセンスUSBライセンスキーが必要です。開発環境・本番環境ともに運用前に接続確認します。

開発PCと実機PCでDLL、Lua、設定ファイル、ライセンスキーの配置差異があると、起動時エラーやDLLロード失敗につながります。リリース前にRelease一式で動作確認することを推奨します。

3. 標準フォルダ構成

実行モジュール、共通スクリプト、案件固有スクリプト、拡張DLL、ログ、GEM実行環境を明確に分離します。

Release配下の基本構成

C:\LTAnna\ProjectName\Release\
 ├─ Bin\          LTAnna.exe、共通DLL、実行モジュール
 ├─ Log\          LTAnnaログ、実績ログ、デバッグログ
 ├─ Script\       Startup.lua、共通Lua
 ├─ UserDll\      案件固有DLL、拡張DLL
 ├─ UserScript\   MainScript.lua、Config.lua、Const.lua、業務ロジック
 └─ GEM\          LTGem実行環境、GEM定義CSV、通信ログ

分離の目的

  • 共通部品と案件固有部品を分離
  • DLL差し替え範囲を明確化
  • ログと実行ファイルを分離
  • GEM定義と装置ロジックを分離

代表Luaファイル

  • Startup.lua:起動入口
  • MainScript.lua:全体初期化
  • Config.lua:案件設定
  • Const.lua:定数定義
  • SECSLink.lua / SECSGem.lua:通信連携
  • GUIApp.lua:GUI連携
  • MAPLink.lua / PLCLink.lua:PLC連携

4. 起動シーケンス

LTAnnaは、system.ini、startup.lua、OnStart()を順に実行してアプリケーションを開始します。

LTAnna.exe起動system.ini読込Script\startup.lua読込OnStart()自動実行MainScript初期化

system.ini

ログ保存先、保存日数、削除周期、起動時削除など、実行環境に関わる設定を持ちます。

startup.lua

最初に読み込まれるLuaです。通常はMainScript.luaをロードし、MainScript_OnStart()などのプロジェクト初期化へつなぎます。

OnStart()

startup.lua読込後に自動実行される入口関数です。DLLロード、Luaモジュール読込、GUIキュー生成などの起点になります。

起動処理の例

function OnStart()
    AnnaDLLLoad(RUNTIMEID, "LTTools.DLL")
    dofile("UserScript/Const.lua")
    dofile("UserScript/Config.lua")
    dofile("UserScript/MainScript.lua")
    MainScript_OnStart()
end

終了処理

  • SECS/GEM接続終了
  • DeviceMap/PLC停止
  • GUI終了
  • 3D表示終了
  • ログ出力完了

5. Luaスクリプト設計

装置ロジックをLuaに寄せ、DLLは再利用可能な機能単位に分離します。

MainScript.luaDLLロード、共通Lua読込、全体初期化、終了制御、キュー生成、モジュール起動順序管理。
Config.luaプロジェクト名、装置名、GEMフォルダ、通信方式、スロット数、デバッグ設定、ファイルパスなど。
Const.luaGUIコマンドID、GEMコマンドID、装置内部コマンド、状態コード、ステージ番号など。
SECSLink.luaLTGem.DLLロード、LTGem.exe起動、GEMオブジェクト生成、接続状態管理。
SECSGem.luaLTGemからの文字列イベント解析、GEMCMD変換、SECS応答、イベントレポート、アラーム送信。
GUIApp.luaGUIイベント中継、表示更新、手動操作、状態表示、装置ロジックへのディスパッチ。
MAPLink.lua / PLCLink.luaDeviceMap接続、PLC信号処理、Trigger + パラメータ方式の外部指令受付。
Viewer.luaLTViewer.DLLを利用したSECS/GEMログのリアルタイム表示や履歴参照。

6. 拡張DLLモデル

LTAnnaの大きな特徴は、Luaから.NET DLLを直接利用できる点です。

Lua公開関数の条件

  • public staticであること
  • 関数名がAnnaで始まること
  • Luaから扱いやすい引数と戻り値にすること
public static int AnnaAdd(int a, int b)
{
    return a + b;
}

必須Annaクラス

LTAnnaコアから渡されるLua環境一覧を保持し、DLLからLua関数を呼び出す基盤になります。

public class Anna
{
    internal static Dictionary<int, NLua.Lua> LUALIST_ = null;

    public static int SETLUALIST(Dictionary<int, NLua.Lua> l)
    {
        LUALIST_ = l;
        return 0;
    }
}

DLLからLuaを呼ぶ

runIDからLua環境を取り出し、Lua側関数を呼び出せます。スレッドやlockの設計に注意します。

var lua = Anna.LUALIST_[runID];
var func = lua.GetFunction("FuncName");
func.Call();

7. ログ仕様と運用設計

ログは装置運用とトラブル解析の中心です。ファイル形式、ローテーション、保存日数、削除周期を明確にします。

CSVログ形式

  • Shift-JIS CSV
  • 3カラム構成
  • 日時、区分、メッセージ
  • カンマやダブルクォートはCSV仕様でエスケープ
"YYYY/MM/DD HH:mm:ss",区分,メッセージ

ログレベル

  • Debug:開発・詳細追跡
  • 情報:通常イベント
  • 注意:運用上の注意
  • 危険:異常・復旧対象
  • 致命的:継続不可レベル

ローテーション

ログファイルはYYYYMMDD.csv単位で日付切替されます。保存期間はDefaultSaveDayで管理します。

system.ini推奨例

DefaultSavePath=..\Log
DefaultSaveDay=90
StartupFileDelete=1
FileDeleteCheckCycle=60

注意事項

  • DefaultSaveDay=0は避ける
  • FileDeleteCheckCycle=0は避ける
  • SystemログはCSV保存対象外
  • 多階層フォルダの自動作成に依存しない

8. 周辺コンポーネントとの連携

LTAnnaは単体のスクリプト実行環境ではなく、LTGem、DeviceMap、GUI、Viewer、3D、Debugger、Annyと組み合わせて装置制御システムを構成します。

LTGem.DLL

SECS/GEM通信を担当します。LTAnna側はLuaで受信イベントを解析し、装置状態やホスト通信を制御します。

LTAnnaDeviceMap.DLL

PLCデバイス相当の値を共有する基盤です。IPC、TCP、HTTPを選択でき、通常はIPCを使用します。

Anna3DViewer.dll

3D装置シミュレーションを提供します。Luaから3Dモデル読込、軸制御、コンテナ操作を実行できます。

GUIAppBase / GUIApp

GUIとLuaを分離し、メッセージ駆動でボタン操作、状態表示、ログ表示、手動運転を実現します。

LTViewer.DLL

LTGem通信ログのリアルタイム表示や履歴参照を行い、SECS/GEMデバッグを支援します。

Debugger.DLL / Anny

デバッグトレース、リモート待機、Lua編集、DLL解析、補完、実行制御を支援します。

9. 代表的な利用パターン

LTAnnaは、実機制御だけでなく、装置シミュレータ、工場側ホストシミュレータ、3D検証環境などにも利用できます。

装置制御ソフト

GUI、PLC、SECS/GEM、ロット管理、アラーム、搬送指示、ログを統合し、実機装置を制御します。

装置シミュレータ

LTGemとRobotSimを組み合わせ、処理開始、搬送、イベント、アラーム、通信応答を模擬します。

3Dシミュレータ

Anna3DViewerとDeviceMapを使い、外部PLC/SIMからの指令を受けて搬送機構を3Dで再現します。

ホストシミュレータ

工場側ホストを模擬し、装置側SECS/GEM通信のテスト、ロット投入、RemoteCommand検証を行います。

通信ログ解析環境

LTViewerを利用して、リアルタイム通信ログや過去ログを表示し、SECS/GEMメッセージを解析します。

開発・保守環境

AnnyでLuaを編集し、DLL解析、補完、実行、停止、ログ監視を行いながら保守できます。

10. 設計原則と実装チェックリスト

LTAnna案件を安定運用するには、責務分離、ログ設計、起動順序、終了順序、設定ファイル管理を明確にします。

責務分離

  • Lua:装置ロジックと状態遷移
  • DLL:再利用可能な機能
  • LTGem:SECS/GEM通信
  • DeviceMap:PLC抽象化
  • GUI:表示と操作受付

起動・終了

  • DLLロード順序を固定する
  • OnStart()を入口にする
  • 通信・GUI・3Dの起動順を整理する
  • 終了時に外部プロセスと接続を閉じる

ログ・保守

  • 保存日数を設定する
  • エラー時に原因が追えるメッセージにする
  • 実績ログとデバッグログを分ける
  • CSVエスケープを意識する

DLL設計

  • Annaで始まるpublic static APIにする
  • Luaから使いやすい引数にする
  • 例外処理を明確にする
  • 共通処理と案件固有処理を分ける

DeviceMap設計

  • READ/WRITEを分離する
  • 型一致アクセスを守る
  • 書込み直後の即時反映に依存しない
  • 命名規則を統一する

リリース前確認

  • Release一式で起動できる
  • ログ保存先が存在する
  • USBライセンスキーを確認済み
  • GEM/PLC/GUI/3Dの単体確認済み