色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

英創信息技術CAN接口COM組件在WinCE平臺上的應用

英創信息技術 ? 來源:英創信息技術 ? 作者:英創信息技術 ? 2019-11-12 10:11 ? 次閱讀

控制器局域網(CAN)是一個串行、異步、多主的通信協議,它以其高性能、高可靠性以及靈活的設計受到人們的重視,應用越來越廣泛。英創公司的ARM9工控主板如EM9161,EM9260等均支持CAN總線接口,并實現了基于Windows CE規范的流式驅動程序(Stream Device Driver),對于大多數基于C/C++開發環境的應用,英創公司以靜態庫can_api.lib形式提供了相應接口函數,客戶通過相應的API函數即可完成對CAN接口的操作。但對于使用像C#這樣高級語言的應用,由于一般不支持靜態庫的調用,因此需要新的方法來解決這個問題。我們目前采用的基本方法是在該靜態庫的基礎上,針對CAN通訊接口的數據收發以及對出錯情況監測的應用,封裝一個基于CAN通訊接口應用的COM組件,該組件中提供了一套更為簡潔的接口方法函數,可以方便多種開發工具的調用,如:C#、VB、LabView等。使用時客戶只需在系統中一次性注冊該組件,并在應用程序中引用對應的DLL或TLB文件,就能方便使用其相應的接口方法函數了。

本文介紹的基于英創工控主板CAN通訊接口的COM組件提供五個接口方法函數:打開CAN接口,關閉CAN接口,向CAN接口寫數據,從CAN接口讀取數據以及讀取接口錯誤代碼。客戶方調用COM組件打開CAN接口后,COM組件服務器便在組件內部創建兩個線程,一個用于接收CAN接口數據,一個用于CAN通訊錯誤處理。數據接收線程里通過WaitForSingleObject來等待CAN接口的接收事件發生,當CAN接口收到數據后,將數據放入指定的接收數據緩存中,客戶通過調用讀數據函數,將數據從緩存中讀出。后面會對各函數做詳細的說明。

1、數組作為組件參數

作為通信類組件,數組常常作為接口方法函數參數傳遞,以交換數據,COM 組件是運行在分布式環境中的,對于一個組件程序(DLL或EXE),使用者可能是在本機的某個進程內加載組件(INPROC_SERVER),也可能是從另一個進程中調用組件的進程(LOCAL_SERVER),也可能是在這臺計算機上調用遠程計算機上的組件(REMOTE_SERVER),同時,組件也可能是跨語言調用的,因此對于將數組作為組件參數傳遞時與我們常用的參數傳遞方法有較大區別。

C語言中,通常用數組名作為函數參數。如下例程,求10次得分的總和。

int Sum( int array[10] )

{

int i, sum;

for( sum =0, i = 0;i《10; i++ )

sum += array[i];

return( sum );

}

main( )

{

int sum;

int score[10] = {75,80,81,76,75,86,90,77,80,81};

sum = Sum( score );

}

例中array是主調函數中的實參數組名,在被調函數中聲明了形參數組,且大小為10,但實現上,在形參中指定數組大小不起任何作用,因為數組名作為實參傳遞時,僅是把實參數組的起始地址傳遞給形參數據,所以被調函數也可以聲明成如下形式:Sum( int array[ ] )或Sum( int *array )。

在COM組件中,缺省情況下,指針參數總是被假設為指向單個實例的指針,而不是數組,在參數中傳遞一個數據最簡單的方法是使用固定數組技術,也就是在參數中指名數組維數信息。假設Sum為一組件接口方法函數,則其接口就應該描述為:HRESULT Sum( [in] int array[10] )。然而,當你自己用C++寫一個COM組件程序(dll形式),然后再用C++來本地調用(準確的說是套間內調用)這個組件是,也可以將接口方法描述為:HRESULT Sum( [in] int array[] )或HRESULT Sum( [in] int *array),并且程序也能得到正常的運行結果,但這樣的接口方法描述存在兩個問題:1、當用C#引用組件的DLL或TLB時,array會被認為是個指針,而在C#中聲明的數組,數組名不能作為實參傳遞。2、當這個方法函數是跨套間調用時,接口代理僅會將array[0]的值解析出來,通過COM的RPC通信協議將數據發送到COM服務器存根,此時在接口方法內再操作其它array元素將出錯。所以正確的接口描述應該是HRESULT Sum( [in] int array[10] ),接口代理總是在OPRC請求消息中分配10*sizeof(int)個字節空間,將后把10個元素一起拷貝到消息中,一旦服務器收到些ORPC請求消息,接口存根直接用接收到的緩沖區作為函數的參數。

固定數組是最簡單,最緊湊,執行效率最高的數據表示形式,除了固定數組外,還可以采用可變數組、開放數組、安全數組等作為組件方法函數參數來傳遞一個數組,在本例中,由于CAN協議規定了一幀數據最多不會超過13個字節長度,因此采用13個字節的固定數組是一個較好的選擇。對于其它類型數組請參考相應資料

2、CAN組件接口方法函數

(1)StartCAN( /*[in]*/ UINT canNo, /*[in]*/ UCHAR baud, /*[in]*/ BYTE acceptanceFilter[9],

/*[in]*/ BYTE size, /*[out,retval]*/ BOOL *pBool )

功能描述:打開指定CAN接口。

參數說明:

/*[in]*/ UINT canNo 設置要打開的CAN接口號

canNo =1 :主板上帶的CAN接口

=2 :通過ISA總線擴展的CAN接口

/*[in]*/ UCHAR baud 設置通訊波特率

baud = 0 :10Kbps 1 :20Kbps 2 :50bps

3 :100bps 4 :125Kbps 5 :250Kbps

6 :500bps 7:1Mbps

/*[in]*/BYTE acceptanceFilter[9] 根據通訊報文格式定義過濾器的配置,定義為9個字節的過濾器,其中前4個字節用于定義過濾器的接收碼,后4個字節用于定義過濾器的接收屏蔽碼,最后一個字節用于定義選擇單/雙濾波模式。

acceptanceFilter[8] = 0:雙濾波

= 1:單濾波

/*[in]*/BYTE size定義的過濾器的大小(應該設置為9)

/*[out,retval]*/BOOL *pBool CAN接口打開成功/失敗標志

TRUE:CAN接口打開成功

FALSE:CAN接口打開失敗

(2)WriteCAN(/*[in]*/ BYTE buf[13], /*[in]*/ DWORD bufLen, /*[out,retval]*/ BOOL *pBool )

功能描述:向CAN接口寫數據

參數說明:

/*[in]*/ BYTE buf[13] 準備通過CAN接口發送的數據包

/*[in]*/ DWORD bufLen 發送數據包長度

/*[out,retval]*/ BOOL *pBool 數據發送成功/失敗標志

TRUE:數據發送成功

FALSE:數據發送失敗

(3)ReadCAN( /*[out]*/ BYTE buf[13], /*[out,retval]*/ BOOL *pBool )

功能描述:從接收緩存中讀取一幀CAN接口數據

參數說明:

/*[out]*/ BYTE buf[13] 數據接收緩存(緩存區需大于13個字節)

/*[out,retval]*/ BOOL *pBool CAN接口是否有數據標志

TRUE:CAN接口收到數據(返回值為TRUE時需再次調用本函數,直到返回值FLASH,以將數據全部讀出)

FALSE:CAN接口沒有收到數據

(4)GetErrorCode(/*[out]*/ DWORD *ECCRegCode,/*[out]*/ DWORD errorArray[16],

/*[out,retval]*/ int *errorCount)

功能描述:得到錯誤代碼

參數說明:

/*[out]*/ DWORD *ECCRegCode CAN接口中錯誤代碼捕捉寄存器的值

/*[out]*/ DWORD errorArray[16] 最近16次的CAN接口通訊錯誤編碼(緩存區需大于16個字節)

/*[out,retval]*/ int *errorCount 總錯誤次數

(5)StopCAN( )

功能描述:關閉CAN通訊接口

3、CAN組件調用

在使用COM組件之前需要注冊組件,COM組件的注冊過程請參考本網站相關文章或參考相應書籍,這里不再贅述。下面是在EVC中調用CAN組件接口方法函數的一些程序片段。

//從Program ID得到Class ID

hr = CLSIDFromProgID( OLESTR( ‘ ComCAN.CoCAN ’ ), &clsid );

if( FAILED( hr ) )

{

return -1;

}

//從Class ID得到ICoSerial接口指針

hr = CoCreateInstance( clsid, NULL, CLSCTX_INPROC_SERVER, __uuidof(ICoCAN ),

( void** )&pICoCAN );

if( FAILED( hr ))

{

return -1;

}

//打開CAN接口

//過濾器設置

Filter[0] = 0; // ACR0

Filter[1] = 0x5f; // ACR1

Filter[2] = 0; // ACR2

Filter[3] = 0x1f; // ACR3

Filter[4] = 0xff; // AMR0

Filter[5] = 0xff; // AMR1

Filter[6] = 0xff; // AMR2

Filter[7] = 0xff; // AMR3

Filter[8] = DUAL_FILTER_MODE; // 設置濾波器模式

Baud = CAN_TIMING_250K; // 波特率:250Kbps

CanNo = 1;

bResult = pICoCAN-》StartCAN( CanNo, Baud, (BYTE*)Filter, 9 );

if( !bResult )

return -1;

//數據接收和發送

while( TURE )

{

bResult = pICoCAN-》ReadCAN( (BYTE*)buf );

if( bResult )

{

dLen = buf[0]&0x0f;

if( buf[0]&0x80 ) // 擴展幀

{

pICoCAN-》WriteCAN( (BYTE*)buf, dLen+5 );

}

else // 標準幀

{

pICoCAN-》WriteCAN( (BYTE*)buf, dLen+3 );

}

}

Sleep( 10 );

}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • WINDOWS
    +關注

    關注

    4

    文章

    3567

    瀏覽量

    89116
  • 嵌入式主板
    +關注

    關注

    7

    文章

    6086

    瀏覽量

    35529
收藏 人收藏

    評論

    相關推薦

    WinCE主板CAN接口數據接收性能測試

      公司嵌入式主板產品中,高端的335x主板系列及低端的ESM9287主板均可支持2路CAN總線標準接口。本文提供CE
    發表于 09-19 11:15

    信息技術CAN接口COM組件C#語言領域應用

     ARM9工控主板的一個很大的特色就是提供了標準的CAN總線通訊接口,客戶可以方便地工業現場、汽車、船舶等等領域進行
    的頭像 發表于 11-12 10:34 ?2480次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b><b class='flag-5'>CAN</b><b class='flag-5'>接口</b><b class='flag-5'>COM</b><b class='flag-5'>組件</b><b class='flag-5'>在</b>C#語言領域應用

    信息技術工控主板EM9360的GPIO介紹

    公司的ARM9工控主板產品 EM9360是一款預裝WinCE操作系統,以多種通訊接口、支持各種擴展為其技術特色。EM9360的板載的3路
    的頭像 發表于 11-14 09:34 ?2435次閱讀

    信息技術C#使用COM組件接口進行串口操作介紹

    通訊的時候,往往是需要對RTS進行設置的。為了解決這個問題,公司現在提供了操作串口的COM組件接口;用戶只需要在目標
    的頭像 發表于 11-14 09:37 ?2388次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b>C#使用<b class='flag-5'>COM</b><b class='flag-5'>組件</b><b class='flag-5'>接口</b>進行串口操作介紹

    信息技術如何實現WinCE系統中USB設備自動檢測概述

    公司ARM9系列工控主板預裝正版WinCE操作系統,提供標準USB接口,本文介紹如何在應用程序中判斷USB存儲設備的插入和移出操作。
    的頭像 發表于 11-18 09:44 ?1425次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b>如何實現<b class='flag-5'>WinCE</b>系統中USB設備自動檢測概述

    信息技術WinCE工控主板的數據庫配置簡介

    。由于公司的產品處于不斷發展之中,WinCE不斷的發展之中,導致不同型號的產品中存在配置的數據庫的情況有所不同,本文的主要目的是詳
    的頭像 發表于 01-14 11:35 ?1512次閱讀

    信息技術嵌入式系統設備驅動接口的C#編程

    的驅動程序,用戶只需直接調用相應的接口函數即可實現。 使用C#進行應用程序開發時,由于C#無法使用C++的靜態庫函數,對于一些流式驅動設備,比如ISA,GPIO,WDT,CAN,SPI,IRQ等,沒有封裝好的庫函數可操作,如果
    的頭像 發表于 01-15 11:29 ?1331次閱讀

    信息技術WinCE遠程桌面介紹

    公司WinCE系列工控主板,即可以支持多種格式的單色點陣液晶,也可以支持從320240到1024768的各種分辨率的彩色TFT LCD,借助WinCE強大的GUI,用戶可以很容易的
    的頭像 發表于 01-16 10:24 ?3002次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b><b class='flag-5'>WinCE</b>遠程桌面介紹

    信息技術WinCE平臺下通過系統異常信息定位程序bug位置

    使用基于WINCE平臺系列工控主板進行應用程序開發時,當程序產生異常退出,CE操作系統將通過調試串口打印類似如下錯誤信息。根據這些
    的頭像 發表于 01-17 11:14 ?1353次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b><b class='flag-5'>WinCE</b><b class='flag-5'>平臺</b>下通過系統異常<b class='flag-5'>信息</b>定位程序bug位置

    信息技術WinCE主板CAN接口數據接收性能測試介紹

    公司嵌入式主板產品中,高端的335x主板系列及低端的ESM9287主板均可支持2路CAN總線標準接口。本文提供CE
    的頭像 發表于 02-04 11:39 ?1534次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b><b class='flag-5'>WinCE</b>主板<b class='flag-5'>CAN</b><b class='flag-5'>接口</b>數據接收性能測試介紹

    信息技術CAN驅動接口調用方法及說明

    時間,單位ms。 BusErrorReport :錯誤幀上報標記,0:不上報,1:上報錯誤幀 設置程序可以連接工程師獲得。 CAN打開及關閉 打開關閉采用標準的流式設備驅動接口Cr
    的頭像 發表于 02-05 10:26 ?1419次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b>新<b class='flag-5'>CAN</b>驅動<b class='flag-5'>接口</b>調用方法及說明

    信息技術WinCE主板與STM32多功能模塊通訊介紹

    ,STM32F103RCT6通過其USB Device接口工控主板連接通訊,STM32WinCE系統中被當做一個串口設備,
    的頭像 發表于 02-06 11:12 ?2120次閱讀

    信息技術WinCE6系統CEDB故障分析介紹

    導致的。直到近期,公司通過大量實驗,找到了觸發CEDB故障的原因。本文將介紹我們的實驗結果,為防止CEDB故障,希望客戶注意: 使用WINCE6平臺的客戶,在產品發布時請使用rel
    的頭像 發表于 02-07 10:30 ?1083次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b><b class='flag-5'>WinCE</b>6系統CEDB故障分析介紹

    信息技術WinCE平臺高速WiFi實現方法

    配套使用,實現高速WiFi通訊,模塊支持應用程序WinSock編程。工控主板是通過mini PCIe上的USB接口來操作ETA6210模塊的。實際應用中,ETA6210是插在客戶
    的頭像 發表于 02-07 10:39 ?1706次閱讀

    信息技術WinCE文件系統測試及故障分析簡介

    WINCE文件系統的偶發故障一直是WINCE系統最為棘手的問題,盡管出現故障的幾率不高,但對設備的穩定運行造成嚴重影響。為了保證基于WinCE的嵌入式系統能穩定可靠運行,
    的頭像 發表于 02-07 11:15 ?1494次閱讀
    <b class='flag-5'>英</b><b class='flag-5'>創</b><b class='flag-5'>信息技術</b><b class='flag-5'>WinCE</b>文件系統測試及故障分析簡介
    主站蜘蛛池模板: 国产蜜臀AV在线一区视频 | 午夜男人免费福利视频 | 久久秋霞理伦片 | 诱人的秘书BD在线观看 | 久热这里在线精品 | 欧美亚洲日韩自拍高清中文 | 无套日出白浆在线播放 | 日本大片免a费观看视频 | 亚洲视频在线观看不卡 | 456亚洲人成在线播放网站 | 性色香蕉AV久久久天天网 | 波多野结衣 熟女 | 扒开校花粉嫩小泬喷潮漫画 | 99在线观看视频免费 | 色婷婷欧美在线播放内射 | 成人天堂资源WWW在线 | 国产传媒精品1区2区3区 | 亚洲国产中文字幕在线视频综合 | 精品国产手机视频在在线 | 亚洲 日韩 国产 制服 在线 | 成人小视频在线观看 | 杨幂视频1分11未删减在线观看 | 久久青草费线频观看国产 | 内射气质御姐视频在线播放 | 国产三级在线精品男人的天堂 | 青青青国产依人精品视频 | 国产成人精选免费视频 | 99久久免费精品国产 | 国产高清视频在线播放www色 | 亚洲区 bt下载 | 精品国产品国语在线不卡丶 | 花蝴蝶在线观看免费8 | 久9青青cao精品视频在线 | 午夜影院和视费x看 | 国产成人免费网站在线观看 | 高挑人妻无奈张开腿 | 国产成人精品视频播放 | 老板吻我下身好爽到高潮 | 亚洲国产精品天堂在线播放 | 超级乱淫片午夜电影网99 | 区产品乱码芒果精品P站在线 |