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

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

因此,例如,我如何形成传感器的有效载荷来获得温度?
发布于 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条目如下:
<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计算,如下所示:
RPDO1: 200h+node ID
RPDO2: 300h+node ID
RPDO3: 400h+node ID
RPDO4: 500h+node ID发布于 2022-06-10 13:45:50
大多数CANopen消息基于节点id来选择标识符。您的节点id似乎是44h (68Dec)。如果我们从你的标识符中减去44h,我们得到:
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文件,它是一个可读的文本文件,应该列出所有默认配置。
https://stackoverflow.com/questions/72569939
复制相似问题