작성
·
63
0
안녕하세요! 좋은 강의 덕분에 현업에서 CAPL 지옥에 갇혀 있습니다.
현재 제어기들 진단하는 테스트 케이스를 작성하고 있는데, CAPL로 임의의 Error frame을 만들어서 특정 CAN 채널로 보내, 응답 받는 제어기들의 상태를 보고 싶습니다.
그래서 CAPL 헬프에서 찾아보니 Error frame을 보내는 방법이 2가지가 있는 것 같습니다.
void Error_function() // Error frame 생성 함수
{
int i;
for (i = 0; i < 250; i++) // 250번 반복 실행
{
canOutputErrorFrame(CAN1.errorFrame, 6, 0); // 1번 채널에 6 dominant bits 에러
canOutputErrorFrame(CAN2.errorFrame, 6, 0);
canOutputErrorFrame(CAN4.errorFrame, 6, 0);
canOutputErrorFrame(CAN5.errorFrame, 6, 0);
canOutputErrorFrame(CAN6.errorFrame, 6, 0);
testWaitForTimeoutSilent(500); // 500ms 대기 후 다시 실행
}
}
// CAN1번에 있는 Message를 Bus off 시켜 Error frame 생성
canConfigureBusOff(6, PCAN_Nodes[p].MessageIDs[0], 1);
우선 1번 canOutputErrorFrame을 사용했을 때 CAN 상에서 Error frame이 증가하는 것은 확인했지만, REC/TEC 값의 변화는 보지 못했습니다.
2번 같은 경우는 특정 CAN 채널에 연결된 ECU를 Bus off를 시켜 Error frame으로 만드는 것 같은데, 이 경우 TEC 값이 증가하는 부분을 확인할 수 있습니다.
임의로 Error frame을 만들기 위해서 2가지 함수(기능)을 활용해 동작하는데, 해당 접근이 올바른 접근인지 궁금하고, 2개의 차이도 한번 여쭙고 싶습니다!
아직은 CAPL이 많이 미숙하지만 존버매니아님의 강의 계속 돌려 보겠습니다:)
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 김종한님, CAPL을 활용한 CAN 통신 상의 Error frame 문제에 대한 해결책을 찾고 계시네요.
우선, CAPL 스크립트에서 Error frame을 송신하려는 두 방법에 대해 설명드리겠습니다.
canOutputErrorFrame
함수 사용: 이 함수는 지정된 CAN 채널에 Error frame을 송출하는 기능을 제공합니다. 하지만, 이 방식은 대부분의 드라이버에서 완벽히 지원되지 않을 수 있으며, 송출된 Error frame이 실제로 네트워크의 오류 상황으로 인식되지 않을 수 있습니다. 즉, REC(Receive Error Counter)와 TEC(Transmit Error Counter)에 변화를 일으키지 않을 가능성이 있습니다.
canConfigureBusOff
함수 사용: 이 함수는 특정 메시지 ID를 통해 CAN 노드를 Bus-Off 상태로 전환시켜 Error frame을 유도합니다. 이 경우에는 네트워크 상에서 실제 Error 상황이 연출되어 REC/TEC 카운터에 영향을 미치는 것을 확인할 수 있습니다.
두 방법의 차이는 다음과 같습니다:
- canOutputErrorFrame
은 간단히 말해 에러 프레임을 시뮬레이션하지만, 실제 에러로 인식되지 않을 수 있습니다.
- canConfigureBusOff
는 특정 조건 하에서 ECU를 Bus-Off 상태로 만들어 실제 CAN 통신 에러를 생성합니다.
제안드리는 방식은, 실제 테스트 목적이라면 canConfigureBusOff
를 이용하여 보다 실제와 유사한 환경에서 오류 상황을 시뮬레이션하는 것입니다. 이로 인해 CAN 노드의 반응을 더 정확하게 관찰할 수 있습니다.
궁금한 점 있으시면 언제든지 질문해 주세요. 저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.