1. LTAnnaの概要
LTAnnaは、Luaスクリプトを中核にした軽量な装置制御実行基盤です。実行エンジン、拡張DLL、スクリプト、ログ、GUIを分離し、案件ごとの差分をUserScript/UserDll側へ閉じ込めやすい構成にします。
Luaベースの制御エンジン
装置シーケンス、状態遷移、イベント処理、通信イベントの分岐をLuaで記述します。C#側を再ビルドせず、装置仕様の変更をスクリプト側で調整しやすくします。
.NET DLLによる拡張
通信、PLC、GUI、3D、ユーティリティなどを.NET DLLとして分離し、LuaからAnnaで始まるpublic static関数を呼び出します。
装置向け長時間運用
CSVログ、日付単位ローテーション、保存日数管理、標準フォルダ構成により、実運用で保守しやすい構成を目指します。
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()を順に実行してアプリケーションを開始します。
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.lua | DLLロード、共通Lua読込、全体初期化、終了制御、キュー生成、モジュール起動順序管理。 |
|---|---|
| Config.lua | プロジェクト名、装置名、GEMフォルダ、通信方式、スロット数、デバッグ設定、ファイルパスなど。 |
| Const.lua | GUIコマンドID、GEMコマンドID、装置内部コマンド、状態コード、ステージ番号など。 |
| SECSLink.lua | LTGem.DLLロード、LTGem.exe起動、GEMオブジェクト生成、接続状態管理。 |
| SECSGem.lua | LTGemからの文字列イベント解析、GEMCMD変換、SECS応答、イベントレポート、アラーム送信。 |
| GUIApp.lua | GUIイベント中継、表示更新、手動操作、状態表示、装置ロジックへのディスパッチ。 |
| MAPLink.lua / PLCLink.lua | DeviceMap接続、PLC信号処理、Trigger + パラメータ方式の外部指令受付。 |
| Viewer.lua | LTViewer.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の単体確認済み