日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

CANOpen报文类型

發(fā)布時(shí)間:2025/3/15 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CANOpen报文类型 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
CANOpen應(yīng)用層協(xié)議細(xì)化了CAN總線協(xié)議中關(guān)于標(biāo)識(shí)符的定義。定義標(biāo)準(zhǔn)報(bào)文的11比特標(biāo)識(shí)符中高4比特為功能碼,后7比特為節(jié)點(diǎn)號(hào),重命名為通訊對(duì)象標(biāo)識(shí)符(COB-ID)。 功能碼將所有的報(bào)文分為7個(gè)優(yōu)先級(jí),按照優(yōu)先級(jí)從高至低依次為:網(wǎng)絡(luò)命令報(bào)文(NMT)、同步報(bào)文(SYNC)、緊急報(bào)文(EMERGENCY)、時(shí)間戳(TIME)、過(guò)程數(shù)據(jù)對(duì)象(PDO)、服務(wù)數(shù)據(jù)對(duì)象(SDO)、節(jié)點(diǎn)狀態(tài)報(bào)文(NMT Err Control)

7位的節(jié)點(diǎn)號(hào)則表明CANOpen網(wǎng)絡(luò)最多可支持127個(gè)節(jié)點(diǎn)共存(0號(hào)節(jié)點(diǎn)為主站),下表給出了各報(bào)文的COB-ID范圍。

MNT命令為最高優(yōu)先級(jí)報(bào)文,由CANOpen主站發(fā)出,用以更改從節(jié)點(diǎn)的運(yùn)行狀態(tài)。

SYNC報(bào)文定期由CANOpen主站發(fā)出,所有的同步PDO根據(jù)SYNC報(bào)文發(fā)送。

EMERGENCY報(bào)文由出現(xiàn)緊急狀態(tài)的從節(jié)點(diǎn)發(fā)出,任何具備緊急事件監(jiān)控與處理能力的節(jié)點(diǎn)會(huì)接收并處理緊急報(bào)文。

TIME報(bào)文由CANOpen主站發(fā)出,用于同步所有從站的內(nèi)部時(shí)鐘。

PDO分為4對(duì)發(fā)送和接收PDO,每一個(gè)節(jié)點(diǎn)默認(rèn)擁有4對(duì)發(fā)送PDO和接收PDO,用于過(guò)程數(shù)據(jù)傳遞。

SDO分為發(fā)送SDO和接收SDO,用于讀寫(xiě)對(duì)象字典。

MT Error Control報(bào)文由從節(jié)點(diǎn)發(fā)出,用以監(jiān)視從節(jié)點(diǎn)的運(yùn)行狀態(tài)。


在def.h中用代碼表述了各種報(bào)文的功能碼

#define NMT 0x0 //網(wǎng)絡(luò)命令報(bào)文 #define SYNC 0x1 //同步報(bào)文 #define TIME_STAMP 0x2 //時(shí)間報(bào)文 #define PDO1tx 0x3 //過(guò)程數(shù)據(jù)對(duì)象1發(fā)送報(bào)文 #define PDO1rx 0x4 //過(guò)程數(shù)據(jù)對(duì)象1接收?qǐng)?bào)文 #define PDO2tx 0x5 //過(guò)程數(shù)據(jù)對(duì)象2發(fā)送報(bào)文 #define PDO2rx 0x6 //過(guò)程數(shù)據(jù)對(duì)象2接收?qǐng)?bào)文 #define PDO3tx 0x7 //過(guò)程數(shù)據(jù)對(duì)象3發(fā)送報(bào)文 #define PDO3rx 0x8 //過(guò)程數(shù)據(jù)對(duì)象3接收?qǐng)?bào)文 #define PDO4tx 0x9 //過(guò)程數(shù)據(jù)對(duì)象4發(fā)送報(bào)文 #define PDO4rx 0xA //過(guò)程數(shù)據(jù)對(duì)象4接收?qǐng)?bào)文 #define SDOtx 0xB //服務(wù)數(shù)據(jù)對(duì)象接收?qǐng)?bào)文 #define SDOrx 0xC //服務(wù)數(shù)據(jù)對(duì)象發(fā)送報(bào)文 #define NODE_GUARD 0xE //節(jié)點(diǎn)守護(hù)報(bào)文 #define LSS 0xF //層配置服務(wù)報(bào)文

在移植CANOpen時(shí),CAN總線接收到報(bào)文后要調(diào)用CANOpen提供的接口canDispatch根據(jù)功能碼進(jìn)行報(bào)文處理,在states.c中定義了canDispatch函數(shù)

/* 定時(shí)事件觸發(fā)處理函數(shù) */ void canDispatch(CO_Data *d, Message *m) {/* 取出cob_id */UNS16 cob_id = UNS16_LE(m->cob_id);/* 判斷報(bào)文類(lèi)型 */switch(cob_id >> 7){/* 同步/緊急報(bào)文 */case SYNC:/* 同步報(bào)文COB-ID為0x80 */if(cob_id == 0x080){/* 當(dāng)前狀態(tài)下允許同步報(bào)文,則進(jìn)行處理 */if(d->CurrentCommunicationState.csSYNC)proceedSYNC(d);} /* 緊急報(bào)文COB-ID為0x81-0xFF */else{/* 當(dāng)前狀態(tài)下允許緊急報(bào)文,則進(jìn)行處理 */if(d->CurrentCommunicationState.csEmergency)proceedEMCY(d,m);}break;/* 時(shí)間報(bào)文 *//* case TIME_STAMP: *//* PDO報(bào)文 */case PDO1tx:case PDO1rx:case PDO2tx:case PDO2rx:case PDO3tx:case PDO3rx:case PDO4tx:case PDO4rx:/* 當(dāng)前狀態(tài)下允許PDO報(bào)文,則進(jìn)行處理 */if(d->CurrentCommunicationState.csPDO)proceedPDO(d,m);break;/* SDO報(bào)文 */case SDOtx:case SDOrx:/* 當(dāng)前狀態(tài)下允許SDO報(bào)文,則進(jìn)行處理 */if(d->CurrentCommunicationState.csSDO)proceedSDO(d,m);break;/* 心跳/節(jié)點(diǎn)守護(hù)報(bào)文 */case NODE_GUARD:/* 當(dāng)前狀態(tài)下允許心跳/節(jié)點(diǎn)守護(hù)報(bào)文,則進(jìn)行處理 */if(d->CurrentCommunicationState.csLifeGuard)proceedNODE_GUARD(d,m);break;/* 改變節(jié)點(diǎn)狀態(tài)報(bào)文 */case NMT:/* 用于主站改變從站狀態(tài),所以從站才會(huì)收到 */if(*(d->iam_a_slave)){proceedNMTstateChange(d,m);}break;#ifdef CO_ENABLE_LSS/* 層設(shè)置服務(wù)報(bào)文 */case LSS:if(!d->CurrentCommunicationState.csLSS)break;if((*(d->iam_a_slave)) && cob_id==MLSS_ADRESS){proceedLSS_Slave(d,m);}else if(!(*(d->iam_a_slave)) && cob_id==SLSS_ADRESS){proceedLSS_Master(d,m);}break; #endif} }



新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的CANOpen报文类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。