CAN總線的淺析CANopen協(xié)議書范本_第1頁
CAN總線的淺析CANopen協(xié)議書范本_第2頁
CAN總線的淺析CANopen協(xié)議書范本_第3頁
CAN總線的淺析CANopen協(xié)議書范本_第4頁
CAN總線的淺析CANopen協(xié)議書范本_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、. . . . CAN總線的淺析CANopen協(xié)議摘  要: 本文分析了CAN總線的一些特點以與在國的的應(yīng)用狀況,提出了引入國際上通用的CAN總線高層應(yīng)用協(xié)議,以提高國CAN系統(tǒng)應(yīng)用水平的建議,并簡要介紹了一種CAN的高層協(xié)議CANopen協(xié)議。文章最后部分介紹了國際上一些較先進(jìn)的CAN產(chǎn)品和開發(fā)方法。 關(guān)鍵詞: CAN-bus協(xié)議;CANopen協(xié)議;嵌入式軟件中間件 在設(shè)計嵌入式系統(tǒng),尤其是分布式嵌入式系統(tǒng)時,解決好系統(tǒng)各單元間可靠、有效的通信是系統(tǒng)設(shè)計成敗的關(guān)鍵,對實時性和安全可靠性要求高的網(wǎng)絡(luò)而言就更是如此。解決這一問題有多種方案,如RS232/485串行總線、CAN、Pro

2、fitBus、FF、WorldFIP、LonWorks等各類型的現(xiàn)場總線,還有嵌入式以太網(wǎng)等。其中,盡管RS485串行總線協(xié)議的性能不高,但由于其在硬件成本以與開發(fā)簡便性上的巨大優(yōu)勢,目前仍然是國廣泛的總線應(yīng)用。 隨著嵌入式系統(tǒng)應(yīng)用的發(fā)展,RS485性能上的不足逐漸顯露出來,已經(jīng)不能滿足設(shè)計一個高性能、高實時性系統(tǒng)的要求。盡管還需要實踐的證明,但筆者經(jīng)過多年的觀察和實踐,感覺到CAN總線是其中最有希望成功的。 選擇CAN總線實現(xiàn) 通信的原因 選擇CAN總線作為最佳候選者,主要是基于以下幾方面原因: CAN串行總線具有高性能 CAN的傳輸距離可以達(dá)到10公里;通信速率最高可達(dá)1Mbps;具有完善

3、的錯誤檢測機制;采用“多重訪問沖突仲裁”機制的幀傳輸方式,可保證不丟失信息;每一幀中最多可以傳輸8個字節(jié)數(shù)據(jù),可提供很高的實時性等等。性能上的優(yōu)勢保證了CAN可以應(yīng)用在很多的領(lǐng)域,在汽車工業(yè)、船舶運輸、機械控制、工廠自動化、樓宇自動化等都可以看到CAN的應(yīng)用。 CAN在硬件成本上很具優(yōu)勢 除了性能外,和其它現(xiàn)場總線相比,CAN總線在硬件成本上也有很大優(yōu)勢。從硬件芯片上來說,智能節(jié)點要收發(fā)信息需要一個CAN控制器和一個CAN收發(fā)器。經(jīng)過20多年的發(fā)展,CAN已經(jīng)獲得了國際上各大半導(dǎo)體制造商的大力支持,據(jù)CAN最主要的推廣組織CIA(自動化CAN)統(tǒng)計,目前已經(jīng)有20余種CAN控制器和收發(fā)器可供選

4、擇,片集成CAN控制器的單片機更多達(dá)100余種。CAN在開發(fā)成本上的優(yōu)勢也很明顯 目前,從廣泛應(yīng)用的8位/16位單片機,到DSP和32位的PowerPC、ARM等嵌入式處理器,均在芯片部含有CAN總線硬件接口單元。因此,從硬件角度看,CAN具備其它現(xiàn)場總線無法比擬的高集成化優(yōu)勢和廣泛的市場支持基礎(chǔ)。 CAN的開發(fā)平臺也比較簡單,用戶如果選擇普通單片機加上CAN控制器進(jìn)行開發(fā),則CAN的開發(fā)平臺和普通單片機的開發(fā)平臺完全一樣;如果選擇帶有片CAN控制器的單片機進(jìn)行開發(fā),則只要換用支持該單片機的仿真器就可以了,其他開發(fā)設(shè)備完全一樣。開發(fā)CAN也需要相應(yīng)的驅(qū)動程序。用戶可以自行根據(jù)選擇的CAN控制器

5、開發(fā)驅(qū)動程序。 圖1 CANopen協(xié)議通信模型圖2  CANopen設(shè)備模型通過采用高層協(xié)議將CAN的應(yīng)用推向深化 和其他的現(xiàn)場總線相比,CAN只定義了物理層和數(shù)據(jù)鏈路層的規(guī)(遵循OSI標(biāo)準(zhǔn)),這種設(shè)計和CAN規(guī)定義時的歷史條件有關(guān),也可以使CAN能夠更廣泛地適應(yīng)不同的應(yīng)用條件,但必然給用戶應(yīng)用帶來一些不便。用戶在應(yīng)用CAN協(xié)議時,必須自行定義高層協(xié)議。 如何將CAN協(xié)議的應(yīng)用推向更深的層次,同時滿足產(chǎn)品的兼容和互操作性?國際上通行的辦法是發(fā)展基于CAN的高層應(yīng)用協(xié)議,只用在應(yīng)用層上,不同公司的產(chǎn)品才可能實現(xiàn)互操作,好的應(yīng)用層協(xié)議更可以為用戶帶來系統(tǒng)性能的飛躍。 在CAN總線協(xié)議飛

6、速發(fā)展的20年中,很多領(lǐng)域都制定了CAN在該領(lǐng)域應(yīng)用時所采用的高層協(xié)議規(guī)。其中,比較著名的有美國汽車工程師協(xié)會(SAE)制定的車通信規(guī)J1939等。這些協(xié)議和規(guī)對CAN的推廣起了很大的作用,但總體來說,協(xié)議的模塊化特性都不太好,一般只能應(yīng)用于特定的領(lǐng)域。為了能夠把CAN推廣到更多的領(lǐng)域,歐洲一些公司推出了CAL(應(yīng)用層CAN)協(xié)議,盡管CAL在理論上正確,并在工業(yè)上可以投入應(yīng)用,但每個用戶都必須設(shè)計一個新的子協(xié)議,因為CAL 是一個真正的應(yīng)用層協(xié)議。CAL 可以被看作一個應(yīng)用CAN 方案的必要理論步驟,但在這一領(lǐng)域它不會被推廣。從1993 年起,由Bosch公司領(lǐng)導(dǎo)的一個歐洲機構(gòu)研究出一個協(xié)議

7、原型,由此發(fā)展成為CANopen規(guī)。 CANopen是一個基于CAL的子協(xié)議,采用面向?qū)ο蟮乃枷朐O(shè)計,具有很好的模塊化特性和很高的適應(yīng)性,通過擴(kuò)展可以適用于大量的應(yīng)用領(lǐng)域。在CANopen規(guī)基本完成之后,Bosch將其移交給CIA組織,由其進(jìn)行維護(hù)與發(fā)展。在1995年,CIA發(fā)表了完整版的CANopen通信子協(xié)議;僅僅用了5年的時間,它已成為全歐洲最重要的嵌入式網(wǎng)絡(luò)標(biāo)準(zhǔn)。 CANopen 不僅定義了應(yīng)用層和通信子協(xié)議,而且為可編程系統(tǒng)、不同器件、接口、應(yīng)用子協(xié)議定義了大量的行規(guī),遵循這些行規(guī)開發(fā)出的CANopen設(shè)備將能夠?qū)崿F(xiàn)不同公司產(chǎn)品間的互操作。另外,CANopen協(xié)議是免許可證的,任何組

8、織和個人都可以開發(fā)支持CANopen協(xié)議的設(shè)備而不用支付版稅,這也是CANopen得到迅猛發(fā)展的重要原因之一。CANopen目前已在汽車工業(yè)控制系統(tǒng),公共交通運輸系統(tǒng),醫(yī)療設(shè)備,海運電子設(shè)備和建筑自動化系統(tǒng)中取得了廣泛的應(yīng)用,是將CAN應(yīng)用推向深化的理想選擇。 采用CANopen協(xié)議 實現(xiàn)通信 CANopen協(xié)議中包含了標(biāo)準(zhǔn)的應(yīng)用層規(guī)和通信規(guī),其通信模型如圖1所示。在CANopen的應(yīng)用層,設(shè)備間通過相互交換通信對象進(jìn)行通信。良好的分層和面向?qū)ο蟮脑O(shè)計思想將帶給用戶一個清晰的通信模型。 CANopen設(shè)備模型 一個CANopen設(shè)備模塊可以被分為3部分,如圖2所示。 通信接口和協(xié)議軟件提供在總

9、線上收發(fā)通信對象的服務(wù)。不同CANopen設(shè)備間的通信都是通過交換通信對象完成的。這一部分直接面向CAN控制器進(jìn)行操作。 對象字典描述了設(shè)備使用的所有的數(shù)據(jù)類型,通信對象和應(yīng)用對象。是一個CANopen設(shè)備的核心部分。對象字典位于通信程序和應(yīng)用程序之間,向應(yīng)用程序提供接口,應(yīng)用程序?qū)ο笞值溥M(jìn)行操作就可以實現(xiàn)CANopen通信。理解對象字典的概念是理解CANopen模型的關(guān)鍵。應(yīng)用程序由用戶編寫,包括功能部分和通信部分。通信部分通過對對象字典進(jìn)行操作實現(xiàn)CANopen通信,而功能部分由用戶根據(jù)應(yīng)用要現(xiàn)。 CANopen網(wǎng)絡(luò)的通信和管理都是通過不同的通信對象來完成的,為了能夠?qū)崿F(xiàn)通信,網(wǎng)絡(luò)管理,

10、緊急情況處理等功能,CANopen規(guī)定義了四類標(biāo)準(zhǔn)的通信對象: ·進(jìn)程數(shù)據(jù)對象(PDO) 第一類通信對象為進(jìn)程數(shù)據(jù)對象。PDO被映射到單一的CAN幀中,使用所有的8個字節(jié)的數(shù)據(jù)域來傳輸應(yīng)用對象。每個PDO有一個獨立的標(biāo)識符并且可能只被一個節(jié)點發(fā)送,但它可以被多于一個節(jié)點接收,這種模式被稱之為生產(chǎn)者/消費者通信模式。PDO可以通過多種模式傳送,部事件,外部時鐘,遠(yuǎn)程幀請求以與從特定節(jié)點接收到同步報文都可以啟動PDO發(fā)送。 ·服務(wù)數(shù)據(jù)對象(SDO) 第二類通信對象為服務(wù)數(shù)據(jù)對象,該對象可以傳輸大于8個字節(jié)的配置信息。也就是說,SDO傳送協(xié)議允許傳送任意長度的對象。接收者將確認(rèn)收

11、到的每個段信息,發(fā)送和接收者間將建立點對點的通信,稱之為客戶機/服務(wù)器模式。未來,CANopen將允許快速傳輸SDO,不必對傳送的每個段都進(jìn)行確認(rèn),只要在整個對象傳送完畢后進(jìn)行確認(rèn)即可。 ·網(wǎng)絡(luò)管理對象(NMT) 第三類通信對象是網(wǎng)絡(luò)管理對象,包括節(jié)點警戒對象以與NMT對象。節(jié)點警戒對象是由NMT主節(jié)點遠(yuǎn)程請求發(fā)送的帶有1字節(jié)數(shù)據(jù)的CAN幀,一個字節(jié)的數(shù)據(jù)中包含1個觸發(fā)位以與7個用于表示節(jié)點狀態(tài)的數(shù)據(jù)位。NMT主節(jié)點將周期性地發(fā)送節(jié)點警戒對象。發(fā)送周期(警戒時間)的長度在對象字典中規(guī)定并且可以通過SDO進(jìn)行配置。另外,系統(tǒng)還定義了生命警戒時間,NMT主節(jié)點要在生命警戒時間過后向NMT

12、從節(jié)點發(fā)送遠(yuǎn)程請求。這種機制保證了即使NMT主節(jié)點不在了,系統(tǒng)中的其他節(jié)點也可以通過用戶定義的方式進(jìn)行回應(yīng)。 ·特殊功能對象 CANopen還為同步,緊急狀態(tài)表示以與時間標(biāo)記傳送定義了三個特定的對象。同步對象由同步制造者向網(wǎng)絡(luò)進(jìn)行周期性廣播,該對象將提供基本的網(wǎng)絡(luò)時鐘。當(dāng)設(shè)備發(fā)生嚴(yán)重的部錯誤時,相關(guān)的一個緊急狀態(tài)客戶機將發(fā)送一個緊急狀態(tài)對象。時間標(biāo)記對象將為應(yīng)用設(shè)備提供公共的時間幀參考。 要理解CANopen規(guī),核心是要理解CANopen的設(shè)備模型和各類型的通信對象。掌握了這兩者后,通過利用各類標(biāo)準(zhǔn)的設(shè)備描述就可以開發(fā)出符合國際標(biāo)準(zhǔn)的CANopen設(shè)備了。 展望 最近一段時期,國開發(fā)

13、、應(yīng)用CAN系統(tǒng)的人員正在逐漸增多,對CAN協(xié)議的研究也在不斷加深。在很多領(lǐng)域,如研制電動汽車和混合動力汽車的863重大課題,已經(jīng)將CAN作為標(biāo)準(zhǔn)的車通信協(xié)議確定下來。電力,航天等部門也在CAN方面取得了不小的應(yīng)用成績。 在CAN應(yīng)用蓬勃發(fā)展的時候,我們也應(yīng)當(dāng)清醒地看到,盡管CAN協(xié)議在歐美已經(jīng)發(fā)展了20年,應(yīng)用層協(xié)議的發(fā)展也差不多有10年時間,但目前國大多數(shù)的應(yīng)用系統(tǒng)仍然基于CAN2.0B規(guī)開發(fā),還不能在應(yīng)用層的水平上進(jìn)一步深入,這不能不說是很遺憾的事情。另外,國研究、開發(fā)CAN協(xié)議,尤其是CAN高層協(xié)議的組織和人員還太少,這對CAN在中國的推廣是十分不利的,筆者誠切希望更多的有識之士能夠加

14、入這一行列。最近在學(xué)習(xí)CANopen協(xié)議,遇到一些小知識點,查閱后作為補充,記錄在此,方便以后查詢,算是讀書筆記吧。一、CANopen協(xié)議中SYNC功能和使用 SYNC是CANopen管理各節(jié)點同步數(shù)據(jù)收發(fā)的一種方法,相當(dāng)于網(wǎng)絡(luò)節(jié)拍,基于同步的PDO按照這個網(wǎng)絡(luò)節(jié)拍來執(zhí)行實時數(shù)據(jù)的收發(fā)。SYNC屬于生產(chǎn)/消費型通訊方式,網(wǎng)絡(luò)中有且只有一個SYNC生產(chǎn)者,一般有多個消費者,其網(wǎng)絡(luò)標(biāo)識符優(yōu)先級很高,一般設(shè)置為0x80,基本上除了NMT優(yōu)先級最高。SYNC生產(chǎn)者按照固定頻率發(fā)送SYNC報文,需要SYNC的節(jié)點(消費者)將其接收并計數(shù),當(dāng)計數(shù)值達(dá)到節(jié)點相應(yīng)TPDO要求時,該TPDO映射的數(shù)據(jù)被發(fā)送(根

15、據(jù)PDO傳輸類型也可能是映射數(shù)據(jù)更新),此過程中SYNC生產(chǎn)者提供網(wǎng)絡(luò)節(jié)拍,各消費者以節(jié)拍周期的倍數(shù)執(zhí)行數(shù)據(jù)傳輸功能。在CANopen網(wǎng)絡(luò)中應(yīng)用SYNC要注意以下幾點:1. SYNC并不是主節(jié)點必須的功能,不一定要和NMT放在同一節(jié)點上,實際網(wǎng)絡(luò)應(yīng)用中可以在網(wǎng)絡(luò)中找一個任務(wù)較少、實時性好的節(jié)點來作為SYNC生產(chǎn)者,SYNC消費者可以有多個,但是生產(chǎn)者同時只能有一個存在。2. SYNC是不帶數(shù)據(jù)的,以使報文盡可能短,目的是為了加快其傳輸,減少網(wǎng)絡(luò)占用。3. SYNC發(fā)出后,需要發(fā)送數(shù)據(jù)的PDO要在規(guī)定時間段發(fā)送數(shù)據(jù),這個時間段叫做時間窗口(對象1006H指定),要小于SYNC節(jié)拍周期,以便每個周

16、期留一定時間來進(jìn)行其他類型的網(wǎng)絡(luò)通訊二、CANopen協(xié)議PDO的幾種傳輸方式由于PDO所傳輸?shù)臄?shù)據(jù)容是無協(xié)議的且分配的標(biāo)識符圍較SDO靠前,因此,其效率和優(yōu)先級都是較高的,通常用于實時過程數(shù)據(jù)的傳輸.PDO是生產(chǎn)/消費類型的通訊方式,數(shù)據(jù)只有一個生產(chǎn)者(發(fā)送),但是消費者(接收)可以有多個,生產(chǎn)者和消費者事先都已知道數(shù)據(jù)的類型和容(通過設(shè)置PDO映射來管理).對PDO通訊參數(shù)的設(shè)置可以實現(xiàn)四種通訊方式:1. 同步傳輸.在收到SYNC消息后觸發(fā)PDO發(fā)送,可以定義收到幾個SYNC后觸發(fā)一次TPDO,在有SYNC的CANopen網(wǎng)絡(luò)中,SYNC就相當(dāng)于一個網(wǎng)絡(luò)節(jié)拍,數(shù)據(jù)根據(jù)節(jié)拍來進(jìn)行固定周期的過

17、程數(shù)據(jù)傳輸.比如網(wǎng)絡(luò)中有一個壓力傳感器,一個溫度傳感器,一個物位傳感器,網(wǎng)絡(luò)中有一個HMI監(jiān)控終端來實時監(jiān)控三個傳感器采集的數(shù)據(jù),壓力傳感器可能檢測的是一個快速的壓力變化,那可以每隔200mS更新一次數(shù)據(jù),溫度可能需要1S更新一次數(shù)據(jù),物位可能5S更新一次數(shù)據(jù),(假設(shè)各傳感器的數(shù)據(jù)采集周期都比數(shù)據(jù)更新周期小,如果大的話數(shù)據(jù)更新快可能沒有意義,呵呵)現(xiàn)在我可以設(shè)置一個200mS周期的SYNC消息,壓力傳感器每收到一個SYNC就向HMI傳輸一次數(shù)據(jù),溫度傳感器可以每隔5個SYNC傳輸一次數(shù)據(jù),同樣物位傳感器就是每收到25個SYNC發(fā)送一次數(shù)據(jù).這種通訊方式顯得比較規(guī)矩,好管理,系統(tǒng)運行效率高,適合

18、周期性數(shù)據(jù)更新的應(yīng)用.2. 遠(yuǎn)程請求.在需要網(wǎng)絡(luò)上某個節(jié)點的數(shù)據(jù)的時候,我發(fā)一個遠(yuǎn)程數(shù)據(jù)請求過去,對方在接收到請求后,把我要的數(shù)據(jù)給發(fā)過來,這種方式是在我需要的時候去主動獲取.3. 定時發(fā)送.這個有別于SYNC,它是在本節(jié)點實現(xiàn)周期發(fā)送,通過設(shè)置PDO參數(shù),定一個周期,每隔固定的時間向網(wǎng)絡(luò)上發(fā)送一次PDO,它與SYNC無關(guān),在網(wǎng)絡(luò)設(shè)計中主要按照傳感器的數(shù)據(jù)采集速度和數(shù)據(jù)更新要求來設(shè)定定時周期.4. 事件觸發(fā).當(dāng)節(jié)點的某個時間發(fā)生觸發(fā)的一次數(shù)據(jù)發(fā)送,例如當(dāng)某個接著報警開關(guān)的開關(guān)量采集節(jié)點的報警狀態(tài)發(fā)生變化時,觸發(fā)一次PDO將報警狀態(tài)發(fā)送到網(wǎng)絡(luò)上,使系統(tǒng)能夠與時獲得該報警狀態(tài)信息.該方式是實時性最

19、好的一種傳輸方式,特別適合系統(tǒng)運行出錯報警和重大事件的與時處理上.上面的幾種傳輸方式各有所長,在CANopen網(wǎng)絡(luò)的設(shè)計中,按照不同的應(yīng)用靈活配合使用才能構(gòu)建一個優(yōu)秀的解決方案.三、SDO服務(wù)SDO是服務(wù)數(shù)據(jù)對象接口(Service Data Obiect)的縮寫,顧名思義提供服務(wù)數(shù)據(jù)的訪問接口,服務(wù)數(shù)據(jù)就是一些實時性要求不高的數(shù)據(jù),一般是指節(jié)點配置參數(shù),因此,SDO一般用來配置和獲得節(jié)點的配置參數(shù)。其優(yōu)先級只比心跳(Heartbeat)高。SDO既然稱之為服務(wù),那就要有服務(wù)的提供者和使用者,提供者就是SDO server,使用者就是SDO client,在CANopen網(wǎng)絡(luò)中每個節(jié)點都要有一

20、個SDO server,因為每個節(jié)點的對象字典大部分對象都是通過SDO來訪問的,對象字典的被訪問,提供所請求的服務(wù)當(dāng)然要有個SDO server。SDO請求和應(yīng)答報文都是8個字節(jié)的數(shù)據(jù),其中包括對象字典的索引、子索引、SDO命令和數(shù)據(jù)。這里要注意和我們熟知的以太網(wǎng)FTP不同,SDO的上傳和下載正好與之相反,F(xiàn)TP是從client的角度出發(fā)去理解上傳和下載,SDO是以server的角度去理解的,從服務(wù)器上獲得數(shù)據(jù)即對對象字典進(jìn)行讀操作叫做上傳,往服務(wù)器上寫數(shù)據(jù)即對對象字典進(jìn)行寫操作叫做下載。 四、怎樣實現(xiàn)SDO服務(wù) SDO是CANopen協(xié)議中最復(fù)雜的一部分,帶有應(yīng)答機制,有多種傳輸方式,并且完

21、整的SDO功能節(jié)點需提供1個SDO server和多個SDO client,因此SDO的實現(xiàn)異常困難,協(xié)議多種傳輸方式的解析處理還有跡可循,多個SDO client服務(wù)和多個對SDO server的訪問的協(xié)調(diào)就不容易了,這里介紹一種方法SDO線程來解決。注意,這里的線程可不是操作系統(tǒng)提供的多線程技術(shù),況且為保證協(xié)議棧良好的移植性,在CANopen協(xié)議棧核心代碼里中也不好去調(diào)與操作系統(tǒng)相關(guān)的庫函數(shù)。我們這里的SDO線程只是借鑒了操作系統(tǒng)多線程機制的一套SDO服務(wù)處理方法,每個SDO線程表示的是與網(wǎng)絡(luò)上其他節(jié)點建立的一個SDO,相當(dāng)于在兩個節(jié)點間建立一個SDO通訊路徑,其中每個節(jié)點都擁有一個對這個

22、路徑的描述,在該節(jié)點看來好像建立了一個線程來負(fù)責(zé)這個路徑(但決不會真的創(chuàng)建一個系統(tǒng)線程),在通訊過程中雙方通過這個路徑來交流,SDO通訊結(jié)束則釋放該線程,每個節(jié)點可以同時與多個節(jié)點建立多個這樣的路徑和互不影響,就如同操作系統(tǒng)的線程機制一樣的效果。我們知道每建立一個線程都會生成一個描述線程屬性的參數(shù)表和一些私有數(shù)據(jù),類似的,SDO線程的建立也會初始化一個對應(yīng)的參數(shù)和數(shù)據(jù)結(jié)構(gòu)體SDO線程參數(shù)表,以之來描述這個SDO的屬性并提供私有通訊數(shù)據(jù)的存儲。SDO線程參數(shù)表可以說是SDO線程的核心,所有SDO線程的建立、刪除和SDO通訊都要涉與到這個參數(shù)表。參數(shù)表容包括能夠描述一個SDO訪問過程的所有參數(shù),這

23、里不詳述。一次SDO訪問是這樣完成的。首先SDO發(fā)起節(jié)點(SDO client)收集足夠的信息,建立一個SDO線程,說白了就是初始化SDO線程參數(shù)表,將收集的信息以特定格式放入?yún)?shù)表,形成一幀SDO請求,發(fā)送出去。SDO服務(wù)節(jié)點(SDO server)收到這幀請求,為它建立一個SDO線程,將這幀請求分析分解以獲得足夠信息來初始化這個SDO線程對應(yīng)的參數(shù)表,然后程序就會按照參數(shù)表的描述去執(zhí)行server的功能收集數(shù)據(jù)來滿足這個SDO請求,然后將收集到的數(shù)據(jù)形成SDO應(yīng)答幀返回給SDO client,如果此次請求結(jié)束則釋放該線程,否則等待下一幀請求到來;SDO client在收到應(yīng)答后判斷該請否還

24、有后續(xù)請求,無則釋放此SDO線程。如果在這個過程中,SDO server 和SDO client所在節(jié)點有收到其他節(jié)點的SDO請求或需要通過SDO請求其它節(jié)點,則新建SDO線程來實現(xiàn),跟上面的步驟一樣,這樣就可以實現(xiàn)多個SDO server和SDO client服務(wù)都得到實現(xiàn)而互不干擾,相當(dāng)于雙向多線鐵路,可比單線爽多了。該方法已在單片機下實現(xiàn),效果還不錯。本文來自CSDN博客,請標(biāo)明出處:CanOpen開發(fā)中的常見問題參考:.picavrbbs./news/2009-10/1439.htmSDO是CANopen協(xié)議中最復(fù)雜的一部分,帶有應(yīng)答機制,有多種傳輸方式,并且完整的SDO功能節(jié)點需提供

25、1個SDO server和多個SDO client,因此SDO的實現(xiàn)異常困難,協(xié)議多種傳輸方式的解析處理還有跡可循,多個SDO client服務(wù)和多個對SDO server的訪問的協(xié)調(diào)就不容易了,這里介紹一種方法SDO線程來解決。注意,這里的線程可不是操作系統(tǒng)提供的多線程技術(shù),況且為保證協(xié)議棧良好的移植性,在CANopen協(xié)議棧核心代碼里中也不好去調(diào)與操作系統(tǒng)相關(guān)的庫函數(shù)。我們這里的SDO線程只是借鑒了操作系統(tǒng)多線程機制的一套SDO服務(wù)處理方法,每個SDO線程表示的是與網(wǎng)絡(luò)上其他節(jié)點建立的一個SDO,相當(dāng)于在兩個節(jié)點間建立一個SDO通訊路徑,其中每個節(jié)點都擁有一個對這個路徑的描述,在該節(jié)點看來

26、好像建立了一個線程來負(fù)責(zé)這個路徑(但決不會真的創(chuàng)建一個系統(tǒng)線程),在通訊過程中雙方通過這個路徑來交流,SDO通訊結(jié)束則釋放該線程,每個節(jié)點可以同時與多個節(jié)點建立多個這樣的路徑和互不影響,就如同操作系統(tǒng)的線程機制一樣的效果。我們知道每建立一個線程都會生成一個描述線程屬性的參數(shù)表和一些私有數(shù)據(jù),類似的,SDO線程的建立也會初始化一個對應(yīng)的參數(shù)和數(shù)據(jù)結(jié)構(gòu)體SDO線程參數(shù)表,以之來描述這個SDO的屬性并提供私有通訊數(shù)據(jù)的存儲。SDO線程參數(shù)表可以說是SDO線程的核心,所有SDO線程的建立、刪除和SDO通訊都要涉與到這個參數(shù)表。參數(shù)表容包括能夠描述一個SDO訪問過程的所有參數(shù),這里不詳述。一次SDO訪問

27、是這樣完成的。首先SDO發(fā)起節(jié)點(SDO client)收集足夠的信息,建立一個SDO線程,說白了就是初始化SDO線程參數(shù)表,將收集的信息以特定格式放入?yún)?shù)表,形成一幀SDO請求,發(fā)送出去。SDO服務(wù)節(jié)點(SDO server)收到這幀請求,為它建立一個SDO線程,將這幀請求分析分解以獲得足夠信息來初始化這個SDO線程對應(yīng)的參數(shù)表,然后程序就會按照參數(shù)表的描述去執(zhí)行server的功能收集數(shù)據(jù)來滿足這個SDO請求,然后將收集到的數(shù)據(jù)形成SDO應(yīng)答幀返回給SDO client,如果此次請求結(jié)束則釋放該線程,否則等待下一幀請求到來;SDO client在收到應(yīng)答后判斷該請否還有后續(xù)請求,無則釋放此S

28、DO線程。如果在這個過程中,SDO server 和SDO client所在節(jié)點有收到其他節(jié)點的SDO請求或需要通過SDO請求其它節(jié)點,則新建SDO線程來實現(xiàn),跟上面的步驟一樣,這樣就可以實現(xiàn)多個SDO server和SDO client服務(wù)都得到實現(xiàn)而互不干擾,相當(dāng)于雙向多線鐵路,可比單線爽多了。怎樣利用好單片機上的存儲器資源來實現(xiàn)OD的存儲與訪問我們知道OD(對象字典)是CANopen的核心,所有功能都是圍繞它開展的,是協(xié)議棧的數(shù)據(jù)中心,良好的OD實現(xiàn)是協(xié)議棧高效穩(wěn)定運行的基礎(chǔ),而OD的實現(xiàn)最基本的一點就是怎么去保存它。因為OD的容比較雜,讀寫屬性上,有只讀數(shù)據(jù)、只寫數(shù)據(jù)、可讀寫數(shù)據(jù);保存

29、要求上有非易失和掉電丟失兩種類型;數(shù)據(jù)類型上有字符型、整型、長整型等等;存儲格式上有8位、16位、32位等。其它的不管,本文現(xiàn)只討論怎么利用單片機的資源去盡量滿足OD的存儲需求。有人會以為這還要討論么?只讀的就放在只讀存儲器中,可寫的就放在RAM中,需要掉電保存的就放在非易失可讀寫存儲器中。話是這么說,但實際上問題很多,羅列如下:1 對協(xié)議棧只讀并不表示對應(yīng)用程序只讀。2 可讀寫而又掉電保存的數(shù)據(jù)不能放在RAM里。3 頻繁讀寫的數(shù)據(jù)不能放在非易失存儲器中,因為非易失存儲器往往速度慢,有寫次數(shù)限制。4 單片機資源有限,存取方式和讀寫速度有限值,因此得合理利用。既然有這些問題,我們先對OD的數(shù)據(jù)進(jìn)

30、行分析分類:1 系統(tǒng)只讀參數(shù)。自節(jié)點出廠就無需更改,例如,節(jié)點硬件序列號、軟硬件版本等。2 過程數(shù)據(jù)對象。頻繁讀寫,掉電無需保存。例如,采集的模擬量、待輸出的開關(guān)量。3 系統(tǒng)配置參數(shù)??勺x寫,偶爾配置,大部分時間只讀?;旧纤械腛D對象都可以歸到這三類中去。下面再以AVR單片機為例說說單片機的幾類存儲資源以與其特點: 類型 運行中讀寫屬性 訪問速度 容量 特點FLASH 程序存儲器 只讀 一般 較大 操作方便但只能放程序和初始化只讀數(shù)據(jù),掉電不丟失SRAM 數(shù)據(jù)存儲器 讀寫 最快 小 操作方便,速度快,掉電數(shù)據(jù)丟失EEPROM 數(shù)據(jù)存儲器 讀寫 讀一般,寫很慢 小 操作復(fù)雜,寫速度極慢看到上

31、面這個表,你會馬上把OD的三類數(shù)據(jù)存放位置定下來吧,系統(tǒng)只讀參數(shù)放在FLASH中;過程數(shù)據(jù)對象放在SRAM中;系統(tǒng)配置參數(shù)放在EEPROM中。實際上確實該如此安排,但是所有問題的解決了?NO,NO,NO!OD中的數(shù)據(jù)對象是怎么安排進(jìn)存儲器的?系統(tǒng)啟動怎么初始化?怎么去訪問?下面提供一種方案:出廠設(shè)置隨程序一起寫入FLASH,然后系統(tǒng)重器開始運行,在軟件初始化過程中,程序?qū)⒊鰪S默認(rèn)的整個OD對象從FLASH 載入到RAM中去,不論是OD的那種分類的數(shù)據(jù);之后如果判斷是第一次運行,將用RAM中屬于的統(tǒng)配置參數(shù)的那一類數(shù)據(jù)去初始化EEPROM,否則用EEPROM中的系統(tǒng)配置參數(shù)去重新覆蓋對應(yīng)的RAM

32、映像。好了初始化完成,開始運行,因為所有OD數(shù)據(jù)都load到RAM中,因此OD對外可以提供統(tǒng)一快速的數(shù)據(jù)服務(wù)接口,外部的讀操作就是直接讀RAM,寫則是先寫RAM映像,然后再判斷如果是OD的系統(tǒng)配置參數(shù)那一類則同時更新EEPROM。最后要注意一點就是OD的對象屬性等信息一定要放在FLASH中,否則將是一個極大的RAM開銷。上面方案優(yōu)點是在滿足OD需求的前提下能夠提供統(tǒng)一快速的OD訪問接口;能夠與時存儲非易失性數(shù)據(jù);并能在軟件上實現(xiàn)恢復(fù)出廠設(shè)置的操作而不增加額外的出廠設(shè)置備份空間(在EEPROM中置一標(biāo)志就行了,自己去想)。明顯的優(yōu)點也意味著明顯的缺點,就是占用較多RAM空間,只讀數(shù)據(jù)和非易失性數(shù)

33、據(jù)都要映射到RAM中,浪費了一部分RAM,這將使得本來就緊的RAM資源更加緊,好在一般節(jié)點上的OD容一般不多,而且現(xiàn)在RAM非常便宜。上面的方案同樣適用于其他單片機,基本上現(xiàn)在的單片機上都有FLASH和RAM,而即使有的單片機沒有EEPROM,但是本身FLASH區(qū)是可以運行中在線寫入的,也可以當(dāng)EEPROM用(但此時最好就不要來一個寫一個了,因為FLASH是頁擦除的,比較耗時間,因此建議做成批量寫入方式,OD的0x1010和0x1011對象有涉與),實在不行還可以外擴(kuò)。對象字典0x1005和0x1006的理解SYNC不一定由主站產(chǎn)生,因此,產(chǎn)生SYNC的節(jié)點,0x1005對象的值一般是0x40

34、000080,第30位為1表示本節(jié)點產(chǎn)生SYNC,而本節(jié)點的0x1006對象就是產(chǎn)生同步周期值了;而接收SYNC的節(jié)點0x1005對象值一般是0x80,第30位是0表示本身不產(chǎn)生SYNC,而接收COB-ID為0x80的報文作為同步幀,該節(jié)點0x1006一般置0,沒什么用處了. 在CANopen網(wǎng)絡(luò)過LSS服務(wù)設(shè)置節(jié)點地址和網(wǎng)絡(luò)波特率CANopen專有個子協(xié)議用來描述怎樣去通過網(wǎng)絡(luò)設(shè)置節(jié)點地址和波特率,就是CiA DSP-305,大伙都叫LSS協(xié)議,是Layer Setting Services的縮寫,不太好翻譯,也許可以翻譯成底層設(shè)置服務(wù)協(xié)議吧。屬于主從式服務(wù),類似于NMT的方式,占用2021

35、(for master)和2020(for slave)兩個標(biāo)識符。CANopen網(wǎng)絡(luò)中同時只能有一個節(jié)點能提供LSS Master服務(wù),并且該節(jié)點同時也必須是NMT Master。網(wǎng)絡(luò)上的其他節(jié)點都提供LSS Slave服務(wù)。假設(shè)網(wǎng)絡(luò)上除了主節(jié)點之外,其他節(jié)點都是無地址的,那么它根據(jù)什么去設(shè)置各節(jié)點地址呢?答案是LSS地址,這跟節(jié)點的地址可不同,它理論上是全球唯一的,那么這個地址到底是什么呢?答案是對象字典1018H的容,包括vendor-id(制造商ID)、product-code(產(chǎn)品碼)、revision-number(修訂碼)和serial-number(序列號),這幾個加起來就全球

36、唯一了吧。一般要求LSS Master節(jié)點要預(yù)先知道網(wǎng)絡(luò)上的各節(jié)點的LSS地址。設(shè)置某個節(jié)點地址的步驟如下:1. 通過LSS地址去將希望設(shè)置ID的節(jié)點切換到配置狀態(tài)(相當(dāng)于NMT的停止?fàn)顟B(tài)),當(dāng)然是通過LSS服務(wù)(Switch Mode Selective)。2. 然后通過Configure Node-ID服務(wù)設(shè)置其節(jié)點地址。3. 置該節(jié)點到可操作狀態(tài)。不是很困難吧。設(shè)置網(wǎng)絡(luò)波特率要復(fù)雜一些,步驟如下:1. 將網(wǎng)絡(luò)上所有LSS Slave切換到配置狀態(tài),通過switch Mode Global服務(wù)實現(xiàn)。2. 通過Configure Bit Timing Parameters服務(wù)將波特率廣播到每

37、個節(jié)點中。3. 通過Activate Bit Timing Parameters服務(wù)激活新設(shè)置。將整個網(wǎng)絡(luò)波特率切換為新設(shè)置。4. 置網(wǎng)絡(luò)切換回可操作狀態(tài)。這里要注意:在Activate Bit Timing Parameters服務(wù)中有個switch_delay參數(shù),該參數(shù)指定相等長度的兩個延遲周期長度,是為了避免總線上出現(xiàn)不同的位定時參數(shù)(波特率)。每個節(jié)點在收到命令后switch_delay毫秒后應(yīng)用新的位定時參數(shù)。在應(yīng)用新參數(shù)后,節(jié)點在第二個switch_delay毫秒定時到之前不發(fā)送任何報文。各節(jié)點處理位定時激活命令需要的時間可能不同,而且激活命令之前的的報文可能還在節(jié)點的接收隊列中

38、。意思就是某個節(jié)點在處理延時的過程中可能還會以舊的波特率來傳輸CAN報文。因此swith_delay要比網(wǎng)絡(luò)上任何一個節(jié)點的處理時間都要長,這樣才能避免一個節(jié)點已經(jīng)改變了波特率,而另一個節(jié)點還在以舊的波特率工作。在第一次經(jīng)過switch_delay指定的時間長度后,每個節(jié)點必須在第二個switch_delay期間完成到新波特率的切換。因而在經(jīng)過了第二個switch_delay后,所有的節(jié)點都必須保證以新的波特率監(jiān)聽網(wǎng)絡(luò)。至于LSS提供的LSS地址查詢等功能這里就不介紹了。CANopen協(xié)議中的SDO服務(wù)SDO是服務(wù)數(shù)據(jù)對象接口(Service Data Obiect)的縮寫,顧名思義提供服務(wù)數(shù)

39、據(jù)的訪問接口,服務(wù)數(shù)據(jù)就是一些實時性要求不高的數(shù)據(jù),一般是指節(jié)點配置參數(shù),因此,SDO一般用來配置和獲得節(jié)點的配置參數(shù)。其優(yōu)先級只比心跳(Heartbeat)高。SDO既然稱之為服務(wù),那就要有服務(wù)的提供者和使用者,提供者就是SDO server,使用者就是SDO client,在CANopen網(wǎng)絡(luò)中每個節(jié)點都要有一個SDO server,因為每個節(jié)點的對象字典大部分對象都是通過SDO來訪問的,對象字典的被訪問,提供所請求的服務(wù)當(dāng)然要有個SDO server。SDO請求和應(yīng)答報文都是8個字節(jié)的數(shù)據(jù),其中包括對象字典的索引、子索引、SDO命令和數(shù)據(jù)。這里要注意和我們熟知的以太網(wǎng)FTP不同,SDO的

40、上傳和下載正好與之相反,F(xiàn)TP是從client的角度出發(fā)去理解上傳和下載,SDO是以server的角度去理解的,從服務(wù)器上獲得數(shù)據(jù)即對對象字典進(jìn)行讀操作叫做上傳,往服務(wù)器上寫數(shù)據(jù)即對對象字典進(jìn)行寫操作叫做下載。CANopen協(xié)議中SYNC功能和使用SYNC是CANopen管理各節(jié)點同步數(shù)據(jù)收發(fā)的一種方法,相當(dāng)于網(wǎng)絡(luò)節(jié)拍,基于同步的PDO按照這個網(wǎng)絡(luò)節(jié)拍來執(zhí)行實時數(shù)據(jù)的收發(fā)。SYNC屬于生產(chǎn)/消費型通訊方式,網(wǎng)絡(luò)中有且只有一個SYNC生產(chǎn)者,一般有多個消費者,其網(wǎng)絡(luò)標(biāo)識符優(yōu)先級很高,一般設(shè)置為0x80,基本上除了NMT優(yōu)先級最高。SYNC生產(chǎn)者按照固定頻率發(fā)送SYNC報文,需要SYNC的節(jié)點(消費者)將其接收并計數(shù),當(dāng)計數(shù)值達(dá)到節(jié)點相應(yīng)TPDO要求時,該TPDO映射的數(shù)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論