Slave 属性与方法
Slave 类代表 EtherCAT 网络中的单个从站设备。
属性
| 类别 | 属性 | 类型 | 读写 | 说明 |
|---|---|---|---|---|
| 基本标识 | SlaveNum | ushort | 只读 | 从站编号(1-based) |
| Index | int | 只读 | 从站索引(SlaveNum 别名) | |
| Name | string | 只读 | 设备名称(从 EEPROM group_name 读取) | |
| DriveName | string | 只读 | 驱动/设备名称(从 SDO 0x1008 读取) | |
| 设备信息 | VendorId | uint | 只读 | 制造商 ID(从 SII EEPROM 读取) |
| VendorName | string? | 只读 | 制造商名称(从 ESI 文件读取) | |
| ProductId | uint | 只读 | 产品 ID | |
| RevId | uint | 只读 | 修订版本号 | |
| SerialNumber | uint | 只读 | 序列号(从 SII EEPROM 读取) | |
| Dtype | EcDeviceType | 只读 | 设备类型标识 | |
| HasMDP | bool | 只读 | 是否支持模块化设备配置文件(ETG.5001) | |
| BlockLRW | bool | 只读 | LRW 逻辑读写操作阻止标志 | |
| 地址 | ConfigAddr | ushort | 只读 | 物理配置地址 |
| AliasAddress | ushort | 只读 | 别名地址 | |
| 状态 | State | EcState | 只读 | 从站当前状态 |
| ErrorCode | EcALState | 只读 | 错误码 | |
| IsLost | bool | 只读 | 从站是否丢失(断开连接) | |
| 拓扑 | Topology | byte | 只读 | 拓扑类型 (0=无链接, 1=端点, 2=中间, 3=分支, 4=交叉) |
| ParentStation | ushort | 只读 | 父从站的站地址 | |
| ParentPort | byte | 只读 | 父端口号 | |
| EntryPort | byte | 只读 | 入口端口号 | |
| ActivePorts | byte | 只读 | 激活端口位掩码 | |
| PhysicalType | byte | 只读 | 物理端口类型 | |
| ChildCount | int | 只读 | 子模块数量 | |
| PDO 数据 | Ibits / Obits | ushort | 只读 | 输入/输出数据位数 |
| Ibytes / Obytes | uint | 只读 | 输入/输出数据字节数 | |
| Ioffset / Ooffset | uint | 只读 | 输入/输出在 IOmap 中的偏移 | |
| Istartbit / Ostartbit | byte | 只读 | 输入/输出起始位 | |
| ESI/配置 | HasEsi | bool | 只读 | 是否已加载 ESI 文件 |
| Esiname | string? | 只读 | ESI 文件名 | |
| EsiVersion | string | 只读 | ESI 版本号 | |
| ConfigByEsi | dynamic? | 只读 | 从 ESI 文件获取的设备配置 | |
| EEPROM | Eep8ByteAddressing | bool | 只读 | EEPROM 寻址模式(true=8字节, false=4字节) |
| EepPDI | byte | 只读 | 物理设备接口(PDI)类型 | |
| EbusCurrent | short | 只读 | E-bus 电流消耗(mA) | |
| SIIindex | ushort | 只读 | SII EEPROM 配置索引 | |
| 邮箱 | MbxProto | MailboxType | 只读 | 支持的邮箱协议类型(位掩码) |
| MbxLength | ushort | 只读 | 邮箱发送缓冲区大小 | |
| MbxReadLength | ushort | 只读 | 邮箱接收缓冲区大小 | |
| MbxReadOffset / MbxWriteOffset | ushort | 只读 | 邮箱读/写偏移 | |
| MbxCount | byte | 只读 | 邮箱协议计数器 | |
| 协议详情 | CoEdetails | EcCoEDetails | 只读 | CoE 协议功能标志(SDO/PDO Assign/Complete Access 等) |
| EoEdetails | EcEoEDetails | 只读 | EoE 协议功能标志(发送帧/接收帧/IP 参数等) | |
| FoEdetails | byte | 只读 | FoE 协议详情(来自 SII EEPROM) | |
| SoEdetails | byte | 只读 | SoE 协议详情(来自 SII EEPROM) | |
| FMMU | FMMU0Function | byte | 只读 | FMMU0 功能类型(bit 0=输出, bit 1=输入) |
| FMMU1Function | byte | 只读 | FMMU1 功能类型 | |
| FMMU2Function | byte | 只读 | FMMU2 功能类型 | |
| FMMU3Function | byte | 只读 | FMMU3 功能类型 | |
| DC | HasDC | bool | 只读 | 是否支持 DC,详见 DC 同步 |
| DCActive / DCCycle0 / DCCycle1 / DCShift | — | 只读 | DC 只读状态,详见 DC 同步 | |
| PropagationDelay | int | 只读 | 帧从主站到达此从站的传播延迟(纳秒),详见 DC 同步 | |
| 其他 | Group | byte | 读写 | 从站分组号(0-7,0=默认组,必须在 SAFE_OP 前设置),详见 从站分组 |
EcDeviceType 枚举值
public enum EcDeviceType : ushort
{
Undefined = 0, // 未定义
Static = 1, // 静态设备,无IO映射,如EK1100耦合器
InputNoMailbox = 2, // 输入设备(无邮箱)
OutputNoMailbox = 3, // 输出设备(无邮箱)
InputWithMailbox = 4, // 输入设备(有邮箱)
OutputWithMailbox = 5, // 输出设备(有邮箱)
IONoMailbox = 6, // 输入输出设备(无邮箱)
IOWithMailbox = 7 // 输入输出设备(有邮箱)
}
EcTopologyType / EcPortType 枚举值
public enum EcTopologyType : byte
{
NoLink = 0, // 无链接
EndPoint = 1, // 端点
Line = 2, // 中间节点(线性拓扑)
Fork = 3, // 分支点
Cross = 4 // 交叉点
}
public enum EcPortType : byte
{
NotUsed = 0, // 未使用
MII = 1, // MII
EBUS = 2, // EBUS
EBUSEnhanced = 3 // EBUS 增强型
}
MailboxType 枚举值
public enum MailboxType : ushort
{
ErrorMailbox = 0x00, // 错误邮箱
ADSOverEtherCAT = 0x01, // AoE
EthernetOverEtherCAT = 0x02, // EoE
CANopenOverEtherCAT = 0x03, // CoE
FileOverEtherCAT = 0x04, // FoE
ServoOverEtherCAT = 0x05, // SoE
VendorOverEtherCAT = 0x0F // VoE
}
EcCoEDetails 枚举值
[Flags]
public enum EcCoEDetails : byte
{
None = 0x00,
SDO = 0x01, // 支持 SDO
SDOInfo = 0x02, // 支持 SDO Info
PDOAssign = 0x04, // 支持 PDO Assign
PDOConfig = 0x08, // 支持 PDO Config
Startup = 0x10, // 支持 Startup
CompleteAccess = 0x20 // 支持 Complete Access
}
EcEoEDetails 枚举值
[Flags]
public enum EcEoEDetails : byte
{
None = 0x00,
SendFrame = 0x01, // 支持发送帧
ReceiveFrame = 0x02, // 支持接收帧
SetIPParam = 0x04, // 支持设置 IP 参数
GetIPParam = 0x08 // 支持获取 IP 参数
}
子对象
| 属性 | 类型 | 说明 |
|---|---|---|
| PDO | SlavePdo | PDO 数据访问器,详见 PDO 输入输出 |
| Diagnostics | SlaveDiagnostics | 诊断信息访问器,详见 从站诊断 |
| Startup | StartupParameterList | 启动参数列表 |
| CoE | CoEInstance? | CANopen over EtherCAT,从站不支持时为 null |
| SoE | SoEInstance? | Servo over EtherCAT,从站不支持时为 null |
| FoE | FoEInstance? | File over EtherCAT,从站不支持时为 null |
| EoE | EoEInstance? | Ethernet over EtherCAT,从站不支持时为 null |
| AoE | AoEInstance? | ADS over EtherCAT,从站不支持时为 null |
| VoE | VoEInstance? | Vendor over EtherCAT,从站不支持时为 null |
| FSoE | FSoEInstance? | Functional Safety over EtherCAT,从站不支持时为 null |
| MDP | MdpInstance? | MDP 模块化设备,从站不支持时为 null |
枚举描述方法
所有枚举统一使用 .GetDescription() 扩展方法获取中文描述:
EcState state = slave.State;
string desc = state.GetDescription(); // "OP"
StateCiA402 driveState = slave.CoE.CiA402.StateDrive;
string driveDesc = driveState.GetDescription(); // "运行使能"
ModeCiA402 mode = slave.CoE.CiA402.OperationMode;
string modeDesc = mode.GetDescription(); // "周期同步位置 (CSP)"
FSoEState fsoeState = slave.FSoE.State;
string fsoeDesc = fsoeState.GetDescription(); // "数据交换"
统一规范
项目中所有枚举描述均通过 .GetDescription() 扩展方法获取,包括 EcState、EcALState、SDOError、FSoEState、FSoEError、StateCiA402、ModeCiA402 等。内部实现基于 [Description] 特性。
硬件信息查询
GetFMMUs()
public ec_fmmut[] GetFMMUs()
获取从站 FMMU 配置数组。
GetSyncManagers()
public ec_smt[] GetSyncManagers()
获取从站 SyncManager 配置数组。
GetSyncManagerTypes()
public byte[] GetSyncManagerTypes()
获取从站 SyncManager 类型数组(0=未使用, 1=邮箱输出, 2=邮箱输入, 3=过程数据输出, 4=过程数据输入)。
诊断
从站诊断信息(通信异常率、冗余状态、DC 同步)通过 slave.Diagnostics 访问,详见 从站诊断。
ESI 方法
SetEsiFile(string esiFileName)
public bool SetEsiFile(string esiFileName)
设置从站使用的 ESI 文件。
返回值:
bool— 是否成功
Startup 配置
| 属性 | 类型 | 说明 |
|---|---|---|
| Startup | StartupParameterList | 启动参数列表 |
| ShouldWritePDOAssignment | bool | 启动时是否写入 PDO Assignment,默认 true |
| ShouldWritePDOConfiguration | bool | 启动时是否写入 PDO Configuration,默认 false |
| SupportsCompleteAccess | bool | 从站是否支持 SDO Complete Access |
AutoStartup() / AutoStartupFromMDP() / AutoStartupFromSM()
public bool AutoStartup()
// AutoStartupFromESI(string esiFilePath) - ESI-based startup is implemented in the runtime but
// is intentionally omitted from the public API documentation (internal/advanced usage).
public bool AutoStartupFromMDP()
public bool AutoStartupFromSM()
对从站执行自动启动配置。AutoStartup() 会自动检测 ESI/MDP/SM 并生成参数。
SetConfigSourceENI() / SetConfigSourceDENI()
public void SetConfigSourceENI()
public void SetConfigSourceDENI()
设置从站配置来源。
RefreshPDOStartupParameters()
public int RefreshPDOStartupParameters()
刷新 PDO 启动参数(重新从当前配置生成 PDO 映射参数)。
StartupParameterList 方法
通过 slave.Startup 访问:
Add(StartupParameter param)— 添加启动参数AddParameter(index, subIndex, data, ...)— 添加启动参数(显式参数)Remove(index, subIndex)— 移除启动参数Clear()— 清除所有启动参数Apply(slave, transition, writeTiming)— 应用启动参数到从站
示例:
slave.Startup.Add(new StartupParameter
{
Index = 0x1C12, SubIndex = 0,
Data = new byte[] { 0 },
Transition = "PS", Priority = 10
});
StartupTransition 状态转换
IP— Init → PreOp,默认 AfterTransitionPS— PreOp → SafeOp,默认 BeforeTransitionSO— SafeOp → Op,默认 BeforeTransitionOS— Op → SafeOp,默认 AfterTransitionSP— SafeOp → PreOp,默认 AfterTransitionPI— PreOp → Init,默认 BeforeTransition