CAPL이란?
- CAPL은 vector에서 개발한 프로그래밍 언어로, C와 유사함
- Event-driven 방식으로 작동 => Event에 따라 동작하는 방식
1. 생성할 신호 DBC에 추가하기
- signals와, signals를 담을 message, message를 받을 노드를 생성
- CAPL에서 직접 message를 만들 수도 있지만, 이 방법이 좀 더 직관적임(사실 나도 잘 모름..)
CAPL코드 작성하기
- 수정된 dbc를 다시 cfg에 업데이트 함(Node Synchronization)
- 이후 message를 발생시킬 Simulation Node 생성
- File을 누르면 CAPL코드를 만들 수 있음
- 원하는 이름으로 정하면 됨
- 확장자는 .can
- Tx_SIM.can 파일이 추가된 걸 확인할 수 있음
- 해당 연필 표시를 누르면, 생성된 CAPL 창이 열림
- includes는 라이브러리
- variables는 전역 변수를 정의하는 영역
- 왼쪽 영역에서 CAPL관련 함수(?)들을 불러올 수 있는 부분
- 예를 들면 on start의 경우, 시스템이 시작할 때 {}안에 뭐를 수행하겠다 라는 의미
★Tx_SIM_Node CAPL 코드 ★
※ CAPL도 양이 방대해서 여기서 다 설명 불가... 그나마 CAPL은 자료가 있어서 찾아보거나 함수 definition으로 확인하세요....
variables
- timer는 시간 변수 타입, on timer 작동을 위해 반드시 필요한 변수
- message는 message 변수 타입, 선언 방법은 기존의 선언된 메시지 타입이 있다면 message 선언된_msg instance
- 만일 새로운 타입의 message를 선언하고 싶다면 message instance라고 선언하고 CAPL 내부 코드를 통해 선언 가능(이 부분은 찾아 보세요..)
- int, float, double 등 다른 변수 선언 가능
on start
- write는 printf라고 생각하면 됨, system이 시작할 때 write window에서 확인할 수 있음. 주로 디버깅 용
- setTimerCyclic은 위에서 선언한 timer의 주기를 선언하는 함수, setTimer도 있는데 이건 timer에 값을 1번만 할당함,
on timer
- 위에서 설정한 시간에 맞춰 {}내부의 코드가 작동됨
- message A안에 signal B가 있다면, A.B로 접근
- CAPL창 오른쪽 window에 dbc에 정의된 msg가 있는데, 이걸 CAPL window에 drag & drop하면 해당 msg 변수가 선언됨
- output은 선언한 message를 발생시키는 함수
msg_Rx_ECU CAPL 코드
on message
- ECU가 해당 message를 받으면 {}안의 코드를 작동
- on message 옆에 message를 선언할 수 있는데, 오른쪽 창에서 원하는 msg frame을 drag & drop하면 msg 선언됨
- 왼쪽 위 compile 버튼을 누르면 compile & error 확인 가능(error가 뭔지 되게 불친절하게 알려줌.....)
실행
- 잠깐 실행되다 실행이 안되는 문제가 발생......
- 신호 개수를 줄이거나... 컨셉만 알아두세요
'CAN(Controller Area Network)' 카테고리의 다른 글
CANoe -Panel 만들기 & Graphic, Data window (0) | 2023.12.19 |
---|---|
CANoe - 실행 & Trace window (0) | 2023.12.19 |
CANoe - DBC 만들기 (0) | 2023.12.16 |
CAN(Controller Area Network) & CAN DATA Frame (0) | 2023.12.06 |