问鼎国际

【网站地图】
当前地点地位:首页 > 技术知识 > CANopen

【CANopen实战】若何实现PDO数据变动即刻发送(事务触发模式详解)

颁布功夫:2026-05-28

      提要:在 CANopen 通讯开发中,我们时时遇到这样的需要:当 TPDO 映射的对象字典(OD)数值产生变动时,从站必要即刻发送该 PDO 数据。本文将结合 CiA301 尺度,具体解析“事务触发(Event-driven)”模式的配置细节,并演示若何通过利用层代码(回调函数)实现这一职能。

 1. 需要布景

      默认情况下,PDO 可能被配置为同步(Sync)模式。但对于状态扭转、报警等关键数据,我们必要它具佑装实时性”,即:值变即发,无需期待 SYNC 帧。这就涉及到了 PDO 的传输类型(Transmission Type)配置。

 2. 理论基。篢ransmission Type 选型

      查阅 CiA301 尺度或有关资料,对象字典(OD)在 0x18**(Sub-index 02)界说的传输类型(Value)对应关系如下:

      ● 0:synchronous (acyclic) —— 同步,单次
      ● 1:synchronous (every SYNC) —— 同步,每 1 个周期触发一次
      ● 2:synchronous (every 2nd SYNC) —— 同步,每 2 个周期触发一次
      ● 240:synchronous (every 240th SYNC) —— 同步,每 240 个周期触发一次
      ● 252:RTR-only (synchronous) —— 远程帧触发,同步
      ● 253:RTR-only (event-driven) —— 远程帧触发,事务触发
      ● 254:event-driven (manufacturer-specific) —— 事务触发(用户设定)
      ● 255:event-driven (profile-specific) —— 事务触发(行业子和谈设定)

      分析:凭据职能需要,由于无需同步周期触发或远程帧触发,我们将钻研沉心放在“事务驱动(Event-driven)”模式上;诖,首先必要相识什么是事务触发。参阅 CiA301 的文档 7.2.2.3 Triggering modes 章节所述,和谈将 PDO 的传输触发分为三大类:Event- and timer-driven(事务和按时器触发)、Remotely requested(远程帧触发)、Synchronously triggered(周期触发)。

      但在参考 CiA 有关和谈文档时,并未发现“PDO 映射数值变动即自动触发传输”的直接界说;谎灾,仅配置 Transmission Type(传输类型)尚不及以实现该职能。若需将对象字典(OD)的变动界说为触发事务,通常属于“用户设定”领域,必要通过利用层代码共同实现。

      深刻理解 Event-driven:254 与 255 的区别
      ● 254(用户设定):触发逻辑齐全由用户自行界说。传输行为仅受对象字典与利用法式节造,不受其他 CANopen 服务或报文的影响。
      ● 255(行业子和谈):遵循特定行业尺度(Device Profile)的设定。若有关 Profile 对 PDO 报文传输有特定约束,则需配置为 255;通用场景下,通常首选 254。

 3. 关键配置参数总结

      在确定将 Transmission Type 设置为 254 后,需同步核查 PDO 的约束参数,以确保通讯的不变性。出格是在高频触发场景下,抑造功夫(Inhibit Time)的设置对于预防总线拥塞至关沉要。至此,对象字典(OD)层面的关键配置参数如下:

      ● 子索引 0x02 —— 传输类型(Transmission Type):用于设定 PDO 触发类型,此处设定值为 254。
      ● 子索引 0x05 —— 事务按时器(Event Timer):依照设备按时器异步触发,0 暗示禁用,此处设定值为 0。
      ● 子索引 0x06 —— 抑造功夫(Inhibit Time):限度最幼发送距离,0 暗示无限度,为了预防高频值变冲垮总线,建议设置 1ms,此处设定值为 10(对应 1ms,单元为 100?s)。

 4. 利用层代码实现

      配置完 OD 后,我们必要在代码层面实现“监控数据变动”并“要求发送”的逻辑。

      4.1 主题思路
      1. 注册一个 Object Dictionary Callback(对象字典回调函数)。
      2. 监控指标对象(例如 0x2000:01)的写入操作。
      3. 当检测到值产生变动时,挪用和谈栈的发送函数(如 coPdoReqNr 或类似 API)。

      4.2 代码示例(以 TPDO 1 映射值 0x2000:01 为例)

      步骤一:预设回调函数。我们在初始化阶段注册回调,监控索引 2000,子索引 01 的变动。

      步骤二:实现回调逻辑。在回调函数中,判断变动的对象,并手动触发 PDO 发送要求。

 5. 测试验证

      测试环境与利用逻辑:
      ● TPDO 1 映射对象:0x2000:01
      ● 利用逻辑:在 Demo 中设置一个 5s 按时器,每隔 5 秒让 0x2000:01 自增。

      测试了局分析:
      通过 CAN 分析仪抓包能够得到:当利用层逻辑批改 0x2000:01 的数值时,回调函数被触发,coPdoReqNr(1) 被执行。总线上即刻观测到 TPDO 1 的报文发出,且数据已更新。

 结论

      通过 Transmission Type = 254 共同 Inhibit Time 以及利用层回调机造,我们成功实现了 CANopen PDO 的事务驱动发送职能。


问鼎国际科技有限公司     

      问鼎国际科技专一于实时现场总线技术及工业通讯技术的研发、推广及技术支持服务,与多家行业当先的贸易同伴合作,致力于为工业自动化领域的客户提供优质服务。公司现有多款合用于工业自动化支持的软件和谈栈及开发所需的正版授权软件,同时,经验丰硕的技术团队也能够援手客户设计与调试并提供必要的技术支持。  

【网站地图】