Edit on GitHub
다이나믹셀을 제어하기 위해서는 다이나믹셀의 프로토콜에 맞추어 통신을 해야 합니다.
다이나믹셀은 binary 형태의 데이터를 받아 구동됩니다. 이러한 데이터를 전송하기 위한 프로그램 예제는 다이나믹셀 전용 Controller 또는 USB2DYNAMIXEL, U2D2 의 사용자 설명서에 자세히 기술되어 있습니다. 따라서 본 다이나믹셀의 사용자 설명서에서는 Main controller 가binary 형태의 데이터를 전송할 수 있다는 가정하에 다이나믹셀에서 사용하는 통신 방식에 대한 설명과 통신 프로토콜에 대한 설명만을 기술하였습니다
- 다이나믹셀 프로토콜 2.0을 지원하는 다이나믹셀: MX-28(2.0), MX-64(2.0), MX-106(2.0), X 시리즈 (2X 시리즈 포함), PRO 시리즈, P 시리즈.
- 다이나믹셀 프로토콜 2.0을 지원하는 제어기: CM-50, CM-150, CM-200, OpenCM7.0, OpenCM9.04, CM-550, OpenCR, OpenRB-150
- 다이나믹셀 프로토콜 2.0을 지원하는 소프트웨어: 로보플러스 스마트 앱, 로보플러스 2.0, 로보플러스 3.0, 다이나믹셀 위자드 2.0
참고: 참고.
참고: MX(2.0)은 프로토콜 2.0을 지원하는 MX 시리즈의 별도 펌웨어를 의미함. DYNAMIXEL Wizard2.0의 펌웨어 복구 기능을 활용하여 MX(2.0) 펌웨어로 업그레이드 가능.
Main Controller와 다이나믹셀은 Packet이라고 불리는 데이터를 주고 받으며 통신합니다. Packet에는 두 가지 종류가 있습니다. Main Controller가 다이나믹셀을 제어하기 위해 전송하는 Instruction Packet과 다이나믹셀이 Main Controller로 답변하는 Status Packet이 그것입니다.
ID는 한 개의 버스에 여러 개의 다이나믹셀이 연결되었을 때 각각의 다이나믹셀들을 구별하기 위해 만든 고유 번호입니다.
Instruction Packet과 Status Packet에 ID를 넣음으로써 Main Controller는 제어하고자 하는 다이나믹셀만을 제어할 수 있습니다.
다이나믹셀은 8 bit, 1 Stop bit, None Parity의 Asynchronous Serial 통신을 합니다.
만약 같은 ID 를 가진 다이나믹셀이 연결되었을 경우 Packet 충돌이 일어나서 통신에 문제를 일으키게 됩니다.
그러므로 ID가 같은 다이나믹셀이 존재하지 않도록 ID설정을 해야 합니다. ID 설정을 위해서는, 다이나믹셀 위자드 2.0에서 컨트롤 테이블을 참고 하세요.
참고 : 다이나믹셀은 공장출하시, 초기 ID는 1번 입니다.
Half Duplex란 TxD, RxD를 하나의 선으로 공유하는 통신 방식으로 다이나믹셀은 Half Duplex 방식을 사용하고 있습니다.
보통 하나의 BUS에 여러 개의 통신 장치를 연결할 경우에 사용합니다.
여러 개의 장치가 송신하는 동안 그 외의 다른 모든 장치들은 입력 상태이어야 하기 때문에 통신 방향을 제어하는 Direction Port가 필요합니다.
다이나믹셀을 제어하는 Main Controller는 통신 방향을 입력으로 설정해 놓고 있다가 Instructon Packet을 전송하는 동안만 통신 방향을 출력으로 설정해야 합니다.
Half Duplex 통신 방식을 사용하기 위해 필요한 제어 방법입니다.
RS485 UART 에서는 송신이 끝나는 Timing 을 잘 맞춰서 Direction 을 수신 Mode 로 바꾸어야 합니다.
CPU 에서는 일반적으로 UART_STATUS 를 표시해주는 REGISTER 내에 다음과 같은 의미의 BIT 가 있습니다.
- TXD_BUFFER_READY_BIT: Transmission DATA 를 Buffer 에 적재할 수 있는 상태임을 뜻합니다. 상태는 SERIAL TX BUFFER 가 비어 있다는 의미이지, 이전에 전송한 데이터가 모두 CPU 밖으로 배출된 상태를 의미하는 것은 아닙니다.
- TXD_SHIFT_REGISTER_EMPTY_BIT: Transmission Data 가 모두 CPU 밖으로 배출되었을 때 SET 됩니다.
TXD_BUFFER_READY_BIT 의 경우는 Serial 통신에서 한 Byte 를 송신할 때 사용되며 그 예는 다음과 같습니다.
TxDByte(byte bData)
{
while(!TXD_BUFFER_READY_BIT); //wait until data can be loaded.
SerialTxDBuffer = bData; //data load to TxD buffer
}
Direction을 전환하는 시점에서는 TXD_SHIFT_REGISTER_EMPTY_BIT를 확인해야 합니다. 다음은 Instruction packet을 전송하는 예제 프로그램입니다.
1 DIRECTION_PORT = TX_DIRECTION;
2 TxDByte(0xff);
3 TxDByte(0xff);
4 TxDByte(0xfd);
5 TxDByte(0x00);
6 TxDByte(bID);
7 TxDByte(bLengthLow);
8 TxDByte(bLengthHigh);
9 TxDByte(bInstruction);
10 TxDByte(Parameter0); TxDByte(Parameter1); ...
11 TxDByte(bCrcLow);
12 DisableInterrupt(); // interrupt should be disable
13 TxDByte(bCrcHigh); // last TxD
14 while(!TXD_SHIFT_REGISTER_EMPTY_BIT); // Wait till last data bit has been sent
15 DIRECTION_PORT = RX_DIRECTION; // Direction change to RXD
16 EnableInterrupt(); // enable interrupt again
주의: 주의할 부분은 LINE 12부터 LINE 16입니다. LINE 12이 필요한 이유는 그 시점에서 Interrupt 가 발생하여 Return Delay Time 보다 긴 시간 동안 Interrupt routine이 수행될 경우 Status Packet의 앞부분이 손상되기 때문입니다.
Instruction Packet을 전송할 때 Byte와 Byte사이의 Delay Time을 의미하는데, 이 시간이 1.5 msec가 넘을 경우 다이나믹셀은 전송 장애가 발생한 것으로 간주하고, 다시 Packet의 header(0xff 0xff 0xfd)를 기다립니다
Instruction Packet은 Main Controller가 장치(Device)로 보내는 명령 패킷.
Header 1 |
Header 2 |
Header 3 |
Reserved |
Packet ID |
Length 1 |
Length 2 |
Instruction |
Param |
Param |
Param |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
Packet ID |
Len_L |
Len_H |
Instruction |
Param 1 |
… |
Param N |
CRC_L |
CRC_H |
Packet의 시작을 나타내는 신호.
0x00으로 사용하며(0XFD는 사용할수 없음) Header와 동일한 기능을 함.
예를 들어, 다이나믹셀 위자드 2.0의 패킷 상세 정보에서, Reserved는 Header에 포함되어 사용.
다이나믹셀 위자드 2.0 패킷 상세정보
Instruction Packet을 받아 처리해야 할 장치의 ID를 나타내는 필드.
- 범위 : 0 ~ 252 (0x00 ~ 0xFC) 까지 253 개 사용 가능
- Broadcast ID : 254 (0xFE), 연결된 모든 장치가 Instruction Packet 을 실행하도록 함.
주의: Broadcast ID(254 (0xFE))는 Ping, Sync Read 및 Bulk Read 에만 Status Packet을 반환하며, 그 외 Instruction에는 Status Packet을 반환하지 않음.
Packet의 길이를 나타냄.
- 하위 바이트와 상위 바이트를 Instruction Packet에서 나누어서 보냄.
- Length는 Instruction, Parameter, CRC 필드의 Byte Size를 나타내는 필드
Length = Parameter 갯수 + 3
- Status Packet의 Length에는 ERROR 필드를 나타내는 1바이트가 추가.
Packet의 용도를 정의하는 필드
값 |
명령 |
설명 |
0x01 |
Ping |
Packet ID와 동일한 ID를 가지는 장치에 Packet이 도달했는지 여부 확인을 위한 Instruction |
0x02 |
Read |
장치로부터 데이터를 읽어오기 위한 Instruction |
0x03 |
Write |
장치에 데이터를 쓰기 위한 Instruction |
0x04 |
Reg Write |
Instruction Packet을 대기 상태로 등록하는 Instruction, Action 명령에 의해 실행됨 |
0x05 |
Action |
Reg Write 로 미리 등록한 Packet을 실행하는 Instruction |
0x06 |
Factory Reset |
Control Table을 공장 출하 상태의 기본값으로 되돌리는 Instruction |
0x08 |
Reboot |
장치를 재부팅 시키는 Instruction |
0x10 |
Clear |
장치의 특정 상태를 해제하는 Instruction |
0x20 |
Control Table Backup |
Control Table을 Backup 또는 복구하기 위한 Instruction |
0x55 |
Status(Return) |
Instruction Packet에 대한 Return packet |
0x82 |
Sync Read |
다수의 장치에 대해서, 동일한 Address에서 동일한 길이의 데이터를 한 번에 읽기 위한 Instruction |
0x83 |
Sync Write |
다수의 장치에 대해서, 동일한 Address에 동일한 길이의 데이터를 한 번에 쓰기 위한 Instruction |
0x8A |
Fast Sync Read |
다수의 장치에 대해서, 동안한 Address에서 동인한 길이의 데이터를 한 번에 읽기 위한 Instruction |
0x92 |
Bulk Read |
다수의 장치에 대해서, 서로 다른 Address에서 서로 다른 길이의 데이터를 한 번에 읽기 위한 Instruction |
0x93 |
Bulk Write |
다수의 장치에 대해서, 서로 다른 Address에 서로 다른 길이의 데이터를 한번에 쓰기 위한 Instruction |
0x9A |
Fast Bulk Read |
다수의 장치에 대해서, 서로 다른 Address에서 서로 다른 길이의 데이터를 한 번에 읽기 위한 Instruction |
- Instruction의 보조 데이터 필드로써, Instruction 별로 용도가 다름.
- 음수 데이터의 표현 방법 : 제품별로 차이가 있으므로, 해당 제품의 e-Manual을 참고 할 것.
Packet이 통신 중에 파손되었는지를 점검하기 위한 필드 (16bit CRC)
- 하위 바이트와 상위 바이트를 Instruction Packet에서 나누어서 보냄.
- CRC 계산 범위: Instruction Packet의 Header (FF FF FD 00)를 포함하여, CRC 필드 이전까지.
- CRC 계산 방법 및 예제 : CRC Calculation
Status Packet은 장치(Device)가 Main Controller로 보내는 응답 패킷. ERROR 필드가 추가된 것 외에는 Instruction Packet과 구성이 동일
Header 1 |
Header 2 |
Header 3 |
Reserved |
Packet ID |
Length 1 |
Length 2 |
Instruction |
ERR |
PARAM |
PARAM |
PARAM |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
ID |
Len_L |
Len_H |
Instruction |
Error |
Param 1 |
… |
Param N |
CRC_L |
CRC_H |
Status Packet의 Instruction은 0x55 (Status Instruction: 0x55) 로 고정
Instruction Packet 의 처리 결과를 나타냄
Bit 7 |
Bit 6 ~ Bit 0 |
Alert |
Error Number |
- Alert : 장치에 하드웨어적인 문제가 발생한 경우 1 로 Setting 됨. 이 경우 Control Table 의 Hardware error status 값을 읽어 보면 문제의 원인을 알 수 있음.
- Error Number : Instruction Packet 의 처리에 Error 가 발생한 경우.
Error Number |
Error |
설명 |
0x01 |
Result Fail |
전송된 Instruction Packet 을 처리하는데 실패한 경우 |
0x02 |
Instruction Error |
정의되지 않은 Instruction 을 사용한 경우 Reg Write 없이 Action 을 사용한 경우 |
0x03 |
CRC Error |
전송된 Packet 의 CRC 값이 맞지 않는 경우 |
0x04 |
Data Range Error |
해당 Address 에 쓰려는 Data 가 최소/최대값의 범위를 벗어난 경우 |
0x05 |
Data Length Error |
해당 Address 의 데이터 길이보다 짧은 데이터를 적으려고 한 경우 (예: 4 byte로 정의된 항목의 2 byte 만 쓰려고 하는 경우) |
0x06 |
Data Limit Error |
해당 Address 에 쓰려는 Data 가 Limit 값을 벗어난 경우 |
0x07 |
Access Error |
Read Only 혹은 정의되지 않은 Address 에 값을 쓰려고 한 경우 Write Only 혹은 정의되지 않은 Address 에 값을 읽으려고 한 경우 Torque Enable(ROM Lock) 상태에서 ROM 영역에 값을 쓰려고 한 경우 |
- Instruction의 보조 데이터 필드로써, Instruction 마다 용도가 다름.
- 음수 데이터의 표현 방법 : 제품별로 차이가 있으므로, 해당 제품의 e-Manual을 참고 할 것.
- Broadcast ID(254 (0xFE))는 Ping, Sync Read 및 Bulk Read 에만 응답하며, 그 외 Instruction에는 응답하지 않음. 예를 들어 Sync Write 및 Bulk Write Instruction에서는 응답 하지 않음.
- Control Table의 Status Return Level값에 따라 응답이 결정. 각 장치의 Status Return Level에서 설정가능한 값을 참고.
전송 시 처리 순서
- Packet 기본 형태 생성 후, Byte Stuffing(0xFD)
- 검사 범위 : Instruction 필드부터 Parameter 필드 전체(CRC 제외)
- 처리 방법 : “0xFF 0xFF 0xFD” 패턴이 나타날 경우, Byte Stuffing (0xFD) 을 추가
(“0xFF 0xFF 0xFD” 가 존재하면, 0xFD를 추가해서 “0xFF 0xFF 0xFD 0xFD”로 변경)
- Length : Byte Stuffing이 적용된 Length로 수정
- CRC : Byte Stuffing이 적용된 상태에서 CRC 계산
수신 시 처리 순서
- Header(0xFF 0xFF 0xFD) 검색 : Byte Stuffing(“0xFF 0xFF 0xFD 0xFD”)은 무시.
- Packet ID : Packet ID가 유효하면, Length 만큼 추가로 수신
- CRC : Byte Stuffing이 포함된 수신 Packet 상태에서 계산, CRC가 일치하면 Byte Stuffing을 제거
설명의 편의를 위하여, 다음과 같은 약어를 사용.
- Header : H
- Reserved: RSRV
- Length: LEN
- Instruction: INST
- Error: ERR
- Param: P
- 장치의 존재 여부 및 기본 정보를 얻기 위한 Instruction
- 장치는 Status Return Level에 관계없이, Ping Instruction에는 무조건 Status Packet을 전송
- Packet ID 필드가 0xFE(Broadcast ID)인 경우, 모든 장치는 정해진 순서에 따라 자신의 Status Packet 을 전송
Packet Parameters
참고: Status Packet은 각 장치로부터 받음.
Status Packet |
설명 |
Parameter 1 |
모델번호 LSB |
Parameter 2 |
모델번호 MSB |
Parameter 3 |
펌웨어 Version |
예제 1
예제 설명
- ID1(XM430-W210) : Model Number 1030(0x0406), Version of Firmware 38(0x26)인 경우
- Instruction Packet ID : 1
Ping Instruction Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x03 |
0x00 |
0x01 |
0x19 |
0x4E |
ID 1 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
P1 |
P2 |
P3 |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x07 |
0x00 |
0x55 |
0x00 |
0x06 |
0x04 |
0x26 |
0x65 |
0x5D |
예제 2
예제 설명
- ID1(XM430-W210) : Model Number 1030(0x0406), Version of Firmware 38(0x26)인 경우
- ID2(XM430-W210) : Model Number 1030(0x0406), Version of Firmware 38(0x26)인 경우
- Instruction Packet ID : 254(Broadcast ID)
Ping Instruction Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0xFE |
0x03 |
0x00 |
0x01 |
0x31 |
0x42 |
ID 1 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
P1 |
P2 |
P3 |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x07 |
0x00 |
0x55 |
0x00 |
0x06 |
0x04 |
0x26 |
0x65 |
0x5D |
ID 2 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
P1 |
P2 |
P3 |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x02 |
0x07 |
0x00 |
0x55 |
0x00 |
0x06 |
0x04 |
0x26 |
0x6F |
0x6D |
설명
- Control Table 의 값을 읽어오기 위한 Instruction
- 음수 데이터의 표현 방법 : 제품별로 차이가 있으므로, 해당 제품의 e-Manual 을 참고 할 것.
- Broadcast ID(254 (0xFE))에 대해서는 응답하지 않음.
참고: Control Table 범위를 초과하여 요청할 경우, Error 필드에 Access Error가 채워지고, Parameter가 없는 Status Packet을 응답
Packet Parameters
Instruction Packet |
설명 |
Parameter 1 |
시작 주소의 하위 바이트 |
Parameter 2 |
시작 주소의 상위 바이트 |
Parameter 3 |
데이터 길이(X)의 하위 바이트 |
Parameter 4 |
데이터 길이(X)의 상위 바이트 |
Status Packet |
설명 |
Parameter 1 |
첫 번째 바이트 |
Parameter 2 |
두 번째 바이트 |
… |
… |
Parameter X |
X 번째 바이트 |
예제
예제 설명
- ID1(XM430-W210) : Present Position(132, 0x0084, 4[byte])이 166(0x000000A6)인 경우
Read Instruction Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
P1 |
P2 |
P3 |
P4 |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x07 |
0x00 |
0x02 |
0x84 |
0x00 |
0x04 |
0x00 |
0x1D |
0x15 |
ID 1 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
P1 |
P2 |
P3 |
P4 |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x08 |
0x00 |
0x55 |
0x00 |
0xA6 |
0x00 |
0x00 |
0x00 |
0x8C |
0xC0 |
설명
- Control Table 에 값을 쓰기 위한 Instruction
- 음수 데이터의 표현 방법 : 제품별로 차이가 있으므로, 해당 제품의 e-Manual을 참고 할 것.
Packet Parameters
Instruction Packet |
설명 |
Parameter 1 |
시작 주소의 하위 바이트 |
Parameter 2 |
시작 주소의 상위 바이트 |
Parameter 2+1 |
첫번째 바이트 |
Parameter 2+2 |
두번째 바이트 |
… |
… |
Parameter 2+X |
X번째 바이트 |
예제
예제 설명
- ID1(XM430-W210) : Goal Position(116, 0x0074, 4[byte])를 512(0x00000200)로 변경하려는 경우
Write Instruction Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
P1 |
P2 |
P3 |
P4 |
P5 |
P6 |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x09 |
0x00 |
0x03 |
0x74 |
0x00 |
0x00 |
0x02 |
0x00 |
0x00 |
0xCA |
0x89 |
ID 1 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x04 |
0x00 |
0x55 |
0x00 |
0xA1 |
0x0C |
설명
- Write Instruction과 유사하지만, 동기화 특성이 향상된 Instruction
- Write Instruction은 Instruction Packet 을 받으면 즉시 실행됨.
- Reg Write 와 Action Instruction을 사용하면, 다수의 장치를 동시에 구동할 수 있음.
- Reg Write Instruction은 Instruction Packet 을 대기 상태로 등록하고, Control table Registered Instruction을 ‘1’로 설정함.
- Action Instruction 을 수신하면, 등록된 Packet을 실행하고, Control Table Registered Instruction을 ‘0’으로 변경함.
Packet Parameters
Instruction Packet |
설명 |
Parameter 1 |
시작 주소의 하위 바이트 |
Parameter 2 |
시작 주소의 상위 바이트 |
Parameter 2+1 |
첫번째 바이트 |
Parameter 2+2 |
두번째 바이트 |
… |
… |
Parameter 2+X |
X번째 바이트 |
예제
Condition
- ID1(XM430-W210) : Goal Velocity(104, 0x0068, 4[byte])를 200(0x000000C8)로 변경하려는 경우
Reg Write Instruction Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
P1 |
P2 |
P3 |
P4 |
P5 |
P6 |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x09 |
0x00 |
0x04 |
0x68 |
0x00 |
0xC8 |
0x00 |
0x00 |
0x00 |
0xAE |
0x8E |
ID 1 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x04 |
0x00 |
0x55 |
0x00 |
0xA1 |
0x0C |
설명
- Reg Write Instruction으로 등록된 Packet을 실행하라는 Instruction
- Write Instruction으로 다수의 장치를 제어할 경우, Packet을 최초로 수신한 장치와 마지막으로 수신한 장치는 실행 시점에 차이가 발생함.
- Reg Write 와 Action Instruction을 사용하면, 다수의 장치를 동시에 구동할 수 있음.
예제
Condition
- ID1(XM430-W210) : Reg Write Instruction에 의해 Instruction이 등록된 경우
Action Instruction Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x03 |
0x00 |
0x05 |
0x02 |
0xCE |
ID 1 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x04 |
0x00 |
0x55 |
0x00 |
0xA1 |
0x0C |
설명
- Control Table 을 공장 출하 시의 기본값으로 되돌리는 Instruction.
- Factory Reset (0x06) Instruction이 실행되면, 장치는 재부팅되고 LED가 4번 점멸
- Packet ID가 Broadcast ID(0xFE)이고 Option이 Reset all value(0xFF)일 경우, Factory Reset Instruction (0x06)은 동작하지 않음
- MX(2.0) FW42, 다이나믹셀-X 시리즈 FW42 이상부터 적용
Parameters
Instruction Packet |
설명 |
Parameter 1 |
0xFF : 모든 값 초기화 0x01 : ID를 제외한 모든 값 초기화 0x02 : ID와 통신속도를 제외한 모든 값 초기화 |
예제
예제 설명
- ID1(XM430-W210) : Option 0x01(ID를 제외한 모든 값 초기화)
Factory Reset Instruction Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
P1 |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x04 |
0x00 |
0x06 |
0x01 |
0xA1 |
0xE6 |
ID 1 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x04 |
0x00 |
0x55 |
0x00 |
0xA1 |
0x0C |
설명
예제
예제 설명
- ID1(XM430-W210)를 Reboot 시킬 경우
Reboot Instruction Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x03 |
0x00 |
0x08 |
0x2F |
0x4E |
ID 1 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x04 |
0x00 |
0x55 |
0x00 |
0xA1 |
0x0C |
설명
- 장치의 특정 상태를 해제하는 Instruction
- 특이사항 : MX(2.0) FW42 이상, 다이나믹셀-X 시리즈 FW42 이상부터 지원
Parameters
P1 |
P2 ~ P5 |
설명 |
0x01 |
고정값 (0x44 0x58 0x4C 0x22) |
현재 위치(Present Position) 값을 1회전(0~4095) 이내의 절대위치 값으로 초기화. 정지된 상태에서만 Clear 가능. 구동중에 Clear Inst Packet을 전송할 경우, Status Packet의 Error 필드에 Result Fail(0x01) 발생. |
0x02 |
고정값 (0x45 0x52 0x43 0x4C) |
DYNAMIXEL에 발생한 Error를 Clear. Clear가 불가능한 Error가 있거나 Clear 조건이 아닌 경우 Error는 Clear 되지 않으며 Status Packet의 Error 필드에 Result Fail(0x01) 발생. DYNAMIXEL Y시리즈만 지원함. |
… |
- |
사용하지 않음 |
0xFF |
- |
사용하지 않음 |
예제
예제 설명
- ID1(XM430-W210) : 다수의 회전 정보(멀티턴)을 초기화
Clear Instruction Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
P1 |
P2 |
P3 |
P4 |
P5 |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x08 |
0x00 |
0x10 |
0x01 |
0x44 |
0x58 |
0x4C |
0x22 |
0xB1 |
0xDC |
ID 1 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x04 |
0x00 |
0x55 |
0x00 |
0xA1 |
0x0C |
설명
- 현재 상태의 Control table 값을 Backup 영역에 저장하거나, 저장된 값으로 EEPROM을 복구하기 위한 Instruction.
- Control Table Backup 명령은 Torque Enable 항목이 ‘0’(Off) 상태일 때만 수행되며, ‘1’(On) 상태일 때에는 Result Fail Packet을 응답함.
- 지원 다이나믹셀: X430, X540 시리즈 FW45 이상, X330 시리즈 FW46 이상, 다이나믹셀-P 시리즈 FW12 이상부터 지원 (XL-320은 미지원).
- Backup으로 저장하는 데이터.
- EEPROM 영역: 전체
- RAM 영역
- 속도 제어기의 PI gains
- 위치 제어기의 PID gains
- Feedforward 1st, 2nd Gain
- Profile Acceleration, Velocity
- Indirect Address (다이나믹셀-P 시리즈 제외)
참고
- 다이나믹셀 위자드 2.0 백업 및 복구
- RAM 영역의 데이터는 Control Table의 Startup Configuration(60) 설정으로 복구할 수 있음 (RAM 영역 복구 항목 참조)
Parameters
P1 |
P2 ~ P5 |
설명 |
0x01 |
고정값 (0x43 0x54 0x52 0x4C) |
현재 상태의 Control Table 데이터를 Backup 영역에 저장 |
0x02 |
고정값 (0x43 0x54 0x52 0x4C) |
Backup 영역에 저장된 Control Table 데이터 중에서 EEPROM 영역의 데이터를 복구 패킷 처리 후 자동으로 재부팅 합니다. |
0x03 |
- |
사용하지 않음 |
⋯ |
- |
사용하지 않음 |
0xFF |
- |
사용하지 않음 |
예제
예제 1 설명
- ID 1(XC330-T288) : 현재 상태의 Control Table 데이터를 Backup영역에 저장
Control Table Backup Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
P1 |
P2 |
P3 |
P4 |
P5 |
CRC1 |
CRC2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x08 |
0x00 |
0x20 |
0x01 |
0x43 |
0x54 |
0x52 |
0x4C |
0x16 |
0xF5 |
ID1 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
CRC1 |
CRC2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x04 |
0x00 |
0x55 |
0x00 |
0xA1 |
0x0C |
예제 2 설명
- ID1 (XC330-T288) : Backup 영역에 저장된 EEPROM 데이터를 복구
- 성공적으로 EEPROM 복구 후 자동적으로 재부팅
Control Table EEPROM Restoring Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
P1 |
P2 |
P3 |
P4 |
P5 |
CRC1 |
CRC2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x08 |
0x00 |
0x20 |
0x02 |
0x43 |
0x54 |
0x52 |
0x4C |
0x92 |
0xF5 |
ID1 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
CRC1 |
CRC2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x04 |
0x00 |
0x55 |
0x00 |
0xA1 |
0x0C |
설명
- 하나의 Instruction Packet 으로 동시에 여러 개 장치의 데이터를 읽을 때 사용하는 Instruction
- 데이터의 Address와 Data Length가 모두 동일해야 함.
- 데이터의 주소가 연속적이지 않을 경우, Indirect Address를 사용할 수 있음.
- Instruction Packet에 입력된 ID 순서대로 다이나믹셀이 Status Packet 응답.
- Packet ID 필드 : 0xFE (Broadcast ID)
Parameters
Instruction Packet |
설명 |
Parameter 1 |
시작 주소의 하위 바이트 |
Parameter 2 |
시작 주소의 상위 바이트 |
Parameter 3 |
데이터 길이(X)의 하위 바이트 |
Parameter 4 |
데이터 길이(X)의 상위 바이트 |
Parameter 4+1 |
첫번째 장치 ID |
Parameter 4+2 |
두번째 장치 ID |
… |
… |
Parameter 4+X |
X번째 장치의 ID |
참고 : 각 장치는 Sync Read Instruction Packet에 대해 응답 시, Status Packet을 각각 반환. 아래 예제를 참고할 것.
Status Packet |
설명 |
Parameter 1 |
Frist Byte |
Parameter 2 |
Second Byte |
… |
… |
Parameter X |
X번째 바이트 |
예제
예제 설명
- ID1(XM430-W210) : Present Position(132, 0x0084, 4[byte])이 166(0x000000A6)인 경우
- ID2(XM430-W210) : Present Position(132, 0x0084, 4[byte])이 2,079(0x0000081F)인 경우
Sync Read Instruction Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
P1 |
P2 |
P3 |
P4 |
P5 |
P6 |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0xFE |
0x09 |
0x00 |
0x82 |
0x84 |
0x00 |
0x04 |
0x00 |
0x01 |
0x02 |
0xCE |
0xFA |
ID 1 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
P1 |
P2 |
P3 |
P4 |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x08 |
0x00 |
0x55 |
0x00 |
0xA6 |
0x00 |
0x00 |
0x00 |
0x8C |
0xC0 |
ID 2 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
P1 |
P2 |
P3 |
P4 |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x02 |
0x08 |
0x00 |
0x55 |
0x00 |
0x1F |
0x08 |
0x00 |
0x00 |
0xBA |
0xBE |
설명
- 하나의 Instruction Packet 으로 동시에 여러 개 장치를 제어하기 위해 사용하는 Instruction
- 데이터의 Address와 Data Length가 모두 동일해야 함.
- 데이터의 주소가 연속적이지 않을 경우, Indirect Address를 사용할 수 있음.
- Packet ID 필드 : 0xFE (Broadcast ID)
Parameters
Instruction Packet |
설명 |
Parameter 1 |
시작 주소의 하위 바이트 |
Parameter 2 |
시작 주소의 상위 바이트 |
Parameter 3 |
데이터 길이(X)의 하위 바이트 |
Parameter 4 |
데이터 길이(X)의 상위 바이트 |
Parameter 5 |
첫번째 장치 ID |
Parameter 5+1 |
첫번째 장치 첫번째 바이트 |
Parameter 5+2 |
첫번째 장치 두번째 바이트 |
… |
첫번째 장치 … |
Parameter 5+X |
첫번째 장치 X번째 바이트 |
Parameter 6 |
두번째 장치 ID |
Parameter 6+1 |
두번째 장치 첫번째 바이트 |
Parameter 6+2 |
두번째 장치 두번째 바이트 |
… |
두번째 장치 … |
Parameter 6+X |
두번째 장치 X번째 바이트 |
… |
… |
예제
예제 설명
- ID1(XM430-W210) : Goal Position(116, 0x0074, 4[byte])을 150(0x00000096)로 변경하려는 경우
- ID2(XM430-W210) : Goal Position(116, 0x0074, 4[byte])을 170(0x000000AA)로 변경하려는 경우
Sync Write Instruction Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
P1 |
P2 |
P3 |
P4 |
0xFF |
0xFF |
0xFD |
0x00 |
0xFE |
0x11 |
0x00 |
0x83 |
0x74 |
0x00 |
0x04 |
0x00 |
P5 |
P6 |
P7 |
P8 |
P9 |
P10 |
P11 |
P12 |
P13 |
P14 |
CRC 1 |
CRC 2 |
0x01 |
0x96 |
0x00 |
0x00 |
0x00 |
0x02 |
0xAA |
0x00 |
0x00 |
0x00 |
0x82 |
0x87 |
설명
- 보다 빠른 Sync Read Instruction(0x82) 통신을 하기 위해서 고안된 프로토콜
- Fast Sync Read 패킷을 받은 다수의 다이나믹셀은 마치 하나의 다이나믹셀이 응답하는 것처럼 Status Packet을 하나로 구성하여 응답한다.
- Instruction Packet은 Sync Read (0x82) 패킷과 동일한 방식으로 구성된다.
- 지원 다이나믹셀: X430/540 시리즈(2X 시리즈 제외, FW v45 이상), X330(FW v46 이상), P 시리즈(FW v12 이상), RH-P12-RN(A)(FW v13 이상)에서 지원.
참고: DYNAMIXEL Tips | Use Fast Sync and Fast Bulk Read Instruction for Speedy Communication
Parameter
Instruction Packet |
설명 |
Parameter 1 |
시작 주소의 하위 바이트 |
Parameter 2 |
시작 주소의 상위 바이트 |
Parameter 3 |
데이터 길이(X)의 하위 바이트 |
Parameter 4 |
데이터 길이(X)의 상위 바이트 |
Parameter 4+1 |
첫번째 장치 ID |
Parameter 4+2 |
두번째 장치 ID |
⋯ |
⋯ |
Parameter 4+n |
n번째 장치 ID |
Status Packet |
설명 |
Parameter 1 |
첫번째 장치 ID |
Parameter 2 |
첫번째 장치 First Byte |
Parameter 3 |
첫번째 장치 Second Byte |
⋯ |
⋯ |
Parameter X |
첫번째 장치 X번째 바이트 |
Parameter X+1 |
첫번째 장치 CRC 하위 바이트 |
Parameter X+2 |
첫번째 장치 CRC 상위 바이트 |
Parameter X+3 |
두번째 장치 Error |
Parameter X+4 |
두번째 장치 ID |
Parameter X+4+1 |
두번째 장치 First Byte |
Parameter X+4+2 |
두번째 장치 Second Byte |
⋯ |
⋯ |
Parameter 2X+4 |
두번째 장치 X번째 바이트 |
Parameter 2X+4+1 |
두번째 장치 CRC 하위 바이트 |
Parameter 2X+4+2 |
두번째 장치 CRC 상위 바이트 |
⋯ |
⋯ |
Parameter nX+4 |
n번째 장치 X번째 바이트 |
참고: 각 장치의 CRC 값은 다이나믹셀 간의 패킷 무결성 확인을 위하여 다이나믹셀 내부 연산에 이용되며, Main Controller는 Status Packet 마지막의 CRC만 확인하여도 무방함.
참고: 각 장치는 Fast Sync Read Instruction Packet에 대해 응답 시, Status Packet 하나의 부분을 각각 반환. 아래 예제를 참고할 것.
참고: Fast Sync Read Status Packet은 Byte Stuffing(0xFD) 처리를 하지 않음.
예제
예제 설명
- ID3(XC330-T288) : Present Position(132, 0x0084, 4[byte])이 166(0x000000A6)인 경우
- ID7(XC330-T288) : Present Position(132, 0x0084, 4[byte])이 2,079(0x0000081F)인 경우
- ID4(XC330-T288) : Present Position(132, 0x0084, 4[byte])이 1,023(0x000003FF)인 경우
Fast Sync Read Instruction Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
P1 |
P2 |
P3 |
P4 |
P5 |
P6 |
P7 |
CRC1 |
CRC2 |
0xFF |
0xFF |
0xFD |
0x00 |
0xFE |
0x0A |
0x00 |
0x8A |
0x84 |
0x00 |
0x04 |
0x00 |
0x03 |
0x07 |
0x04 |
0x20 |
0xF2 |
ID 3 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
ID1 |
D1 |
D2 |
D3 |
D4 |
CRC1 |
CRC2 |
0xFF |
0xFF |
0xFD |
0x00 |
0xFE |
0x19 |
0x00 |
0x55 |
0x00 |
0x03 |
0xA6 |
0x00 |
0x00 |
0x00 |
0x84 |
0x08 |
ID 7 Status Packet
ERR |
ID2 |
D1 |
D2 |
D3 |
D4 |
CRC1 |
CRC2 |
0x00 |
0x07 |
0x1F |
0x08 |
0x00 |
0x00 |
0x16 |
0xCA |
ID 4 Status Packet
ERR |
ID3 |
D1 |
D2 |
D3 |
D4 |
CRC1 |
CRC2 |
0x00 |
0x04 |
0xFF |
0x03 |
0x00 |
0x00 |
0xD1 |
0x9E |
설명
- Sync Read 와 유사하게, 하나의 Instruction Packet 으로 동시에 여러 개 장치의 데이터를 읽을 때 사용하는 Instruction
- 데이터의 Address와 Data Length가 장치별로 달라도 사용 가능.
- Parameter에 동일한 아이디가 여러 번 사용될 수 없음. 즉, 하나의 장치에서는 한 번만 읽을 수 있음.
- 데이터의 주소가 연속적이지 않을 경우, Indirect Address를 사용할 수 있음.
- Instruction Packet에 입력된 ID 순서대로 다이나믹셀이 Status Packet 응답.
- Packet ID 필드 : 0xFE (Broadcast ID)
Parameters
Instruction Packet |
설명 |
Parameter 1 |
첫번째 장치 ID |
Parameter 2 |
첫번째 장치 시작 주소 하위 바이트 |
Parameter 3 |
첫번째 장치 시작 주소 상위 바이트 |
Parameter 4 |
첫번째 장치 데이터 길이 하위 바이트 |
Parameter 5 |
첫번째 장치 데이터 길이 상위 바이트 |
Parameter 6 |
두번째 장치 ID |
Parameter 7 |
두번째 장치 시작 주소 하위 바이트 |
Parameter 8 |
두번째 장치 시작 주소 상위 바이트 |
Parameter 9 |
두번째 장치 데이터 길이 하위 바이트 |
Parameter 10 |
두번째 장치 데이터 길이 상위 바이트 |
… |
… |
Status Packet |
설명 |
Parameter 1 |
첫번째 바이트 |
Parameter 2 |
두번째 바이트 |
… |
… |
Parameter X |
X번째 바이트 |
참고 : 각 장치는 Bulk Read Instruction Packet에 대해 Status Packet을 각각 반환. 아래 예제를 참고할 것.
예제
Condition
- ID1(XM430-W210) : Present Voltage(144, 0x0090, 2[byte])이 119(0x0077)인 경우
- ID2(XM430-W210) : Present Temperature(146, 0x0092, 1[byte])이 36(0x24)인 경우
Bulk Read Instruction Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
P1 |
P2 |
P3 |
P4 |
P5 |
0xFF |
0xFF |
0xFD |
0x00 |
0xFE |
0x0D |
0x00 |
0x92 |
0x01 |
0x90 |
0x00 |
0x02 |
0x00 |
P6 |
P7 |
P8 |
P9 |
P10 |
CRC 1 |
CRC 2 |
0x02 |
0x92 |
0x00 |
0x01 |
0x00 |
0x1A |
0x05 |
ID 1 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
P1 |
P2 |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x01 |
0x06 |
0x00 |
0x55 |
0x00 |
0x77 |
0x00 |
0xC3 |
0x69 |
ID 2 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
P1 |
CRC 1 |
CRC 2 |
0xFF |
0xFF |
0xFD |
0x00 |
0x02 |
0x05 |
0x00 |
0x55 |
0x00 |
0x24 |
0x8B |
0xA9 |
설명
- Sync Write 와 유사하게, 하나의 Instruction Packet 으로 여러 개 장치를 제어하기 위해 사용하는 Instruction.
- 데이터의 Address와 Data Length가 장치별로 달라도 사용 가능.
- Parameter에 동일한 아이디가 여러 번 사용될 수 없음. 즉, 하나의 장치에는 한 번만 쓸 수 있음.
- 데이터의 주소가 연속적이지 않을 경우, Indirect Address를 사용할 수 있음.
- Packet ID 필드 : 0xFE (Broadcast ID)
Parameters
Instruction Packet |
설명 |
Parameter 1 |
첫번째 장치 ID |
Parameter 2 |
첫번째 장치 시작 주소 하위 바이트 |
Parameter 3 |
첫번째 장치 시작 주소 상위 바이트 |
Parameter 4 |
첫번째 장치 데이터 길이 하위 바이트 |
Parameter 5 |
첫번째 장치 데이터 길이 상위 바이트 |
Parameter 5+1 |
첫번째 장치 첫번째 바이트 |
Parameter 5+2 |
첫번째 장치 두번째 바이트 |
… |
… |
Parameter 5+X |
첫번째 장치 X번째 바이트 |
Parameter 6+X |
두번째 장치 ID |
Parameter 7+X |
두번째 장치 시작 주소 하위 바이트 |
Parameter 8+X |
두번째 장치 시작 주소 상위 바이트 |
Parameter 9+X |
두번째 장치 데이터 길이 하위 바이트 |
Parameter 10+X |
두번째 장치 데이터 길이 상위 바이트 |
Parameter 10+X+1 |
두번째 장치 첫번째 바이트 |
Parameter 10+X+2 |
두번째 장치 두번째 바이트 |
… |
… |
Parameter 10+X+Y |
두번째 장치 Y번째 바이트 |
… |
… |
예제
Condition
- ID1(XM430-W210) : Max Voltage Limit(32, 0x0020, 2[byte])을 160(0x00A0) 로 변경하려는 경우
- ID2(XM430-W210) : Temperature Limit(31, 0x001F, 1[byte])를 80(0x50)으로 쓸 경우
Bulk Write Instruction Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
P1 |
P2 |
P3 |
P4 |
P5 |
P6 |
P7 |
0xFF |
0xFF |
0xFD |
0x00 |
0xFE |
0x10 |
0x00 |
0x93 |
0x01 |
0x20 |
0x00 |
0x02 |
0x00 |
0xA0 |
0x00 |
P8 |
P9 |
P10 |
P11 |
P12 |
P13 |
CRC 1 |
CRC 2 |
0x02 |
0x1F |
0x00 |
0x01 |
0x00 |
0x50 |
0xB7 |
0x68 |
설명
- 보다 빠른 Bulk Read 통신을 하기 위해서 고안된 프로토콜
- Fast Bulk Read 패킷을 받은 다수의 다이나믹셀은 마치 하나의 다이나믹셀이 응답하는 것처럼 Status Packet을 하나로 구성하여 응답한다.
- Instruction Packet은 Bulk Read 패킷과 동일한 방식으로 구성된다.
- 지원 다이나믹셀: X430/540 시리즈(2X 시리즈 제외, FW v45 이상), X330(FW v46 이상), P 시리즈(FW v12 이상), RH-P12-RN(A)(FW v13 이상)에서 지원.
참고: DYNAMIXEL Tips | Use Fast Sync and Fast Bulk Read Instruction for Speedy Communication
Parameters
Instruction Packet |
설명 |
Parameter 1 |
첫번째 장치 ID |
Parameter 2 |
첫번째 장치 시작 주소 하위 바이트 |
Parameter 3 |
첫번째 장치 시작 주소 상위 바이트 |
Parameter 4 |
첫번째 장치 데이터 길이(X1)의 하위 바이트 |
Parameter 5 |
첫번째 장치 데이터 길이(X1)의 상위 바이트 |
Parameter 6 |
두번째 장치 ID |
Parameter 7 |
두번째 장치 시작 주소 하위 바이트 |
Parameter 8 |
두번째 장치 시작 주소 상위 바이트 |
Parameter 9 |
두번째 장치 데이터 길이(X2)의 하위 바이트 |
Parameter 10 |
두번째 장치 데이터 길이(X2)의 상위 바이트 |
Status Packet |
설명 |
Parameter 1 |
첫번째 장치 ID |
Parameter 2 |
첫번째 장치 First Byte |
Parameter 3 |
첫번째 장치 Second Byte |
⋯ |
⋯ |
Parameter X1 |
첫번째 장치 X1번째 바이트 |
Parameter X1+1 |
첫번째 장치 CRC 하위 바이트 |
Parameter X1+2 |
첫번째 장치 CRC 상위 바이트 |
Parameter X1+3 |
두번째 장치 Error |
Parameter X1+4 |
두번째 장치 ID |
Parameter X1+4+1 |
두번째 장치 First Byte |
Parameter X1+4+2 |
두번째 장치 Second Byte |
⋯ |
⋯ |
Parameter X1+4+X2 |
두번째 장치 X2번째 바이트 |
Parameter X1+4+X2+1 |
두번째 장치 CRC 하위 바이트 |
Parameter X1+4+X2+2 |
두번째 장치 CRC 상위 바이트 |
⋯ |
⋯ |
Parameter X1+4+X2+ ⋯ 4+Xn |
n번째 장치 Xn번째 바이트 |
참고 : 각 장치의 CRC 값은 다이나믹셀 간의 패킷 무결성 확인을 위하여 다이나믹셀 내부 연산에 이용되며, Main Controller는 Status Packet 마지막의 CRC만 확인하여도 무방함.
참고 : 각 장치는 Fast Bulk Read Instruction Packet에 대해 응답 시, Status Packet 하나의 부분을 각각 반환. 아래 예제를 참고할 것.
참고 : Fast Bulk Read Status Packet은 Byte Stuffing(0xFD) 처리를 하지 않음.
예제
예제 설명
- ID3(XC330-T288) : Present Position(132, 0x0084, 4[byte])이 166(0x000000A6)인 경우
- ID7(XC330-T288) : Present PWM(124, 0x007C, 2[byte])이 421(0x01A5)인 경우
- ID4(XC330-T288) : Present Temperature(146, 0x0092, 1[byte])이 31(0x1F)인 경우
Fast Bulk Read Instruction Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
P1 |
P2 |
P3 |
P4 |
P5 |
P6 |
P7 |
P8 |
0xFF |
0xFF |
0xFD |
0x00 |
0xFE |
0x12 |
0x00 |
0x9A |
0x03 |
0x84 |
0x00 |
0x04 |
0x00 |
0x07 |
0x7C |
0x00 |
P9 |
P10 |
P11 |
P12 |
P13 |
P14 |
P15 |
CRC1 |
CRC2 |
0x02 |
0x00 |
0x04 |
0x92 |
0x00 |
0x01 |
0x00 |
0x20 |
0xF2 |
ID 3 Status Packet
H1 |
H2 |
H3 |
RSRV |
Packet ID |
LEN1 |
LEN2 |
INST |
ERR |
ID1 |
D1 |
D2 |
D3 |
D4 |
CRC1 |
CRC2 |
0xFF |
0xFF |
0xFD |
0x00 |
0xFE |
0x14 |
0x00 |
0x55 |
0x00 |
0x03 |
0xA6 |
0x00 |
0x00 |
0x00 |
0x67 |
0xA4 |
ID 7 Status Packet
ERR |
ID2 |
D1 |
D2 |
CRC1 |
CRC2 |
0x00 |
0x07 |
0xA5 |
0x01 |
0x24 |
0x74 |
ID 4 Status Packet
ERR |
ID2 |
D1 |
CRC1 |
CRC2 |
0x00 |
0x04 |
0x1F |
0xD9 |
0xC1 |