어떻게 VC 에서 USB - CAN II 인터페이스 카드 를 사용 하여 CAN 통신 을 조작 합 니까

3919 단어
광저우 치 원 전자의 USB - CAN II 인터페이스 카드 는 비교적 보편적 인 CAN 채집, 테스트 도구 로 CAN 과 관련 된 개발 에서 이 장 비 를 자주 사용 합 니 다.그러나 어떻게 VC 에서 이 장치 가 제공 하 는 API 를 호출 합 니까?사실 아주 간단 합 니 다. API 소개 및 사용 매 뉴 얼 은http://www.embedcontrol.com/products/PCI/USBCAN.asp이 인터넷 주 소 는 찾 을 수 있 습 니 다. 여 기 는 사용 예시 만 소개 합 니 다.
1 USB - CAN II 장치 연결
예제 코드 는 다음 과 같다.
void Ctbox_CarSimulatorDlg::OnBnClickedBtConnect()
{
	// TODO: Add your control notification handler code here
	if(m_connect ==true){	//      
		m_connect =false;
		Sleep(500);
		GetDlgItem(IDC_BT_CONNECT)->SetWindowText("  ");
		VCI_CloseDevice(VCI_USBCAN2,0);
		return;
	}

	//     
	UpdateData(true);
	VCI_INIT_CONFIG init_config;
	memset(&init_config,0,sizeof(VCI_INIT_CONFIG));
	init_config.AccCode=0;					//   
	init_config.AccMask=0xffffffff;					//   
	init_config.Filter=1;				//    
	init_config.Mode=0;						//  
	init_config.Timing0=0;				//   0
	init_config.Timing1=0x1c;				//   1

	//    
	if(VCI_OpenDevice(VCI_USBCAN2,0,0)!=STATUS_OK)
	{
		MessageBox("      !","  ",MB_OK|MB_ICONQUESTION);
		return;
	}
	//   CAN
	if(VCI_InitCAN(VCI_USBCAN2,0,m_channel_sel,&init_config)!=STATUS_OK)
	{
		MessageBox("   CAN  !","  ",MB_OK|MB_ICONQUESTION);
		VCI_CloseDevice(0,0);
		return;
	}
	//  CAN
	if(VCI_StartCAN(VCI_USBCAN2,0,m_channel_sel)!=1)
	{
		MessageBox("  CAN  !","  ",MB_OK|MB_ICONQUESTION);
		VCI_CloseDevice(0,0);
		return;
	}
	m_connect=1;
	GetDlgItem(IDC_BT_CONNECT)->SetWindowText("  ");
}
주: 여기, 타이머 0 은 0 이 어야 합 니 다. 타 이 머 는 0 x1c 로 장 치 를 해 야 PC 에서 정상적으로 작 동 할 수 있 습 니 다. 그렇지 않 으 면 전송 인 터 페 이 스 를 호출 할 때 항상 오 류 를 되 돌려 줍 니 다.
2. CAN 메시지 보 내기
VCI_CAN_OBJ frameinfo;

frameinfo.DataLen =8;
frameinfo.RemoteFlag =0;
frameinfo.ExternFlag =0;
frameinfo.SendType =0;
frameinfo.ID =CAN_ID_LOCK;
frameinfo.Data[1] =lock;
VCI_Transmit(VCI_USBCAN2,0,dlg->m_channel_sel,&frameinfo,1);
3. CAN 소식 수신
CAN 메 시 지 를 받 는 것 은 일반적으로 하나의 스 레 드 를 통 해 이 루어 집 니 다. 다음 과 같 습 니 다.
UINT Ctbox_CarSimulatorDlg::ReceiveThread(void * param)
{
	Ctbox_CarSimulatorDlg *dlg =(Ctbox_CarSimulatorDlg *)param;

	VCI_CAN_OBJ frameinfo[50];
	VCI_ERR_INFO errinfo; 
	int len=1; 
	int i=0; 
	while(1){
		Sleep(100);
		if(!dlg->m_connect){
			continue;
		}
		len=VCI_Receive(VCI_USBCAN2,0,dlg->m_channel_sel,frameinfo,50,200);  
		if(len<=0){
			//  :                          ,  
            //         (               )  
            VCI_ReadErrInfo(VCI_USBCAN2,0,dlg->m_channel_sel,&errinfo); 
		}
		else{
			//    
			for(i=0;im_remote_control_page.SetStatus(frameinfo[i].ID,8,frameinfo[i].Data);
					break;	
				default:
					break;
				}
			}
		}

	}
	return 0;
}
대화 상자 의 초기 화 함수 에서 이 수신 스 레 드 를 시작 합 니 다:
AfxBeginThread(ReceiveThread,this);
4 리 셋 CAN
void Ctbox_CarSimulatorDlg::OnBnClickedBtReset()
{
	// TODO: Add your control notification handler code here
	if(m_connect==0){
		AfxMessageBox("    !",0);
		return;
	}
	//  CAN
	if(VCI_ResetCAN(VCI_USBCAN2,0,m_channel_sel)!=1)
	{
		AfxMessageBox("    ",0);
	}
	//  CAN
	if(VCI_StartCAN(VCI_USBCAN2,0,m_channel_sel)!=1)
	{
		MessageBox("  CAN  !","  ",MB_OK|MB_ICONQUESTION);
		VCI_CloseDevice(0,0);
		return;
	}
	AfxMessageBox("    ",0);	
}
5 기타
프로젝트 에는 SDK 에서 lib 파일 과 두문 을 제공 해 야 합 니 다.
VS 2010 프로젝트 속성 페이지 의 Linker - > Input - > Addtional Dependencies 란 에 다음 과 같이 설정 할 수 있 습 니 다. / controlCAN. lib;%(AdditionalDependencies)
그리고. cpp 파일 에 두문 을 포함 합 니 다:
#include "ControlCAN.h"
마지막 으로 USB - CAN II SDK 에서 제공 하 는 ControlCAN. dll 및 kerneldls 폴 더 를 프로젝트 디 렉 터 리 에 복사 해 야 프로그램 이 정상적으로 실 행 될 수 있 습 니 다.
위의 예시 코드 와 같이 USB - CAN II 장 치 를 조작 할 수 있다.

좋은 웹페이지 즐겨찾기