我试图控制一个机器人抓手的EtherCAT从属设备。从属信息如下,使用SOEM包中的示例程序slaveinfo检索:
SOEM (Simple Open EtherCAT Master)
Slaveinfo
Starting slaveinfo
ec_init on eth2 succeeded.
wkc = 1
1 slaves found and configured.
Calculated workcounter 3
Slave:1
Name:netX
Output size: 128bits
Input size: 128bits
State: 4
Delay: 0[ns]
Has DC: 1
DCParentport:0
Activeports:1.0.0.0
Configured address: 1001
Man: 0000ffff ID: 0000000b Rev: 00000000
SM0 A:1000 L: 128 F:00010036 Type:1
SM1 A:1080 L: 128 F:00010032 Type:2
SM2 A:1100 L: 16 F:00010074 Type:3
SM3 A:1d00 L: 16 F:00010030 Type:4
FMMU0 Ls:00000000 Ll: 16 Lsb:0 Leb:7 Ps:1100 Psb:0 Ty:02 Act:01
FMMU1 Ls:00000010 Ll: 16 Lsb:0 Leb:7 Ps:1d00 Psb:0 Ty:01 Act:01
FMMUfunc 0:1 1:3 2:3 3:0
MBX length wr: 128 rd: 128 MBX protocols : 04
CoE details: 33 FoE details: 00 EoE details: 00 SoE details: 00
Ebus current: 0[mA]
only LRD/LWR:0
End slaveinfo, close socket
End program
,从设备的寄存器映射如下:
我现在要做的是将rACT位(输出寄存器的byte0中的bit0)设置为1,这样我就可以激活设备。
我修改了SOEM中的simple_test示例代码。在使从设备进入运行状态后,我尝试了:
uint8 * data_ptr;
data_ptr = ec_slave[1].outputs;
*data_ptr = 0x01;
ec_send_processdata();
ec_receive_processdata(EC_TIMEOUTRET);
我不确定这是否真的将值 1 写入byte0的bit0。我只能看到抓手根本不动,这不是预期的行为。
我完全被困在这里,并且不知道我应该尝试的下一步是什么,或者我应该学习什么样的材料。任何建议表示赞赏!感谢。