CANOpen同步报文
生活随笔
收集整理的这篇文章主要介绍了
CANOpen同步报文
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
同步(SYNC),该报文对象基于生产者/消费者模式,由SYNC生产者周期性的广播,作为网络基本时钟,实现整个网络的同步传输,每个节点都以该同步报文作为同步PDO触发参数,因此该同步报文的COB-ID具有比较高的优先级以及最短的传输时间。
同步报文一般由主站进行发送,原理比较简单,只要按照字典中配置的周期,循环发送同步报文即可。 /* 启动同步报文 */ void startSYNC(CO_Data *d) {/* 如果同步报文定时器已经启动,则先停止 */if(d->syncTimer != TIMER_NONE){stopSYNC(d);}/* 按索引号0x1005和子索引号0注册字典入口的回调函数 */RegisterSetODentryCallBack(d, 0x1005, 0, &OnCOB_ID_SyncUpdate);/* 按索引号0x1006和子索引号0注册字典入口的回调函数 */RegisterSetODentryCallBack(d, 0x1006, 0, &OnCOB_ID_SyncUpdate);/* cob-id必须合法,sync配置字典时为0x40000000 & cob-id */if(*d->COB_ID_Sync & 0x40000000ul && *d->Sync_Cycle_Period){/* 设置定时发送同步报文 */d->syncTimer = SetAlarm(d, 0, &SyncAlarm, US_TO_TIMEVAL(*d->Sync_Cycle_Period), US_TO_TIMEVAL(*d->Sync_Cycle_Period));} }/* 同步报文定时事件回调函数 */ void SyncAlarm(CO_Data *d, UNS32 id) {sendSYNC(d); }
同步报文一般由主站进行发送,原理比较简单,只要按照字典中配置的周期,循环发送同步报文即可。 /* 启动同步报文 */ void startSYNC(CO_Data *d) {/* 如果同步报文定时器已经启动,则先停止 */if(d->syncTimer != TIMER_NONE){stopSYNC(d);}/* 按索引号0x1005和子索引号0注册字典入口的回调函数 */RegisterSetODentryCallBack(d, 0x1005, 0, &OnCOB_ID_SyncUpdate);/* 按索引号0x1006和子索引号0注册字典入口的回调函数 */RegisterSetODentryCallBack(d, 0x1006, 0, &OnCOB_ID_SyncUpdate);/* cob-id必须合法,sync配置字典时为0x40000000 & cob-id */if(*d->COB_ID_Sync & 0x40000000ul && *d->Sync_Cycle_Period){/* 设置定时发送同步报文 */d->syncTimer = SetAlarm(d, 0, &SyncAlarm, US_TO_TIMEVAL(*d->Sync_Cycle_Period), US_TO_TIMEVAL(*d->Sync_Cycle_Period));} }/* 同步报文定时事件回调函数 */ void SyncAlarm(CO_Data *d, UNS32 id) {sendSYNC(d); }
总结
以上是生活随笔为你收集整理的CANOpen同步报文的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 清华大学计算机科学与技术在哪个楼,清华大
- 下一篇: 双极结型三极管及放大电路基础