国讯开发板开发记录-Ethercat

一、连接开发板

1.Ping不通ip,且蓝灯不闪烁

1.连上串口线,使用软件MobaXterm
​​​​​在这里插入图片描述
2.在此页面输入root,如果没有此界面,重上电

在这里插入图片描述

2.设备信息

IP:192.168.0.20
用户名:root 

二、交叉编译器

1.声明环境变量
source /opt/niic/2.5.3/environment-setup-aarch64-niic-linux
2.查看版本
$CC -v

三、485通讯测试

在这里插入图片描述

1.接口信息

在这里插入图片描述

35-9
RS485_A1GND_ISO-RS485_A2
46-10
RS485_B1GND_ISO-RS485_B2

2.ioctl读写操作切换

1.ioctl提示
ioctl+回车

root@nom-r001dl:~# ioctl
Usage: ioctl rs232_1|rs485write_1|rs485read_1|                     rs232_2|rs485write_2|rs485read_2

2.ioctl控制串口读写
ioctl + 对应的命令

示例:启用485(1)的读

ioctl rs485write_1

3.microcom串口测试命令

485_1:microcom -s 115200 /dev/ttyS6
485_2:microcom -s 115200 /dev/ttyS2
退出:ctrl+x

4.测试示例

1.流程
先用ioctl命令选定485口:1/2,读/写
再使用microcom串口测试命令配置并打开对应的串口
2.示例1
主板对485(1)进行读操作

root@nom-r001dl:~# ioctl rs485write_1
root@nom-r001dl:~# microcom -s 115200 /dev/ttyS6

使用串口助手发送信息,就会实时显示
在这里插入图片描述
2.示例2
主板对485(1)进行写操作

root@nom-r001dl:~# ioctl rs485write_1
root@nom-r001dl:~# microcom -s 115200 /dev/ttyS6

键盘按数字/字母会实时显示在串口软件上
在这里插入图片描述

四、CAN通讯测试

1.接口信息

在这里插入图片描述

111315
CAN1_HCAN2_HGND_ISO
121416
CAN1_LCAN2_LGND_ISO

2.配置can接口命令和数据发送命令

root@nom-r001dl:~# ip link set can0 up type can bitrate 1000000 dbitrate 5000000 fd on
root@nom-r001dl:~# cansend can0 123#01.02.03.04.05.06.07.08

canpro接收到的数据
在这里插入图片描述

3.can数据接收命令

1.输入can接收命令

root@nom-r001dl:~# candump can0 -L

2.使用canpro发送数据
在这里插入图片描述
3.设备接收到数据

root@nom-r001dl:~# candump can0 -L
(1725599729.418628) can0 001#1122334455667788

五、Ethercat示例程序信息

1.操作

1.解包
tar -xzvf Necro-EtherCAT_Demo-3.1.2-Linux.tar.gz
2.创建一个名为build的新目录
mkdir build
3.使用CMake工具来配置项目。这里的…/表示CMake的配置文件位于上一级目录,即examples目录中。这个命令会根据项目的CMakeLists.txt文件生成编译所需的Makefile或其他构建系统文件。
cmake ../
4.示例运行文件所在目录
/Necro-EtherCAT_Demo-3.1.2-Linux/examples/build/bin$
5.将ethercat-cxx-demo拷贝到192.168.0.20的/home/root/路径下(ethercat-c-demo已经不再更新)
scp ethercat-cxx-demo root@192.168.0.20:/home/root/
6.将xml拷贝到指定路径下
scp ZEtest1.xml root@192.168.0.20:/var/lib/ethercat-esi/

2.cxx文件代码解析

1.axis.hpp
轴结构体
2.bit_pattern.hpp
用于处理位模式匹配和设置。这个结构体包含两个成员:mask 和 expected,分别用于定义要匹配或设置的位的掩码和期望值。
3.io.hpp
这段代码定义了一个结构体 io_data 和两个模板函数 io_write_bit 和 io_read_bit,它们用于处理位级别的输入/输出操作。
4.main.cpp
工作流程
解析命令行参数,获取配置文件名、循环时间、日志级别等。
初始化EtherCAT任务,设置优先级和CPU亲和性。
根据提供的XML配置文件或默认设置,配置EtherCAT从站。
注册回调函数,用于在EtherCAT任务启动时配置轴和IO设备。
启动EtherCAT任务,并等待其完成

3.关键数据

1.使能

关键变量:power_.enable

2.pdo数据(故障码,位置等)

axis->error_code 故障码
axis->control_word 控制字
axis->status_word 状态字
axis->mode_of_operation 操作模式
axis->mode_of_operation_display
axis->target_position 目标位置
axis->position_actual_value 实际位置
axis->pv 速度
axis->pa 加速度
axis->pd 减速度

使用示例
*axis->target_position = pos; // 更新目标位置

4.数据怎么通过PDO刷新的(以实际位置为例)

轴的当前位置数据从PDO中获取,PDO映射了轴的状态信息。下面是详细的步骤和相关代码分析:

  1. PDO映射
    main.cpp 文件中,PDO映射是通过调用 task.try_register_pdo_entry 函数来实现的。这个函数将轴数据结构中的成员变量映射到PDO条目。对于实际位置,相关的PDO条目通常映射到 axis_data 结构体中的 position_actual_value 成员。
    task.try_register_pdo_entry 函数的功能是尝试将主站侧的内存地址映射到从站的PDO条目。这样,当主站读取或写入这个内存地址时,实际上是在读取或写入从站的PDO数据。

    task.try_register_pdo_entry(axis->position_actual_value, slave_pos,
                                {static_cast<ecat::pdo_index_type>(0x6064 + index_offset), 0});
    

    这里,0x6064 是PDO条目的标准索引,用于表示轴的实际位置。index_offset 是一个偏移量,用于处理多个轴的情况。

  2. 数据交换
    在EtherCAT系统中,主站和从站之间会周期性地交换PDO数据。这些数据包括轴的状态信息,如实际位置。在 main.cpp 中,通过设置接收回调函数 task.set_receive_callback 来处理这些数据。

    task.set_receive_callback([&] {
        for (auto &prog : programs)
        {
            prog();
        }
    });
    

    在这个回调函数中,所有的 program 对象都会被调用,这些对象中可能包含读取PDO数据的逻辑。

  3. 读取位置数据
    axis.hpp 中定义的 axis_data 结构体包含了指向实际位置的指针 position_actual_value。在实时数据交换过程中,从站会将实际位置数据写入这个地址。

    struct axis_data
    {
        // ...
        volatile const std::int32_t *position_actual_value;
        // ...
    };
    

    power.cpp 或其他相关的源文件中,通过解引用这个指针,可以获取轴的当前位置。

  4. 实际位置的读取
    move_demo.hpp 中的 move_demo 结构体的 on_cycle 方法中,可能会使用轴的当前位置数据。例如:

    int32_t actual_position = *axis->position_actual_value;
    

    这行代码读取了轴的实际位置,并将其存储在 actual_position 变量中。

综上所述,轴的当前位置数据是通过PDO映射从从站获取的,然后在主站的实时数据交换过程中被读取。具体的实现细节可能会根据实际的硬件配置和软件框架有所不同,但基本原理是相似的。

六、常用命令

ethercatctl start:启动 ethercat 网口驱动

./xmlParser:筛选和伺服匹配的 ESI 文件,在 ESI 文件数量多的情况下,可以快速运行 demo。(要先运行ethercatctl start命令,不然会运行失败)

dmesg:查看运行日志。

ethercat sl 查看扫描到的伺服名称,数量,状态

ethercatctl status:查看驱动状态

ethercatctl restart:重启 ethercat 网口驱动

ethercat slaves:查看连接的伺服型号和状态

ethercat domain -v:查看配置的 PDO 的数据(需在 demo 程序运行时才能查出信息)
ethercat domain -l :

ethercat upload -p -t uint16 0x603f 00:查看 error code 信息

七、测试数据记录

1.以0级别的日志运行./ethercat-cxx-demo -l 0

root@nom-r001dl:~# ./ethercat-cxx-demo -l 0
Use esi xml
[2024-09-06 03:26:40.507] [ecat-task00] [debug] slave 0: alias: 0, vendor id: 1516597871, product code: 168530, revision no: 1, serial no: 0
[2024-09-06 03:26:40.508] [ecat-task00] [info] device profile: 402
[2024-09-06 03:26:40.508] [ecat-task00] [trace] RxPDO: 0x1600
[2024-09-06 03:26:40.509] [ecat-task00] [trace] PDO entry { pos: 0, index: 0x607A:0, bit length: 32, name: Target Position, data type: DINT}
[2024-09-06 03:26:40.510] [ecat-task00] [trace] PDO entry { pos: 1, index: 0x60FE:0, bit length: 32, name: Digital Outputs, data type: UDINT}
[2024-09-06 03:26:40.511] [ecat-task00] [trace] PDO entry { pos: 2, index: 0x6040:0, bit length: 16, name: Control word, data type: UINT}
[2024-09-06 03:26:40.512] [ecat-task00] [trace] TxPDO: 0x1A00
[2024-09-06 03:26:40.512] [ecat-task00] [trace] PDO entry { pos: 0, index: 0x6064:0, bit length: 32, name: Position actual value, data type: DINT}
[2024-09-06 03:26:40.513] [ecat-task00] [trace] PDO entry { pos: 1, index: 0x60FD:0, bit length: 32, name: Digital Inputs, data type: DINT}
[2024-09-06 03:26:40.514] [ecat-task00] [trace] PDO entry { pos: 2, index: 0x6041:0, bit length: 16, name: Status word, data type: UINT}
[2024-09-06 03:26:40.514] [ecat-task00] [info] config rx in sm 2
[2024-09-06 03:26:40.514] [ecat-task00] [info] config tx in sm 3
[2024-09-06 03:26:40.514] [ecat-task00] [info] Configuring DC: AssignActivate=0x300, CycleTime0=1000000, CycleTime1=0, ShiftTime=0
[2024-09-06 03:26:40.515] [ecat-task00] [info] Reference clock: slave 0
[2024-09-06 03:26:40.515] [ecat-task00] [trace] Configuring finished
[2024-09-06 03:26:40.515] [ecat-task00] [trace] register_pdo_entry(0x15c7a140, 0, { 0x603F, 0 }, 0)
[2024-09-06 03:26:40.515] [ecat-task00] [trace] register_pdo_entry(0x15c7a128, 0, { 0x6040, 0 }, 0)
[2024-09-06 03:26:40.516] [ecat-task00] [trace] register_pdo_entry(0x15c7a148, 0, { 0x6041, 0 }, 0)
[2024-09-06 03:26:40.516] [ecat-task00] [trace] register_pdo_entry(0x15c7a138, 0, { 0x6060, 0 }, 0)
[2024-09-06 03:26:40.516] [ecat-task00] [trace] register_pdo_entry(0x15c7a158, 0, { 0x6061, 0 }, 0)
[2024-09-06 03:26:40.516] [ecat-task00] [trace] register_pdo_entry(0x15c7a130, 0, { 0x607A, 0 }, 0)
[2024-09-06 03:26:40.516] [ecat-task00] [trace] register_pdo_entry(0x15c7a150, 0, { 0x6064, 0 }, 0)
[2024-09-06 03:26:40.517] [ecat-task00] [trace] register_pdo_entry(0x15c7a160, 0, { 0x6081, 0 }, 0)
[2024-09-06 03:26:40.517] [ecat-task00] [trace] register_pdo_entry(0x15c7a168, 0, { 0x6083, 0 }, 0)
[2024-09-06 03:26:40.517] [ecat-task00] [trace] register_pdo_entry(0x15c7a170, 0, { 0x6084, 0 }, 0)
pdo_cnt: 10, s2s_cnt: 0
EtherCAT[Tx] domain[0] data size: 20 byte, transport 31 us
[2024-09-06 03:26:40.921] [debug] Axis 0 changed from 'not ready to switch on' to 'switch on disabled', control_word=0x6
[2024-09-06 03:26:40.922] [debug] Axis 0 changed from 'switch on disabled' to 'ready to switch on', control_word=0x7
[2024-09-06 03:26:40.925] [debug] Axis 0 changed from 'ready to switch on' to 'switched on', control_word=0xF
[2024-09-06 03:26:40.928] [debug] Axis 0 changed from 'switched on' to 'operation enabled', control_word=0xF
.......... move start pos: 342395

2.查看pdo数据ethercat domain -v

SM2和SM3的配置都是根据从站的xml文件配置的,下面的数据来源于零差电机的xml配置

零差电机的xml配置截图
零差电机手册中的描述

SM2中前4个字节是607A,中间4个字节是60FE,最后两个字节是6040

root@nom-r001dl:~# ethercat domain -v
Domain0: LogBaseAddr 0x00000000, Size  20, WorkingCounter 3/3
  SlaveConfig 0:0, SM2 (Output), LogAddr 0x00000000, Size 10
    61 7e 2d 00 00 00 00 00 0f 00 
  SlaveConfig 0:0, SM3 ( Input), LogAddr 0x0000000a, Size 10
    e9 7a 2d 00 00 00 00 00 37 12 

八、PDO配置

1.零差电机-资料来源(eRob CANopen and EtherCAT用户手册v1.9)

1.PDO

第四章

2.使用Twincat3配置零差电机PDO

准备工作
1.安装Twincat3软件:Twincat3安装教程
2.用Ethercat线,一端连接零差电机的ECATin,另一端插电脑网口,电机上电

1.电脑Ethercat驱动安装(不安装,Twincat无法搜到设备)

电脑Ethercat驱动安装教程网址
驱动可以通过“TcRteInstall.exe”工具安装,该工具位于C:\TwinCAT\3.1\System目录下。安装时,选择需要安装EtherCAT驱动的网卡,然后点击Install进行安装
选择左侧未安装的网卡(wifi的那个不用装),点击右侧install(我这里已经安装过了)
在这里插入图片描述
注意:此操作有可能禁用网卡,导致ping设备ping不通。需要到设备管理器-网络适配器,选择网口右键启用设备
在这里插入图片描述

2.新建工程

在这里插入图片描述

3.扫描设备

可以参考教程:TwinCAT3 扫描添加I/O教程中的:一、自动扫描
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
扫描后的选项全选是/OK,不用做调整
如果扫描出来没有零差标志,检查Ethercat驱动正常后,重新扫描
在这里插入图片描述

4.配置从机PDO

在这里插入图片描述
Sync Manager中选择Outputs/Inputs,然后在PDO Assignment窗口中勾选想要的PDO配置。
根据eRob CANopen and EtherCAT用户手册v1.9第112页所说,更改后会自动
更新从机中的xml-pdo。
在这里插入图片描述
电机重上电后,查看参数,确实已保存
在这里插入图片描述

5.输出eni文件

根据NECRO EtherCAT快速 测试指导手册-第十章 ENI 文件(此处已经连接上零差电机并配置好PDO,不用照着PDF搞前面的了,直接看输出部分,直接照着我下面的截图做就行)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

九、用国讯主板测试

1.把xml文件通过虚拟机复制到控制板中

scp filename root@192.168.0.20:/home/root/
此处路径为/home/root/,是因为文件导出为eni文件。

2.运行

./ethercat-cxx-demo -f filename.xml

root@nom-r001dl:~# ./ethercat-cxx-demo -f ZEtest1.xml 
Use eni xml
[2024-09-06 03:58:12.689] [ecat-task00] [info] loading slave 0
[2024-09-06 03:58:12.692] [ecat-task00] [info] name: Drive 1 (ZeroErr Driver), vendor id: 0x5A65726F, product code: 0x29252, revision no: 0x1, serial no: 0x0
[2024-09-06 03:58:12.692] [ecat-task00] [info] device profile: 402
[eni_config]::scan slave info, pos:0, id:(168530,1516597871), alias(0,0), rev(1,0)
[2024-09-06 03:58:12.694] [ecat-task00] [info] Configuring slave 0, alias: 00, vendor: 0x5A65726F, product: 0x29252
[2024-09-06 03:58:12.694] [ecat-task00] [info] Configuring DC: AssignActivate=0x300, CycleTime0=2000000, CycleTime1=0, ShiftTime=0
[2024-09-06 03:58:12.695] [ecat-task00] [info] Reference clock: slave 0
pdo_cnt: 10, s2s_cnt: 0
EtherCAT[Tx] domain[0] data size: 30 byte, transport 35 us
.......... move start pos: 785322

root@nom-r001dl:~# ethercat domain -v
Domain0: LogBaseAddr 0x00000000, Size  30, WorkingCounter 3/3
  SlaveConfig 0:0, SM3 ( Input), LogAddr 0x00000000, Size 14
    00 00 b7 12 19 29 41 00 07 00 00 00 08 00 
  SlaveConfig 0:0, SM2 (Output), LogAddr 0x0000000e, Size 16
    7c 2b 41 00 00 00 00 00 00 00 00 00 0f 00 08 00 
root@nom-r001dl:~# ethercat domain -v
Domain0: LogBaseAddr 0x00000000, Size  30, WorkingCounter 3/3
  SlaveConfig 0:0, SM3 ( Input), LogAddr 0x00000000, Size 14
    00 00 b7 12 c8 ce 49 00 00 00 00 00 08 00 
  SlaveConfig 0:0, SM2 (Output), LogAddr 0x0000000e, Size 16
    28 d1 49 00 00 00 00 00 00 00 00 00 0f 00 08 00 

小记

2024.10.29

  1. 要想配置pdo,主从机的xml文件中pdo必需要修改成想要的配置。
  2. xml更改方式:在线更改/直接下载?(还未确定是否可行)。可参考零差电机资料里有twincat3软件更改xml的方式。NECRO EtherCAT快速 测试指导手册中第六章

附录

1.主站能够访问的PDO(过程数据对象)是由从站设备配置决定

在EtherCAT网络中,主站能够访问的PDO(过程数据对象)是由从站设备配置决定的。具体来说,如果从站XML文件(通常是ESI文件,即EtherCAT Slave Information文件)中定义了特定数量和大小的PDO,则主站只能访问这些已定义的数据。

  • 少于从站配置:如果主站尝试访问的数据量小于从站定义的PDO大小,这是完全可行的。主站可以选择性地使用部分PDO中的数据,而不必每次都读取或写入整个PDO。

  • 等于从站配置:当主站按照从站所配置的确切PDO大小进行数据交换时,这是最常见也是最直接的情况,确保了数据完整性和一致性。

  • 多于从站配置:如果主站试图访问超过从站定义范围的数据,这将导致错误或异常情况。因为从站没有提供超出其定义之外的数据存储空间或处理能力。这种情况下,主站可能收到无效的数据或者通信失败的反馈。

因此,在设计EtherCAT系统时,需要仔细规划每个从站的PDO映射和大小,确保它们能满足应用的需求。同时,主站软件也应当被正确编程来匹配这些配置,以避免因请求过多数据而导致的问题。在实际部署前进行全面测试是非常重要的步骤,可以及早发现并修正任何配置上的不一致问题。

2.使用 PDO 必须配置通讯参数

与映射参数,如表 3-10 所示,CANopen 版本的 eRob 关节模组支持 4 个 RxPDO 和

4 个 TxPDO,每个 PDO 可映射长度最大为 8 个字节。

3.将从设备的 ESI 文件导入到主站控制器软件中,使主站控制器能够根据 ESI 文件中的配置来识别和控制每个从站。一个 ESI 文件可以包含多个从站的数据。

2.参考资料​

1.PDF文档
  1. MAN-G-DS402
  2. NECRO EtherCAT快速 测试指导手册
  3. eRob CANopen and EtherCAT用户手册v1.9
2.网页

【EtherCAT】COE对象字典与PDO映射简介
TwinCAT3 扫描添加I/O教程
电脑Ethercat驱动安装教程网址
Twincat3安装教程

3.NECRO EtherCAT快速 测试指导手册-第十章 ENI 文件前半部分教程

参考资料:NECRO EtherCAT快速 测试指导手册中第六章
选择正确的设备型号这一步,要往下拉才能看到零差电机
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值