
清空记录
历史记录
取消
清空记录
历史记录

IgH EtherCAT总线
EtherCAT IgH软件环境
EtherCAT整体分为四个部分,包含:实时Linux内核、用户态、驱动以及EtherCAT应用。触觉智能RK3506开发板提供EtherCAT预编译的bin文件:
EtherCAT IgH需要保证高实时性,Preempt-RT是一种针对实时性能进行了优化的Linux内核。与普通的 Linux内核相比,Preempt-RT具有以下优势:
1. 实时性能: Preempt-RT提供了更可靠和更精确的实时性能。它采用了一些实时调度策略和机制,使得任务能够按照严格的时间要求执行,从而适用于需要高度可预测性和低延迟的应用场景,如工业自动化、机器人控制等。
2. 硬实时能力:Preempt-RT具有硬实时能力,即能够确保任务在规定的时间内完成,而不会受到其 他任务或中断的干扰。这对于需要严格的时间限制的应用非常重要,如航空航天、医疗设备等领域。
3. 任务调度:Preempt-RT使用了更加高效和优化的任务调度算法,如基于优先级的实时调度算法, 以确保高优先级任务能够及时响应并完成,而低优先级任务不会影响到实时任务的执行。
4. 中断处理:Preempt-RT针对中断处理进行了优化,使得中断的响应时间更短,能够更快地响应外部事件。
5. 内核定时器:Preempt-RT提供了更精确和可配置的内核定时器,使得可以实现微秒级的定时精 度,适用于对时间要求极高的应用场景。
6. 实时扩展:Preempt-RT提供了一些实时扩展机制,使得用户能够方便地对内核进行定制和扩展,以满足特定应用的需求。
总的来说,Preempt-RT在实时性能、可靠性和精度方面比普通的Linux内核更加优秀,因此在对实时性能 要求较高的应用场景中被广泛使用。瑞芯微提供配套SDK的Preempt-RT补丁。
用户态中主要是两个文件,ethercat和libethercat.so,一个是EtherCAT IgH的调试工具,一个是EtherCAT。
IgH的动态库,用来提供用户层接口。用户态部分访问以下链接:
https://gitlab.com/etherlab.org/ethercat/-/tree/master?r ef_type=heads下载IgH的源代码,编译后会生成ethercat二进制文件,libethercat.so和一些example等等。用户态部分也可以使用预编译好的EtherCAT IgH二进制文件和libethercat.so,如下所示:
EtherCAT IgH软件编译和部署
diff --git a/arch/arm/configs/rk3506_defconfig b/arch/arm/configs/rk3506_defconfigindex e6d3ba608a77..3029973ade8c 100644--- a/arch/arm/configs/rk3506_defconfig+++ b/arch/arm/configs/rk3506_defconfig@@ -2,6 +2,7 @@CONFIG_KERNEL_XZ=yCONFIG_DEFAULT_HOSTNAME="localhost" CONFIG_SYSVIPC=y+CONFIG_NO_HZ_FULL=yCONFIG_NO_HZ=yCONFIG_HIGH_RES_TIMERS=y CONFIG_PREEMPT=y@@ -119,12 +120,13 @@ CONFIG_NETDEVICES=y# CONFIG_NET_VENDOR_SOLARFLARE is not set # CONFIG_NET_VENDOR_SMSC is not set# CONFIG_NET_VENDOR_SOCIONEXT is not set-CONFIG_STMMAC_ETH=y+CONFIG_STMMAC_ETH=m# CONFIG_DWMAC_GENERIC is not set# CONFIG_NET_VENDOR_SYNOPSYS is not set # CONFIG_NET_VENDOR_VIA is not set# CONFIG_NET_VENDOR_WIZNET is not set# CONFIG_NET_VENDOR_XILINX is not set+CONFIG_PHYLIB=yCONFIG_MOTORCOMM_PHY=yCONFIG_PPP=y# CONFIG_WLAN is not set
#进入源码目录cd source#指定编译链路径(编译链在SDK中有提供)export PATH=SDK/prebuilts/gcc/linux-x86/ (arch)/gcc-arm-10.3-2021.07-x86_64- (arch)-none-linux-gnu/bin:$PATH#配置,指定内核目录,选择SDK下的kernel-6.1或者kernel-5.10,这里使用kernel-6.1。./bootstrap./configure --prefix=(编译后你需要存放的目录) --host= (arch)-none-linux-gnu --with- linux-dir=SDK/kernel-6.1 --enable-8139too=no --enable-stmmac=yes --enable-generic=no --enable-wildcards=yes#编译make -j8make install systemdsystemunitdir=(编译后你需要存放的目录,和configure命令上的prefix下 跟的参数需要一直)#部署,从你指定的输出目录中拷贝文件到开发板上cp libethercat.so* /usr/lib/ (开发板上)cp ethercat /usr/bin/ (开发板上)cp phylink.ko /userdata/ (开发板上) 内核编译cp pcs-xpcs.ko /userdata/ (开发板上) 内核编译 cp ec_master.ko /userdata/ (开发板上)cp ec_stmmac.ko /userdata/ (开发板上)#加载驱动insmod /userdata/phylink.koinsmod /userdata/pcs-xpcs.koinsmod /userdata/ec_master.ko main_devices=62:36:B8:01:5B:59(这个是你的网口的物理地 址,可以通过ifconfig命令查看)insmod /userdata/ethercat_out/ec_stmmac.ko#调整soc为性能模式echo performance | tee $ (find /sys/ -name *governor)
EtherCAT IgH工具介绍
/* Master 0, Slave 0* Vendor ID: 0x00000a79* Product code: 0x00002000* Revision number: 0x00000001*/ec_pdo_entry_info_t slave_0_pdo_entries[] = {{0x603f, 0x00, 16}, /* ErrorCode */{0x6041, 0x00, 16}, /* StatusWord */{0x6064, 0x00, 32}, /* Position actual value */{0x60fd, 0x00, 32}, /* Digital inputs */{0x6061, 0x00, 8}, /* Modes of operation display */{0x6040, 0x00, 16}, /* ControlWord */{0x6060, 0x00, 8}, /* Modes of operation */{0x607a, 0x00, 32}, /* Target position */{0x6081, 0x00, 32}, /* Profile velocity */{0x6099, 0x01, 32}, /* Search Switch */{0x6099, 0x02, 32}, /* Search Zero */{0x6040, 0x00, 16},{0x607a, 0x00, 32},{0x60ff, 0x00, 32},{0x6060, 0x00, 8},{0x0000, 0x00, 8}, /* Gap */{0x6041, 0x00, 16},{0x6064, 0x00, 32},{0x606c, 0x00, 32},{0x6061, 0x00, 8},{0x0000, 0x00, 8}, /* Gap */};ec_pdo_info_t slave_0_pdos[] = {{0x1a01, 5, slave_0_pdo_entries + 0}, /* TxPDO 2 */{0x1601, 6, slave_0_pdo_entries + 5}, /* RxPDO 2 */{0x1600, 5, slave_0_pdo_entries + 11},{0x1a00, 5, slave_0_pdo_entries + 16},};ec_sync_info_t slave_0_syncs[] = {{0, EC_DIR_OUTPUT, 2, slave_0_pdos + 0, EC_WD_DISABLE},{1, EC_DIR_INPUT, 0, NULL, EC_WD_DISABLE},{2, EC_DIR_OUTPUT, 1, slave_0_pdos + 2, EC_WD_ENABLE},{3, EC_DIR_INPUT, 1, slave_0_pdos + 3, EC_WD_DISABLE},{0xff}};0 0:0 PREOP + 0x000001dd:0x10305070
SM0: PhysAddr 0x1000, DefaultSize 128, ControlRegister 0x26, Enable 1 RxPDO 0x1a01 "TxPDO 2" PDO entry 0x603f:00, 16 bit, "ErrorCode" PDO entry 0x6041:00, 16 bit, "StatusWord" PDO entry 0x6064:00, 32 bit, "Position actual value" PDO entry 0x60fd:00, 32 bit, "Digital inputs" PDO entry 0x6061:00, 8 bit, "Modes of operation display" RxPDO 0x1601 "RxPDO 2" PDO entry 0x6040:00, 16 bit, "ControlWord" PDO entry 0x6060:00, 8 bit, "Modes of operation" PDO entry 0x607a:00, 32 bit, "Target position" PDO entry 0x6081:00, 32 bit, "Profile velocity" PDO entry 0x6099:01, 32 bit, "Search Switch" PDO entry 0x6099:02, 32 bit, "Search Zero" SM1: PhysAddr 0x1100, DefaultSize 128, ControlRegister 0x22, Enable 1 SM2: PhysAddr 0x1200, DefaultSize 12, ControlRegister 0x64, Enable 1 RxPDO 0x1600 "" PDO entry 0x6040:00, 16 bit, "" PDO entry 0x607a:00, 32 bit, "" PDO entry 0x60ff:00, 32 bit, "" PDO entry 0x6060:00, 8 bit, "" PDO entry 0x0000:00, 8 bit, "Gap" SM3: PhysAddr 0x1300, DefaultSize 19, ControlRegister 0x20, Enable 1 TxPDO 0x1a00 "" PDO entry 0x6041:00, 16 bit, "" PDO entry 0x6064:00, 32 bit, "" PDO entry 0x606c:00, 32 bit, "" PDO entry 0x6061:00, 8 bit, "" PDO entry 0x0000:00, 8 bit, "Gap"
#设置别名地址(下面的例子代表设置位置0的别名修改为1)ethercat alias -p 0 0#设置别名地址(下面的例子代表别名0的别名修改为1)ethercat alias -a 0 1
Ethercat IgH主站性能测试结论
购买RK3506开发板
