CANdevStudio는 CAN 네트워크를 구성하고 시뮬레이션 할 수 있는 오픈소스 크로스 플랫폼 CAN 시뮬레이션 소프트웨어다. CANdevStudio 를 사용하여 자동차의 점화 상태, 도어 상태 또는 후진 기어와 같은 CAN 신호를 시뮬레이션 할 수 있다.
CAN 하드웨어 인터페이스(예: Microchip, Vector, PEAK-Systems)와 함께 작동하거나 심지어 Linux에서는 내장 에뮬레이션으로(vcan 및 cannelloni) 실제 CAN 하드웨어없이도 사용할 수 있다.
CANdevStudio의 CAN 버스에 대한 액세스는 Qt 프레임 워크를 기반으로한다. Linux의 SocketCAN 내장 에뮬레이션 덕분에 실제 CAN 하드웨어 없이도 사용할 수 있으며 Qt의 SocketCAN 플러그인은 CAN 장치에 액세스하기위한 Linux 소켓 API를 캡슐화한다. 현재 지원되는 Qt CAN 인터페이스 목록은 여기에서 찾을 수 있다.
SocketCAN 과 호환되는 장치 목록 (Linux 만 해당)은 여기에서 찾을 수 있다.
여기서는 리눅스에서 가상 CAN 버스를 설정하여 간단하게 사용해본다. SocketCAN 을 백엔드를 사용하므로 CAN 하드웨어가 필요하지 않다.
SocketCAN 을 사용하려면 해당 Linux 커널 모듈을 로드하고 네트워크 인터페이스를 구성해야한다. 다음의 명령을 차례로 실행한다.
sudo modprobe vcan sudo ip link add dev can0 type vcan sudo ip link set can0 up
다음의 주소에서 미리 빌드된 리눅스용 CANdevStudio를 다운로드 받을 수 있다.
https://github.com/GENIVI/CANdevStudio/releases
압축을 풀고 CANdevStudio.sh 를 실행하여 애플리케이션을 실행한다.
이제 새 프로젝트를 선택한다.
Device Layer 에서 CanDevice를 드래그하여 오른쪽에 추가하고 Raw Layer 에서 CanRawSender, CanRawView 를 각각 드래그하여 추가하고 다음과 같이 각 블럭을 연결한다.
CanDevice를 마우스 오른쪽 버튼으로 클릭하여 Properties 설정에서 다음과 같이 구성한다.
backend : socketcan
interface : can0
CanRawSender 를 열고 + 버튼을 클릭하여 ID, 데이터, 루프, 간격과 같은 영역을 채운다. 루프를 사용하지 않는 경우 매번 수동으로 전송 버튼을 눌러야한다.
시뮬레이션 ▶(Play) 버튼을 클릭하고 CanRawView 에서 결과를 볼 수있다.
장치가 활성화되면 사용할 수 있는 여러 유틸리티가 있다. Ubuntu에서 유틸리티를 사용하려면 다음의 명령줄로 can-utils를 설치해야 한다.
sudo apt-get install can-utils
설치가 완료되면 candump 를 실행하여 버스의 메시지를 실시간으로 확인할 수 있다. can0 기기에서 모든 트래픽을 실시간으로 표시하려면 다음과 같이 할 수 있다.
candump can0
▲ 시뮬레이션 시작과 함께 can0 의 메세지를 확인 할 수 있다.
프로그램 종료 후 실제 CAN 장치를 추가한 후 가상장치와 함께 구성하여 시뮬레이션 해본다.
시뮬레이션을 시작하면 실제 장치에서도 메시지를 잘 받고 있다.
더 많은 가상장치 또는 실제 장치와 함께 CAN 네트워크를 시뮬레이션하고 응용프로그램 개발에 활용할 수 있다.