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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mailbox 编程_往死里写——从站mailbox实现 | 学步园

發布時間:2025/3/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mailbox 编程_往死里写——从站mailbox实现 | 学步园 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

void ECAT_Main(void)函數里面

首先檢查是否有服務儲存在mailbox里面。調用MBX_Main();(This function is called cyclically to check if a received Mailbox service was stored?)

在MBX_Main(void)里面獲得mailbox的接受隊列里面的郵箱賦予pMbx。

通過函數MailboxServiceInd(*pmbx)來檢查郵箱頭部給對應的服務,然后調用對應的XXXX_ServiceInd-function函數

根據pMbx->MbxHeader.Flags[MBX_OFFS_TYPE] & MBX_MASK_TYPE) >> MBX_SHIFT_TYPE來判讀對應的服務

#define ? ? MBX_TYPE_AOE ? ? ? ? ? ? ? ? ? ? ? ?1

#define ? ? MBX_TYPE_EOE ? ? ? ? ? ? ? ? ? ? ? ?2

#define ? ? MBX_TYPE_COE ? ? ? ? ? ? ? ? ? ? ? ?3

#define ? ? MBX_TYPE_FOE ? ? ? ? ? ? ? ? ? ? ? ?4

#define ? ? MBX_TYPE_SOE ? ? ? ? ? ? ? ? ? ? ? ?5

#define ? ? MBX_TYPE_VOE ? ? ? ? ? ? ? ? ? ? ? ?15

通過判斷(pMbx->MbxHeader.Flags[MBX_OFFS_TYPE] & MBX_MASK_TYPE) >> MBX_SHIFT_TYPE 來判斷郵箱請求服務的類型。

這里發現郇極、劉艷強書《工業以太網現場總線EtherCAT驅動程序設計及應用》P24頁 ?和圖2.26,表2.6 里有個錯誤

在從站協議V5.10里,它的非周期性郵箱數據通信,郵箱數據單元結構里,郵箱數據頭,是由長度(16位)、地址(16位)、通道(6位)、優先級(2位)、計數器(4位)、類型(4位)。

而在書里面,把類型和計數器的位置顛倒了。

長度(16)

地址(16位)

通道(6位)

優先級(2位)

計數器(4位)

類型(4位)

MBX_TYPE_AOE

1

MBX_TYPE_EOE

2

MBX_TYPE_COE

3

MBX_TYPE_FOE

4

MBX_TYPE_SOE

5

MBX_TYPE_VOE

15

當郵箱數據頭類型=3(CoE)時,COE_ServiceInd((TCOEMBX MBXMEM *)pMbx)函數

通過強制類型轉換,套出CoE數據頭

這里注意,大小端模式下,CoE類型的位置是不一樣的。

在這里我們采用小端模式

PDO編號(9位)

保留(3位)

類型(4位)

CoE數據頭

通過判斷類型,跳轉到對應的類型處理中去

COESERVICE_EMERGENCY

1

COESERVICE_SDOREQUEST

2

COESERVICE_SDORESPONSE

3

COESERVICE_TXPDO

4

COESERVICE_RXPDO

5

COESERVICE_TXPDOREMREQ

6

COESERVICE_RXPDOREMREQ

7

COESERVICE_SDOINFO

8

CoE命令定義

這里SDO服務,這里SDO數據幀格式

SDO控制(8)

索引(16)

子索引(8)

數據(32)

可選擴展數據(1~1470)

SDO通信服務的3種類型

1、快速傳輸服務:與標準的CANopen協議相同,只使用8個字節,最多傳輸4個字節有效數據;

2、常規傳輸服務:使用超過8個字節,可以傳輸超過4個字節的有效數據,最大可傳輸有效數據取決于郵箱SM所管理的存儲區容量;

3、分段傳輸服務:對于超過郵箱容量的情況,使用分段的方式進行傳輸。

在從站代碼里面只定義了 SDO請求 的服務程序 和 SDO信息的服務程序;

當接受到SDO-Request 的時候 ,將調用SDOS_SdoInd()函數來處理SDO請求,如果存在SDO協議被使用,則對應的處理函數將被調用。

在這里強行套用套接頭(TINITSDOMBX)

這里通過指令

UINT8 sdoHeader = pSdoInd->SdoHeader.Sdo[SDOHEADER_COMMANDOFFSET] & SDOHEADER_COMMANDMASK;

UINT8 command = (sdoHeader & SDOHEADER_COMMAND);

將CoE的命令碼讀出來

如果命令碼CCS 是0x01:下載請求;0x00:分段下載請求

SDO傳輸又分為下載和上傳兩種,下載傳輸常用于主站設置從站參數,上傳傳輸用于主站讀取從站的性能參數。這兩種服務在物理上是對稱的。

在書《工業以太網現場總線EtherCAT驅動程序設計及應用》P101 表5.5 里面CoE的命令碼CCS可以補充

0x00

分段下載請求

0x01

下載請求

CCS

0x02

上傳請求

0x03

分段上傳請求

0x04

停止傳輸

通過函數OBJ_GetObjectHandle();獲得對象字典的句柄,并判斷請求的索引是否在對象字典里面定義

SDO傳輸又分為下載和上傳兩種,下載傳輸常用于主站設置從站參數,上傳傳輸用于主站讀取從站的性能參數。

(1)SDO下載傳輸請求

SDO下載傳輸請求數據格式。如果要傳輸的數據小于4個字節,則使用快速SDO傳輸服務,它完全兼容CANopen協議,使用8個字節數據,其中4個字節為數據區,有效字節為4減去SDO控制字節中的位2和3表示的數值。(表示傳輸的數據小于4個字節,因為只有兩位表示,所以,其中值為0,1,2,3)

如果要傳輸的數據大于4個字節,則使用常規傳輸服務。在常規傳輸時,用快速傳輸時的4個數據字節表示要傳輸的數據的完整大小。用擴展數據部分傳輸有效數據。有效數據的最大容量為郵箱容量減去16。實際大小為郵箱頭中長度數據n減去10。SDO下載傳輸請求服務的數據幀內容如表所示。

(2)SDO分段下載傳輸

在常規下載傳輸時,如果傳輸數據對象的總數量大于本次傳輸的允許數據數量,則必須使用后續的分段下載傳輸服務。

(3)SDO下載傳輸響應

從站收到SDO下載請求之后,執行相應的處理,然后將響應數據寫入輸入郵箱SM1中,由主站讀走。主站只有得到正確的響應之后才能執行下一步SDO操作。正確的SDO下載響應數據格式如圖

(4)終止SDO傳輸

在SDO傳輸過程中,如果某一方發現有錯誤,可以發起SDO終止傳輸請求,對方收到此請求后,停止當前SDO傳輸。SDO終止傳輸請求不需要應答。

(5)SDO下載傳輸過程

主站首先發送SDO下載請求道從站SM0,從站讀取郵箱數據后執行相應操作,并將響應數據寫入輸入郵箱SM1。主站讀SM1,讀到有效數據后,根據響應數據判斷下載請求的執行結果。

2、緊急事件

緊急事件由設備內部得錯誤事件觸發,將診斷信息發送給主站。當診斷事件消失之后,從站應該將診斷事件和錯誤復位碼再發送一次。

SDO數據,1字節(控制字節),位4,完全操作(COMPLETE_ACCESS),0x00:操作由索引號和子索引號檢索的參數體;0x01:操作完整的數據對象,子索引應該為0或1(不包括子索引0)

在這里這個完全操作是什么作用?

總結

以上是生活随笔為你收集整理的mailbox 编程_往死里写——从站mailbox实现 | 学步园的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。