跳到主要内容

EoE (Ethernet over EtherCAT)

EoE 协议通过 EtherCAT 总线实现以太网通信,支持配置 IP/MAC/DNS 地址和以太网帧收发,符合 ETG.1000.6 和 ETG.1020 标准。

通过 slave.EoE 访问。从站不支持 EoE 时为 null

属性

读写属性实时操作:getter 从设备读取当前值,setter 校验格式后立即写入设备。

属性类型访问说明
CanSendFramebool只读是否支持发送以太网帧
CanReceiveFramebool只读是否支持接收以太网帧
CanSetIPbool只读是否支持设置 IP 参数
CanGetIPbool只读是否支持获取 IP 参数
IPIPAddress?读写IP 地址(仅 IPv4)
SubnetIPAddress?读写子网掩码
GatewayIPAddress?读写默认网关
MACstring?读写MAC 地址(格式 "AA:BB:CC:DD:EE:FF")
DNSIPAddress?读写DNS 服务器地址
DNSNamestring?读写DNS 名称

示例:

if (slave.EoE)
{
// 读取
Console.WriteLine($"IP: {slave.EoE.IP}");
Console.WriteLine($"MAC: {slave.EoE.MAC}");

// 写入
slave.EoE.IP = IPAddress.Parse("192.168.1.100");
slave.EoE.Subnet = IPAddress.Parse("255.255.255.0");
slave.EoE.Gateway = IPAddress.Parse("192.168.1.1");
slave.EoE.MAC = "AA:BB:CC:DD:EE:FF";
slave.EoE.DNS = IPAddress.Parse("8.8.8.8");
slave.EoE.DNSName = "dns.google";
}

地址过滤器 (ETG.1020)

GetAddressFilters(int timeoutMs = DefaultTimeoutMs)

public List<PhysicalAddress> GetAddressFilters(int timeoutMs = DefaultTimeoutMs)

获取 MAC 地址过滤器列表。

SetAddressFilters(IList<PhysicalAddress> filters, int timeoutMs = DefaultTimeoutMs)

public bool SetAddressFilters(IList<PhysicalAddress> filters, int timeoutMs = DefaultTimeoutMs)

设置地址过滤器列表。

AddAddressFilter / RemoveAddressFilter / ClearAddressFilters

public bool AddAddressFilter(PhysicalAddress mac, int timeoutMs = DefaultTimeoutMs)
public bool RemoveAddressFilter(PhysicalAddress mac, int timeoutMs = DefaultTimeoutMs)
public bool ClearAddressFilters(int timeoutMs = DefaultTimeoutMs)

示例:

var mac = PhysicalAddress.Parse("AA-BB-CC-DD-EE-FF");
slave.EoE.AddAddressFilter(mac);

var filters = slave.EoE.GetAddressFilters();
foreach (var f in filters)
Console.WriteLine($"过滤器: {f}");

slave.EoE.ClearAddressFilters();

以太网帧收发

SendFrame(byte[] frame, int timeoutMs = DefaultTimeoutMs)

public bool SendFrame(byte[] frame, int timeoutMs = DefaultTimeoutMs)
public bool SendFrame(byte[] frame, byte port, int timeoutMs = DefaultTimeoutMs)

发送以太网帧。

ReceiveFrame(int timeoutMs = DefaultTimeoutMs)

public byte[]? ReceiveFrame(int timeoutMs = DefaultTimeoutMs)
public byte[]? ReceiveFrame(byte port, int timeoutMs = DefaultTimeoutMs)

接收以太网帧。

返回值:

  • byte[]? — 接收到的帧数据,失败返回 null

Ping 测试

Ping(IPAddress targetIp, int timeoutMs = 5000, byte ttl = 64)

public EoEPingResult Ping(IPAddress targetIp, int timeoutMs = 5000, byte ttl = 64)

通过 EoE 发送 ICMP Ping 并等待响应。

参数:

  • targetIp (IPAddress) — 目标 IP 地址
  • timeoutMs (int) — 超时时间(毫秒)
  • ttl (byte) — 生存时间

相关结构:

public class EoEPingResult
{
public bool Success { get; } // 是否成功
public double RoundTripTimeMs { get; } // 往返时间(毫秒)
public string TargetAddress { get; } // 目标地址
public byte TTL { get; } // 生存时间
public string ErrorMessage { get; } // 错误信息
}

示例:

var result = slave.EoE.Ping(IPAddress.Parse("192.168.1.1"));
Console.WriteLine(result.ToString());

完整示例

网络配置与 Ping

if (slave.EoE)
{
Console.WriteLine($"当前 IP: {slave.EoE.IP}");
Console.WriteLine($"当前 MAC: {slave.EoE.MAC}");

slave.EoE.IP = IPAddress.Parse("10.0.0.100");
slave.EoE.Subnet = IPAddress.Parse("255.255.255.0");
slave.EoE.Gateway = IPAddress.Parse("10.0.0.1");
slave.EoE.DNS = IPAddress.Parse("10.0.0.1");

var ping = slave.EoE.Ping(IPAddress.Parse("10.0.0.1"));
if (ping.Success)
Console.WriteLine($"Ping 成功: {ping.RoundTripTimeMs:F1}ms");
}