Study/C#(Window programming)

PCAN USB 연결/해제 하기

Answer Choi 2021. 9. 2. 17:59
반응형

C#을 이용하여 PCAN으로 데이터를 읽어와서 UI로 뿌려주는 예제입니다.

 

peak-can 사이트에 가시면 간단한 API 소스를 다운받을 수 있는데 

 

특정 Msg만 가져와서 UI로 뿌려보겠습니다.

 

우선 API를 다운 받으셔서 PCANBasic.cs파일을 추가해 주셔야합니다.

 

 

UI는 위와 같이 배터리 SOC를 쉽게 알아볼 수 있도록 UI를 만들었습니다.

 

Initialize가 PCAN을 연결하는 것이고, Release는 연결을 해제하는 버튼입니다.

 

1.연결하기

 

연결시의 코드입니다.

TPCANStatus stsResult;           
strMsg = new StringBuilder(256);           
m_PcanHandle = PCANBasic.PCAN_USBBUS1;
try{
	stsResult = PCANBasic.Initialize(m_PcanHandle, TPCANBaudrate.PCAN_BAUD_500K);
    if (stsResult != TPCANStatus.PCAN_ERROR_OK) //error{                    
    	PCANBasic.GetErrorText(stsResult, 0, strMsg);
      	statusText.Text = strMsg.ToString();               
    }
    else{  //no error                   
    	conn_Btn.Enabled = false;
      	releaseBtn.Enabled = true;
      	statusText.Text = "PCAN Connected";
      	timer1.Enabled = true;
    }
}catch(Exception ex)
{
	statusText.Text = "PCAN driver not installed";
}

m_PcanHandle은 TPCANHandle로 PCANBasic.cs에 정의되어 있으며, 연결할 PCAN의 종류를 정의하는 것입니다.

 

저는 PCAN-USB를 사용하므로 m_PcanHandle에 PCAN_USBBUS1을 넣었습니다.

 

initialize할땐 PCAN종류와 속도를 넣어주면 되는데, Initialize후 결과값을 받아오게 됩니다.

 

public static TPCANStatus Initialize(
TPCANHandle Channel,
TPCANBaudrate Btr0Btr1)
{
	return Initialize(Channel, Btr0Btr1, (TPCANType)0, 0, 0);
}

연결 후 결과값이 정상이면 연결성공을 실패면 연결 실패의 오류 원인을 화면에 뿌려주도록 하였습니다.

 

예외처리를 한 이유는 앱이 배포될 때에 pcan 드라이버가 설치되어 있지않으면 실행이 안되기 때문에

 

오류가 나는 것을 방지하기 위해 예외처리를 하였습니다.

 

2.해제하기

 

해제도 마찬가지로 연결과 비슷합니다.

 

TPCANStatus result;
	result = PCANBasic.Uninitialize(PCANBasic.PCAN_USBBUS1);
	strMsg = new StringBuilder(256);
if (result != TPCANStatus.PCAN_ERROR_OK){
    PCANBasic.GetErrorText(result, 0, strMsg);
    strMsg = new StringBuilder(256);
    statusText.Text = strMsg.ToString();
}else{
    conn_Btn.Enabled = true;
    releaseBtn.Enabled = false;
    statusText.Text = "PCAN not connected";
    timer1.Enabled = false;
}

해제시에도 연결한 PCAN_USBBUS1을 해제 후 결과값을 받아 정상 해제되었는지를 확인합니다.

 

해제 실패시에는 UI에 뿌려주도록하였습니다.

 

이상입니다.

반응형