属性与状态机
属性
| 类别 | 属性 | 类型 | 访问 | 说明 |
|---|---|---|---|---|
| 基本信息 | MasterNumber | ushort | 只读 | 主站实例编号 |
SlaveCount | int | 只读 | 网络中检测到的从站数量 | |
Slaves | List<Slave> | 只读 | 从站列表(索引 0 起始) | |
IsDisposed | bool | 只读 | 主站是否已被释放 | |
| 网络与链路 | PrimaryNetworkInfo | NetworkInfo | 只读 | 主网络适配器信息 |
RedundantNetworkInfo | NetworkInfo | 只读 | 冗余网络适配器信息 | |
LinkState | EcLinkState | 只读 | 网络链路状态 | |
| 错误码 | ErrorCode | EcALState | 只读 | 异常时的自动报警错误码 |
| 从站分组 | Groups | SlaveGroupAccessor | 只读 | 组索引器 — Groups[g] 获取该组从站列表,Groups[g][i] 获取组内第 i 个从站 |
ActiveGroupCount | byte | 只读 | 活跃组数量(映射后有效) | |
| IO 映射 | Obytes | uint | 只读 | 总输出字节数 |
Ibytes | uint | 只读 | 总输入字节数 | |
Obits | ushort | 只读 | 总输出位数 | |
Ibits | ushort | 只读 | 总输入位数 |
EcLinkState 枚举值
public enum EcLinkState : byte
{
Disconnected = 0, // 无连接
Connected = 1, // 主网口和冗余网口都连接
PrimaryOnly = 3, // 仅主网口连接
SecondaryOnly = 4 // 仅冗余网口连接
}
EcALState 枚举值
public enum EcALState : int
{
NoError = 0x0000, // 无错误
UnspecifiedError = 0x0001, // 未指定错误
NoMemory = 0x0002, // 内存不足
InvalidDeviceSetup = 0x0003, // 无效设备设置
InvalidRevision = 0x0004, // 版本不匹配
SiiEepromMismatch = 0x0006, // SII/EEPROM 不匹配
FirmwareUpdateFailed = 0x0007, // 固件更新失败
LicenseError = 0x000E, // 许可证错误
InvalidStateChange = 0x0011, // 无效状态切换
UnknownRequestedState = 0x0012, // 未知状态请求
BootstrapNotSupported = 0x0013, // 不支持 Bootstrap
NoValidFirmware = 0x0014, // 无有效固件
InvalidMailboxConfig = 0x0015, // 无效邮箱配置 (SM0/SM1)
InvalidSyncManagerConfig = 0x0017, // 无效同步管理器配置
NoValidInputs = 0x0018, // 无有效输入
NoValidOutputs = 0x0019, // 无有效输出
SyncError = 0x001A, // 同步错误
SyncManagerWatchdog = 0x001B, // SM 看门狗
InvalidOutputConfig = 0x001D, // 无效输出配置
InvalidInputConfig = 0x001E, // 无效输入配置
InvalidWatchdogConfig = 0x001F, // 无效看门狗配置
NeedsColdStart = 0x0020, // 需要冷启动
NeedsInit = 0x0021, // 需要 Init
NeedsPreOp = 0x0022, // 需要 PreOp
NeedsSafeOp = 0x0023, // 需要 SafeOp
InvalidInputMapping = 0x0024, // 无效输入映射
InvalidOutputMapping = 0x0025, // 无效输出映射
InconsistentSettings = 0x0026, // 设置不一致
FreerunNotSupported = 0x0027, // 不支持自由运行
SyncNotSupported = 0x0028, // 不支持同步
CycleTimeTooSmall = 0x002E, // 周期时间过小
InvalidDcSyncConfig = 0x0030, // 无效 DC 同步配置
PllError = 0x0032, // PLL 错误
DcSyncIOError = 0x0033, // DC 同步 IO 错误
DcSyncTimeout = 0x0034, // DC 同步超时
MailboxAoe = 0x0041, // AoE 邮箱错误
MailboxCoe = 0x0043, // CoE 邮箱错误
MailboxFoe = 0x0044, // FoE 邮箱错误
MailboxSoe = 0x0045, // SoE 邮箱错误
EepromNoAccess = 0x0050, // EEPROM 无法访问
EepromError = 0x0051, // EEPROM 错误
ExternalHardwareNotReady = 0x0052, // 外部硬件未就绪
SlaveRestarted = 0x0060, // 从站已重启
SupplyVoltageTooLow = 0x0080, // 电压过低
SupplyVoltageTooHigh = 0x0081, // 电压过高
TemperatureTooLow = 0x0082, // 温度过低
TemperatureTooHigh = 0x0083, // 温度过高
Unknown = 0xFFFF // 未知错误
}
状态机管理
State
EtherCAT 状态(读写),设置此属性将触发状态切换。
相关结构 — EcState 枚举:
public enum EcState : byte
{
None = 0x00,
Init = 0x01,
PreOp = 0x02,
Boot = 0x03,
SafeOp = 0x04,
OP = 0x08,
Ack = 0x10,
Error = 0x10
}
示例:
master.State = EcState.OP;
if (master.State == EcState.OP)
Console.WriteLine("主站处于运行状态");
提示
- SDK 中的所有切换状态机方法 , 均符合 EtherCAT 标准状态机流程,协议层自动处理。
- 请在启动前导入或设置正确的配置。
- 如需返回更详细的错误信息,请使用
SetState()方法。
SetState(EcState targetState)
public (bool success, string message) SetState(EcState targetState)
设置主站和所有从站的 EtherCAT 状态。
示例:
var (success, message) = master.SetState(EcState.OP);
if (!success)
Console.WriteLine($"状态切换失败: {message}");
Stop()
public bool Stop()
停止主站,切换到 PRE_OP 状态。