激情综合丁香-激情综合六月-激情综合婷婷亚洲图片-激情综合图区-激情综合网五月


主題:EM9000CAN通訊問題

  共有65589人關注過本帖    
客人
1樓


EM9000CAN通訊問題  發帖心情 Post By:2016-4-7 10:39:00   [只看該作者]

請問在程序中怎樣設置CAN通訊成功的狀態或標志位,CAN_API_DLL.h文件里只有CAN設備接收數據的函數定義,應該如何利用?
// 功能描述:讀取CAN設備接收數據包。
// 輸入參數 hDevice: 已創建CAN流式設備的句柄。
// 輸出參數 pRxFrameBuffer: 用于讀取CAN設備接收到的數據包。 
// 返回值 = TRUE:  從CAN設備接收到數據,并將接收到的數據包讀入pRxFrameBuffer。
//        = FALSE: CAN設備沒有接收數據。
CAN_API_DLL_API BOOL CAN_GetNextReceivedFrame( HANDLE hDevice, MessageFrame *RxFrameBuffer );
在CanBus.cpp的文件里這樣寫不對
if(CAN_GetNextReceivedFrame(self->m_hCAN,&RxFrame))
{
self->OnReceiveData(&RxFrame);
flagcan = 1;
            
}
else //if(!i)//即使有數據也能進入這個條件
{
flagcan = 2;
{
Sleep(0);
Sleep(0);
Sleep(0);
Sleep(0);
Sleep(0);
Sleep(0);
Sleep(0);
Sleep(0);
Sleep(0);
Sleep(0);
Sleep(0);
Sleep(0);
}/**/
             }

  單帖管理 | 引用 | 回復 回到頂部
帥哥喲,離線,有人找我嗎?
yy
2樓 信息 | 搜索 | 郵箱


加好友 發短信
  發帖心情 Post By:2016-4-7 14:35:00   [只看該作者]

can_api_dll.h是CAN的COM組件工程里的文件,你需要修改這個COM組件嗎?

這個COM組件一般是給C#程序調用的,如果只是希望判斷CAN是否通信成功,在C#代碼里面加個判斷就可以了,不需要修改COM組件里的代碼。

你帖出來的代碼有點點邏輯問題,CAN_GetNextReceivedFrame返回FALSE只代表暫時沒有收到CAN數據,不代表CAN通信失敗。

通信是否成功可以從接收到的數據是否正確來判斷,或者判斷CAN是否有錯誤事件產生。

  單帖管理 | 引用 | 回復 回到頂部
客人
3樓


CAN通訊判斷問題  發帖心情 Post By:2016-4-8 8:02:00   [只看該作者]

您好,現在問題是用CAN口調試器測試,數據發送周期為500ms,在CAN口一直發送數據的時候,為什么還能計入到else里面?else判斷不是應該在CAN口沒有收到數據的時候才能進入的么?

  單帖管理 | 引用 | 回復 回到頂部
客人
4樓


如何在程序中判斷錯誤檢測事件?  發帖心情 Post By:2016-4-8 9:15:00   [只看該作者]

我的是VC++程序,在程序里如何判斷錯誤檢測事件?如果修改COM組件CAN_API_DLL.h的話您能幫忙改下么?還是需要我自己去改。
if (WAIT_OBJECT_0 == WaitForSingleObject(self->m_hErrEvent,1000) )//modify20160309
{
bResult = CAN_GetError( self->m_hCAN, &ErrorCode );
dwECCRegCode = CAN_GetECCReg( self->m_hCAN );

if( bResult )
{
self->OnError(ErrorCode, dwECCRegCode);
flagcan_set=0;//CAN通訊異常
}
else
{
flagcan_set=1;//CAN通訊正常(沒有錯誤事件時)

}


}
那如何判斷CAN通訊中斷?CAN通訊錯誤事件包括什么事件?代碼都是多少?


  單帖管理 | 引用 | 回復 回到頂部
客人
5樓


  發帖心情 Post By:2016-4-8 9:38:00   [只看該作者]

如果你是用VC++編程,建議你參考我們的C例程,用COM組件來調用會比較復雜,不推薦。

就你貼出來的代碼,if條件成立就表示收到錯誤事件了,當出現CAN報錯,最好都重置一下CAN。


  單帖管理 | 引用 | 回復 回到頂部
帥哥喲,離線,有人找我嗎?
yy
6樓 信息 | 搜索 | 郵箱


加好友 發短信
  發帖心情 Post By:2016-4-8 9:39:00   [只看該作者]

下面是CAN的報錯事件,及錯誤代碼

CAN_NO_ERROR                               (0)         // Last operation successful
CAN_ERR_MOPS_CREATE                  (-1)        // Mutex Creation failed
CAN_ERR_PA_VA_MISSING               (-2)        // Physical -> Virtual Mapping failed
CAN_ERR_EOPS_CREATE                   (-3)        // Event Creation failed
CAN_ERR_IRQ_SYSINTR_MISSING     (-4)        // IRQ -> System Interrupt ID Mapping failed
CAN_ERR_INT_INIT                          (-5)        // Interrupt Initialization failed
CAN_ERR_WORKER_THREAD             (-6)        // Worker thread failed
CAN_ERR_NO_ACK_ISSUED              (-7)        // No Acknowledge Issued
CAN_ERR_NULL_BUF                         (-8)        // NULL Buffer
CAN_ERR_INVALID_BUFSIZE             (-9)        // Invalid Buffer Size
CAN_ERR_NULL_LPIRESULT               (-10)       // NULL lpiResult field
CAN_ERR_CLOCK_FAILURE               (-11)       // CRM Operation Failure
CAN_ERR_TRANSFER_TIMEOUT         (-12)       // CAN transmit timeout error
CAN_ERR_ARBITRATION_LOST          (-13)       // CAN arbitration lost error
CAN_ERR_TRANSFER_ERR                (-14)       // CAN goto an undefined error
CAN_ERR_BIT0                               (-15)       // At least one bit sent as dominant is received as dominant
CAN_ERR_BIT1                               (-16)       // CANAt At least one bit sent as dominant is received as recessive
CAN_ERR_ACK                                (-17)       // CAN Acknowledge Error has been detected by the transmitter node
CAN_ERR_CRC                                (-18)       // CRC Error has been detected by the receiver node
CAN_ERR_FRM                                (-19)       // CAN Form Error has been detected by the receiver node
CAN_ERR_STF                                (-20)       // CAN Stuffing Error has been detected
CAN_ERR_BUF_FULL                       (-21)       // CAN Ring Buffer is full

  單帖管理 | 引用 | 回復 回到頂部
客人
7樓


Can接受數據  發帖心情 Post By:2016-4-8 10:16:00   [只看該作者]

如果想知道CAN接收到數據時顯示一個狀態;CAN沒有收到數據時顯示另外一個狀態。可以按照我開始寫的那個返回值為真時設置一個標志位;else返回值為假時設置一個標志位么?

  單帖管理 | 引用 | 回復 回到頂部
客人
8樓


如何判斷CAN是否接受到數據  發帖心情 Post By:2016-4-8 14:17:00   [只看該作者]

我在判斷沒有接收到數據的else里面加了標志位以后,即使有數據已進入else語句,不知道為什么。

  單帖管理 | 引用 | 回復 回到頂部
客人
9樓


如何重置CAN?  發帖心情 Post By:2016-4-11 9:44:00   [只看該作者]

請問如果CAN出錯了怎樣進行重置?

  單帖管理 | 引用 | 回復 回到頂部
帥哥喲,離線,有人找我嗎?
yy
10樓 信息 | 搜索 | 郵箱


加好友 發短信
  發帖心情 Post By:2016-4-11 11:38:00   [只看該作者]

主要是看程序的邏輯怎么寫。

如果是我們的例程,當CAN有數據收到時,會將數據放入驅動的一個BUFFER里,然后會產生一個事件通知上層應用程序,例程接收到這個事件后,會循環調用CAN_GetNextReceivedFrame,將BUFFER里所有的數據都都出來顯示,如果按你的改發,讀前面包時flagcan被設成1,讀完所有包后flagcan被設成0,讀包是非常快的,所以flagcan基本一直都是0,所以我認識這個邏輯是不行的。

CAN出錯后請調用我們提供的接口,重置下CAN就行了,stopchip和startchip,例程里有。

  單帖管理 | 引用 | 回復 回到頂部
客人
11樓


如何判斷CAN什么時候接收到數據,什么時候沒有接收到數據呢?  發帖心情 Post By:2016-4-12 7:29:00   [只看該作者]

您好?您說的我的邏輯有問題,那您能給我提示下應該用什么標志位或者邏輯來進行判斷CAN通訊成功和異常么?或者說想判斷什么時候CAN收到數據,什么時候CAN沒有收到數據?

  單帖管理 | 引用 | 回復 回到頂部
帥哥喲,離線,有人找我嗎?
yy
12樓 信息 | 搜索 | 郵箱


加好友 發短信
  發帖心情 Post By:2016-4-12 9:30:00   [只看該作者]

在CAN沒有報錯的時候,應該認為通信沒有問題。當有CAN數據收到時,上層應用能收到CAN事件,收到事件就表示有數據收到,其它時候表示沒有數據通信。

  單帖管理 | 引用 | 回復 回到頂部
客人
13樓


您好,您說的上層接收到的CAN接收事件是自己定義的還是程序中的m_hRxEvent?  發帖心情 Post By:2016-4-12 10:07:00   [只看該作者]

如何判斷?多謝了。

  單帖管理 | 引用 | 回復 回到頂部
帥哥喲,離線,有人找我嗎?
yy
14樓 信息 | 搜索 | 郵箱


加好友 發短信
  發帖心情 Post By:2016-4-12 10:58:00   [只看該作者]

可以參考程序中的代碼。

我們驅動的接口及注釋在can_api.h里面,你可以看到CAN_GetRxEvent這個函數,這個函數就是獲得驅動創建的CAN接收事件,當CAN驅動接收到數據后,會激活這個event。

在例程中,我們將CAN又封裝了一次,代碼在EM9000_CAN.cpp里面,你可以看代碼就知道例程是如何調用can_api.h里的接口的。在打開CAN的時候,調用的StartCan里面調用CAN_GetRxEvent獲得了CAN接收事件,然后在接收線程ReadThreadFunc里面,調用的WaitForSingleObject去等待這個事件。當等到這個事件時,就能判斷有CAN數據接收

CAN錯誤事件同理,和CAN接收事件原理一樣的。



  單帖管理 | 引用 | 回復 回到頂部
帥哥喲,離線,有人找我嗎?
yy
15樓 信息 | 搜索 | 郵箱


加好友 發短信
  發帖心情 Post By:2016-4-12 11:00:00   [只看該作者]

如果你用C來編程,看C的例程應該很清晰些。

C例程還封裝了一個CAN的類,而動態鏈接庫里是直接調用的CAN驅動接口,沒有封裝類。

  單帖管理 | 引用 | 回復 回到頂部
客人
16樓


CAN通訊速率問題  發帖心情 Post By:2016-4-13 15:28:00   [只看該作者]

就是在接受CAN口調試器發送的數據時,發送周期設置為20ms時,數據有很大的延遲,不知道是什么原因?CAN口發送數據以及讀寫的速度不是很快的么?

  單帖管理 | 引用 | 回復 回到頂部
帥哥喲,離線,有人找我嗎?
yy
17樓 信息 | 搜索 | 郵箱


加好友 發短信
  發帖心情 Post By:2016-4-13 16:01:00   [只看該作者]

因該沒有多大延遲的。收到接收事件后,需要將BUFFER里的包全部讀出來,你再測試下,你的延遲有多少呢?

  單帖管理 | 引用 | 回復 回到頂部
客人
18樓


發送周期500ms時能捕捉到數據,發送周期為20ms時大概延時0.5-1s  發帖心情 Post By:2016-4-14 8:15:00   [只看該作者]

發送周期500ms時能捕捉到數據,基本上是實時顯示,延時時間不長,發送周期為20ms時大概延時0.5-1s,有明顯延遲,如果接相關傳感器的話是接收不到數據的,難道是協議有問題?但是為什么用CAN口調試工具就可以接收數據啊?

  單帖管理 | 引用 | 回復 回到頂部
帥哥喲,離線,有人找我嗎?
yy
19樓 信息 | 搜索 | 郵箱


加好友 發短信
  發帖心情 Post By:2016-4-14 9:26:00   [只看該作者]

應該是代碼處理邏輯問題,延遲幾ms最多幾十ms是正常的,0.5秒太長,不可能。

之前出現過這樣的錯誤,在接收到event事件后,只讀了一幀出來,同時收到的其它幀得等到下次event才接收。

你檢查下代碼有沒有我說的這個問題,按我上個回復里來寫“收到接收事件后,需要將BUFFER里的包全部讀出來”

  單帖管理 | 引用 | 回復 回到頂部

返回首頁

EM9000CAN通訊問題

用戶名:
            驗證碼: 驗證碼,看不清楚?請點擊刷新驗證碼
內容:
主站蜘蛛池模板: 黄色a毛片| 男女又黄又刺激黄a大片桃色| 五月天婷婷在线视频国产在线| 日本www黄| 欧美女同视频激情| 国产精品亚洲精品爽爽| 1000部拍拍拍18免费网站| 国内拍拍自拍视频在线观看| 色偷偷女男人的天堂亚洲网| 夜色成人免费观看| 一级一级一级毛片免费毛片| 日韩专区一区| 亚洲 欧美 清纯 校园 另类| 自拍偷拍国语对白| 国产精品夜色视频一级区| 91精品国产免费久久久久久青草| 国产一精品一av一免费爽爽| 免费vip影院| 亚洲成人第一页| 成人黄色一级片| 日韩欧美一及在线播放| 亚洲欧美日韩国产一区图片 | 黄色网址在线免费看| 国产成人性毛片| 国产又色又爽又黄的网站在线一级| 日本高清另类videohd| 午夜国产片| 亚洲国产成人影院播放| 亚洲一区二区三区高清视频| 91在线看| 日本黄色免费网站| 老司机美女一级毛片| 在线视频观看你懂的我的| 明星换脸高清一区二区| 日本护士做xxxxxx视频| 日日a.v拍夜夜添久久免费| 亚色在线| 忘忧草综合久久综合88亚洲| 亚洲国产区| 午夜特片网| 桃花综合|