작업 파일 전송
작업 파일 명령 없이 실행하려면, 작업 파일에 명령을 삽입할 때 0x3121을 사용하십시오
0x3001 FILE_INSTRUCTION
티치 펜던트가 작업 파일 명령을 전송할 때 이 명령을 사용합니다.
{
"robot": 1, // 로봇 번호
"cmd->toJson()" // 명령 json 목록
}작업 파일 송수신 과정
시나리오 1: 컨트롤러의 작업 파일이 티치 펜던트보다 적음, 티치 펜던트가 컨트롤러에 작업 파일을 업로드해야 함
단계 1: 티치 펜던트가 컨트롤러에 컨트롤러 ID 가져오기 명령 전송
0x5052 IDENTIFY_NUMBER_INQUIRE
컨트롤러 응답: 0x5053 IDENTIFY_NUMBER_RESPOND
{
"controllerID": "4DC9F0249098C82E" // 컨트롤러 ID
}| 파라미터 | 타입 | 설명 |
|---|---|---|
| controllerID | string | 컨트롤러 ID |
연결된 컨트롤러 ID를 가져온 후, 작업 파일 동기화 시 이 ID가 알려진 ID인지 판단해야 합니다. 알려진 ID인 경우 경로 dir/controllerID가 존재하는지 판단하고, 존재하면 아무 작업도 하지 않습니다; 존재하지 않으면 작업 파일 경로를 생성합니다. 형식: dir/controllerID/robotJob/R1. 여러 로봇인 경우 R1-4를 나타냅니다.
단계 2: 티치 펜던트가 컨트롤러에 작업 파일 목록 가져오기 명령 전송
0x5532 JOBFILE_LIST_INQUIRE
컨트롤러 응답: 0x5533 JOBFILE_SUM_RESPOND
{
"absolutepath": ["/job/R1/", "/job/R2/", "/job/R3/", "/job/R4/"], // 작업 파일의 폴더 목록
"jobfilenum": [2, 33, 233, 666] // 작업 파일 폴더에 포함된 파일 개수
}| 파라미터 | 타입 | 설명 |
|---|---|---|
| absolutepath | array | 작업 파일의 폴더 목록 |
| jobfilenum | array | 각 작업 파일 폴더에 포함된 파일 개수 |
이때 다운로드 정지 타이머를 시작하고 5초로 설정합니다. 이는 파일 다운로드 과정에서 대기 시간 초과 여부를 판단하는 데 사용됩니다.
단계 3: 컨트롤러가 능동적으로 티치 펜던트에 작업 파일 목록 전송
0x5534 JOBFILE_LIST_RESPOND
{
"robot": 1,
"listnum": 2, // 최대 10개
"jobfilelist": [
{
"name": "xxx.JBR", // 작업 파일 이름
"MD5": "123" // MD5 값, 파일이 동일한지 판단하는 데 사용
},
{
"name": "yyy.JBR",
"MD5": "132"
}
]
}| 파라미터 | 타입 | 설명 |
|---|---|---|
| robot | int | 로봇 번호 |
| listnum | int | 목록 수량, 최대 10개 |
| jobfilelist | array | 작업 파일 목록 |
컨트롤러가 응답하는 파라미터의 역할은 로컬 작업 파일과 비교하는 것입니다. 파일이 동일한 경우 MD5 값이 동일한지 판단하고, MD5 값이 동일하면 처리하지 않으며, 다르면 로컬 파일을 삭제하고 다시 다운로드해야 합니다. 다운로드해야 할 파일 기록: 파일 이름과 경로를 다운로드 작업 파일 목록에 저장합니다 (절대 경로 포함), 파일이 다른 경우에도 다운로드해야 할 파일을 목록에 기록합니다.
단계 4: 파일 전송 연결
파일 다운로드 및 업로드에 대해, 티치 펜던트는 5000 포트에 연결하여 파일 전송을 수행해야 합니다 (명령 등의 명령 전송은 6000 포트를 사용).
단계 5: 티치 펜던트와 컨트롤러 파일 전송 네트워크가 연결됨, 파일 전송 시작
단계 6: 티치 펜던트가 업로드해야 할 작업 파일의 이름과 크기 전송
0x5501 REQUEST_UPLOAD_FILE
{
"name": "vxWorks", // 티치 펜던트가 전송하는 파일 이름
"size": 4096 // 티치 펜던트가 전송하는 파일 크기
}| 파라미터 | 타입 | 설명 |
|---|---|---|
| name | string | 티치 펜던트가 전송하는 파일 이름 |
| size | int | 티치 펜던트가 전송하는 파일 크기 |
티치 펜던트가 파일 업로드를 요청하기 시작하고, 컨트롤러의 응답을 기다립니다.
단계 7: 컨트롤러가 업로드 동의 여부 응답
0x5502 REQUEST_UPLOAD_RESPOND
{
"answer": "yes" // "yes"는 파일 업로드 요청에 동의함을 의미, "busy"는 컨트롤러가 사용 중임을 의미
}| 파라미터 | 타입 | 설명 |
|---|---|---|
| answer | string | yes=업로드 동의, busy=컨트롤러 사용 중 |
단계 8: 티치 펜던트가 "yes"를 수신하고 파일 전송 시작
0x5512
파일은 바이너리 스트림으로 기록되며, 슬라이싱하여 순환 전송합니다. 남은 파일 크기가 규정된 값(2*1024)을 초과하면, 매번 규정된 데이터 크기를 전송하고, 남은 파일 크기가 매번 전송하는 데이터 크기보다 작아지면 남은 파일 데이터를 전송 완료합니다.
단계 9: 컨트롤러가 파일 수신 완료
0x5513 RECEIVE_UPLOAD_FINISH
{
"finish": true // 다운로드 타이머 정지 대기, 새로 업로드된 파일 가져오기
}| 파라미터 | 타입 | 설명 |
|---|---|---|
| finish | bool | true=다운로드 타이머 정지 대기, 새로 업로드된 파일 가져오기 |
단계 10: 여러 작업 파일을 컨트롤러에 동기화해야 하는 경우 단계 6~9 반복
시나리오 2: 컨트롤러의 작업 파일이 티치 펜던트보다 많음, 티치 펜던트가 컨트롤러에서 작업 파일을 다운로드해야 함
1~5 업로드/다운로드 통신은 동일, 티치 펜던트와 컨트롤러 파일 전송 네트워크가 연결됨, 파일 전송 시작.
단계 1: 티치 펜던트가 컨트롤러에 컨트롤러 ID 가져오기 명령 전송
0x5052 IDENTIFY_NUMBER_INQUIRE
컨트롤러 응답: 0x5053 IDENTIFY_NUMBER_RESPOND
{
"controllerID": "4DC9F0249098C82E" // 컨트롤러 ID
}| 파라미터 | 타입 | 설명 |
|---|---|---|
| controllerID | string | 컨트롤러 ID |
연결된 컨트롤러 ID를 가져온 후, 작업 파일 동기화 시 이 ID가 알려진 ID인지 판단해야 합니다. 알려진 ID인 경우 경로 dir/controllerID가 존재하는지 판단하고, 존재하면 아무 작업도 하지 않습니다; 존재하지 않으면 작업 파일 경로를 생성합니다. 형식: dir/controllerID/robotJob/R1. 여러 로봇인 경우 R1-4를 나타냅니다.
단계 2: 티치 펜던트가 컨트롤러에 작업 파일 목록 가져오기 명령 전송
0x5532 JOBFILE_LIST_INQUIRE
컨트롤러 응답: 0x5533 JOBFILE_SUM_RESPOND
{
"absolutepath": ["/job/R1/", "/job/R2/", "/job/R3/", "/job/R4/"], // 작업 파일의 폴더 목록
"jobfilenum": [2, 33, 233, 666] // 작업 파일 폴더에 포함된 파일 개수
}| 파라미터 | 타입 | 설명 |
|---|---|---|
| absolutepath | array | 작업 파일의 폴더 목록 |
| jobfilenum | array | 각 작업 파일 폴더에 포함된 파일 개수 |
이때 다운로드 정지 타이머를 시작하고 5초로 설정합니다. 이는 파일 다운로드 과정에서 대기 시간 초과 여부를 판단하는 데 사용됩니다.
단계 3: 컨트롤러가 능동적으로 티치 펜던트에 작업 파일 목록 전송
0x5534 JOBFILE_LIST_RESPOND
{
"robot": 1,
"listnum": 2, // 최대 10개
"jobfilelist": [
{
"name": "xxx.JBR", // 작업 파일 이름
"MD5": "123" // MD5 값, 파일이 동일한지 판단하는 데 사용
},
{
"name": "yyy.JBR",
"MD5": "132"
}
]
}| 파라미터 | 타입 | 설명 |
|---|---|---|
| robot | int | 로봇 번호 |
| listnum | int | 목록 수량, 최대 10개 |
| jobfilelist | array | 작업 파일 목록 |
컨트롤러가 응답하는 파라미터의 역할은 로컬 작업 파일과 비교하는 것입니다. 파일이 동일한 경우 MD5 값이 동일한지 판단하고, MD5 값이 동일하면 처리하지 않으며, 다르면 로컬 파일을 삭제하고 다시 다운로드해야 합니다. 다운로드해야 할 파일 기록: 파일 이름과 경로를 다운로드 작업 파일 목록에 저장합니다 (절대 경로 포함), 파일이 다른 경우에도 다운로드해야 할 파일을 목록에 기록합니다.
단계 4: 파일 전송 연결
파일 다운로드 및 업로드에 대해, 티치 펜던트는 5000 포트에 연결하여 파일 전송을 수행해야 합니다 (명령 등의 명령 전송은 6000 포트를 사용).
단계 5: 티치 펜던트와 컨트롤러 파일 전송 네트워크가 연결됨, 파일 전송 시작
단계 6: 티치 펜던트가 목록의 작업 파일 이름 전송 시작
0x5504
{
"name": "job/R1/WWWWW.JBR" // 다운로드해야 할 작업 파일 이름
}| 파라미터 | 타입 | 설명 |
|---|---|---|
| name | string | 다운로드해야 할 작업 파일 이름 (경로 포함) |
파라미터 name은 컨트롤러에서 작업 파일의 작업 파일 경로와 이름입니다. 0x5533 및 0x5534에서 컨트롤러가 티치 펜던트에 경로와 이름을 전송했습니다. 티치 펜던트가 작업 파일 동기화를 시작하라고 알립니다.
단계 7: 컨트롤러 응답
0x5505
{
"answer": "yes", // 컨트롤러가 다운로드에 동의하는지 여부
"name": "job/R1/WWWWW.JBR", // 다운로드해야 할 작업 파일 이름
"size": 217 // 이 작업 파일의 크기
}| 파라미터 | 타입 | 설명 |
|---|---|---|
| answer | string | 컨트롤러가 다운로드에 동의하는지 여부 |
| name | string | 다운로드해야 할 작업 파일 이름 |
| size | int | 이 작업 파일의 크기 |
단계 8: 컨트롤러가 능동적으로 전송
0x5522
단계 9: 티치 펜던트가 파라미터를 성공적으로 수신했는지 확인
0x5523
{
"finish": true // 티치 펜던트 수신 성공
}| 파라미터 | 타입 | 설명 |
|---|---|---|
| finish | bool | 티치 펜던트 수신 성공 |
위의 과정은 하나의 작업 파일 다운로드 완료를 나타냅니다. 다운로드해야 할 작업 파일이 여러 개 있으면, 0x5534에 저장된 목록에서 하나를 빼고 위의 과정을 반복합니다.