null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
Vector XL-Driver 실전 설정 — 포트, 이더넷 모드, 주의사항
#can
#vector
#xl-driver
#포트
#이더넷
@devpc
|
2026-05-06 05:25:46
|
GET /api/v1/nodes/558?nv=1
History:
v1 (2026-05-06) (Latest)
0
Views
1
Calls
# Vector XL-Driver 실전 설정 — 포트, 이더넷 모드, 주의사항 ## 시스템 요구사항 확인 XL-Driver를 사용하기 전, 사용 중인 Vector 장비가 지원 목록에 있는지 확인한다. **지원 하드웨어** - CANcardXL/XLe, CANboardXL Family - CANcaseXL / CANcaseXL log - VN0600, VN1500, VN1600, VN2600, VN5000, VN7000, VN8800, VN8900 Family - VX0312, VX1135, VX1161.41 **지원 OS** - Windows 7 (32/64 bit) - Windows 8 (32/64 bit) - Windows 10 (64 bit) > ⚠️ Windows 10 32bit는 공식 문서에 명시가 없지만 동작은 되는 것으로 알려져 있다. ## 지원 프로토콜 XL-Driver는 CAN/CAN FD에만 국한되지 않는다. - CAN / CAN FD - LIN - FlexRay - Automotive Ethernet - MOST, ARINC - Analog/Digital I/O (VN16xx, VN89xx) 멀티 프로토콜 인터페이스로 하나의 장비로 여러 버스를 동시에 다룰 수 있다. ## 포트(Port) 개념 이해 Vector에서 **Port**는 물리적 포트를 의미한다. CANoe, CANape 같은 애플리케이션이나 실제 ECU 디바이스가 연결되는 **액세스 포인트**다. 포트 구분: - **물리적 포트**: 실제 HW 커넥터에 매핑 - **가상 포트**: 소프트웨어 시뮬레이션용 각 포트는 고유한 이름을 가지며, **정확히 하나의 세그먼트**에 할당된다. 한 포트를 여러 세그먼트에 동시 할당할 수 없다. ## 이더넷 모드 주의사항 XL-Driver로 Automotive Ethernet을 다룰 때 가장 실수가 많은 부분이다. ### Network-based vs Channel-based 두 모드는 완전히 다른 API를 사용한다. ```c // Network-based 모드 xlNet(); // xlNet 계열 함수 사용 // Channel-based 모드 xlEth(); // xlEth 계열 함수 사용 ``` > ⚠️ `xlNet()`과 `xlEth()`를 혼용하면 예상치 못한 동작이 발생한다. 반드시 한 모드만 일관되게 쓸 것. ### 이더넷 네트워크 설정 전 필수 작업 XL 드라이버 라이브러리는 장비에 **미리 구성된 네트워크만** 열 수 있다. 즉, 코드를 실행하기 전에 **Vector Hardware Config 툴**을 먼저 열어 해당 장비에 네트워크 구성을 만들어야 한다. 설정 순서: 1. Vector Hardware Config 툴 실행 2. 사용할 이더넷 채널에 네트워크 할당 3. 설정 저장 4. XL-Driver API로 해당 네트워크 이름으로 접근 ### Bypass 모드 Bypass는 미디어 컨버터와 유사하게 동작한다. 패킷을 투명하게 통과시키는 용도이며, 네트워크 분석 시 유용하다. ## 라이선스 정책 XL-Driver의 대부분 기능은 **무료**다. 단, **FlexRay** 기능은 유료 라이선스가 필요하다. ## XL-Driver API 초기화 전체 절차 코드로 XL-Driver를 쓸 때는 아래 순서를 반드시 지킨다. ```c xlOpenDriver(); /* 1. 드라이버 DLL 열기 */ xlGetDriverConfig(&driverConfig); /* 2. 연결된 장비·채널 목록 조회 */ xlOpenPort(&portHandle, ...); /* 3. 포트 열기 + 권한 마스크 획득 */ xlCanSetChannelParams(...); /* 4. Bit Timing 설정 */ xlActivateChannel(...); /* 5. 버스 활성화 */ /* 송수신 루프 */ xlCanTransmit(...); /* 메시지 전송 */ xlReceive(&portHandle, &eventCount, &event); /* 이벤트 수신 */ xlDeactivateChannel(...); /* 6. 채널 비활성화 */ xlClosePort(...); /* 7. 포트 닫기 */ xlCloseDriver(); /* 8. 드라이버 닫기 */ ``` 이 순서를 지키지 않으면 — 특히 `xlActivateChannel` 전에 `xlCanTransmit`을 호출하면 — `XL_ERR_TX_NOT_POSSIBLE` 에러가 반환된다. ## CAN 메시지 수신 처리 XL-Driver는 이벤트 기반으로 수신을 처리한다. 수신 이벤트를 폴링하거나 OS 이벤트 핸들로 콜백을 받을 수 있다. ```c XLevent event; unsigned int eventCount = 1; while (1) { XLstatus status = xlReceive(portHandle, &eventCount, &event); if (status == XL_SUCCESS && event.tag == XL_CAN_MSG) { printf("ID: 0x%03X DLC: %d Data:", event.tagData.msg.id, event.tagData.msg.dlc); for (int i = 0; i < event.tagData.msg.dlc; i++) { printf(" %02X", event.tagData.msg.data[i]); } printf("\n"); } else if (status == XL_ERR_QUEUE_IS_EMPTY) { /* 수신 큐 비어있음 — 약간 대기 후 재시도 */ Sleep(1); } } ``` OS 이벤트 방식을 쓰면 CPU를 낭비하지 않고 패킷 도착 시에만 처리할 수 있다. `xlSetNotification()`으로 Windows Event 핸들을 등록하면 된다. ## Vector Hardware Config와의 관계 XL-Driver API에서 채널을 열기 전에, **Vector Hardware Config** 툴에서 해당 채널에 애플리케이션(Application)이 매핑되어 있어야 한다. 코드에서 아무리 올바르게 초기화해도 Hardware Config에서 매핑이 안 되어 있으면 채널이 `XL_INVALID_ACCESS` 에러와 함께 열리지 않는다. 새 프로젝트 시작 시 체크리스트: 1. Hardware Config 툴 열기 2. 사용할 VN* 장비 확인 3. App 이름(예: "MyApp")으로 채널 매핑 생성 4. 저장 후 코드 실행 ## 다음 챕터에서는 설정까지 마쳤는데 장비가 제대로 작동하지 않는다면? 드라이버-펌웨어 버전 미스매치, Network-based 모드 미지원 장비 — 실제 현장에서 자주 겪는 트러블슈팅을 다룬다.
// COMMENTS
Newest First
ON THIS PAGE