Files
Denso/docs/fleetmanager/ScriptEngine.md
2026-07-03 16:31:37 +07:00

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

Last Updated: 2025-11-13