VDA 5050 3.0 order·updateId·state 불일치 오류를 추적하는 법

운영 화면에는 ‘주문 진행 중’이 남아 있는데 AMR은 교차로 앞에서 더 이상 움직이지 않는다. 마스터 로그에는 새 `orderUpdateId`를 보냈다고 적혀 있고 차량 로그에는 오래된 update 또는 이미 취소된 order라는 판단이 남는다. 이때 새 order를 무작정 만들면 원래 base와 horizon, action 상태가 더 갈라질 수 있다. 먼저 양쪽이 같은 사건을 어떤 ID와 시각으로 기록했는지 맞춰야 한다.

산업용 로봇·비전 카메라·이동로봇·작업자가 안전구역에서 협업하는 유연 제조 셀
특정 공장이나 제품의 실제 배치가 아닌, 비전 검사·작업 인계·안전 분리·유연 전환을 설명하기 위한 AI 생성 개념 이미지입니다.

불일치는 차량이 멈춘 시점보다 먼저 시작된다

장애 창을 마지막 정상 state부터 잡는다. 마스터가 보낸 order의 `orderId`, `orderUpdateId`, header 시각과 차량이 수신·수락·거부한 기록, 이어서 발행한 state를 한 줄씩 정렬한다. 애플리케이션 로그의 현지시각과 메시지 header 시각이 다른 기준이면 원본 메시지와 브로커 수신 시각도 함께 남긴다.

VDA 5050 3.0 공식 사양은 `orderUpdateId`가 0에서 시작해 order가 갱신될 때 증가하도록 정의하고, base와 horizon을 이용한 경로 확장을 설명한다. 이 규칙은 로그를 읽는 공통 언어다. 특정 제조사의 내부 상태머신과 재시도 정책까지 표준이 대신 정의하는 것은 아니다.

운영 화면의 한 문장보다 원본 메시지 수명주기를 우선한다. 화면이 캐시한 상태나 번역된 오류명은 필요한 필드를 생략할 수 있다. 장애 티켓에는 시작 전 마지막 정상 order, 문제가 난 update, 첫 오류와 이후 state를 함께 붙인다.

로그 시각이 어긋나면 ID 순서부터 복원한다

분산 시스템의 시각은 완벽하다고 가정하지 않는다. 마스터, 브로커와 차량의 시계가 조금만 달라도 ‘state가 order보다 먼저 왔다’는 잘못된 결론을 낼 수 있다. `orderId`와 `orderUpdateId`, 메시지 방향, 각 시스템의 수신 순번을 우선 키로 두고 시각은 보조 증거로 사용한다.

state는 이벤트가 생겼을 때뿐 아니라 사양이 정한 주기 조건에 따라 발행될 수 있다. 공식 사양은 state를 이벤트 시 또는 최대 30초 간격으로 보내는 구조를 설명한다. 따라서 state 한 건이 보이지 않는다고 즉시 유실로 확정하지 않고, 구독 로그·브로커 보존과 다음 state의 nodeStates·edgeStates·errors를 함께 본다.

메시지 캡처에는 개인정보보다 운영 식별자가 중요하다. order와 차량 식별, update 순서와 오류 필드를 남기되 불필요한 지도·시설 정보는 공유 범위에서 제외한다. 한 차량만의 문제인지 같은 마스터가 보낸 다른 차량에서도 재현되는지도 비교한다.

order를 새로 만들 문제와 update할 문제를 구분한다

같은 논리 작업의 경로를 연장하거나 horizon을 해제하는 상황과 완전히 새로운 작업을 시작하는 상황을 섞지 않는다. 동일 `orderId`의 갱신이라면 `orderUpdateId` 증가와 stitching 조건을 확인한다. 새 작업이라면 기존 order의 취소·완료 상태와 차량이 보유한 base를 먼저 닫는다.

base와 horizon의 경계가 엇갈리면 마스터는 다음 node를 보냈다고 믿고 차량은 연결되지 않는 경로로 볼 수 있다. 마지막으로 release된 node·edge와 새 메시지의 첫 구간이 이어지는지, sequence와 식별자가 맞는지 원본 JSON으로 확인한다. VDA 5050 3.0 개요는 base·horizon 구조를 먼저 이해할 때 참고하고, 장애에서는 실제 메시지 두 개를 나란히 둔다.

동일한 update를 네트워크 재시도로 다시 보냈을 때와 더 오래된 update가 늦게 도착했을 때도 다르다. 차량이 어떤 오류·state로 응답했는지 보존해야 멱등 처리 문제와 순서 뒤바뀜을 구분할 수 있다.

복구 명령은 현재 차량 상태에서 출발해야 한다

복구 전에 차량의 마지막 node·edge, 실행 중·대기 중 action, errors와 driving 상태를 읽는다. 마스터의 내부 DB를 진실의 단일 원천으로 가정하면 실제 차량이 이미 action을 수행했거나 다른 base에 있을 때 중복 동작을 만들 수 있다. 반대로 차량 state만 보고 업무 시스템의 취소 의도를 무시해서도 안 된다. 두 상태를 대조해 허용되는 다음 전이를 결정한다.

전송 정책에는 ‘응답이 없을 때 재전송’, ‘명시적 거부 때 수정’, ‘취소 완료 뒤 새 order’를 분리한다. 재전송 횟수나 timeout은 표준의 보편 합격값으로 만들지 말고 현장 네트워크와 차량 공급사 계약에서 정한다. 자동 복구가 같은 오류를 반복하면 차량을 안전 상태에 두고 사람 검토로 넘긴다.

VDA 5050 3.0 릴리스 기록을 통해 적용 버전을 확인한다. 마스터와 차량이 서로 다른 버전이나 vendor 확장을 쓰면 필드가 비슷해도 해석이 달라질 수 있다. 장애 보고서에 사양 버전, topic과 schema 버전을 함께 적는다.

차량이 움직이지 않는 이유를 프로토콜만으로 단정하지 않는다

order가 수락돼도 차량은 안전 스캐너, 구동기, 배터리, 도킹이나 현장 인터록 때문에 정지할 수 있다. 이때 state의 error와 action 상태를 보되 제조사 진단 로그와 물리 현장을 함께 확인한다. 메시지 일치가 곧 이동 가능을 뜻하지 않는다.

반대로 물리 정지의 원인이 해결됐다고 예전 order를 그대로 재개하면 안 된다. 그 사이 마스터가 취소했거나 horizon이 바뀌었을 수 있다. 물리 장애를 복구한 시각과 마지막으로 합의된 `orderUpdateId`를 다시 확인하고, 경로 점유와 교차로 자원 상태도 상위 제어기에서 재검증한다.

VDA 5050과 ISO 21423의 범위 차이는 VDA 5050과 ISO 21423 비교에서 따로 다룬다. 현재 장애의 메시지 호환을 다른 표준의 안전 적합성으로 바꾸어 설명하지 않는다.

멈춤과 재개 사이에는 명시적인 안전 판정이 필요하다

복구표에는 조건, 기대 state, 허용 조치와 금지 조치를 함께 쓴다. 아래 항목은 표준 필드에 근거한 시험 구조이며 제조사별 정확한 오류명이나 timeout을 대신하지 않는다.

재현 조건확인할 결과다음 조치피해야 할 대응
같은 orderId에 더 오래된 update 도착차량의 거부·오류와 현재 update 유지현재 order·state를 기준으로 마스터 동기화ID를 낮춰 억지 수락
같은 update 재전송중복 처리 여부와 action 중복 없음멱등성·브로커 재전송 경로 점검응답 없이 계속 증분
새 horizon 연결stitching 지점과 release 상태 일치마지막 base와 첫 새 구간 대조이어지지 않는 node를 강제
order 취소 중 새 작업 요청취소 진행·완료와 action 상태취소가 닫힌 뒤 새 order 결정두 작업을 동시에 활성화
통신 복구 뒤 state 재수신현재 node·edge·errors·order 식별 일치자원 점유 재확인 후 제한 재개마스터 캐시만 보고 즉시 주행

공식 order JSON schemastate schema는 구조와 자료형 검증에 유용하다. schema 통과는 update 순서, stitching, 현장 안전 같은 의미 규칙이 맞다는 증명은 아니다. 구조 검증과 수명주기 검증을 별도 단계로 둔다.

같은 오류를 다시 만들 수 있어야 수정이 끝난다

수정 뒤에는 정상 order만 보내지 않는다. 오래된 update 지연, 동일 update 중복, horizon 연결, 취소와 통신 단절을 차례로 주입한다. 차량을 실제로 움직일 필요가 없는 메시지 단계는 테스트 환경에서 먼저 재현하고, 현장 시험은 통제된 구역과 승인된 시나리오로 제한한다.

  • 마스터·브로커·차량의 버전과 시계 상태, 원본 order·state를 보존한다.
  • 마지막 정상 order부터 첫 불일치까지 orderId·orderUpdateId·방향·수신 순서를 정렬한다.
  • base·horizon의 stitching 지점과 node·edge release 상태를 원본 JSON에서 비교한다.
  • 오래된 update, 중복 update, 취소 중 새 order와 통신 복구를 각각 독립 재현한다.
  • schema 검증과 의미·상태머신 검증, 실제 안전 정지를 서로 다른 결과로 기록한다.
  • 자동 재시도가 반복되면 중단하고 차량·마스터·현장 통합 담당자가 같은 사건표를 검토한다.

재시험의 합격은 ‘더 이상 화면에 경보가 없다’가 아니다. 같은 비정상 순서에서 중복 action이 실행되지 않고, 마스터와 차량이 합의한 order·update·state로 돌아오며, 물리 재개는 별도 안전 조건을 통과해야 한다.

VDA 5050 3.0 order·updateId·state 불일치 오류를 추적하는 법 실무 질문

자동 재전송을 언제 멈추고 운영자가 개입해야 하나요?

같은 order와 update가 명시적으로 거부되거나, 취소·action 상태를 마스터와 차량이 다르게 보고, 재시도가 중복 동작 위험을 만들 때 멈춘다. 차량을 안전 상태에 두고 원본 메시지와 현장 자원 점유를 사람이 대조한 뒤 다음 전이를 승인한다.

이 오류는 플릿 마스터와 차량 공급사 중 누가 고쳐야 하나요?

처음 끊긴 계약에 따라 나눈다. 마스터는 order 생성·증분·재전송 기록, 브로커 담당은 전달 순서와 연결, 차량 공급사는 수락·거부·state 전이를 제시한다. 현장 통합자는 물리 인터록과 작업 자원 상태를 맡고, 공통 사건표로 책임 경계를 확정한다.

자료 마지막 확인: 2026년 8월 26일