欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CANOpen 同步报文使用

程序员文章站 2022-04-01 18:43:04
...

如何实现同步报文?

引出:

CANOpen 同步报文使用

第一种:同步读取从站数据

概述:

主站(SYNC producer)同步读取从站(SYNC consumer)的PDO数据

主机(SYNC Producer)

1. TPDO1字典配置

/* index 0x1800 :   Transmit PDO 1 Parameter. */
UNS8 Master_highestSubIndex_obj1800 = 6; /* number of subindex - 1*/
UNS32 Master_obj1800_COB_ID_used_by_PDO = 0x180;	/* */
UNS8 Master_obj1800_Transmission_Type = 0x00;	/* */
UNS16 Master_obj1800_Inhibit_Time = 0x00;	/* */
UNS8 Master_obj1800_Compatibility_Entry = 0x0;	/* 0 */
UNS16 Master_obj1800_Event_Timer = 0x0;	/* 0 */
UNS8 Master_obj1800_SYNC_start_value = 0x0;	/* 0 */

关键:

UNS8 Master_obj1800_Transmission_Type = 0x00;
非循环同步
CANOpen 同步报文使用

通讯相关字典配置

概述
索引 子索引 设置值 描述 单位 备注
0x1005 0x0 0x40000080 SYNC COB ID 规定的
0x1006 0x0 0xF4240 Communication / Cycle Period us 可自行更改
0x1007 0x0 0xF4240 Synchronous Window Length us 可自行更改
0x1019 0x0 0xa Synchronous counter overflow value 可自行更改
主机这样配置后的效果:

主机会周期性地发送同步报文,周期为0x1006的值,同步报文的cobID为0x1005 的值。
CANOpen 同步报文使用

0x1005详述:

CANOpen 同步报文使用
CANOpen 同步报文使用

从机(SYNC Consumer)

1. 字典配置

索引 子索引 设置值 描述 单位 备注
0x1005 0x0 0x40000080 SYNC COB ID 规定的
0x1006 0x0 0xF4240 Communication / Cycle Period us 可自行更改
0x1007 0x0 0xF4240 Synchronous Window Length us 可自行更改
0x1019 0x0 0xa Synchronous counter overflow value 可自行更改
0x1800 0x2 0x3 Transmission_Type 可自行更改

Transmission_Type (0x1800.0x2)

说明: 从站(SYSNC consumer)会在收到收到 (0x1800.0x2) 个同步包后才进行发送同步的TPDO数据帧
发送
CANOpen 同步报文使用

can上位机监测报文:

CANOpen 同步报文使用

黄色部分: 同步报文
红色画线部分: 从机的同步TPDO
说明:
1.同步报文的发送时间间隔为:0x1006.0x0(Communication / Cycle Period)决定,本此实验
0x1006.0x0的值我设置为:0xF4240 = 1000000us = 1s
2 从站再接收到3个同步包之后才发送同步的TPDO1数据帧,这里的3是由从站的0x1800.0x02字典的值决定的。

假如修改主机字典数据:

0x1800.0x02(Transmission_Type) = 0x01 //循环同步模式

那么报文是这样的:

CANOpen 同步报文使用

相关标签: CAN OPEN