2014-07-07 11 views
0

하트 비트 프로토콜에 대한 이상한 결과가 CANopen입니다. 아마도 다른 사람이 이런 것을 보았을 것입니다. 어쨌든, 다음과 같습니다 :누락 된 마스터 하트 비트로 인해 노드가 CANopen 시스템에서 반응하지 않음

CANopen에는 두 가지 타임 아웃 방식의 생명 보호 메커니즘이 있습니다. 첫 번째는 노드 보호이며, 나는 더 이상 언급하지 않을 것이다. 오래된 뉴스로 간주되기 때문이다.

다른 하나는 하트 비트라고합니다. 매우 간단합니다 : 네트워크의 모든 참가자는 노드 ID와 상태를 나타내는 일반 메시지를 보냅니다. 빈도는 객체 0x1017sub0에 의해 정의되며 하트 비트 생성자 시간이라고합니다. 0으로 설정하면 하트 비트가 보내지지 않습니다.

다른 참여자는 네트워크에서 찾을 노드의 수와 두 개의 연속 하트 비트 메시지 사이에있을 수있는 최대 시간을 더한 값을 정의 할 수 있습니다. 이 정보는이 특정 노드가 청취하기를 원하는만큼의 노드에 대해 32 비트 항목으로 객체 0x1016sub1..n에 저장됩니다.

항목은 노드 ID (비트 22 ~ 16)와 하트 비트 사이에 경과 할 수있는 언급 된 최대 시간 (하트 비트 소비 시간 (비트 15.0))으로 구성됩니다. 다시 엔트리가 0이면 무시됩니다.

수집 한 것처럼 네트워크 마스터 (노드 ID 1)와 슬레이브 (노드 ID 2 - 127) 사이에는 구분이 없습니다.

지금까지 이론이 지금 내 문제에 대한 :

나는 마스터 하트 비트 소비자로 내 네트워크의 노예 노드 중 하나 구성, 그래서 다음과 같습니다 객체 0x1016sub1의 항목이있다 : 0x000107D0. 적어도 2 초 후에 마스터의 하트 비트 메시지가 나타날 것을 의미합니다.

나는 이것이 두 가지 예에서 작용한다는 것을 관찰했다. 한 번 주전자 박동을 보내고 멈 추면 노드는 사전 작동 모드로 돌아가거나 적절한 비상 메시지를 보냅니다.

마스터 하트 비트 메시지를 보내지 않으면 노드를 시작한 후 (작동 모드로 전송) 노드가 사전 작동 모드로 돌아갈 때까지 최대 2 초가 걸릴 것으로 예상됩니다 적절한 긴급 메시지 또는 아마도 둘 다를 보낼 수 있습니다. 그러나 내가 시도한 두 가지 예에서 아무 일도 일어나지 않았습니다. 절대로 하트 비트를 보내지 않으면 절대로 노드가 실행되지 않고 계속 실행됩니다.

두 예제는 서로 매우 다릅니다. 아마도 그들이 같은 CANopen-stack 라이브러리를 사용하고 있는지 확실하지 않습니다.

설명이 있습니까?

답변

1

CANopen User Manual, 1.3.1.6, 39 페이지 섹션을 읽으면 하트 비트 소비자가 생산자로부터 하트 비트를 받으면 먼저 활성화된다는 것을 알게됩니다. 귀하의 예에서는 첫 번째 하트 비트가 전송되지 않았으므로 소비자는 활성화되지 않았으므로 가정합니다.