CAN 버스로 작업 중이며 메시지 데이터 디코딩에 도움이 필요합니다.
다음은 CAN 버스에서보고있는 데이터 샘플입니다.
root@petalinux:/var/volatile/tmp# /tmp/candump -n 10 can0 can0 4E5 [4] F0 16 00 00 can0 665 [8] 40 78 60 00 00 00 00 00 can0 5E5 [8] 4B 78 60 00 DB 00 00 00 can0 665 [8] 40 64 60 00 00 00 00 00 can0 5E5 [8] 43 64 60 00 E4 7D 5E 00 can0 665 [8] 40 41 60 00 00 00 00 00 can0 5E5 [8] 4B 41 60 00 27 02 00 00 can0 665 [8] 40 41 60 00 00 00 00 00 can0 5E5 [8] 4B 41 60 00 27 02 00 00 can0 665 [8] 40 6C 60 00 00 00 00 00 root@petalinux:/var/volatile/tmp#
특정 CAN으로 데이터를 추적하는 방법을 알 수 없습니다. 버스 메시지.
내 장치의 노드 ID는 101 (기본 10)이고 StepIM 스테퍼 모터입니다. 다음은 설명서에 대한 참조입니다. http://servotronix.com/wp-content/uploads/dlm_uploads/2015/05/stepIM_CANopen_fw0.0.2.85_Rev.1.3.pdf . 위의 마지막 메시지를 해독 해 보겠습니다. “ can0 665 8 40 6C 60 00 00 00 00 00 “
16 진수 문자열”* 40 6C 60 .. “을 스테퍼 모터 문서에서 알고있는 명령으로 변환하는 방법을 알아낼 수없는 것 같습니다 …
설명
- stepIM은 CAN 버스를 기반으로 한 상위 프로토콜 인 CANopen 프로토콜을 사용합니다. CANopen과 CAN 태그를 교환하십시오.
Answer
첫 번째 메시지를 제외하고 일반적인 SDO 트래픽 ( CANopen ), 요청 / 응답 쌍 포함 :
0x665 SDO request (range 0x600 - 0x67F, depending on the node ID) 0x5E5 SDO response (range 0x580 - 0x5FF, depending on the node ID)
첫 번째 쌍의 경우 죽은 경품은 응답의 첫 번째 바이트에있는 0x4B입니다. 이는 반환 된 데이터의 크기가 2 바이트임을 나타냅니다 (1 바이트 및 4 바이트의 경우 각각 0x4F 및 0x43). 요청의 첫 번째 바이트에있는 0x40은 읽기 요청임을 나타냅니다 (표준에서는 다른 용어 인 " Upload , 인터넷에서와 반대의 의미 (다운로드)-주소 지정 장치의 관점에서 볼 수 있습니다.
요청 CAN ID는 0x600 + 노드 ID입니다. 응답 CAN ID는 0x580 + 노드 ID입니다. 따라서 :
665 A read request to the device with node ID 0x65 5E5 A read response from the device with node ID 0x65
SDO의 경우 CANopen 인덱스와 하위 인덱스는 두 번째, 세 번째 및 네 번째 바이트에 있습니다 (CANopen 인덱스의 경우 최하위 바이트 먼저). 따라서 첫 번째 쌍인 40 78 60 00에 대해 요청자는 다음과 같이 말합니다. " 노드 ID 0x65 (101)의 장치, 6078sub0에 저장된 값을 알려주세요. " .
이 경우 정보는 주소가 지정된 장치에서 요청을 한 사람에게 전달됩니다 (요청자는 CAN 버스 로그에서 볼 수 없지만 일반적으로 시스템의 중앙 컨트롤러이거나 PC에서 실행되는 서비스 도구 (일반적으로 USB-CAN 어댑터)입니다.
따라서 표시된 트래픽에 대해 읽기 요청이 이루어집니다. 마지막 응답에 대한 응답은 게시 된 CAN 버스 로그에 포함되지 않음) :
6078sub0 (2 bytes, 0xDB00 = 219) 6064sub0 (4 bytes, 0x005E7DE4 - 6,192,612) 6041sub0 (2 bytes, 0x0227 - 551) 6041sub0 (2 bytes, 0x0227 - 551) 606Csub0 (?? bytes)
이상하게도 6041sub0에 대한 요청이 반복됩니다.
또한 SDO는 일반적으로 구성 정보에만 사용되지만 CANopen 인덱스 범위 0x6000 ~ 0x6FFF는 일반적으로 측정 된 수량 또는 상태와 같은 비 구성 정보에 사용됩니다.
매뉴얼 살펴보기
SDO 색인 / 하위 색인은 매뉴얼에서 조회 할 수 있습니다 (I h ave에는 샘플 CAN 버스 로그의 실제 값이 포함되어 있습니다) :
6078sub0 Motor current, 219 mA 6064sub0 "Position Actual Internal Value" is 6,192,612 6041sub0 Statusword, 0x0227 = 0000 0010 0010 0111, meaning: "ready to switch on", "switched on", "operation enabled", "quick stop" "remote" 606Csub0 "Velocity Actual Value". The value is not included, but it is a 32-bit signed integer.
첫 번째 메시지
첫 번째 메시지도 CANopen이라고 가정하고, 4E5 F0 16 00 00 : 모든 CANopen CAN 메시지의 경우 ID는 4 비트 기능 코드 (0-15)와 7 비트 노드 ID입니다. 이 경우 0x4E5 = 1001 1100101b입니다. 따라서 기능 코드는 1001b = 9이며, 이는 " PDO4, 전송 "을 의미합니다. PDO의 정보 흐름 방향 (이 경우 " 전송 "에도 불구하고)은 정의의 문제입니다 (응용 프로그램에 따라 다름). ). 노드 ID는 1100101b = 0x65입니다.
PDO의 노드 ID는 SDO의 노드 ID와 같습니다.
이 PDO의 정보, " Transmit PDO 4 "는 SDO 0x1A03, " 전송 PDO 매핑 매개 변수 4 . 기본값에서 변경되지 않은 경우 PDO의 데이터는 부호있는 32 비트 정수인 SDO 0x60FAsub0과 동일합니다.
컨트롤 위치 제어 루프의 출력으로서의 노력. 위치 제어 기능에서 제어 노력의 표기는 모드에 따라 다르므로 지정되지 않습니다.
결론
모터 장치 노드 ID가 0x65 인 경우 PDO 를 사용하여 제어 노력 (일반적인 시간 간격으로)을 보냅니다.
컨트롤러 또는 서비스 도구의 실시간 모니터 창을 읽고 표시합니다. SDO 를 사용하여 동일한 모터 장치에서 기타 측정 된 수량 / 상태.
댓글
- 나는 이런 종류의 CAN으로 작업합니다. 매일 버스 데이터를 제공하므로 쉽게 알아볼 수 있습니다. 그러나 정확한 해석 / 의미는 특정 시스템에 대한 정보에 따라 다릅니다. 나는이 질문이 포괄적 인 대답을 할 가치가 있다고 생각했습니다.
답변
목록에 표시되는 내용을 정확히 설명하지 않았지만 그럴 수도 있습니다 i>는 메시지 ID, 괄호 안의 데이터 바이트 수, 실제 데이터 바이트 순입니다. ID가 11 비트인지 29 비트인지 명시 적으로 나타내는 것은 없습니다. ID에 3 자리 16 진수를 사용하면 목록은 11 비트 ID를 나타냅니다. 그렇다면 29 비트 ID에 대해 8 개의 HEX 숫자가 표시됩니다.
따라서 각 줄은 하나의 CAN 메시지임을 나타내는 것 같습니다. 더 이상 디코딩 할 내용이 없습니다. CAN 메시지를 이해하십시오. 명시 적으로 표시됩니다.
예를 들어, 마지막 줄은 ID 665h (십진수 1637)의 메시지를 보았고이 메시지에 8 개의 데이터 바이트가 있으며 데이터 바이트는 (16 진수로) 40, 6C, 60, 0, 0, 0, 0, 0입니다. 처음 세 개는 십진수로 64, 108, 96이됩니다.
의미 는 메시지를 보낸 장치 또는 메시지에 대한 조치를 의도 한 장치에 대한 것입니다. 특정 장치의 문서를 찾아야합니다. CAN 위에있는 레이어입니다.
내 기기의 노드 ID는 101입니다.
노드가 없습니다. CAN의 ID, 메시지 ID 만 있습니다. 장치가 노드 ID의 개념을 사용하는 경우 이것은 CAN 위의 프로토콜 계층에만 해당됩니다. CAN 표준은이를 지원할 수 없습니다. CAN 위에서 사용하는 상위 레벨 프로토콜을 참조 할 수있는 특정 장치 문서를 참조해야합니다 (별도의 문서).
댓글
- ' 기본 CAN이 아니라 수동에서 볼 수 있듯이 CANopen입니다.
- 내 답변 .
답변
기기에서 CANopen 프로토콜 . CANopen은 CAN 기반 통신 시스템입니다. 상위 계층 프로토콜과 프로필 사양으로 구성됩니다.
자동화에 사용됩니다. 전체 통신을 파악하기위한 여러 프로토콜 분석기가 있습니다. CANopen을 사용하는 자동화 시스템은 마스터 / 슬레이브 아키텍처입니다. CANopen에 대한 정보는 wikipedia에서 찾을 수 있지만 메시지 지향 CAN 자체만큼 사소한 것은 아닙니다.
Comments
- 예, 맞아요. CANopen입니다.
Answer
통신을 디코딩하려면 모터 CANopen Object Dictionary를 알아야합니다. TPDO와 그 내용은 통신 및 매핑 개체에 의존하는 것처럼 보입니다.
프로토콜을 이해하려면 CANopen에서 다음 용어를 연구해야합니다. -객체 사전-프로세스 데이터 객체 (PDO)-통신 매개 변수-매핑 매개 변수