Uploaded by jhryu7887

CAPL 1 CANNewsletter 201406 PressArticle KO

advertisement
기술 기사
ECU 테스트를 더욱 효과적으로 프로그래밍하기 –
CAPL 활용의 기초, 팁과 트릭
CAPL 은 벡터에서 개발된 프로그래밍 언어로서, 널리 사용되고 있는 소프트웨어 툴인 CANoe 와
CANalyzer 에서 지원된다. 3 개의 연속 기사에서 모든 수준의 사용자 이해를 돕기위해 CAPL 의
기본뿐 만 아니라 팁과 트릭을 다룰 예정이다.
첫 번째 파트에서는 CAPL 의 기초를 집중적으로 다룬다. CAPL 을 처음 사용하는 사람들을 주
대상으로 하지만 이미 CAPL 을 알고 있는 사용자들에게도 개별적인 CAPL 구조를 넘어서는 부분에
대한 동기부여를 통해 약간의 이해를 제공할 것이다. 두 번째 파트는 CAPL 의 고급 기능에 대해서
다룬다. 마지막으로 세 번째 파트는 성능과 메모리 요구에 대해 언급하며 데이터베이스와
associative array 의 사용에 관한 팁과 트릭을 제공한다.
Part 1: CAPL 기초
CAPL 은 20 년 이상 (CAPL 은 DOS 용 CANalyser 에서 최초로 사용됨) 간단한 신호 생성에서 복잡한
버스 노드의 시뮬레이션에 이르는 광범위한 작업을 효율적으로 구현하는 데 사용되어 왔다. 이후로
CANoe 와 CANalyzer 2 개의 제품을 CANoe 로 예를 들어 지칭하겠다. 특정 작업을 가능한 한
단순하게 해결하는 것이 CAPL 의 일관된 목표였다. 대표적인 수행되는 작업은 수신된 메시지에
대해 특정 동작을 하거나, 시그널값을 체크하고 설정하고 메시지를 송신하는 것이다. 프로그램은
이러한 작업에 정확하게 제한되어야 하고, 추가적인 오버헤드를 필요하지 않아야 한다.
물론 많은 경우가 그렇게 단순한 형태는 아니지만, CANoe 사용자들이 일반적으로 수행하는 많은
프로그래밍 작업은 실제로 아래 제시된 예제와 같이 단순하고 사소한 형태일 것이다. 이것이
"최대한 단순화"라는 원칙에 따라 복잡한 작업을 해결할 수 있는 툴로서 CAPL 이 수년 동안
지속적해서 확장되어온 이유이다.
ECU 테스트를 더욱 효과적으로 프로그래밍하기 –CAPL 활용의 기초, 팁 과 트릭
1/6
기술 기사
"CAPL"은 “Communication Access Programming Language”의 약어이다. CAN 에 집중한 초기
버전은 오랜 기간에 걸쳐 차량용 버스 시스템인 LIN, FlexRay, MOST, J1587 뿐만 아니라 ARINC 및
CANopen 까지 확장되어왔다.
다른 많은 언어와 마찬가지로 CAPL 은 C 언어의 문법에 상당한 바탕을 두고 있다. C, C# 혹은
다양한 최신 스크립트 언어에 익숙한 사용자는 빠르게 CAPL 사용에 친숙해진다. 하지만 C
프로그램과 CAPL 프로그램이 대별되는 몇 가지 독특한 특성이 있다:
•
CAPL 은 "event-driven"방식이다. 프로그램은 개별 함수로 구성되어 있고, 각 함수가 메시지의
수신, 신호의 변화, 타이머 만료 및 "환경"의 변화 등과 같이 분석대상인 시스템 내에서 발생하는
이벤트에 따라 동작하는 것을 의미한다. 예를 들어 "EngineState" 메시지에 대응하기 위해서는 "On
message EngineState”를 사용할 것이다. (그림 1)
•
CAPL 프로그램은 분석 대상 시스템의 컨셉에 대해 특화된 데이터베이스를 사용한다. 메시지와
시그널은 데이터베이스 내에서 개별적인 이름을 가지며, 프로그램 코드에서 이를 직접 사용할 수
있다. 그림 1 에서 메시지에 대해 "EngineState"와 이 메시지 내의 시그널에 대해 "EngineSpeed"가
이에 해당한다.
•
CAPL 은 "포인터 타입"을 지원하지 않는다. 이 때문에 C 언어에서 자주 발생하는 수많은 잠재적
프로그래밍 오류와 프로그램의 충돌을 근본적으로 예방한다. 하지만 에러가 발생하기 쉬운 특성을
논외로한다면 포인터는 아주 강력한 컨셉을 제공하기 때문에 CAPL 에서도 예를 들면 동적 메모리
대신에 associative array 와 같은 몇몇 기능에 대한 대안을 제공하고 있다.
CAPL 과 C 언어가 공유하는 중요한 특징 중 하나는 항상 컴파일되는 것이다. 즉, 효율적인
실행코드와 유연한 머신 코드로 변환된다.
예제: 간단한 CAPL 프로그램
여기서는 간단한 CAPL 프로그램을 제시하였다(그림 1). 이 예제는 버스 모니터링 툴의 기본 기능 중
하나인 버스 상의 트래픽을 수신하고 사용자에 의해서 관측 및 모니터링되는 버스 상의 몇 개의
이벤트를 대비하는 기능을 수행한다. 본 예제는 생략된 샘플 CANoe 프로그램이다(Easy.cfg 샘플의
ECU 테스트를 더욱 효과적으로 프로그래밍하기 –CAPL 활용의 기초, 팁 과 트릭
2/6
기술 기사
Display.can). 그림 1 이 예제 프로그램에 해당한다. 이후로 전체 기능을 간략하게 요약하고, 영역별에
대해서 상세하게 설명하겠다.
1.
variables
2.
3.
{
const long kOFF = 0;
4.
const long kON = 1;
5.
6.
}
7.
8.
on message EngineState {
@sysvar::Engine::EngineSpeedDspMeter = this.EngineSpeed / 1000.0;
9.
}
10.
11.
on message LightState {
12.
if (this.dir == RX) {
13.
14.
SetLightDsp(this.HeadLight,this.FlashLight);
} else {
15.
16.
17.
write("Error: LightState TX received by node %NODE_NAME%");
}
}
18.
19.
20.
SetLightDsp (long headLight, long hazardFlasher) {
long tmpLightDsp;
21.
22.
23.
tmpLightDsp = 0;
if(headLight == kON)
24.
tmpLightDsp = 4;
25.
26.
if(hazardFlasher == kON)
tmpLightDsp += 3;
27.
@sysvar::Lights::LightDisplay = tmpLightDsp;
28.
}
그림1: 간단한 CAPL 프로그램 예제
작업 설명
•
데이터베이스에 기술된 CAN 버스의 모든 요소, 즉 버스 노드, 메시지와 전송 시그널을 관측한다.
•
EngineState 메시지가 수신되면, 이 메시지에 포함된 EngineSpeed 시그널을 디스플레이 패널에
표시하기 위해 신호 처리를 수행한 후 시그널이 패널로 연결된다.
•
LightState 메시지가 수신되면, 이 메시지에 포함된 HeadLight 와 FlashLight 시그널을
디스플레이 패널에 표시하기 위해 신호 처리를 수행한 후 시그널이 패널로 연결된다.
ECU 테스트를 더욱 효과적으로 프로그래밍하기 –CAPL 활용의 기초, 팁 과 트릭
3/6
기술 기사
프로그램의 상세 설명
행번호는 CAPL 프로그램 일부분이 아니며, 각 행과 구역에 대한 참조를 용이하게 하기 위해
추가되었다. 여기에서는 컴팩트한 표현을 위해 중괄호를 별도의 행에 배치하지는 않았다.
CAPL
프로그램에서는
전역
변수와
상수를
정의할
수
있다.
이는
"variables"
영역에서
이루어진다(1~5 행). 이 상수와 변수는 이 프로그램에서 전역으로 정의되며 프로그램의 모든 곳에서
사용이 가능하지만 CANoe 의 다른 프로그램에서는 사용할 수 없다. 다른 영역은 이벤트에 대한
처리(7~17 행)와 보조 함수(19~28 행)를 정의하고 있다.
7~9 행에서는 최소 형태의 메시지 이벤트 처리를 보여준다. 이 함수는 이 메시지가 버스 상에
전송될 때마다 호출된다. CAN 통신의 경우, 이에 대한 정확한 시점은 CAN 컨트롤러의 TX 혹은 RX
인터럽트 시점, 즉 메시지의 정확한 전송 완료 직후에 해당한다. 이벤트 내에서 메시지 명은
“this“라는 문법으로 사용된다.
8 행에서는 EngineSpeed 시그널의 값은 수신된 메시지(this)로부터 읽히며, 시그널 변환(/1000.0)을
거쳐 시스템 변수에 할당된다.
11~17 행은 LightState 메시지에 대해 메시지 이벤트 처리를 보여 주며, 여기에서 방향지시등과
관련된 정보를 송신하게 된다. 이에 대한 처리는 다음 설명할 내용을 제외하고는 앞서 설명한
EngineState 메시지의 처리 방법과 유사하다. 12 행에서 전송된 메시지의 방향 플래그(.dir)를
검사한다. 이 프로그램에서는 수신된 메시지(값이 RX)만을 처리하여야 한다. 노드에서 송신된
메시지(값이 TX)에 의해서도 이벤트가 트리거되기 때문에, 이 경우 15 행에서 오류 메시지가 출력될
것이다.
ECU 테스트를 더욱 효과적으로 프로그래밍하기 –CAPL 활용의 기초, 팁 과 트릭
4/6
기술 기사
유저 인터페이스의 표시를(시그널의 값에 따라 Bitmap 을 변경하는 패널) 위한 시그널의 처리는
다소 복잡하기 때문에, 이에 대한 구현은 별도의 함수로 분리하였으며 13 행의 SetLightDsp 함수는
2 개의 메시지 시그널을 인자로 하여 호출된다.
마지막으로 19~28 행은 송신된 시그널의 값에 따라 Lights 네임스페이스의 시스템 변수
LightDisplay 에 다른 값을 쓰는 별도의 함수를 정의하고 있다. 본 데모 구성에서는 이 변수에 의해
디스플레이 패널에서 적절한 Bitmap 이 선택된다.
[독자를 위한 CAPL 에 대한 소개]
CAPL 은 C 언어와 유사한 프로그래밍 언이이며, Vector Informatik 에 의해
개발되었다. 프로그램 블록의 실행은 이벤트에 의해 제어된다. 전용 브라우저
내에서 CAPL 프로그램을 개발하고 컴파일한다. 이를 통해 데이터베이스 내에
포함된 오브젝트(메시지, 시그널, 환경변수)뿐만 아니라 시스템 변수에 접근할
수 있다. 또한 CAPL 에는 개발/평가/시뮬레이션 툴인 CANoe 와 CANalyzer 를
다루기 위한 미리 정의된 많은 수의 함수가 제공된다.
독일 출판물 CAN Newsletter 2014 년 2 월호 CAPL 관련 기사 번역판
링크:
벡터 홈페이지: www.vector.com
저자:
Marc Lobmeyer (Dipl.-Inf.)
1994 년부터 Vector Informatik 에서 CANoe 와 CANalyzer 의 개발자로 근무하고 있다.
ECU 테스트를 더욱 효과적으로 프로그래밍하기 –CAPL 활용의 기초, 팁 과 트릭
5/6
기술 기사
Roman Marktl (Dipl.-Ing)
2012 년부터 Vector Informatik 에서 CANoe 와 CANalyzer 의 Product Manager 로 근무하고 있다.
본 자료 배포시 최종 인쇄물을 당사에 보내주시면 감사하겠습니다.
배포와 관련하여 문의사항이 있으시면 언제든지 연락주시기 바랍니다.
벡터코리아 편집자 연락처:
마케팅팀 전은영
서울특별시 용산구 한남대로 11 길 12 고뫄스빌딩 5 층
Tel. 02-807-0600 Ext.5014, Fax. 02-807-0601
E-mail: eunyoung.jeon@vector.com
ECU 테스트를 더욱 효과적으로 프로그래밍하기 –CAPL 활용의 기초, 팁 과 트릭
6/6
Download