using System.Collections.Generic;
namespace StandardScene.Scheduler.FassEvent
{
///
/// FASS 车辆事件配置项,对应 Configs/EventCar/*.json 数组中的单个元素。
/// 配置格式与 FASS.Scheduler 的 EventCar 模型保持一致,便于直接复用现场 JSON。
///
public class FassEventCarConfig
{
/// 是否启用本条事件规则。
public bool TriggerEnable { get; set; } = true;
///
/// 事件来源。StandardScene 进程仅处理值为 Car 的项(车辆定时轮询触发)。
///
public string TriggerSource { get; set; } = "Car";
///
/// 触发时机。当前实现仅支持 TimerTick(与 FASS EventCarService.CarTimerTick 等价)。
///
public string TriggerEvent { get; set; } = "TimerTick";
/// 触发条件:车辆编号(逗号分隔,空表示不限制)。
public string TriggerCarCode { get; set; }
/// 触发条件:上一地标号(逗号分隔)。
public string TriggerCarPrevNodeCode { get; set; }
/// 触发条件:当前地标号(逗号分隔)。
public string TriggerCarCurrentNodeCode { get; set; }
/// 触发条件:下一地标号(逗号分隔)。
public string TriggerCarNextNodeCode { get; set; }
///
/// 触发条件:车辆 FASS 状态(逗号分隔)。
/// 常见值:Running、Stopping、WaitPass、Charging、Stopping,Charging 等。
///
public string TriggerCarState { get; set; }
/// 触发条件:车头角度(逗号分隔的整数字符串)。
public string TriggerCarAngle { get; set; }
///
/// 条件事件列表。全部满足后才执行任务;
/// 对应 FASS 中 ConditionHandler 的逐项 AND 逻辑。
///
public List ConditionEvents { get; set; } = new List();
/// 条件满足后是否执行任务(false 时仅做条件判断,不下发 Start/Stop)。
public bool TaskEnable { get; set; } = true;
///
/// 任务类型。MagCar 当前支持 Start(放行)与 Stop(急停)。
///
public string TaskType { get; set; }
}
///
/// 单条条件事件配置,描述一个条件判断(交管、PLC 信号、电量等)。
///
public class FassConditionEventConfig
{
/// 是否启用本条件;false 时跳过(视为通过)。
public bool ConditionEnable { get; set; } = true;
///
/// 条件类型:Method(内置方法)、Assembly、Plugin。
/// StandardScene 当前仅实现 Method;后两者会记录日志并返回 false。
///
public string ConditionType { get; set; } = "Method";
/// Assembly 条件:程序集文件路径(未实现)。
public string ConditionAssemblyFile { get; set; }
/// Assembly/Plugin 条件:类型名(未实现)。
public string ConditionTypeName { get; set; }
/// Assembly/Plugin 条件:构造参数(未实现)。
public string ConditionTypeArgs { get; set; }
///
/// Method 条件:方法名,如 NodeAllUnlockedNotCar、requestStaion、EmegerStop 等。
/// 名称与 FASS EventCarService.InitEventMethod 注册表一致(含历史拼写)。
///
public string ConditionMethodName { get; set; }
///
/// Method 条件:方法参数,一般为逗号分隔的节点号或 PLC 地址。
/// 例如交管:3,53,21;PLC:DB5524.0.0,DB5524.0.1。
///
public string ConditionMethodArgs { get; set; }
}
///
/// 车辆事件处理用的只读快照,从 StandardScene 提取 FASS 语义字段。
/// 每次 TimerTick 为每辆车构建一份,供触发器与条件方法使用。
///
public class FassEventCarSnapshot
{
/// 场景内车辆 ID(SimpleLib)。
public int CarId { get; set; }
/// FASS 车辆编号(MagCar.VehicleCode 或 fields["Code"])。
public string Code { get; set; }
/// 车型标识,用于 ME11 下料站逻辑(fields["CarModel"])。
public string CarModel { get; set; }
/// 上一周期记录的地标号,用于 TriggerCarPrevNodeCode 匹配。
public string PrevNodeCode { get; set; }
/// 当前地标号(status.enums["CurrentNode"] 或 siteID)。
public string CurrentNodeCode { get; set; }
/// 下一地标号(pendingLocks / tags / enums 推断)。
public string NextNodeCode { get; set; }
///
/// FASS 状态字符串:Running、Stopping、WaitPass、Charging 等。
/// 由 从中文状态映射。
///
public string State { get; set; }
/// 车头角度(度),对应 FASS Car.Angle。
public int Angle { get; set; }
/// 电量百分比(Soc)。
public double Charge { get; set; }
}
}