4.3 KiB
4.3 KiB
ScriptEngine Module / Module Script Engine
📋 Overview / Tổng quan
ScriptEngine Module quản lý script do người dùng thiết kế, chạy Task và Mission để tùy chỉnh logic của FleetManager.
🎯 Mục đích / Purpose
Cho phép người dùng viết C# scripts để tùy chỉnh mission planning, tích hợp hệ thống bên ngoài, và tự động hóa các tác vụ.
🏗️ Kiến trúc / Architecture
- Shared Library: ScriptEngine là shared library cho FleetManager và RobotApp
- Implementation: FleetManager và RobotApp implement
IScriptResourceđể cung cấp Type mô tả và object cho API mở rộng - Components:
- C# Library: Script compilation, execution, state machine
- Blazor Library: Monaco Editor component với IntelliSense
🔧 Chức năng chính / Main Features
1. Script File Management / Quản lý File Script
- Quản lý script files bằng file system
- Backup và restore scripts (ZIP format)
- File locking qua SignalR (khi user đang edit, các session khác không được sửa)
2. Script Compilation / Biên dịch Script
- Compile C# scripts với Roslyn
- Extract Mission methods (có
[Mission]attribute) - Extract Task methods (có
[Task]attribute) - Extract Variables (có
[Variable]attribute)
3. Mission và Task Execution / Thực thi Mission và Task
- MissionInstance execution: Chạy Mission methods với progress tracking
- Task execution: Chạy Task methods theo interval (periodic)
- State machine: Idle → Building → Ready → Running
4. IntelliSense Support / Hỗ trợ IntelliSense
- Sử dụng AdhocWorkspace trên WebAssembly
- IntelliSense, Hover information, Diagnostics
- Real-time code analysis
🔌 FleetManager Script APIs
FleetManager implement IScriptResource để expose APIs cho scripts:
public class FleetScriptGlobals
{
// Robot Management
Robot GetRobotById(string robotId);
Robot GetRobotBySerial(string serialNumber);
List<Robot> GetAvailableRobots();
// Order Creation (tự động tìm route và tạo order)
Task MoveToNode(string robotSerial, string nodeId);
Task MoveToStation(string robotSerial, string stationId);
// Robot State
RobotState GetRobotState(string robotSerial);
// External System Integration
// Có thể khai báo kết nối với:
// - HTTP APIs
// - Modbus TCP
// - OPC UA
// - CcLink
// - ProfileNet
// - MQTT (external)
}
📝 Mission và Task trong ScriptEngine
- Mission: Methods có
[Mission]attribute, được extract và tạo thành MissionInstance - Task: Methods có
[Task]attribute, chạy lặp lại theo interval - Mission và Task có thể tương tác qua common APIs:
EnableTask(string taskName)/DisableTask(string taskName)CreateMission(string missionName, params)/CancelMission(Guid missionId)
🔄 Luồng Mission Execution / Mission Execution Flow
sequenceDiagram
participant Script as C# Script
participant ScriptEngine
participant MissionInstance
participant FleetAPI as FleetManager APIs<br/>(RobotManager)
participant TrafficControl
participant VDAHandler as VDA 5050 Handler
participant Robot
Script->>ScriptEngine: [Mission] method defined
ScriptEngine->>ScriptEngine: Extract & compile
ScriptEngine->>MissionInstance: Create MissionInstance
MissionInstance->>FleetAPI: MoveToNode("ROBOT001", "NodeA")
FleetAPI->>TrafficControl: Calculate route to NodeA
TrafficControl->>TrafficControl: Find path using A*
TrafficControl->>VDAHandler: Generate VDA 5050 Order
VDAHandler->>Robot: Send Order
Robot->>FleetAPI: State updates
FleetAPI->>MissionInstance: Continue execution
🔗 Related Documents / Tài liệu Liên quan
- FleetManager Overview - Tổng quan FleetManager
- RobotManager Module - Cung cấp APIs cho ScriptEngine
- TrafficControl Module - Được gọi từ ScriptEngine để tính toán routes
- ScriptEngine Documentation - Chi tiết về ScriptEngine shared library
Last Updated: 2025-11-13