반응형
이전 글에서 CAPL이 무엇인지 알아봤다면
이번에는 실제로 코드를 작성하기 위한 기본 문법을 정리해본다.
CAPL은 C 언어와 매우 유사하지만,
차량 통신에 특화된 구조를 가지고 있기 때문에 몇 가지 중요한 차이가 존재한다.
CAPL 전체 구조
CAPL은 크게 4가지 영역으로 구성된다.
includes
{
}
variables
{
}
on start
{
}
on message CAN_Message1
{
}
- `includes` : 외부 파일 포함
- `variables` : 전역 변수 선언
- `on ~` : 이벤트 기반 실행 블록
핵심은 CAPL 은 main 함수가 없다. 이벤트 기반이다.
변수 선언 (Variables)
C와 거의 동일하지만 일부 타입이 추가되어 있다.
variables
{
int count;
float speed;
msTimer timer1;
word gwWHL_Speed;
byte data[8];
byte glWHL_01_10ms = 0;
}
이벤트 기반 함수 (Event Handler)
CAPL의 핵심이다. 특정 이벤트에서 코드가 실행된다.
1) 시작 이벤트
on start
{
write("시작됨");
}
2) 메시지 수신 이벤트
on message CAN_Message1
{
write("메시지 수신");
}
3) 타이머 이벤트
on timer timer1
{
write("타이머 실행");
}
4) 타이머 사용법
CAPL에서 매우 자주 사용하는 기능이다.
variables
{
msTimer timer1;
}
on start
{
setTimer(timer1, 1000); // 1초
}
on timer timer1
{
write("1초 주기 실행");
setTimer(timer1, 1000);
}
특징:
- ms 단위 사용 (1000 이면 1000ms 이므로 1s)
- 반복 실행하려면 다시 setTimer 호출 필요
5) 메시지 송신
variables
{
message CAN_Message1 msg;
}
on start
{
msg.dlc = 8;
msg.byte(0) = 0x11;
msg.byte(1) = 0x22;
output(msg);
}
- `message` 타입 선언
- `output()`으로 송신
6) 메시지 데이터 접근
on message CAN_Message1
{
int data;
data = this.byte(0);
write("data = %d", data);
}
- `this`는 현재 수신된 메시지를 의미한다.
7) 조건문 / 반복문
C와 동일하게 사용 가능하다.
if (speed > 100)
{
write("과속");
}
for (int i = 0; i < 8; i++)
{
write("%d", this.byte(i));
}
정리
CAPL 문법은 어렵지 않다.
하지만 중요한 건 이벤트 기반 사고 방식이다.
- main 없음 → 이벤트 기반
- 메시지 / 타이머 중심 구조
- C 문법과 유사하지만 용도는 완전히 다름
반응형
'CAPL' 카테고리의 다른 글
| CAPL 이벤트 함수 완전 정리 (0) | 2026.04.12 |
|---|---|
| CAPL 언어란? (0) | 2026.04.09 |