296 lines
6.3 KiB
TypeScript
296 lines
6.3 KiB
TypeScript
|
|
|
|
export enum ToolType {
|
|
SELECT = 'SELECT',
|
|
DRAW_LINE = 'DRAW_LINE', // Logical Edge
|
|
DRAW_MAGNET_STRAIGHT = 'DRAW_MAGNET_STRAIGHT', // Physical Line
|
|
DRAW_MAGNET_CURVE = 'DRAW_MAGNET_CURVE', // Physical Curve
|
|
ADD_RFID = 'ADD_RFID',
|
|
ADD_MARK = 'ADD_MARK',
|
|
ERASER = 'ERASER',
|
|
}
|
|
|
|
export interface Point {
|
|
x: number;
|
|
y: number;
|
|
}
|
|
|
|
// C# MapNode Type Enum (Internal use)
|
|
export enum NodeType {
|
|
Normal = 0,
|
|
Loader = 1,
|
|
UnLoader = 2,
|
|
Charging = 3, // Used for Cleaner in new map
|
|
Buffer = 4,
|
|
ChargerStation = 5,
|
|
Label = 6,
|
|
Image = 7
|
|
}
|
|
|
|
// React Internal Node Structure
|
|
export interface MapNode extends Point {
|
|
id: string; // NodeId
|
|
type: number; // NodeType (Internal enum)
|
|
name: string;
|
|
rfidId: string; // RFID is property of Node
|
|
connectedNodes: string[]; // Keep track for export
|
|
|
|
// Visual props
|
|
labelText?: string;
|
|
foreColor?: string;
|
|
backColor?: string;
|
|
imageBase64?: string;
|
|
displayColor?: string;
|
|
|
|
// New props preservation
|
|
fontSize?: number;
|
|
|
|
// Extended Properties (from C# Model)
|
|
stationType?: number;
|
|
speedLimit?: number;
|
|
canDocking?: boolean;
|
|
dockDirection?: number;
|
|
canTurnLeft?: boolean;
|
|
canTurnRight?: boolean;
|
|
disableCross?: boolean;
|
|
isActive?: boolean;
|
|
nodeTextForeColor?: string;
|
|
nodeTextFontSize?: number;
|
|
}
|
|
|
|
export interface MapEdge {
|
|
id: string;
|
|
from: string;
|
|
to: string;
|
|
}
|
|
|
|
// Physical Magnet Line for AGV to follow
|
|
export interface MagnetLine {
|
|
id: string;
|
|
type: 'STRAIGHT' | 'CURVE';
|
|
p1: Point;
|
|
p2: Point;
|
|
controlPoint?: Point; // Required for CURVE (Quadratic Bezier control point)
|
|
}
|
|
|
|
// Mark Sensor now needs rotation to be "crossed" on the line
|
|
export interface FloorMark extends Point {
|
|
id: string;
|
|
rotation: number; // Degrees
|
|
}
|
|
|
|
export interface SimulationMap {
|
|
nodes: MapNode[];
|
|
edges: MapEdge[]; // Logical Graph Connections
|
|
magnets: MagnetLine[]; // Physical Guide Tape
|
|
marks: FloorMark[];
|
|
}
|
|
|
|
// --- C# Data Transfer Objects (New JSON Structure) ---
|
|
|
|
export interface CSharpNode {
|
|
Id: string;
|
|
Text: string;
|
|
Position: string; // "x, y"
|
|
Type: number; // Usually 0 for nodes
|
|
StationType: number; // Functional type
|
|
ConnectedNodes: string[];
|
|
RfidId: string;
|
|
NodeTextForeColor?: string;
|
|
NodeTextFontSize?: number;
|
|
// Flags (Optional for TS if not used logic-side, but good to preserve)
|
|
CanDocking?: boolean;
|
|
DockDirection?: number;
|
|
CanTurnLeft?: boolean;
|
|
CanTurnRight?: boolean;
|
|
DisableCross?: boolean;
|
|
IsActive?: boolean;
|
|
SpeedLimit?: number;
|
|
AliasName?: string;
|
|
}
|
|
|
|
export interface CSharpLabel {
|
|
Id: string;
|
|
Type: number; // 1
|
|
Text: string;
|
|
Position: string;
|
|
ForeColor: string;
|
|
BackColor: string;
|
|
FontFamily?: string;
|
|
FontSize?: number;
|
|
FontStyle?: number;
|
|
Padding?: number;
|
|
}
|
|
|
|
export interface CSharpImage {
|
|
Id: string;
|
|
Type: number; // 2
|
|
Name: string;
|
|
Position: string;
|
|
ImagePath?: string;
|
|
ImageBase64?: string;
|
|
Scale?: string;
|
|
Opacity?: number;
|
|
Rotation?: number;
|
|
}
|
|
|
|
export interface CSharpMagnet {
|
|
Id: string;
|
|
Type: number; // 4
|
|
P1: { X: number; Y: number };
|
|
P2: { X: number; Y: number };
|
|
ControlPoint?: { X: number; Y: number } | null;
|
|
}
|
|
|
|
export interface CSharpMark {
|
|
Id: string;
|
|
Type: number; // 3
|
|
Position: string;
|
|
X: number;
|
|
Y: number;
|
|
Rotation: number;
|
|
}
|
|
|
|
export interface CSharpMapData {
|
|
Nodes: CSharpNode[];
|
|
Labels?: CSharpLabel[];
|
|
Images?: CSharpImage[];
|
|
Magnets: CSharpMagnet[];
|
|
Marks: CSharpMark[];
|
|
Settings?: any;
|
|
Version: string;
|
|
CreatedDate: string;
|
|
}
|
|
|
|
export enum AgvMotionState {
|
|
IDLE = 'IDLE',
|
|
FORWARD = 'FORWARD',
|
|
BACKWARD = 'BACKWARD',
|
|
TURN_LEFT = 'TURN_LEFT',
|
|
TURN_RIGHT = 'TURN_RIGHT',
|
|
TURN_LEFT_180 = 'TURN_LEFT_180',
|
|
TURN_RIGHT_180 = 'TURN_RIGHT_180',
|
|
MARK_STOPPING = 'MARK_STOPPING',
|
|
RUNNING = 'RUNNING',
|
|
}
|
|
|
|
export interface AgvRunConfig {
|
|
direction: 'FWD' | 'BWD';
|
|
branch: 'STRAIGHT' | 'LEFT' | 'RIGHT';
|
|
speedLevel: 'L' | 'M' | 'H';
|
|
}
|
|
|
|
// --- Protocol Enums (Matched with C# DevAGV.cs) ---
|
|
|
|
export enum AgvError {
|
|
Emergency = 0,
|
|
Overcurrent = 1,
|
|
Charger_run_error = 2,
|
|
Charger_pos_error = 3,
|
|
line_out_error = 4,
|
|
runerror_by_no_magent_line = 5,
|
|
agv_system_error = 6,
|
|
battery_low_voltage = 7,
|
|
lift_time_over = 9,
|
|
lift_driver_ocr = 10,
|
|
lift_driver_emg = 11,
|
|
arrive_ctl_comm_error = 12,
|
|
door_ctl_comm_error = 13,
|
|
charger_comm_error = 14,
|
|
cross_ctrl_comm_error = 15,
|
|
}
|
|
|
|
export enum AgvSignal {
|
|
front_gate_out = 0,
|
|
rear_sensor_out = 1,
|
|
mark_sensor_1 = 2,
|
|
mark_sensor_2 = 3,
|
|
lift_down_sensor = 4,
|
|
lift_up_sensor = 5,
|
|
magnet_relay = 6,
|
|
charger_align_sensor = 7,
|
|
front_center_sensor = 8,
|
|
}
|
|
|
|
export enum SystemFlag0 {
|
|
Memory_RW_State = 5,
|
|
EXT_IO_Conn_State = 6,
|
|
RFID_Conn_State = 7,
|
|
M5E_Module_Run_State = 8,
|
|
Front_Ultrasonic_Conn_State = 9,
|
|
Front_Untrasonic_Sensor_State = 10,
|
|
Side_Ultrasonic_Conn_State = 11,
|
|
Side_Ultrasonic_Sensor_State = 12,
|
|
Front_Guide_Sensor_State = 13,
|
|
Rear_Guide_Sensor_State = 14,
|
|
Battery_Level_Check = 15
|
|
}
|
|
|
|
export enum SystemFlag1 {
|
|
Side_Detect_Ignore = 3,
|
|
Melody_check = 4,
|
|
Mark2_check = 5,
|
|
Mark1_check = 6,
|
|
gateout_check = 7,
|
|
Battery_charging = 8,
|
|
re_Start = 9,
|
|
front_detect_ignore = 10,
|
|
front_detect_check = 11,
|
|
stop_by_front_detect = 12,
|
|
stop_by_cross_in = 13,
|
|
agv_stop = 14,
|
|
agv_run = 15
|
|
}
|
|
|
|
export interface AgvState {
|
|
x: number;
|
|
y: number;
|
|
rotation: number;
|
|
targetRotation: number | null;
|
|
speed: number;
|
|
liftHeight: number;
|
|
motionState: AgvMotionState;
|
|
runConfig: AgvRunConfig;
|
|
error: string | null;
|
|
sensorStatus: string; // Corresponds to sts_sensor in C#
|
|
|
|
// Physical Sensors
|
|
detectedRfid: string | null;
|
|
sensorLineFront: boolean;
|
|
sensorLineRear: boolean;
|
|
sensorMark: boolean;
|
|
|
|
// New features
|
|
magnetOn: boolean;
|
|
liftStatus: 'IDLE' | 'UP' | 'DOWN';
|
|
|
|
lidarEnabled: boolean; // 1=ON, 0=OFF
|
|
isCharging: boolean; // Manual charging state
|
|
|
|
// Protocol Flags (Integers representing bitmaps)
|
|
system0: number;
|
|
system1: number;
|
|
errorFlags: number;
|
|
signalFlags: number;
|
|
|
|
// Battery
|
|
batteryLevel: number; // Percentage 0-100
|
|
maxCapacity: number; // Ah (Total Capacity)
|
|
batteryTemps: number[]; // [Temp1, Temp2]
|
|
cellVoltages: number[];
|
|
}
|
|
|
|
export interface LogEntry {
|
|
id: string;
|
|
timestamp: string;
|
|
type: 'INFO' | 'RX' | 'TX' | 'ERROR';
|
|
source: 'AGV' | 'BMS' | 'ACS' | 'SYSTEM';
|
|
message: string;
|
|
}
|
|
|
|
export interface AcsPacket {
|
|
id: number;
|
|
command: number;
|
|
data: number[];
|
|
valid: boolean;
|
|
} |