요즘 CAN 통신으로 장비를 제어할 일이 좀 생겨서 Ixxat 社의 USB-to-CAN 장비를 사용하게 되었다.
외형은 아래와 같다.
이 장비는 윈도우 뿐 아니라 리눅스, RTOS등 다양한 OS를 지원하기때문에 사용하기 편리한데,
프로그램을 작성하기 위해서는 약간의 학습 곡선이 필요하다.
드라이버 및 SDK 설치
일단 장비 사용을 위한 드라이버를 설치하기 위해 아래 링크에서 윈도우 11, 10용 VCI V4 드라이버를 다운로드 한다.
설치하는 도중 SDK를 설치하기 위해 다음 항목을 추가 선택한다.
- SDK VCI4 (.NET)
장비 사용 확인
설치가 완료되면 일단 장비가 잘 동작하는지를 확인하기 위해 canAnalyser3 Mini 프로그램을 열어서 CAN 메세지를 확인한다.
자세한 사용 방법은 매뉴얼을 참조 할 것.
샘플 코드
.NET용 샘플 코드는 아래 위치에 존재한다.
C:\Users\Public\Documents\HMS\Ixxat VCI 4.0\Samples\dotnet
프로그래밍 매뉴얼은 아래 위치의 pdf 문서를 참조한다.
C:\Program Files\HMS\Ixxat VCI\Manual\VCI-DotNetSoftwareDesignGuide_en.pdf
이 코드는 크게 다음의 4가지 서브 프로젝트를 포함한다.
- CanConNet
- CanFdConNet
- CanVbNet
- LinConNet
CanConNet 프로젝트는 장치를 125kbps로 열고 들어오는 메세지를 콘솔에 표시하는 간단한 프로그램이다.
이 프로그램에서는 다음 namespace를 참조한다.
CanConNet 클래스는 main 함수에서 다음과 같은 순서로 CAN 소켓을 열고 메세지 수신 쓰레드를 실행하게 된다.
SelectDevice();
InitSocket(0)
rxThread = new Thread(new ThreadStart(ReceiveThreadFunc));
rxThread.Start();
이 프로젝트를 실행하기 위해서는 빌드 설정을 Debug 대신 Release 로 변경하고 실행하면 정상적으로 실행된다.
비쥬얼 스튜디오 프로젝트 만들기
WPF 프로젝트를 하나 만들고
- NuGet Package 설치
IXXAT VCI는 NuGet 패키지를 지원하므로 NuGet 패키지 관리자를 통해 필요한 라이브러리를 추가할 수 있다.
Tools > NuGet Package Manager > Package Manager Console을 열고
나타나는 터미널 콘솔에서 다음을 입력하여 Ixxat.Vci4.StringName 패키지를 설치한다.
> Install-Package Ixxat.Vci4.StrongName
프로그램에서 이 소켓 프로그램을 사용하기 위해서 위의 샘플 코드에 포함된 CanConNet.cs 파일을 일부 수정한 클래스 파일을 첨부한다.
사용 방법은 다음과 같다.
Forms1.cs 파일을 열고 using 항목에 다음을 추가한다.
Form1 클래스 선언부에 다음 전역변수를 추가한다.
Form1() 초기화 함수 부분에 can 포트의 동작 모드와 통신 속도를 선택하고 소켓을 열기 위해 다음 내용을 추가한다.
can.NewCanMessageEvent += 부분은 새로운 메세지가 들어오면 호출되는 콜백함수를 아래와 같이 등록한다.
소스 코드 다운로드
전체 코드는 다음 깃허브 페이지에서 다운로드 하기 바랍니다.
https://github.com/kyuhyong/usbcan_net
개발 환경은 Visual Studio 2019 Community Edition에서 만들어졌습니다.