首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CANopen TPDO组件读写

CANopen TPDO组件读写
EN

Stack Overflow用户
提问于 2022-06-10 06:28:46
回答 2查看 188关注 0票数 1

你好,我刚接触过CANopen,有几个与PDO输入/输出相关的问题。我收到来自传感器的以下信息:

据我所知,这些都是PDO消息。我怎么才能破解它的有效载荷?另外,我有一个传感器手册,它表示如下说明

因此,例如,我如何形成传感器的有效载荷来获得温度?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-14 10:28:31

对于Lundin的回答,在OD索引1A00h+n找到的TPDO的映射条目,所以它依赖于TPDO号,而不是节点ID,基本索引是1A00h,而不是1800 h。在1800h+n中,您可以找到包含COB(子索引1处的UNSIGNED32)、触发模式、同步参数、事件定时器(tx周期)和抑制时间(tx速率限制)的TPDO通信参数。

OD索引1A00h+n处的映射是一个包含子索引0的列表,它像往常一样包含列表项的数量,子索引1和更高的值包含一个UNSIGNED32映射条目值。此值指向映射的OD条目如下:

代码语言:javascript
复制
    <index (16-bit)><sub-index (8-bit)><number of bits (8-bit)>

因此,如果有一个值20230410h,就意味着TPDO映射OD条目2023h,04h,它有16位宽,因此它将在TPDO中“占据”2个字节。在映射表中首先映射的是PDO的有效负载。

同样,接收PDOs的定义类似于OD条目1400h+n处的(较少的)通信参数和OD条目1600h+n处的映射条目。

当您与一个CANopen节点交谈时,您正在接收该节点的TPDO并发送该节点的RPDO,因此您需要了解RPDO的映射,以便了解该节点的期望。对于RPDO 1-4,COB- ID通常使用节点ID计算,如下所示:

代码语言:javascript
复制
    RPDO1: 200h+node ID
    RPDO2: 300h+node ID
    RPDO3: 400h+node ID
    RPDO4: 500h+node ID
票数 0
EN

Stack Overflow用户

发布于 2022-06-10 13:45:50

大多数CANopen消息基于节点id来选择标识符。您的节点id似乎是44h (68Dec)。如果我们从你的标识符中减去44h,我们得到:

代码语言:javascript
复制
0x180 = TPDO1 (3 bytes)
0x280 = TPDO2 (3 bytes)
0x380 = TPDO3 (6 bytes)
0x480 = TPDO4 (8 bytes) 
0x700 = Heartbeat message

至于有效负载意味着什么,您无法从CAN监听器中看出,设备必须记录这一点。通过使用PDO映射,它们有可能将多个数据项(如0x2108 )存储在一个包中。检查PDO映射参数为上述TPDO,应在OD指数1800 h+节点id处找到。它应该列出0x2000到0x5FFF中的一些东西,这是对象字典中特定于制造商的区域。

您也可以检查他们的EDS文件,它是一个可读的文本文件,应该列出所有默认配置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72569939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档