"""MIL SDK 核心数据模型""" from dataclasses import dataclass, field from typing import Any @dataclass class DataLog: """仿真数据日志记录 Attributes: time: 时间戳(秒) value: 信号值(可以是任意类型) """ time: float = 0.0 value: str = "" @dataclass class SignalData: """信号数据封装 Attributes: signal_type: 信号类型 column: 列索引 datalog: 数据日志列表 """ # signal_type: str | None = None column: int = 0 attributes: dict[str, str] = field(default_factory=dict) datalog: list[DataLog] = field(default_factory=list) def to_dict(self) -> dict[str, Any]: """转换为字典格式 Returns: 包含 signal_type、column、datalog 的字典 """ return { "column": self.column, "attributes": self.attributes, "datalog": self.datalog } @dataclass class ExcelDataResult: """Excel 数据读取结果封装 提供对 Excel 数据的类型安全访问,隐藏内部实现细节 Attributes: sheet_name: 工作表名称 source_row: Source: Input 所在行号 signals: 信号名称到信号数据的映射 """ sheet_name: str = "Scenario1" source_row: int = 0 signals: dict[str, SignalData] = field(default_factory=dict) def get_signal(self, name: str) -> SignalData | None: """获取指定信号的数据 Args: name: 信号名称 Returns: 信号数据对象,如果不存在返回 None """ return self.signals.get(name) def get_signal_names(self) -> list[str]: """获取所有信号名称 Returns: 信号名称列表 """ return list(self.signals.keys()) def to_dict(self) -> dict[str, Any]: """转换为字典格式(兼容旧 API) Returns: 包含所有信号的字典,保留原有的数据结构 """ result = { "sheet_name": self.sheet_name, "source_row": self.source_row } for name, signal in self.signals.items(): result[name] = signal.to_dict() return result