跳到主要内容

FSoE — 安全功能

FSoE(Safety over EtherCAT)用于 SIL3/PLe 等级的功能安全应用。

配置工具:在 FSoE Tab 中查看安全状态、绑定安全地址、配置失效安全输出。工具自动检测支持 FSoE 的从站。

导出方式:FSoE 是标配 — 与 PDO 一样,从站支持即自动包含在导出代码中,无需手动勾选。安全 PDO 结构体和普通 PDO 结构体一同生成,安全初始化代码扩展在主程序中。


SDK 用法

var fsoe = slave.FSoE;
if (fsoe == null || !fsoe.IsInitialized) return;

// ── 安全连接信息 ──
Console.WriteLine($"安全连接数: {fsoe.ConnectionCount}");
var conn = fsoe.GetConnection(0);
// 或按安全地址查找: fsoe.FindConnectionByAddress(0x0001);

// ── 安全状态控制 ──
fsoe.RequestState(FSoEState.Op);

// ── 监听事件 ──
fsoe.StateChanged += (s, e) =>
Console.WriteLine($"安全状态: {e.PreviousState}{e.NewState}");
fsoe.FailsafeTriggered += (s, e) =>
Console.WriteLine("失效安全触发!");

// ── 设置失效安全输出(通信中断时的默认输出)──
fsoe.SetFailsafeOutput(new byte[] { 0x00, 0x00 });

// ── 下载安全参数 ──
byte[] safetyParams = /* 安全参数 */;
fsoe.DownloadParameters(safetyParams, out uint sraCrc);
Console.WriteLine($"SRA CRC: 0x{sraCrc:X8}");

导出的代码

FSoE 的安全 PDO 结构体和普通 PDO 结构体一起生成在导出代码的结构体定义区域:

// ── 普通 PDO 结构体 ──
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Slave1_Input { ... }

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Slave1_Output { ... }

// ── FSoE 安全 PDO 结构体(与普通 PDO 一同自动生成)──
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Slave2_FSoE_Input
{
public byte SafeInputs; // 安全数字输入
public ushort FSoE_CRC; // CRC 校验
public ushort FSoE_ConnId; // 连接 ID
}

[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct Slave2_FSoE_Output
{
public byte SafeOutputs; // 安全数字输出
public ushort FSoE_CRC;
public ushort FSoE_ConnId;
}

安全初始化代码扩展在主程序的初始化流程中:

// ── FSoE 初始化(扩展在主程序中)──
var fsoe = slave.FSoE;
fsoe.RequestState(FSoEState.Op); // 推进安全状态机
fsoe.SetFailsafeOutput(new byte[] { 0x00 }); // 失效时所有输出置零

// 安全数据在 PDO 循环中自动交换,用法与普通 PDO 相同
ref var safeInput = ref slave.PDO.InputsMapping<Slave2_FSoE_Input>();
ref var safeOutput = ref slave.PDO.OutputsMapping<Slave2_FSoE_Output>();

安全状态机流程:


更多

完整 FSoE API 请参考 C# SDK — FSoE