一、连接开发板
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.接口信息
3 | 5 | - | 9 |
---|---|---|---|
RS485_A1 | GND_ISO | - | RS485_A2 |
4 | 6 | - | 10 |
RS485_B1 | GND_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.接口信息
11 | 13 | 15 |
---|---|---|
CAN1_H | CAN2_H | GND_ISO |
12 | 14 | 16 |
CAN1_L | CAN2_L | GND_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映射了轴的状态信息。下面是详细的步骤和相关代码分析:
-
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
是一个偏移量,用于处理多个轴的情况。 -
数据交换:
在EtherCAT系统中,主站和从站之间会周期性地交换PDO数据。这些数据包括轴的状态信息,如实际位置。在main.cpp
中,通过设置接收回调函数task.set_receive_callback
来处理这些数据。task.set_receive_callback([&] { for (auto &prog : programs) { prog(); } });
在这个回调函数中,所有的
program
对象都会被调用,这些对象中可能包含读取PDO数据的逻辑。 -
读取位置数据:
在axis.hpp
中定义的axis_data
结构体包含了指向实际位置的指针position_actual_value
。在实时数据交换过程中,从站会将实际位置数据写入这个地址。struct axis_data { // ... volatile const std::int32_t *position_actual_value; // ... };
在
power.cpp
或其他相关的源文件中,通过解引用这个指针,可以获取轴的当前位置。 -
实际位置的读取:
在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配置
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
- 要想配置pdo,主从机的xml文件中pdo必需要修改成想要的配置。
- 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文档
- MAN-G-DS402
- NECRO EtherCAT快速 测试指导手册
- eRob CANopen and EtherCAT用户手册v1.9
2.网页
【EtherCAT】COE对象字典与PDO映射简介
TwinCAT3 扫描添加I/O教程
电脑Ethercat驱动安装教程网址
Twincat3安装教程
3.NECRO EtherCAT快速 测试指导手册-第十章 ENI 文件前半部分教程
参考资料:NECRO EtherCAT快速 测试指导手册中第六章
选择正确的设备型号这一步,要往下拉才能看到零差电机