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同步报文的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 清华大学计算机科学与技术在哪个楼,清华大
- 下一篇: 双极结型三极管及放大电路基础