我正在使用 SOEM 和 SOES 库实现 SDO 通信,但我遇到了一些问题,有人可以帮助我吗?更详细地说,我使用一台带有 Ubuntu 的 PC 作为 Ethercat 主机和一个使用 LAN9252 的 ethercat 从机。从机连接到带有窗口 10 的 PC,该窗口用于加载 SOES 程序,一旦加载了软件,它就会在调试模式下保持连接以检查变量。我的 SDO 通信有问题。当我在我的主服务器上使用可选参数 -sdo 从命令窗口运行 slaveinfo.c 程序(该程序包含在 SOEM 库中)时,我获得以下结果:
SOEM (Simple Open EtherCAT Master) Slaveinfo 在 enp2s0 上启动 slaveinfo ec_init 成功。找到并配置了 1 个从站。计算的工作计数器 3
从站:1 名称:SSC_Device 输出大小:1024 位 输入大小:1024 位 状态:4 延迟:0[ns] 有 DC:1 DCParentport:0 活动端口:1.0.0.0 配置地址:1001 人:00000afc ID:00010000 修订:00000001 SM0 A :1000 L:128 F:00010026 类型:1 SM1 A:1200 L:128 F:00010022 类型:2 SM2 A:1400 L:128 F:00010064 类型:3 SM3 A:1600 L:128 F:00010020 类型:4 FMMU0 Ls:00000000 Ll:128 Lsb:0 Leb:7 Ps:1400 Psb:0 Ty:02 Act:01 FMMU1 Ls:00000080 Ll:128 Lsb:0 Leb:7 Ps:1600 Psb:0 Ty:01 Act:01 FMMUfunc 0:1 1:2 2:0 3:0 MBX 长度 wr:128 rd:128 MBX 协议:04 CoE 详细信息:0d FoE 详细信息:00 EoE 详细信息:00 SoE 详细信息:00 Ebus 电流:0[mA] 仅 LRD /LWR:0 ec_slave[cnt].mbx_proto:04 printSDO:1 结束slaveinfo,关闭socket 结束程序
问题是我没有看到根据 CoE 的 PDO 映射。我检查了master和slave之间的包交换,我看到master发送了一个请求,我的slave收到了,然后slave发送了响应请求但是master没有收到。从从属调试器中,我检查了 SM_status(同步管理器状态 SM1 0x080d),它是指示 mailmox 是否已满以及主机是否可以读取的寄存器,我看到该寄存器没有改变值。有人知道是什么问题吗?eeprom 内存需要具有特定的结构以允许正确的 SDO 通信?或者也许只是从属软件的问题?
谢谢。