## Event 개념소개 및 Measure Start/Stop Event

General Event
이벤트 종류 | 코드 작성 패턴 | 이벤트 의미 |
---|---|---|
시작/종료 관련 | on preStart | Measurement 시작 직전 |
시작/종료 관련 | on start | PreStart 종료 직후 |
시작/종료 관련 | on preStop | Measurement 종료 직전 |
시작/종료 관련 | on stopMeasurement | PreStop 종료 직후 |
키보드 | on key | 키보드 특정 키 눌렸을 때 |
CAN 통신 관련 | on message | CANoe에 메시지 계속됐을 때(Tx 또는 Rx 모두) |
CAN 통신 관련 | on busoff | 버스 오프 발생됐을 때 |
CAN 통신 관련 | on errorFrame | Error 메시지 계속됐을 때 |
CAN 통신 관련 | on signal, on signal_change | 시그널 값 바뀌었을 때 |
CAN 통신 관련 | on signal_update | 시그널 값 새로 쓰였을 때(값 안 바뀌어도 실행) |
System Variable 관련 | on sysvar, on sysvar_change | System Variable 변경됐을 때 |
System Variable 관련 | on sysvar_update | System Variable 값 새로 쓰였을 때(값 안 바뀌어도 실행) |
타이머 | on timer | 타이머 만료됐을 때(일정 시간 흘렀을 때) |

이벤트 사용 시기 및 활용 예시
- ONVSTART, ON_START 같은 이벤트는 시작할 직후나 처음에 사용됩니다.
- 시작 직후에는 메시지를 보내거나 변수를 초기화하는 데 적합합니다.
활용 예시:
- 초기 값을 초기화하거나 타이머를 시작하는 작업은 시작 관련 이벤트에 배치합니다.
- 이러한 메시지는 CANoe로 바로 송신되거나, 변수 초기화 후 다음 작업으로 넘어갈 수 있습니다.
PreStart와 Start 이벤트의 차이점:
- PreStart는 말 그대로 시작 전에 실행되는 의미를 가지며, 시작 직전 준비 작업에 사용합니다.
- 반면 Start 이벤트는 시작과 동시에 실행되는 작업에 적합합니다.
FreeStart와 FreeStop 이벤트의 활용:
- FreeStart는 시작 이벤트와 유사하지만, 코드 작성 시 추가적으로 자유로운 동작을 할 수 있습니다.
- FreeStop 이벤트는 프로그램이 끝나기 직전에 마지막 정리를 하는 데 적합합니다.
- 메시지를 보내거나 로그 파일을 마무리하는 작업에 유용하게 사용됩니다.
*** 주의 할점
출력안됨
on PreStart


on PreStop


정확하게 출력
on PreStart



on PreStop
- CAPL 코드 작성 및 실행 테스트:
- 아직 배우지 않았지만 CAPL에서 메시지를 송신하는 함수를 작성해 보았습니다.
- 아래와 같은 코드를 on preStart 이벤트에 작성했습니다:
-
capl코드 복사on preStart { message myMessage = {0x123}; output(myMessage); }
- 이 코드는 ID가 0x123인 메시지를 송신하는 역할을 합니다.
- 코드 실행 및 결과 확인:
- 코드를 작성한 후 CAPL을 실행해 Start 전에 메시지가 송신되는지 확인했습니다.
- 그러나 트레이스 윈도우에서 메시지가 송신되지 않은 것을 확인했습니다.
- onStart 이벤트에서 코드 테스트:
- 같은 코드를 onStart 이벤트에 넣고 실행해 보았습니다.
-
capl코드 복사on start { message myMessage = {0x123}; output(myMessage); }
- onStart 이벤트에서 실행한 경우 메시지가 정상적으로 출력되는 것을 확인했습니다.
- onFreeStop 이벤트 테스트:
- 이후 onFreeStop 이벤트에 동일한 코드를 작성하고 프로그램을 중지한 후 실행했을 때:
- 프리스탑 이벤트가 정상적으로 메시지를 송신하며 실행되었습니다.
- 이후 onFreeStop 이벤트에 동일한 코드를 작성하고 프로그램을 중지한 후 실행했을 때:
- 트레이스 윈도우 결과:
- 프로그램 종료 후 트레이스 윈도우에 출력된 메시지를 통해 모든 단계가 정상적으로 완료되었음을 확인했습니다
deeper stop() , CompleteStop()

deeper stop()


deeperStop 함수에 대한 설명
- deeperStop 함수의 기능:
- deeperStop은 가짜(펄스) 정지 이벤트입니다.
- 이 함수에 전달되는 숫자는 밀리세컨드(ms) 단위입니다.
- 예: 1000을 넣으면 1초 동안 정지하고,
- 3000을 넣으면 3초 동안 정지합니다.
- deeperStop 함수의 역할:
- 만약 이 펄스 정지 함수를 코드에 작성하면 해당 시점에서 일시적으로 메시지 송신을 중지할 수 있습니다.
- 이후 정지 시간이 끝난 후 트레이스 윈도우에 메시지가 다시 출력됩니다.
- deeperStop 사용 예시:
- 이 코드는 2초간 메시지 송신이 중단되며, 이후 메시지가 다시 출력됩니다.
- 트레이스 윈도우에서 메시지 송신이 일시적으로 중단된 모습을 확인할 수 있습니다.
-
capl코드 복사deeperStop(2000); // 2초 동안 정지
- 실제 실행 순서와 트레이스 확인:
- 코드가 실행된 후 한번 deeperStop을 거치면 정지 시간이 끝난 후 트레이스 윈도우에 메시지가 출력되는 것을 볼 수 있습니다.
CompleteStop()
활용

on preStart
{
// preStart 이벤트 - 프로그램이 시작되기 직전에 실행됩니다.
}
on start
{
// start 이벤트 - 프로그램이 시작되었을 때 실행됩니다.
}
on preStop
{
message 0x123 msg; // ID가 0x123인 메시지 선언
output(msg); // 메시지를 송신
deferStop(3000); // 3초 대기 후 프로그램 종료 준비 (지연된 정지)
}
on stopMeasurement
{
// stopMeasurement 이벤트 - 측정이 중지될 때 실행됩니다.
}
on message 0x123
{
completeStop(); // completeStop 호출 - 즉시 종료
}
completeStop과 deeperStop 함수의 활용
- completeStop 함수:
- completeStop은 호출된 이후 더 이상 대기하지 않고 즉시 종료되는 함수입니다.
- 어떤 상황에서 종료 작업을 강제로 수행할 때 사용됩니다.
- 예를 들어, 특정 작업이 중간에 종료되어야 할 때 completeStop을 호출합니다.
- deeperStop 함수와의 비교:
- deeperStop은 지정된 시간 동안 정지하고 나서 메시지를 송신합니다.
- 하지만, 만약 deeperStop에서 별도 대기 없이 비효율을 줄이려면 상황에 따라 숫자를 잘 조정해야 합니다.
- 예제 코드:
capl코드 복사on preStop { deeperStop(2000); // 2초 동안 정지 message myMessage = {0x123}; output(myMessage); }
- 이벤트 실행 과정과 트레이스 확인:
- 만약 on preStop에 위와 같은 코드를 작성하고 실행하면:
- 2초 대기 후 메시지 ID 0x123이 송신됩니다.
- 트레이스 윈도우에 정지된 후 출력된 메시지를 확인할 수 있습니다.
- 만약 on preStop에 위와 같은 코드를 작성하고 실행하면:
- completeStop과 deeperStop의 차이:
- completeStop은 즉시 종료되어 더 이상 대기하지 않습니다.
- deeperStop은 일정 시간 후 메시지를 송신하는 데 적합합니다.
- onMessageEvent와의 연계 사용:
- 만약 메시지를 계속 송신해야 하는 상황에서는 onMessageEvent를 사용합니다.
- 이 이벤트와 completeStop을 함께 사용하면 메시지가 반복되는 작업이 완료되었음을 쉽게 확인할 수 있습니다.
- 실제 실행 순서 예시:
- on preStop 이벤트에 deeperStop을 설정하고, on start 이벤트에 메시지 송신을 연결하면:
- 프로그램이 시작한 후 3초 동안 대기했다가 모든 메시지 송신이 종료되는 과정을 볼 수 있습니다.
- on preStop 이벤트에 deeperStop을 설정하고, on start 이벤트에 메시지 송신을 연결하면:
마무리 및 결론:
- deeperStop과 completeStop은 메시지 송신과 정지 동작을 조절하는 데 유용합니다.
- 이 두 함수와 on preStop, onMessageEvent 이벤트를 적절히 활용하면 정지와 송신의 타이밍을 세밀하게 조절할 수 있습니다.
'회사 > CAPL' 카테고리의 다른 글
섹션 7_CANoe - CAPL과 Panel 기본 (0) | 2024.10.20 |
---|---|
CAPL getProfileArray 사용법 (0) | 2024.10.19 |
섹션 5_CANoe - CAPL과 Panel 기본 (섹션 5) (0) | 2024.10.19 |
섹션 4_CANoe - CAPL과 Panel 기본 (섹션 4) (1) | 2024.10.19 |
CANoe - CAPL과 Panel 기본 (섹션 3_3 ~ 3_6) (1) | 2024.10.19 |