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. on message EngineState { 8. @sysvar::engine::enginespeeddspmeter = this.enginespeed / 1000.0; 9. } 10. 11. on message LightState { 12. if (this.dir == RX) { 13. SetLightDsp(this.HeadLight,this.FlashLight); 14. } else { 15. write("error: LightState TX received by node %NODE_NAME%"); 16. } 17. } 18. 19. SetLightDsp (long headlight, long hazardflasher) { 20. long tmplightdsp; 21. 22. tmplightdsp = 0; 23. if(headlight == kon) 24. tmplightdsp = 4; 25. if(hazardflasher == kon) 26. 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