Uploaded by jhryu7887

CAPL 2 CANNewsletter 201409 PressArticle KO

advertisement
기술 기사
ECU 테스트 효과적으로 프로그래밍하기 –
CAPL 활용의 기초, 팁과 트릭 (2 부)
본 기사의 1 부에서는 CAPL 프로그래밍 언어의 기본 개념을 다뤘다. 2 부에서는 이벤트 프로시저의
동작 시간에 관해 설명한다. 또한, "일반적인 프로그래밍" 및 "조건부 컴파일링"과 관련하여
사용자들이 CAPL 프로그램을 좀 더 효과적으로 사용할 수 있는 팁도 제시한다.
실행 모델
CAPL 언어와 C(혹은 C++) 언어의 주요 차이점은 프로그램 요소의 호출 시기와 방법에서 비롯된다.
예를 들어, C 언어의 경우 main() 함수에서부터 프로세스가 시작된다. 반면, CAPL 언어의 경우
프로그램이 동일한 시퀀스의 프로시저들로 구성되어 있으며, 각각의 프로시저는 다음과 같은 외부
이벤트의 종류에 따라 독립적으로 반응한다.

시스템에 의해 트리거되는 이벤트: 측정 시작 및 후처리에 필요한 이벤트(예. on preStart,
on start, on preStop, on stopMeasurement 등)와 시간 제어 및 키보드 이벤트(예. on
timer, on key 등)가 이 범주에 속한다.

버스 통신에 의해 트리거되는 이벤트: 통신 혹은 오류 처리와 관련된 버스 이벤트들에
반응하는 다양한 이벤트 프로시저들이 존재하며, 이러한 이벤트 프로시저들은 버스
프로토콜에 의해 결정된다. (예. CAN: on message, on busOff 등; FlexRay: on frFrame, on
frStartCycle 등)

변숫값에 의해 트리거되는 이벤트: CANoe 와 CANalyzer 에 공통으로 사용되는 시스템
변수 및 환경 변수, 그리고 버스 통신의 데이터 분석에 해당하는 시그널 값이 이 범주에
속한다. 전용 데이터베이스에서 데이터 분석을 실행하게 되는데, 이에 대한 자세한 내용은
본 자료의 3 부에서 다루게 된다.
ECU 테스트 효과적으로 프로그래밍하기 – CAPL 활용의 기초, 팁과 트릭 (2 부)
1/5
기술 기사
이벤트 프로시저는 최소 단위이다: CANoe 의 시뮬레이션 모델은 이벤트를 기반으로 한다. 이벤트
프로시저의 경우, CANoe 가 시뮬레이션 모델의 이벤트 실행 시점과 동시에 관련 이벤트가 트리거
된다. 이때, 사용 PC 상에서의 실제 계산 시간은 무시된다.
시뮬레이션 시간 및 타임 스탬프: output() 함수에 의한 버스 출력과 같은 PC 에서 생성되는 실제
이벤트에는 real-time clock 의 타임스탬프가 할당된다. 이러한 이벤트의 순서 및 시점은 버스
프로토콜, 드라이버 및 하드 웨어 속성에 따라 달라질 수 있다.
가상 버스 상에서 영향을 미치는 파라미터 일부분은 제거된다. 이 경우, 버스 이벤트들은 동시에
개시된다. 예를 들어, CAN 의 경우 output()에 의해 전송되는 복수의 메시지가 신뢰할 수 있는
아비트레이션(arbitration)을 거쳐 전송된다.
시스템 변수 업데이트: 사용자는 CAPL 을 이용하여 프로그램 밖에서 보이는 환경 변수나 시스템
변수를 변경할 수 있다. CAPL 의 경우, 현 이벤트 처리가 종료되기 전까지는 값 변경사항이 해당
변수에 적용되지 않는다. 동일한 프로시저 상에서 해당 변수가 새로운 값으로 설정되었다 할지라도,
현 프로시저 내에서 읽는 값은 여전히 이전 값을 리턴한다. 따라서 특정 시간에 오직 한 번의 값
변경이 발생하는 장점이 있다.
실행 모델은 환경 종속적이다. 다양한 방식으로 CAPL 언어를 CANoe 및 CANalyzer 에서 활용할 수
있기 때문에, 실행 모델도 종류가 다양하다: CANoe 의 시뮬레이션 노드는 버스와 병렬로
구성되므로, 각 노드는 다른 노드에 종속되지 않는다. 트리거된 이벤트는 항상 모든 프로그램으로
전송된다. 그에 반해, 측정 셋업과 CANalyzer 상에서의 노드는 순차적으로 처리된다: 각 노드는 다음
노드로 출력 값을 전달한다. 새로운 이벤트들은 추가 처리를 위해 반드시 바로 다음 노드로
전달되어야 한다. on * 및 on [*] 프로시저들이 그러한 용도로 제공된다.
또 다른 유형의 프로그램은 테스트 프로시저가 외부 이벤트를 대기할 수 있는 테스트 프로그램이다.
CAPL 은 이벤트의 시뮬레이션 시간을 기준으로 프로세스 실행을 재개한다. 그에 반해, 대기 중인
ECU 테스트 효과적으로 프로그래밍하기 – CAPL 활용의 기초, 팁과 트릭 (2 부)
2/5
기술 기사
일반적인 이벤트 프로시저의 대기 상태는 전체 시뮬레이션 시스템을 정지시킨다. 이는 CAPL 사용
시 발견되는 주요 오류이다. 따라서 외부 DLL 환경 하에서 wait 종류의 명령을 사용하는 것은
바람직하지 않다.
CAPL 에서 효율적인 프로그래밍하기
프리프로세서는 C 언어를 활용할 수 있는 효율적인 툴이지만, 동시에 혼란을 일으켜 오류가 발생할
수도 있다. 따라서 잘 알려지고 의미상으로 일관성을 갖는 C 프리프로세서 지시어들만이 CAPL 상에
제공된다.
#include: include 파일에는 임의적이지만 CAPL 프로그램의 모든 섹션(includes, variables 및
procedures)이 포함되어있다. C 언어와 달리, include 파일의 텍스트는 단순히 CAPL 파일에
삽입되지 않고, 섹션 별로 삽입된다. include 파일의 모든 섹션이 "마치" 상위 CAPL 파일에 포함된
것처럼 해당 CAPL 파일에 100% 적용된다. 이 때, CAPL 에서 섹션의 순서는 무관하다. 따라서
컴파일러는 모든 중복 기호를 오류로 보고한다. 게다가, Include 파일 및 상위 파일의 코드와
데이터가 서로 상호적으로 사용될 수도 있다. 이러한 중복 기호 오류가 발생하지 않는 예외 경우는
on start, on preStart, on preStop 및 on stopMeasurement 가 include 파일 및 상위 파일에
공존하는 경우이다. 해당 예외 함수의 경우, 코드가 지정된 순서대로 실행된다. 즉, include 파일의
코드 다음으로 상위 파일의 코드가 실행되는 구조이다. 그에 따라, include 파일을 사용하여 ‘데이터
유형 선언‘, ‘변수 정의‘, ‘함수 라이브러리 제공‘과 같은 세 가지 작업을 실행할 수 있다:
#pragma library: 적합한 CAPL DLL 인터페이스를 실행하는 한 CAPL 프로그램은 다른 언어에서
생성된 Windows DLL 을 사용할 수 있다. 이러한 DLL 은 지시어 #pragma library("capldll.dll") 에
바로 연결된다.
매크로: CAPL 에서는, 코드 또는 조건부 컴파일링에서 사용할 수 있는 많은 사전 정의 매크로들이
제공된다. 코딩용 매크로들은 별도의 제약 없이 코드 상에서 어디서나 사용할 수 있다. C 언어와
ECU 테스트 효과적으로 프로그래밍하기 – CAPL 활용의 기초, 팁과 트릭 (2 부)
3/5
기술 기사
달리, 매크로는 문자열 상수, 변수 식별자 및 함수명 내에서 자유롭게 사용할 수 있다. 해당
매크로에는 특수문자 ‘%’가 시작과 끝에 표시되며, 일반적인 프로그램 코딩 작업에 주로 사용된다.
사용 가능한 코드 매크로는 노드 명칭, 현 채널 인덱스, 현 네트워크 이름, 사용되고 있는 버스
유형을
포함한다.
해당
코드는
%FILE_NAME%
으로
포함하는
파일명에
접근하거나 %BASE_FILE_NAME% 을 사용하여 현재 컴파일된 프로그램 파일명에 접근할 수 있다.
include 파일의 경우, 후자가 상위 파일을 의미한다. 자세한 사항은 다음 두 예제를 참조한다.
write("The node name"" is %NODE_NAME%"); @Ch%CHANNEL% = 1;
코드 섹션의 조건부 컴파일링을 위해,
#if, #else, #elif, #endif 처럼 사정 정의된 별도의 매크로
세트가 있다. 프로그램상에서, 해당 매크로는 프로그램 유형 시뮬레이션 노드, 측정 노드, 테스트
프로그램, 사용되고 있는 CANoe 버전과 같은 변수들을 구분한다. #pragma message 를 사용하는
예시는 다음과 같다.
#if (TOOL_MAJOR_VERSION == 7 && TOOL_MINOR_VERSION == 5 && TOOL_SERVICE_PACK
< 2) || CANALYZER #pragma message("This program needs at least CANoe 7.5 SP 3")
#endif
#pragma message: #pragma message 지시어를 통해 사용자가 컴파일링 중에도 특정 메시지(예.
현재 컴파일링 중인 CAPL 프로그램의 버전 번호)를 출력할 수 있다. 또한, #pragma message
지시어는 컴파일러 메시지, 경고 메시지, 오류 메시지 등과 함께 표시된다.
독일 출판물 CAN Newsletter 2014 년 3 월호 CAPL 관련 기사 번역판
링크:
벡터 홈페이지: www.vector.com
ECU 테스트 효과적으로 프로그래밍하기 – CAPL 활용의 기초, 팁과 트릭 (2 부)
4/5
기술 기사
저자:
마크 롭메이어(Marc Lobmeyer)
로만 마르크트(Roman Marktl)
본 자료 배포시 최종 인쇄물을 당사에 보내주시면 감사하겠습니다.
배포와 관련하여 문의사항이 있으시면 언제든지 연락주시기 바랍니다.
벡터코리아 편집자 연락처:
마케팅팀 전은영
서울특별시 용산구 한남대로 11 길 12 고뫄스빌딩 5 층
Tel. 02-807-0600 Ext.5014, Fax. 02-807-0601
E-mail: eunyoung.jeon@vector.com
ECU 테스트 효과적으로 프로그래밍하기 – CAPL 활용의 기초, 팁과 트릭 (2 부)
5/5
Download