收藏 分销(赏)

基于Beckhoff的在Linux系统的CAN通信方法.pdf

上传人:自信****多点 文档编号:1878330 上传时间:2024-05-10 格式:PDF 页数:4 大小:1.70MB
下载 相关 举报
基于Beckhoff的在Linux系统的CAN通信方法.pdf_第1页
第1页 / 共4页
基于Beckhoff的在Linux系统的CAN通信方法.pdf_第2页
第2页 / 共4页
基于Beckhoff的在Linux系统的CAN通信方法.pdf_第3页
第3页 / 共4页
亲,该文档总共4页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、2023 年第 10 期76计算机应用信息技术与信息化12 ZHANG Y,HE J,GUO S,et alEnergy efficiency max-imisation in wireless powered networks with cooperative non-orthogonal multiple accessJ.IET communications,2018,12(18):2374-238313 赵亚楠,季薇,宋云超,等.协作 NOMA 系统中的一种新型节能功率分配方案 J.信号处理,2021,37(7):1324-1331.14 周宇超,杨洁,曹雪虹.自适应遗传算法下的 NOM

2、A 用户动态分簇 J.信号处理,2021,37(5):835-84215 郝少伟,李勇军,赵尚弘,等.基于改进粒子群算法的多载波 NOMA 功率分配策略 J.电子学报,2020,48(10):2009-2016.16 刘俊芳,张雪英,宁爱平 PSO和ABC的混合优化算法J.计算机工程与应用,2011,47(35):32-34+44.【作者简介】孙晨(1995),女,河南商丘人,硕士研究生,研究方向:无线通信。(收稿日期:2023-05-12 修回日期:2023-05-30)基于 B e c k h o f f 的在 L i n u x系统的 C A N通信方法李 幸1LI Xing 摘要 针对

3、汽车在环仿真系统中的 CAN 通信部分,提出了在 Linux 系统的基于 Beckhoff的 CANOpen 板卡自动读取 DBC 配置信息并收发 CAN message 的程序。首先介绍了基于 EtherCAT 的应用层协议:CANOpen,这是 CAN 板卡使用的协议。其次介绍了 EtherCAT 的主从站工作模式,这与 SOEM 库作为主从站程序的原理是相同的。最后提出了如何使用 SOEM 库去实现完整的 CAN 收发和解读数据后曲线显示功能。所提出的方法可以在工业界作为廉价实现 CAN 功能的参考。关键词 Beckhoff;CANOpen;CAN 通信;SOEM doi:10.3969

4、/j.issn.1672-9528.2023.10.0161.同济大学 上海 2000820 引言在现代汽车工业中,hardware-in-the-loop(HIL)台架技术已成为汽车电子控制系统开发和测试中不可或缺的一环。HIL 台架可以模拟各种复杂的汽车驾驶场景和环境,以便测试和验证车辆控制系统的功能、性能和稳定性。为了实现更加精确、高效和可靠的测试,近年来越来越多的研究关注于如何优化 HIL 台架中的硬件设备和软件平台1。本文的研究就着眼于如何利用 Beckhoff的 CANOpen 板卡作为汽车仿真的廉价可靠的 CAN 通信设备。CANOpen通信协议已经被广泛应用于各种控制系统中。然

5、而,在实际应用中,如何快速和可靠地实现 CANOpen 通信仍然是一个具有挑战性的问题。为了解决这一问题,开源社区开发了一种名为 simple open EtherCAT master(SOEM)的软件库,用于实现 EtherCAT 和 CANOpen 通信。SOEM 支持多种平台和操作系统,并且具有高度可移植性和灵活性。本文的上位机软件就是在 simulink 中完成车辆仿真,并使用 Beckhoff的公司的 EtherCAT 的 CAN 卡 EL6751 代替CANoe 的一部分功能,如 CAN message 收发、信号波形显示等。所有程序在 Linux 系统实现,从而保证更好的实时性能

6、,保证测试的可靠性和稳定性。本文的研究成果对于汽车电子控制系统的开发和测试具有一定的参考价值。1 相关技术介绍1.1 CANOpen 通信配置 CANOpen 协议通常分为用户应用层、对象字典以及通信三个部分。核心部分是对象字典,描述了应用对象和CANOpen 报文之间的关系。CANOpen 通信定义了协议通信规则以及与 CAN 控制器驱动之间对应关系,用来描述通信 2023 年第 10 期77计算机应用信息技术与信息化设备和它的网络行为的所有参数2。每个对象都有一个与之对应的对象组,对象组中包含了索引值、子索引、数据类型、是否支持 PDO 映射、取值范围等数据。通信对象主要包含四部分:网络管

7、理报文(network management,NMT)、服务数据对象 SDO、过程数据对象PDO、预定义报文或者特殊功能对象3。其中,特殊功能对象包括同步对象(synchronized,SYNC)和紧急事件(emer-gency,EMCY)。服务数据对象SDO主要用于向从站中写参数。过程数据对象 PDO 主要用于向从站中发送过程数据。1.2 EtherCAT 帧结构EtherCAT 将数据内容嵌入到以太网的标准帧格式中,形成 EtherCAT 数据帧。如图 1 所示。由于 EtherCAT 被优化为适用于短周期性的过程数据,因此不需要庞大的协议栈(例如 TCP/IP 或 UDP/IP)4,只需

8、要通过 RJ45 网线连接主机和EtherCAT 板卡即可。图 1 EtherCAT 的帧结构EtherCAT 帧的数据包头中命令字段决定寻址模式(包括设备寻址和逻辑寻址),数据包以读或者写方式工作,地址区字段决定哪一个从站接收、处理相应的数据包。1.3 EtherCAT 主从站工作模式(1)主站扫描从站。主站发送广播帧到总线上,扫描所有从站是否响应。从站接收到广播帧后,将自身的信息返回给主站。(2)主站配置从站。主站在扫描到从站后,将根据需要配置从站的参数,如通信速率、数据传输方式等。(3)主站周期性发送数据。主站通过周期性发送数据帧的方式,向从站发送控制命令或者获取传感器数据等信息。数据帧

9、的传输采用 master-to-slave 方式,以保证实时性。(4)从站响应主站的数据帧。从站接收到主站发送的数据帧后,根据控制命令或者传感器数据的请求做出相应的响应。(5)从站周期性地发送数据。从站也可以周期性向主站发送数据,如传感器测量值等信息。数据帧的传输采用master-to-slave 方式。(6)诊断和监测:EtherCAT 协议提供了丰富的诊断和监测机制,主站可以随时监测从站的状态,以便快速定位和解决故障。总的来说,EtherCAT 主从站的工作模式是基于实时以太网协议,通过主站和从站之间的数据交互,实现控制和数据采集等功能。整个 SOEM 库的思想和实现方式和以上 6 个步骤

10、类似,因为 CANOpen 板卡是建立在 EtherCAT 主从站工作模式下完成的。1.4 SOEM 库引入SOEM 在 Linux 平台有现成的软件库,集成了上述EtherCAT 的工作模式,本文将直接介绍和使用 SOEM 配置EtherCAT 板卡相关的函数。表 1 SOEM 重要 APIAPI说明ec_init初始设置 EtherCAT 接口ec_config_init完成时,所有从站进入 PRE_OP 状态,所有数据都存储在一个全局数组中ec_config_map所有 PDO 映射到 IOmap,包括输入和输出ec_configdc配置 DC 从站,测量传输延迟ec_statechec

11、k检查从站的从属状态,这是一个阻断功能ec_SDOwriteCoE SDO 服务数据写入给从站ec_send_processdata发送 pdo 过程数据给从站ec_receive_processdata接收各从站的 pdo 过程数据ec_writestate将预设的状态写入从站中1.5 DBC 文件的简单解读DBC(database CAN)表示 CAN 的数据库文件中的一种文件格式5,DBC 文件详细定义了 CAN 通信矩阵的信息,包含网络节点、数据类型、精度、偏移以及数据枚举量等6。CANOpen 板卡可依照此文件配置输入输出。DBC 文件内容主要可分为 8 部分信息,包括版本与符号、波

12、特率定义、网络节点的定义、报文帧的定义、信号的定义、注解部分、属性定义部分、信号数值部分7。如图 2 所示。图 2 DBC 文件内容报文帧用于完成 SDO 映射,信号定义是每次收到的CAN message 里的 data 的 layout。解析后可以得到每几个 bit所代表的含义。如图2中的SG_EMS_Fuelcounter,是从70,15 8 共占 16 个 bits 的一个物理量。用 C 语言或者其他语言写一个程序,读取 DBC 文件的2023 年第 10 期78计算机应用信息技术与信息化layout 内容,并对收到的 CAN message 进行解析,可以得到传输过来的具体信息。2 实

13、现思路2.1 总体方法由于硬件厂商的限制,在第一次使用 Beckhoff的板卡时,仍需使用 TwinCAT 配置,并导出 startup 配置文件。配置程序由两部分组成。第一部分,提取 DBC 文件关键信息,例如用户选择输出信号 X,则提取出 X 的 COB-ID、DLC、CycleTime 等信息。第二部分,CAN 板卡在汽车仿真系统中只关心输入和输出,在配置文件中找到 TxPDO(配置发送)和 RxPDO(配置接收)的地址。用第一部分提取出来的信息通过 SDO 在pre-op 阶段写入这些地址中。程序转入 op 阶段,完成板卡配置。2.2 startup 文件各厂商的板卡都有配套的说明文档

14、,用以说明板卡的各地址所存内容的意义。如图 3 所示,是 Beckhoff对 EL6751提供的 TxPDO 地址(0 x8006+16n)的解释。任何 Ether-CAT master 下的对从站的配置都可通过 SDO write 初始化。只需第一次将 TwinCAT 根据硬件生成的 startup 列表导出,后续使用只需更改 TxPDO 和 RxPDO 对应地址的内容即可。在 EL6751 中每次更换 CAN message 时,按照上文 2.1 中提到的程序运行就可以满足要求。图 3 TxPDO 地址官方文档2.3 帧周期CANOpen 的 PDO 遵循着生产者消费者的设计模式,很多高速

15、的 CAN message 发送速度达到了几毫秒每条 mes-sage。因此,SOEM 的程序将数据通过 Linux 电脑发往板卡的速率也必须在几毫秒以内。因为 Linux 系统支持多核多线程操作,不妨把 SOEM 程序和其它程序(如本文的汽车仿真程序)分开,让 SOEM 单独占据一个内核即可达到最高的实时性。PDO 过程数据帧可以用以下逻辑8来进行测量:T0=GetNowTime();接收仿真程序的待发送 Can dataec_send_processdata();ec_receive_processdata();检查数据是否有效T1=GetNowTime();帧周期等于 T1-T0。根据以

16、上计算方法,在 EL6751 上的帧周期大概为200 300 s,实时性优秀,相比 Windows 平台的 TwinCAT的 ms 级别的周期相比,实时性更好。2.4 帧时间戳许多高级的 CAN 接收装置都会带有 time stamp,用来记录每个 CAN 帧到来的时间,从而进一步可以用来判断上层程序读到的 CAN data 是新数据还是旧数据。EL6751 不具备硬件来记录 time stamp,因此需要使用主机的系统时间或者使用 EL6751 内置的 DC 时间9记录,以下将比较这两种记录方式的不同。(1)DC time 的值等于每次程序执行 ec_receive_process-data

17、 时 EL6751 内部时钟的值,该值可以精确到纳秒(ns)级别。由于时钟的运算是独立于其他系统的,因此 EL6751 的DC time 作为时间戳往往更为稳定。(2)Linux 中 C 语言的头文件 内置有 clock_gettime()提供了的精确度。可以利用内核隔离和线程分配,让程序运行 clock_gettime()相关代码更为迅速,减少因为处理器分配等系统带来的误差。如图 4 所示。图 4 Linux 主机测试 time 运行结果在一台 Linux 机器上运行以上代码后,得到的时间戳间隔都在 200 s 左右,因为本文应用的汽车仿真程序只需要1 ms 级别的误差,所以以上两种方案都是

18、可行的。在时间记录中,更为重要的是如何判断到来的 CAN 帧是新帧,还是已经取过的旧帧。EL6751 是 接 在 EtherCAT 耦 合 器 EK1100 的 从 站,EK1100 通过 RJ45 网线和 Linux 主机通信,因此 Linux 主机无法直接访问 EL6751 收到的 CAN 帧以访问 CAN ID,EL6751 与 Linux 主机能交换的只能是 CAN data。所以,要想区分新帧旧帧,只能通过发送方和接受方约定一个 flag。2023 年第 10 期79计算机应用信息技术与信息化经济实惠的方法是从 CAN data 中拿出一个 bit 作为flag,前一帧和后一帧依次为

19、 0 和 1,接收方只需要判断这次的帧和上一次的帧是否不同即可。经过多次测试,连续出现两帧错误或丢失 CAN 帧的概率非常的低。如图 5 所示,以 5 ms 的采样间隔运行程序,90 s 内没有出现 flag 间断的情况,则可以认为该设备的 CAN 传输是非常可靠的。图 5 Linux 主机测试丢失帧的结果2.5 运行逻辑(1)ec_init 配置 EtherCAT 初始化。(2)ec_config_init 列举所用从站,所有从站进入 PRE_op状态。(3)将 startup 配置文件中的各种参数通过 SDO 写入各从站当中。(4)完成 ec_config_map 配置 PDO 映射和 e

20、c_configdc配置时钟信号同步,CANOpen master 开始 CAN communica-tion 和 CANOpen slave。(5)尝试发送 PDO 数据,检查和请求所有从站进入 op状态。若同步和发送数据失败,可以 ec_close 所有主从站后,从步骤 1 重新启动。在 Linux 平台控制下的几个 CANOpen slave 板卡在 mas-ter 控制下可以分别和车载的 ECU 用 CAN message 通信,使用该系统可以低成本地搭建 hil 台架。2.6 信息可视化为了更方便实验,需要将 CAN message 传递的信息通过绘制曲线图的方式显示,如图 6 所示

21、。绘图的方法很多,本文采用 MATLAB 中的 simulink 绘图工具。图 6 Linux 主机收到 CAN 信息的绘制曲线在 SOEM 程序里完成 CAN message 的解析后,通过 udp的方式将 data 发送给 simulink 实时绘图。以下是从 CAN 发送出的 sin 三角函数图像,通过 simulink 程序实时绘制出来。由于UDP通信是不可靠传输,会出现极少的错误帧现象,但对于实时绘图来说,其错误在可接受范围内。采用 Linux核心独占的功能,让汽车仿真程序独占几个 CPU 核心,可以更稳定地运行。3 结语在汽车仿真系统中,CAN 信号的使用场景是很广泛的。在汽车仿真

22、系统中,Linux 主机可以充当核心控制终端的作用,使用 MATLAB 和 C 语言快速完成上位机的开发。Linux的执行程序 Loop 的时间远远小于 CAN message 的 Loop 时间,用来充当 CAN 的上位机绰绰有余。使用 Beckhoff的CANOpen 板卡进行 CAN message 的收发,其价格仅仅是使用 CANoe 的几十分之一,充分证明了使用 SOEM 开发 CAN上位机的优势。参考文献:1 雍加望,冯能莲,陈宁.自动驾驶汽车硬件在环仿真实验平台研发 J.实验技术与管理,2021,38(2):127-131+135.2 王剑涛.基于 CanOpen 的双模组交叉耦

23、合同步控制技术研究 D.武汉:华中科技大学,2021.3 王佳人.列车 CanOpen 总线协议一致性测试的研究与应用 J.智慧轨道交通,2022,59(3):53-57+62.4 郝继锋,叶宏,吕广喆.机器人操作系统 EtherCAT 技术研究 J.航空计算技术,2020,50(3):77-81.5 程跃.车载 CAN 通信技术及其应用 D.上海:同济大学,2008.6 王礼,涂小芳.基于 USBCAN 适配器解析与生成 DBC 技术研究 J.电子制作,2016(3):44-45.7 江永聪.基于 DBC 的汽车 CAN 报文远程采集与分析系统设计 J.电子技术与软件工程,2014(14):203-204.8 王惠娇.嵌入式平台EtherCAT主站的实现J.计算机应用,2018,38(S1):165-169.9 张磊.基于 EtherCAT 的主站通信控制器设计 D.广州:广东工业大学,2013.【作者简介】李幸(2000),男,湖南郴州人,硕士研究生,研究方向:汽车工业软件。(收稿日期:2023-04-29 修回日期:2023-05-15)

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 论文指导/设计

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服