組態(tài)環(huán)境下對(duì)CAN232接口卡驅(qū)動(dòng)程序的設(shè)計(jì)_第1頁(yè)
組態(tài)環(huán)境下對(duì)CAN232接口卡驅(qū)動(dòng)程序的設(shè)計(jì)_第2頁(yè)
組態(tài)環(huán)境下對(duì)CAN232接口卡驅(qū)動(dòng)程序的設(shè)計(jì)_第3頁(yè)
組態(tài)環(huán)境下對(duì)CAN232接口卡驅(qū)動(dòng)程序的設(shè)計(jì)_第4頁(yè)
組態(tài)環(huán)境下對(duì)CAN232接口卡驅(qū)動(dòng)程序的設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、關(guān)鍵字:CAN總線、CAN232智能接口卡、引言 隨著工業(yè)測(cè)控技術(shù)和生產(chǎn)自動(dòng)化技術(shù)的不斷進(jìn)步,傳統(tǒng)的RS-232、RS-485和CCITTV.24通信技術(shù)已不能適應(yīng)現(xiàn)代化的工業(yè)控制需要,而現(xiàn)場(chǎng)總線(Fieldbus)以其低廉的價(jià)格、可靠的性能而逐步成為新型的工業(yè)測(cè)控領(lǐng)域的通信技術(shù)。現(xiàn)場(chǎng)總線是應(yīng)用在生產(chǎn)現(xiàn)場(chǎng),在微機(jī)化測(cè)量控制設(shè)備之間實(shí)現(xiàn)雙向串行多節(jié)點(diǎn)數(shù)字通信的系統(tǒng),是一種開放式、數(shù)字化、多點(diǎn)通信的底層控制網(wǎng)絡(luò)。匯集了計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)通信技術(shù)和自動(dòng)控制技術(shù)(3C)的現(xiàn)場(chǎng)總線技術(shù),從20世紀(jì)80年代開始發(fā)展起來,并逐步在制造業(yè)、流程工業(yè)、交通、樓宇等方面的自動(dòng)化系統(tǒng)中得到了廣泛的重視和應(yīng)用。現(xiàn)場(chǎng)總線

2、主要有以下幾種類型:基金會(huì)現(xiàn)場(chǎng)總線(FF)、LonWorks、ProfiBus、CAN、HART,而其中CAN因?yàn)榫哂懈咝阅?、高可靠性以及?dú)特的設(shè)計(jì)而越來越受到關(guān)注,現(xiàn)已形成國(guó)際標(biāo)準(zhǔn),被公認(rèn)為幾種最有前途的現(xiàn)場(chǎng)總線之一。由于CAN總線所具有的突出優(yōu)點(diǎn),應(yīng)用范圍越來越廣泛,總線與計(jì)算機(jī)網(wǎng)絡(luò)的通訊也成為一個(gè)大家很感興趣的課題。計(jì)算機(jī)通過CAN232智能接口卡與CAN總線進(jìn)行通訊便是其中的一種方式。本章1:CAN的基本知識(shí)1.1:什么是CAN CAN,全稱為“Controller Area Network”,即控制器局域網(wǎng),是國(guó)際上應(yīng)用最廣泛的現(xiàn)場(chǎng)總線之一。最初,CAN 被設(shè)計(jì)作為汽車環(huán)境中的微控制

3、器通訊,在車載各電子控制裝置 ECU 之間交換信息,形成汽車電子控制網(wǎng)絡(luò)。CAN是一種多主方式的串行通訊總線,基本設(shè)計(jì)規(guī)范要求有高的位速率,高抗電磁干擾性,而且能夠檢測(cè)出產(chǎn)生的任何錯(cuò)誤。當(dāng)信號(hào)傳輸距離達(dá)到10km時(shí),CAN仍可提供高達(dá)50Kbit/s的數(shù)據(jù)傳輸速率。它是一種有效支持分布式控制或?qū)崟r(shí)控制的串行通訊網(wǎng)絡(luò)。 1.2:CAN-BUS的發(fā)展史在 1980 年的早些時(shí)候,Bosch 公司的工程師就開始論證當(dāng)時(shí)的串行總線用于客車系統(tǒng)的可行性。因?yàn)闆]有一種現(xiàn)成的網(wǎng)絡(luò)方案能夠完全滿足汽車工程師們的要求,于是,在1983年初,Uwe Kiencke開始研究一種新的串行總線。新總線的主要方向是增加新

4、功能、減少電氣連接線,使其能夠用于產(chǎn)品,而非用于驅(qū)動(dòng)技術(shù)。來自 Mercedes-Benz 的工程師較早制定了總線的狀態(tài)說明,而 Intel 也準(zhǔn)備作為半導(dǎo)體生產(chǎn)的主要廠商。當(dāng)時(shí)聘請(qǐng)的顧問之一是來自于德國(guó) Applied Scienc大學(xué)教授 WolfhardLawrenz 博士給出了新網(wǎng)絡(luò)方案的名字“Controller Area Network”,簡(jiǎn)稱 CAN。來自Karlsruhe大學(xué)的教授Horst Wettstein博士也提供了理論支持。1986年2月,在底特律的汽車工程協(xié)會(huì)大會(huì)上,由Bosch公司研究的新總線系統(tǒng)被稱為“汽車串行控制器局域網(wǎng)”。Uwe Kiencke、 Siegfr

5、ied Dais 和 Martin Litschel 分別介紹了這種多主網(wǎng)絡(luò)方案。此方案基于非破壞性的仲裁機(jī)制,能夠確保高優(yōu)先級(jí)報(bào)文的無延遲傳輸。并且,不需要在總線上設(shè)置主控制器。此外,CAN 之父上述幾位教授和 Bosch 公司的 Wolfgang Borst、Wolfgang Botzenhard、Otto Karl、Helmut Schelling、Jan Unruh 已經(jīng)實(shí)現(xiàn)了數(shù)種在 CAN 中的錯(cuò)誤檢測(cè)機(jī)制。該錯(cuò)誤檢測(cè)也包括自動(dòng)斷開故障節(jié)點(diǎn)功能,以確保能繼續(xù)進(jìn)行剩余節(jié)點(diǎn)之間的通訊。傳輸?shù)膱?bào)文并非根據(jù)報(bào)文發(fā)送器/接收器的節(jié)點(diǎn)地址識(shí)別(幾乎其它的總線都是如此),而是根據(jù)報(bào)文的內(nèi)容識(shí)別。同

6、時(shí),用于識(shí)別報(bào)文的標(biāo)識(shí)符也規(guī)定了該報(bào)文在系統(tǒng)中的優(yōu)先級(jí)。隨著CAN-BUS的發(fā)展和應(yīng)用范圍的不斷擴(kuò)大,各種方案層出不窮,各廠家亟需將其標(biāo)準(zhǔn)化。于是,在1990年,Bosch CAN規(guī)范(CAN 2.0 版)被提交給國(guó)際標(biāo)準(zhǔn)化組織。在數(shù)次行政討論之后,應(yīng)一些主要的法國(guó)汽車廠商要求,增加了“VehicleArea Network(VAN)”內(nèi)容,并于1993年11月出版了CAN 的國(guó)際標(biāo)準(zhǔn) ISO11898。除了 CAN 協(xié)議外,它也規(guī)定了最高至 1Mbps 波特率時(shí)的物理層。同時(shí),在國(guó)際標(biāo)準(zhǔn) ISO11519-2 中也規(guī)定了CAN數(shù)據(jù)傳輸中的容錯(cuò)方法。1995 年,國(guó)際標(biāo)準(zhǔn) ISO11898 進(jìn)

7、行了擴(kuò)展,以附錄的形式說明了29位 CAN 標(biāo)識(shí)符。但所有出版的 CAN 規(guī)范均包含錯(cuò)誤或者不完整。因此,為避免出現(xiàn)不兼容的 CAN 應(yīng)用,Bosch 公司一直在進(jìn)行驗(yàn)證 CAN 芯片是否基于Bosch 的CAN參考模型的工件。當(dāng)前,修訂的CAN 規(guī)范正在標(biāo)準(zhǔn)化中。ISO11898-1 稱為“CAN 數(shù)據(jù)鏈路層”,ISO11898-2 稱為“非容錯(cuò) CAN 物理層”,ISO11898-3 稱為“容錯(cuò) CAN 物理層”。目前,CAN 協(xié)議仍處在改進(jìn)之中。從2000年開始,一個(gè)由數(shù)家公司組成的 ISO任務(wù)組織定義了一種時(shí)間觸發(fā)CAN報(bào)文傳輸?shù)膮f(xié)議。專家將此協(xié)議定義為“時(shí)間觸發(fā)通訊的CAN(TTCA

8、N)”,計(jì)劃在將來標(biāo)準(zhǔn)化為 ISO11898-4。這個(gè)CAN 的擴(kuò)展已在硅片上實(shí)現(xiàn),不僅可實(shí)現(xiàn)閉環(huán)控制下支持報(bào)文的時(shí)間觸發(fā)傳輸,而且可以實(shí)現(xiàn)CAN的x-by-wire應(yīng)用。因?yàn)镃AN協(xié)議并未改變,所以,在同一個(gè)的物理層上,既可以實(shí)現(xiàn)傳輸時(shí)間觸發(fā)的報(bào)文,也可以實(shí)現(xiàn)傳輸事件觸發(fā)的報(bào)文。1.3:CAN的特點(diǎn)CAN 具有十分優(yōu)越的特點(diǎn),使人們樂于選擇。這些特性包括:l CAN時(shí)到目前為止唯一有國(guó)際標(biāo)準(zhǔn)的現(xiàn)場(chǎng)總線;l CAN為多主方式工作,網(wǎng)絡(luò)上任一節(jié)點(diǎn)均可在任意時(shí)刻主動(dòng)向其它節(jié)點(diǎn)發(fā)送信息,而不分主從;l 在報(bào)文筆標(biāo)識(shí)符上,CAN上的節(jié)點(diǎn)分成不同的優(yōu)先級(jí),可滿足不同的實(shí)時(shí)要求;l CAN采用非破壞總線仲

9、裁技術(shù),即使在網(wǎng)絡(luò)負(fù)擔(dān)很重的情況下也不會(huì)出現(xiàn)網(wǎng)絡(luò)癱瘓情況;l CAN節(jié)點(diǎn)只需通過對(duì)報(bào)文的標(biāo)識(shí)符濾波即可實(shí)現(xiàn)點(diǎn)對(duì)點(diǎn)、一點(diǎn)對(duì)多點(diǎn)及全局廣播等幾種方式傳送接受數(shù)據(jù);l CAN的直接通信距離最遠(yuǎn)可達(dá)10km(速率5kbps以下),通信速率最高可達(dá)1Mbps(此時(shí)通信距離最長(zhǎng)為40m);l CAN上的節(jié)點(diǎn)數(shù)主要取決于總線驅(qū)動(dòng)電路,目前可達(dá)110個(gè);l 報(bào)文采用段幀結(jié)構(gòu),傳輸時(shí)間短,受干擾概率低,保證了數(shù)據(jù)出錯(cuò)率極低;l CAN的每幀信息都CRC校驗(yàn)及其它檢錯(cuò)措施,具有極好的檢錯(cuò)效果;l CAN的通信介質(zhì)可為雙絞線、同軸電纜或光線,選擇靈活;l CAN節(jié)點(diǎn)在錯(cuò)誤嚴(yán)重的情況下具有自動(dòng)關(guān)閉輸出功能,以使總線上

10、其它節(jié)點(diǎn)的操作不受影響;l CAN總線具有較高的性能價(jià)格比。1.4:CAN總線的應(yīng)用CAN卓越的特性、極高的可靠性和獨(dú)特的設(shè)計(jì),特別適合工業(yè)過程監(jiān)控設(shè)備的互連,因此越來越受到重視,并被公認(rèn)為最有前途的現(xiàn)場(chǎng)總線。CAN技術(shù)在汽車電控制系統(tǒng)系統(tǒng)、電梯控制系統(tǒng)、安全監(jiān)控系統(tǒng)、醫(yī)療儀器、紡織機(jī)械、船舶運(yùn)輸?shù)确矫婢玫搅藦V泛的應(yīng)用。2:CAN232智能CAN接口卡2.1:外觀2.2:功能特點(diǎn) CAN232 屬于接口產(chǎn)品中一種低價(jià)、易用的 CAN開發(fā)工具。PC 只需經(jīng) RS232接口簡(jiǎn)單連接,即可實(shí)現(xiàn)CAN數(shù)據(jù)通訊,進(jìn)行CAN信息幀的接收、發(fā)送。 CAN232接口卡也可以直接應(yīng)用到嵌入式系統(tǒng)中,可在不改變

11、已有硬件結(jié)構(gòu)的情況下使嵌入式產(chǎn)品具有 CAN 通訊接口。這在已經(jīng)量產(chǎn)的產(chǎn)品中應(yīng)用,將更具有成本優(yōu)勢(shì)。 CAN232 接口卡上自帶光電隔離模塊,使CAN232接口卡避免由于地環(huán)流的損壞,增強(qiáng)系統(tǒng)在惡劣環(huán)境中使用的可靠性。CAN232智能 CAN 接口卡配有可在 Win9X/Me、Win2000/XP 下工作的驅(qū)動(dòng)程序,并包含詳細(xì)的應(yīng)用例程。2.3:工作原理圖2.2.1 CAN232 原理框圖CAN232智能CAN接口卡的工作原理如上圖所示。CAN 總線數(shù)據(jù)收發(fā)由CAN控制器、CAN收發(fā)器完成;RS232接口上的數(shù)據(jù)經(jīng)過電平轉(zhuǎn)換后由微處理器處理。系統(tǒng)的核心微處理器負(fù)責(zé)實(shí)現(xiàn)協(xié)議控制與數(shù)據(jù)轉(zhuǎn)換。為了提

12、高系統(tǒng)的抗干擾能力,在CAN控制器CAN收發(fā)器之間增加了光電隔離電路。隔離電路部分自帶 DC/DC 轉(zhuǎn)換模塊,無需外接電源。2.4:功能參數(shù)l PC接口:標(biāo)準(zhǔn)RS232接口;l CAN控制器:PHILIPS P87C591;l CAN收發(fā)器:PHILIPS PCA82C250l 數(shù)據(jù)傳送速率:CAN總線速率可編程,范圍在 10Kbit/s1Mbit/s 內(nèi)l CAN通訊接口DB9針型插座,符合DeviceNET 和 CANopen 標(biāo)準(zhǔn);l CAN協(xié)議:支持CAN2.0A和CAN2.0B協(xié)議,接口規(guī)范符合ISO/IS 11898;l 數(shù)據(jù)緩沖區(qū):256字節(jié)CAN接收FIFO隊(duì)列;l RS232

13、通訊速率:用戶可設(shè)置RS232通訊速率,最高可達(dá)57600 bps;l 最高幀流量:300 幀/秒();l 光電隔離耐壓:1000VDC;l 工作環(huán)境溫度:070;l 運(yùn)行環(huán)境:Win9X/Me、Win2000/XP 操作系統(tǒng);2.5: 軟件支持CAN232 智能 CAN 接口卡隨機(jī)提供功能強(qiáng)大的接口函數(shù)庫(kù)文件(ControlCAN.h、ControlCAN.lib、ControlCAN.dll),支持在 VC、VB、C+、Delphi 等開發(fā)環(huán)境下開發(fā)用戶自己的應(yīng)用程序,工作在Win9X/Me、Win2000/XP 等操作系統(tǒng)下,實(shí)現(xiàn) CAN 協(xié)議 CAN2.0A 和 CAN2.0B 規(guī)范(

14、PeliCAN)的數(shù)據(jù)通訊。3設(shè)備安裝3.1.硬件安裝使用隨機(jī)配套的RS232通訊電纜連接PC的COM口與CAN232接口卡的COM口,然后,連接專用穩(wěn)壓電源(9V/400mA)。此時(shí),紅色的電源指示燈POWER點(diǎn)亮,表示CAN232已處于工作狀態(tài),等待執(zhí)行指令。運(yùn)行配套的CAN232測(cè)試工具TEXT232CAN,初始化COM工作參數(shù),然后點(diǎn)擊“連接”按鈕。此后,即可設(shè)置CAN網(wǎng)絡(luò)工作參數(shù),進(jìn)行CAN數(shù)據(jù)通訊。CAN232接口卡工作時(shí),當(dāng)綠色指示燈COM閃爍,表示CAN232接口卡正與PC進(jìn)行數(shù)據(jù)通訊;當(dāng)綠色指示燈CAN閃爍,表示CAN232接口卡正與CAN網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)通訊。 3.2DB9針型

15、插座引腳定義 CAN232智能CAN接口卡具有1個(gè)CAN通道,通過1個(gè)DB9針型插座CZ1與實(shí)際的CAN網(wǎng)絡(luò)進(jìn)行連接。CZ1的管腳信號(hào)定義如表3.1所示。此管腳定義符合DeviceNET和CANopen標(biāo)準(zhǔn)。表3.1 CAN連接器DB9針型插座引腳號(hào)信號(hào)功能2CAN_LCAN_L信號(hào)線7CAN_HCAN_H信號(hào)線3、6GND參考地5CAN_SHIELD屏蔽線1、4、8、9空未用 用戶可以通過選配的DB9_OPEN5轉(zhuǎn)換,將CZ1的信號(hào)連接至引腳的DeviceNET或CANopen網(wǎng)絡(luò)。下面以連接至DeviceNET網(wǎng)絡(luò)為例,介紹OPEN5插座的輸出信號(hào),如圖3.1所示。圖 3.1 DB9_OP

16、EN5 連接器 3.3.信號(hào)指示燈 CAN232智能CAN接口卡具有3個(gè)LED來指示接口卡的運(yùn)行狀態(tài),具體功能如下:表4.2 LED狀態(tài)說明指示燈狀態(tài)指示狀態(tài)POWER紅色系統(tǒng)電源指示COM綠色RS232通訊狀態(tài)CAN綠色CAN通訊狀態(tài) 3.4.CAN總線連接 圖3.2 CAN網(wǎng)絡(luò)結(jié)構(gòu) 為了增強(qiáng)CAN通訊的可靠性,CAN總線網(wǎng)絡(luò)的兩個(gè)端點(diǎn)通常要加入終端匹配電阻,如圖4.1所示。終端電阻的大小有傳輸電纜的特性所決定。例如雙絞線的特性阻抗為120,則總線上的兩個(gè)端點(diǎn)也應(yīng)集成120的終端電阻。 CAN232智能CAN接口卡集成有120的終端電阻,用戶可以通過設(shè)置內(nèi)部跳線JP1來選擇是否使用該終端電阻

17、。出長(zhǎng)時(shí)JP1默認(rèn)狀態(tài)為ON,即使用120終端電阻。 注:建議使用120終端匹配電阻,用于吸收端點(diǎn)反射,提供穩(wěn)定的物理鏈路。當(dāng)進(jìn)行單節(jié)點(diǎn)的自發(fā)自收測(cè)試時(shí)必須連接該120的終端電阻構(gòu)成回路,否則,無法進(jìn)行自發(fā)自收測(cè)試。4:通用測(cè)試軟件接口函數(shù)4.1:接口卡設(shè)備類型定義各個(gè)接口卡的類型定義如下:表4.1 設(shè)備類型號(hào)定義設(shè)備名稱設(shè)備類型號(hào)PCI51211PCI98102USBCAN13USBCAN24PCI98205CAN2326PCI510074.2:CAN信息幀的數(shù)據(jù)結(jié)構(gòu)定義定義:typedef struct _VCI_CAN_OBJ UINT ID; UINT TimeStamp; BYTE

18、TimeFlag; BYTE SendType; BYTE RemoteFlag; BYTE ExternFlag; BYTE DataLen; BYTE Data8; BYTE Reserved3; VCI_CAN_OBJ,*PVCI_CAN_OBJ;參數(shù):TimeFlag: 是否使用時(shí)間標(biāo)識(shí),為1時(shí)TimeStamp有效,TimeFlag和TimeStamp只在此時(shí)有意義;TimeStamp: 接收到信息幀時(shí)的時(shí)間標(biāo)識(shí),從CAN計(jì)時(shí)器初始化開始計(jì)時(shí);SendType: 發(fā)送幀類型,=0時(shí)為正常發(fā)送,=1時(shí)為單次發(fā)送,=2時(shí)為自然發(fā)送,=3時(shí)為單次自發(fā)自收,只在此幀為發(fā)送幀時(shí)有意義;Remo

19、teFlag: 是否為遠(yuǎn)程幀;ExternFlag: 是否為擴(kuò)展幀;ID: 報(bào)文ID;DataLen: 數(shù)據(jù)長(zhǎng)度(<=8);Data: 報(bào)文的數(shù)據(jù);Reserved: 系統(tǒng)保留。4.3:接口函數(shù)說明4.3.1.DWORD _stdcall VCI_OpenDevice(DWORD DevType,DWORD DevIndex,DEWORD Reserved);入口參數(shù): DevType: 設(shè)備類型號(hào) DevIndex: 設(shè)備索引號(hào),當(dāng)為CAN232時(shí),0表示要打開的時(shí)COM1口,1表示要打開的是COM2口) Reserved: 當(dāng)設(shè)備為CAN232時(shí),此參數(shù)表示為用以打開串口的波特率,可

20、以為2400,4800,9600,14400,19200,28800,57600. 函數(shù)功能: 用以打開設(shè)備。 返回值: 為1時(shí)表示操作成功,為0表示操作失敗。4.3.2. DWORD_stdcall VCI_CloseDevice(DWORD DevType,DWORD DevIndex);入口參數(shù): DevType: 設(shè)備類型號(hào) DevIndex: 設(shè)備索引號(hào),當(dāng)為CAN232時(shí),0表示要打開的時(shí)COM1口,1表示要打開的是COM2口) 函數(shù)功能: 用以關(guān)閉設(shè)備。 返回值: 為1時(shí)表示操作成功,為0表示操作失敗。4.3.3.DWROD _stdcall VCI_GetReference(D

21、WORD DevType,DEWORD DevIndex,DWORD CANIndex,DWORD RefeType,PVOID pData);入口參數(shù): DevType: 設(shè)備類型號(hào)DevIndex: 設(shè)備索引號(hào),當(dāng)為CAN232時(shí),0表示要打開的時(shí)COM1口,1表示要打開的是COM2口);CANIndex: 第幾路CAN;RefType: 參數(shù)類型;pData: 用來存儲(chǔ)參數(shù)有關(guān)數(shù)據(jù)緩沖區(qū)地址首指針;函數(shù)功能: 用以獲取設(shè)備的相應(yīng)參數(shù);返回值: 為1時(shí)表示操作成功,為0表示操作失敗。參數(shù)表:當(dāng)設(shè)備類型為CAN232時(shí):RefTypepData功能描述1總長(zhǎng)度14字節(jié),當(dāng)作為輸入?yún)?shù)時(shí),只有

22、第一個(gè)字節(jié)有效,值為所讀取的濾波器的序號(hào),為1,2,3,4;當(dāng)作為輸出參數(shù)時(shí),具體各個(gè)字節(jié)所代表的意義見表后取得指定的濾波器參數(shù),如果此函數(shù)調(diào)用成功,則在info中返回14個(gè)字節(jié)的第一個(gè)濾波器的參數(shù)。2總長(zhǎng)度1字節(jié),當(dāng)作為輸入?yún)?shù)時(shí)表示為所要讀取的CAN控制器的控制寄存器的地址;當(dāng)作為輸出參數(shù)時(shí),表示為CAN控制器的控制寄存器的值。讀CAN控制器的指定控制機(jī)存器的值,如BYTE val=0;VCI_GetReference(VCI_CAN232,0,0,2,(PVOID)&val);如果此函數(shù)調(diào)用成功,則在val中返回寄存器的值。當(dāng)RefType時(shí),此時(shí)返回的pData各個(gè)字節(jié)所代表的

23、意義如下: pData0:信息保留pData1:表示CAN控制器BTR0值;pData2:表示CAN控制器BTR1值;pData3:讀取該組驗(yàn)收濾波器模式,位功能STATUS.7STATUS.6STATUS.5STATUS.4STATUS.3STATUS.2STATUS.1STATUS.0MFORMATBAMODEBMFORMTAB=1:驗(yàn)收濾波器該組僅用于擴(kuò)展幀信息,標(biāo)準(zhǔn)幀信息被忽略; =0:驗(yàn)收濾波器該組僅用于標(biāo)準(zhǔn)幀信息,擴(kuò)展幀信息被忽略;AMODEB=1:單驗(yàn)收濾波器選項(xiàng)使能長(zhǎng)濾波器有效; =0:雙驗(yàn)收濾波器選項(xiàng)使能短濾波器有效;pData4:讀取該組驗(yàn)收濾波器的使能,位功能STATUS

24、.7STATUS.6STATUS.5STATUS.4STATUS.3STATUS.2STATUS.1STATUS.0BF2ENBF1ENBF2EN=1:該組濾波器2使能,不能對(duì)相應(yīng)的屏蔽和代碼寄存器進(jìn)行寫操作; =0:該組濾波器2禁止,可以改變相應(yīng)的屏蔽和代碼寄存器;BF2EN=1:該組濾波器1使能,不能對(duì)相應(yīng)的屏蔽和代碼寄存器進(jìn)行寫操作; =0:該組濾波器1禁止,可以改變相應(yīng)的屏蔽和代碼寄存器注:如果選擇單濾波器模式,該單濾波器與對(duì)應(yīng)的濾波器1使能位相關(guān)。濾波器2使能位在單濾波器模式中不起作用。pData5:讀取該組驗(yàn)收濾波器的優(yōu)先級(jí),位功能STATUS.7STATUS.6STATUS.5S

25、TATUS.4STATUS.3STATUS.2STATUS.1STATUS.0BF2PRIOBF1PRIOBF2PRIO=1:該組濾波器2優(yōu)先級(jí)高,如果信息通過該組濾波器2,立即產(chǎn)生接收中斷; =0: 該組濾波器2優(yōu)先級(jí)低,如果FIFO級(jí)超過接收中斷級(jí)濾波器,產(chǎn)生接收中斷; BF1PRIO=1:該組濾波器1優(yōu)先級(jí)高,如果信息通過該組濾波器1,立即產(chǎn)生接收中斷; =0: 該組濾波器1優(yōu)先級(jí)低,如果FIFO級(jí)超過接收中斷級(jí)濾波器,產(chǎn)生接收中斷; pData6-9:表示該組濾波器ACR的值;pDataad:表示該組濾波器AMR的值;4.3.4.DWROD _stdcall VCI_SetRefere

26、nce(DWORD DevType,DEWORD DevIndex,DWORD CANIndex,DWORD RefeType,PVOID pData);入口參數(shù): DevType: 設(shè)備類型號(hào) DevIndex: 設(shè)備索引號(hào),當(dāng)為CAN232時(shí),0表示要打開的時(shí)COM1口,1表示要打開的是COM2口) CANIndex: 第幾路CAN;RefType: 參數(shù)類型;pData: 用來存儲(chǔ)參數(shù)有關(guān)數(shù)據(jù)緩沖區(qū)地址首指針;函數(shù)功能: 用以設(shè)置設(shè)備的相應(yīng)參數(shù),主要處理不同設(shè)備的特定操作;返回值: 為1時(shí)表示操作成功,為0表示操作失敗。參數(shù)表:RefTypepData功能描述1總長(zhǎng)度1字節(jié)0:10kbp

27、s1:20kbps2:50kbps3:125kbps4:250kbps5:500kbps6:800kbps7:1000kbps更改CAN波特率,例如要設(shè)置CAN的波特率為10kbps:BYTE baud0;VCI_SetReference(VCI_CAN232,0,0,1,(PVIOD)&baud);2總長(zhǎng)度為12字節(jié),各個(gè)字節(jié)所代表的意義見表后。設(shè)置濾波器參數(shù)3總長(zhǎng)度1字節(jié)1:2.4kbps2:4.8kbps3:9.6kbps4:14.4kbps5:19.2kbps6:28.8kbps7:57.6kbps更改CAN232波特率4總長(zhǎng)度2字節(jié),pData0表示CAN控制器的控制寄存器的

28、地址,pData1表示要寫入的數(shù)值寫CAN控制器的指定控制寄存器5總長(zhǎng)度1個(gè)字節(jié),0xAA:使用時(shí)間標(biāo)識(shí);其它:不使用時(shí)間標(biāo)識(shí)設(shè)置時(shí)間標(biāo)識(shí)當(dāng)RefType2時(shí),pData各個(gè)字節(jié)所代表的意義如下: pData0設(shè)置哪一組驗(yàn)收濾波器,共有4組: 1:設(shè)置第1組; 2:設(shè)置第2組; 3:設(shè)置第3組; 4:設(shè)置第4組;pData1設(shè)置該組驗(yàn)收濾波器模式,位功能STATUS.7STATUS.6STATUS.5STATUS.4STATUS.3STATUS.2STATUS.1STATUS.0MFORMATBAMODEBMFORMTAB=1:驗(yàn)收濾波器該組僅用于擴(kuò)展幀信息,標(biāo)準(zhǔn)幀信息被忽略; =0:驗(yàn)收濾波

29、器該組僅用于標(biāo)準(zhǔn)幀信息,擴(kuò)展幀信息被忽略;AMODEB=1:單驗(yàn)收濾波器選項(xiàng)使能長(zhǎng)濾波器有效;=0:雙驗(yàn)收濾波器選項(xiàng)使能短濾波器有效;pData2:設(shè)置該組驗(yàn)收濾波器的使能,位功能STATUS.7STATUS.6STATUS.5STATUS.4STATUS.3STATUS.2STATUS.1STATUS.0BF2ENBF1ENBF2EN=1:該組濾波器2使能,不能對(duì)相應(yīng)的屏蔽和代碼寄存器進(jìn)行寫操作; =0:該組濾波器2禁止,可以改變相應(yīng)的屏蔽和代碼寄存器;BF2EN=1:該組濾波器1使能,不能對(duì)相應(yīng)的屏蔽和代碼寄存器進(jìn)行寫操作; =0:該組濾波器1禁止,可以改變相應(yīng)的屏蔽和代碼寄存器注:如果選

30、擇單濾波器模式,該單濾波器與對(duì)應(yīng)的濾波器1使能位相關(guān)。濾波器2使能位在單濾波器模式中不起作用。 pData5:讀取該組驗(yàn)收濾波器的優(yōu)先級(jí),位功能STATUS.7STATUS.6STATUS.5STATUS.4STATUS.3STATUS.2STATUS.1STATUS.0BF2PRIOBF1PRIOBF2PRIO=1:該組濾波器2優(yōu)先級(jí)高,如果信息通過該組濾波器2,立即產(chǎn)生接收中斷; =0: 該組濾波器2優(yōu)先級(jí)低,如果FIFO級(jí)超過接收中斷級(jí)濾波器,產(chǎn)生接收中斷; BF1PRIO=1:該組濾波器1優(yōu)先級(jí)高,如果信息通過該組濾波器1,立即產(chǎn)生接收中斷; =0: 該組濾波器1優(yōu)先級(jí)低,如果FIFO

31、級(jí)超過接收中斷級(jí)濾波器,產(chǎn)生接收中斷; pData4-7:分別對(duì)應(yīng)要設(shè)置的SJA1000的ACR0-ACR3的值;pData8-b:分別對(duì)應(yīng)要設(shè)置的SJA1000的AMR0-AMR3的值;4.3.5 DWORD_stdcall VCI_StartCAN(DWORD DevType,DWORD DevIndex,DWORD CANIndex);入口參數(shù): DevType: 設(shè)備類型號(hào) DevIndex: 設(shè)備索引號(hào),當(dāng)為CAN232時(shí),0表示要打開的時(shí)COM1口,1表示要打開的是COM2口) CANIndex: 第幾路CAN;函數(shù)功能: 用以啟動(dòng)CAN;返回值: 為1時(shí)表示操作成功,為0表示操作

32、失敗。4.3.5 DWORD_stdcall VCI_ResetCAN(DWORD DevType,DWORD DevIndex,DWORD CANIndex);入口參數(shù): DevType: 設(shè)備類型號(hào); DevIndex: 設(shè)備索引號(hào),當(dāng)為CAN232時(shí),0表示要打開的時(shí)COM1口,1表示要打開的是COM2口); CANIndex: 第幾路CAN;函數(shù)功能: 用以復(fù)位CAN;返回值: 為1時(shí)表示操作成功,為0表示操作失敗。4.3.6 ULONG_stdcall VCI_Receive(DWORD DevType,DWORD DevIndex,DWORD CANIndex,PVCI_CAN_O

33、BJ pReceive,ULONG Len,INT WaitTime=-1);入口參數(shù): DevType: 設(shè)備類型號(hào); DevIndex: 設(shè)備索引號(hào),當(dāng)為CAN232時(shí),0表示要打開的時(shí)COM1口,1表示要打開的是COM2口); CANIndex: 第幾路CAN; pReceive: 用來接收的數(shù)據(jù)幀數(shù)組的首指針; Len: 用來接收的數(shù)據(jù)幀數(shù)組的長(zhǎng)度; WaitTime: 等待超時(shí)時(shí)間,以毫秒為單位;函數(shù)功能:從指定的設(shè)備讀取數(shù)據(jù);返回值:返回實(shí)際讀取到的幀數(shù),如果返回值為0xFFFFFFFF,則表示讀取數(shù)據(jù)失敗,有錯(cuò)誤發(fā)生,請(qǐng)調(diào)用VCI_ReadErrInfo函數(shù)來獲取錯(cuò)誤碼。5:界面

34、設(shè)計(jì)5.1.界面設(shè)計(jì)程序Begin VB.Form Form1 Caption= ”Form1” ClientHeight=6630 ClientLeft=1950 ClientTop=25506:主程序Dim m_devtype As LongDim m_connect As ByteDim m_devind As LongDim TR0(1) As ByteDim TR1(1) As BytePrivate Sub Command1_Click() If m_connect = 0 Then MsgBox ("請(qǐng)先打開端口") Exit Sub End If Dim S

35、endType, frameformat, frametype As Byte Dim ID As Long Dim data(7) As Byte Dim frameinfo As VCI_CAN_OBJ Dim str As String SendType = Combo3.ListIndex 發(fā)送格式,共有4種:正常發(fā)送、單次發(fā)送、自發(fā)自收、單次自發(fā)自收 frameformat = Combo5.ListIndex 幀類型,有標(biāo)準(zhǔn)幀、擴(kuò)展幀2種 frametype = Combo4.ListIndex 幀格式,有數(shù)據(jù)幀、遠(yuǎn)程幀2種 str = "&H" str

36、 = str + Text1.Text ID = Val(str) str = Text4.Text strdata = Left(str, 2) i = 0 While Len(strdata) > 0 And i < 8 data(i) = Val("&H" + strdata) i = i + 1 str = Right(str, Len(str) 3) 數(shù)據(jù)格式為2個(gè)字符為1組,組間有空格,占1個(gè)字符,前1組數(shù)據(jù)發(fā)送后,欲正確取到下1組,須從第Len(str)3個(gè)字符開始。 strdata = Left(str, 2) Wend frameinf

37、o.DataLen = i frameinfo.ExternFlag = frametype frameinfo.RemoteFlag = frameformat frameinfo.SendType = SendType frameinfo.ID = ID For j = 0 To i - 1 frameinfo.data(j) = data(j) Next If VCI_Transmit(m_devtype, m_devind, 0, frameinfo, 1) <> 1 Then MsgBox ("發(fā)送數(shù)據(jù)失敗") m_devtype:設(shè)備類型號(hào);m_de

38、vind:設(shè)備索引號(hào);0:第0路CAN;frameiinfo:發(fā)送數(shù)據(jù)幀信息;1:要發(fā)送的數(shù)據(jù)幀數(shù)組長(zhǎng)度。 Else List1.AddItem "發(fā)送數(shù)據(jù)成功", List1.ListCount End IfEnd SubPrivate Sub Command2_Click() If m_connect = 0 Then MsgBox ("請(qǐng)先打開端口") Exit Sub End If If VCI_StartCAN(m_devtype, m_devind, 0) <> 1 Then MsgBox ("啟動(dòng)CAN錯(cuò)誤"

39、) Else List1.AddItem "啟動(dòng)CAN成功", List1.ListCount End IfEnd SubPrivate Sub Command3_Click() If m_connect = 0 Then MsgBox ("請(qǐng)先打開端口") Exit Sub End If If VCI_ResetCAN(m_devtype, m_devind, 0) <> 1 Then MsgBox ("復(fù)位CAN錯(cuò)誤") Else List1.AddItem "復(fù)位CAN成功", List1.Lis

40、tCount End IfEnd SubPrivate Sub Command4_Click() If m_connect = 0 Then MsgBox ("請(qǐng)先打開端口") Exit SubEnd IfDim i As Long i = Combo1.ListIndex 從下拉列表中選取波特率,共有8組:10Kbps、220Kbps、50Kbps、125Kbps、250Kbps、500Kbps、800Kbps、1000Kbps If i <> -1 Then i從0開始 If VCI_SetReference(m_devtype, m_devind, 0,

41、1, i) <> 1 Then MsgBox ("更改CAN波特率錯(cuò)誤") 1:參數(shù)類型為1,可以更改CAN波特率為i,i的值為07,分別對(duì)應(yīng)上面8個(gè)不同的波特率 Else List1.AddItem "更改CAN波特率成功", List1.ListCount End If End IfEnd SubPrivate Sub Command5_Click(Index As Integer) If m_connect = 0 Then MsgBox ("請(qǐng)先打開端口") Exit Sub End If Dim i As Lon

42、g i = Combo2.ListIndex 從下拉列表中選取波特率,共有7組:2.4Kbps、4.8Kbps、9.6Kbps、14.4Kbps、19.2Kbps、28.8Kbps、57.6KbpsIf i <> -1 Then i從1開始 i = i + 1 If VCI_SetReference(m_devtype, m_devind, 0, 3, i) <> 1 Then MsgBox ("更改232波特率錯(cuò)誤") 3:參數(shù)類型為3,可以更改CAN232波特率為i,i的值為17,分別對(duì)應(yīng)上面7個(gè)波特率 Else List1.AddItem &q

43、uot;更改232波特率成功", List1.ListCount End If End IfEnd SubPrivate Sub Command6_Click() If m_connect = 0 Then MsgBox ("請(qǐng)先打開端口") Exit Sub End If Dim addr As Byte 濾波器序號(hào)addr可為1、2、3、4,當(dāng)取1時(shí),則讀取第1個(gè)濾波器參數(shù)。 Dim info(13) As Byte Dim str As String addr = Val(Text2.Text) If addr > 0 And addr < 5

44、Then info(0) = addr If VCI_GetReference(m_devtype, m_devind, 0, 1, info(0) <> 1 Then MsgBox ("讀取濾波器參數(shù)錯(cuò)誤") 1:設(shè)備參數(shù)為1,用于取得指定的濾波器參數(shù) Else str = "濾波器參數(shù)信息:" For j = 0 To 13 tmpstr = Hex(info(j) + " " str = str + tmpstr Next List1.AddItem str, List1.ListCount End If End I

45、fEnd SubPrivate Sub Command7_Click() If m_connect = 0 Then MsgBox ("請(qǐng)先打開端口") Exit Sub End If Dim data(11) As Byte Dim str As String str = Text3.Text i = 0 strdata = "aa" While Len(strdata) > 0 And i < 12 strdata = Left(str, 2) str = Right(str, Len(str) - 3) data(i) = Val(&q

46、uot;&H" + strdata) i = i + 1 Wend If i < 11 Then MsgBox ("數(shù)據(jù)長(zhǎng)度不夠") Exit Sub End If If VCI_SetReference(m_devtype, m_devind, 0, 2, data(0) <> 1 Then MsgBox ("設(shè)置濾波器參數(shù)錯(cuò)誤") 2:設(shè)備類型為2,用于設(shè)置濾波器參數(shù)。data(0)設(shè)置哪一組驗(yàn)收濾波器,具體見接口庫(kù) Else List1.AddItem "設(shè)置濾波器參數(shù)成功", List1.L

47、istCount End IfEnd SubPrivate Sub Command8_Click() TR0(0) = &H6 TR0(1) = Val("&H" + Text5.Text) TR1(0) = &H7 TR1(1) = Val("&H" + Text6.Text) If VCI_SetReference(m_devtype, m_devind, 0, 4, TR0(0) <> 1 Then MsgBox ("預(yù)設(shè)BTR0參數(shù)錯(cuò)誤") Else MsgBox ("預(yù)設(shè)

48、BTR0參數(shù)成功") End If If VCI_SetReference(m_devtype, m_devind, 0, 4, TR1(0) <> 1 Then MsgBox ("預(yù)設(shè)BTR1參數(shù)錯(cuò)誤") Else MsgBox ("預(yù)設(shè)BTR1參數(shù)成功") End IfEnd SubPrivate Sub Connect_Click() Dim port As Long Dim baud As Long Dim a As Boolean If m_connect = 1 Then m_connect = 0 Connect.Ca

49、ption = "連接" VCI_CloseDevice (m_devtype, m_devind) Exit Sub End If If Combo_port.ListIndex <> -1 And Combo_baud.ListIndex <> -1 Then port = COM1 'Combo_port.ListIndex baud = 4800 'Combo_baud.ItemData(Combo_baud.ListIndex) If VCI_OpenDevice(m_devtype, port, baud) <>

50、; 1 Then MsgBox ("打開端口錯(cuò)誤") Else m_connect = 1 m_devind = port Connect.Caption = "斷開" End If Else MsgBox ("請(qǐng)選擇端口及對(duì)應(yīng)波特率 ") End IfEnd SubPrivate Sub Form_Load()Text1.LinkTopic = "view|tagname" ''''''''Text1.LinkItem = "simu3.INCREA1000" ''''''''''Text1.LinkMode = 1 ''''''''''m_devtype = 6 'CAN232類型號(hào) m_connect = 0 m_devind = 0 Combo3.ListIn

溫馨提示

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

評(píng)論

0/150

提交評(píng)論