Skip to content

7000 포트 통신(2207)

컨트롤러가 서버 측이며 기본 포트 번호는 7000입니다.

본 프로토콜에서 규정하는 모든 데이터 패킷은 본 형식 정의를 따르며, 표준 TLV(Type,Length,Value) 형식을 사용하고 고정된 시작 패킷 헤더 및 CRC 체크가 있습니다.

데이터 패킷 형식

항목길이(Byte)설명
SyncByte20x4E66 고정 패킷 헤더
Length216진수 길이 0-0xffff; 데이터 헤더 및 명령어를 포함하지 않으며, CRC 영역도 포함하지 않음
Command2명령어
dataLength데이터 영역(주로 JSON 데이터 형식)
CRC4패킷 헤더를 제외한 데이터에 대해 CRC 검증 수행(CRC32)

구성 파일 설정

구성 파일 controller.json의 hostComputerService 노드 아래:

  • socketType: socket 타입, "TCP"와 "UDP" 중 선택 가능, 기본값 "TCP"
  • checkCRC: CRC 검사 수행 여부, false 선택 시 CRC를 검사하지 않지만 CRC가 차지하는 4 바이트 데이터는 여전히 전송해야 함에 유의; 기본값 true, CRC 검사

상태 조회

명령어: 0x9512

json
{
    "channel": 1,
    "stop": 1,
    "robot": 1,
    "mode": 0,
    "interval": 10,
    "queryType": [
        "realPosACS",
        "realPosMCS",
        "realPosPCS",
        "realPosUCS",
        "axisVel",
        "axisAcc",
        "torque",
        "electric",
        "numGVar",
        "IO",
        "serialNum",
        "runControlPosRunNum",
        "detailedMotionPos"
    ],
    "typeCfg": {
        "numGVar": ["GD001", "GA001", "GI001", "GI333"],
        "IO": ["DI1", "DI16", "DO1", "DO3", "DO17"],
        "detailedMotionPos": {
            "num": 10,
            "optional": ["ACS", "MCS", "time", "reset"]
        }
    }
}

파라미터 설명

파라미터타입필수설명
channelint최대 9개 채널
stopint아니오1일 때, 이전의 지속 전송 중지, 아래의 데이터는 전송하지 않아도 됨
robotint로봇 번호
modeint0: 응답(요청 1회당 응답 1회), 1: 지속(요청 1회당 지속 응답)
intervalint아니오ms, mode가 지속일 때만 유효, 범위 10-60000
queryTypearray아니오조회 타입 배열, 선택 가능 값은 아래 표 참조
typeCfgobject아니오조회 내용 구성, 관련 타입 데이터를 조회할 때만 유효

queryType 선택 가능 값

설명
realPosACS실시간 좌표 위치 - 관절 좌표
realPosMCS실시간 좌표 위치 - 직교 좌표
realPosPCS실시간 좌표 위치 - 도구 좌표
realPosUCS실시간 좌표 위치 - 用户 좌표
axisVel축 속도
axisAcc축 가속도
torque토크
electric전류
numGVar수치 변수
IOIO 포트
serialNum시리얼 번호
runControlPosRunNum모션 제어에서 현재 궤적의 실행된 포인트 수
detailedMotionPos상세 모션 포인트, 이 항목은 각 로봇이 같은 시점에 하나의 채널만 조회 지원

typeCfg 상세 설명

파라미터타입설명
numGVararray조회 가능한 변수명 배열, 예: ["GD001", "GA001", "GI001", "GI333"]
IOarray조회 가능한 IO명 배열, 예: ["DI1", "DI16", "DO1", "DO3", "DO17"], 최대 개수는 IO 개수 이하여야 함
detailedMotionPosobject상세 모션 포인트 구성
detailedMotionPos.numint매 프레임 데이터 응답 시 포인트 수
detailedMotionPos.optionalarray선택 가능 파라미터: ACS(관절 좌표), MCS(직교 좌표), time(타임스탬프), reset(포인트 기록 재설정)

조회 반환

명령어: 0x9513

json
{
    "channel": 1,
    "robot": 1,
    "replyData": {
        "realPosACS": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
        "realPosMCS": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
        "realPosPCS": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
        "realPosUCS": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
        "axisVel": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
        "axisAcc": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
        "torque": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
        "electric": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
        "numGVar": {
            "GD001": 0.1,
            "GA001": true,
            "GI001": 33,
            "GI333": -55
        },
        "IO": {
            "DI1": 1,
            "DI16": 0,
            "DO1": 0,
            "DO3": 1,
            "DO17": -1
        },
        "runControlPosRunNum": 0,
        "serialNum": 1,
        "detailedMotionPos": {
            "num": 10,
            "data": [
                {
                    "time": [123456, 654321],
                    "ACS": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
                    "MCS": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]
                }
            ]
        }
    }
}

파라미터 설명

좌표 설명: 로봇(앞 7개) + 외부 축(뒤 5개). 외부 축이 없을 때, 좌표 개수는 축 수; 외부 축이 있을 때, 좌표 개수는 7 + 외부 축 개수

파라미터타입설명
channelint채널 번호
robotint로봇 번호
replyDataobject조회 반환 데이터 객체, 조회하지 않은 필드는 응답하지 않음

모션 제어

명령어: 0x9521

모드 1: 독립 포인트

json
{
    "robot": 1,
    "clearBuffer": 1,
    "targetMode": 0,
    "cfg": {
        "coord": "ACS",
        "extMove": 0,
        "sync": 0,
        "speed": 100,
        "acc": 100,
        "pl": 5,
        "moveMode": "TeachSet"
    },
    "targetPos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
    "targetVec": [
        {"pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]},
        {"pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]},
        {"pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]},
        {"pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]}
    ]
}

모드 2: 독립 포인트 - 매회 전송 시 일부 포인트(궤적 수신 완료 후 모션)

json
{
    "robot": 1,
    "clearBuffer": 1,
    "end": 0,
    "targetMode": 0,
    "sendMode": 1,
    "runMode": 0,
    "sum": 10,
    "count": 1,
    "cfg": {
        "coord": "ACS",
        "extMove": 0,
        "sync": 0,
        "speed": 100,
        "acc": 100,
        "pl": 5,
        "moveMode": "TeachSet",
        "timeout": 100
    },
    "targetVec": [
        {"pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]},
        {"pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]},
        {"pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]},
        {"pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]}
    ]
}

모드 3: 연속 궤적 - 한 번에 모든 궤적 포인트 전송

json
{
    "robot": 1,
    "clearBuffer": 1,
    "targetMode": 1,
    "sendMode": 0,
    "cfg": {
        "coord": "ACS",
        "extMove": 0,
        "sync": 0,
        "speed": 100,
        "acc": 100
    },
    "targetVec": [
        {
            "pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
            "axisVel": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
            "axisAcc": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
            "timeStamp": 10
        },
        {
            "pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
            "axisVel": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
            "axisAcc": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
            "timeStamp": 10
        }
    ]
}

모드 4: 연속 궤적 - 매회 전송 시 일부 포인트(궤적 수신 완료 후 모션)

json
{
    "robot": 1,
    "clearBuffer": 1,
    "end": 0,
    "targetMode": 1,
    "sendMode": 1,
    "runMode": 0,
    "sum": 10,
    "count": 1,
    "cfg": {
        "coord": "ACS",
        "extMove": 0,
        "sync": 0,
        "speed": 100,
        "acc": 100,
        "timeout": 100
    },
    "targetVec": [
        {
            "pos": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
            "axisVel": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
            "axisAcc": [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
            "timeStamp": 10
        }
    ]
}

모션 제어 파라미터 설명

파라미터타입설명
robotint로봇 번호
clearBufferint1일 때, 모션 궤적 캐시 큐를 비움; 0일 때, 이 필드를 보내지 않아도 됨
endint1일 때, 이전의 지속 전송 중지; 0일 때, 이 필드를 보내지 않아도 됨
targetModeint0: 독립 포인트, 1: 연속 궤적
sendModeint0: 한 번에 모든 궤적 포인트 전송, 1: 매회 일부 포인트 전송
runModeint매회 일부 포인트 전송 시에만 유효, 0: 궤적 수신 완료 후 모션, 1: 수신하면서 동시에 모션
sumint"궤적 수신 완료 후 모션"일 때만 유효, 전송할 총 프레임 수
countint"궤적 수신 완료 후 모션"일 때만 유효, 현재가 몇 번째 프레임인지

cfg 구성 파라미터 설명

파라미터타입설명
coordstring좌표 타입, 예: "ACS"
extMoveint1은 외부 축 모션; 0이거나 쓰지 않으면 없음 의미
syncint0이거나 쓰지 않으면 외부 축 비동기, 1은 외부 축 동기
speedint속도, 쓰지 않으면 기본값 사용
accint가속도, 쓰지 않으면 기본값 사용
plint속도 등급, "독립 포인트" 및 "targetVec" 노드 사용 시에만 유효, 기본값 5
moveModestring모션 모드, "TeachSet", "MOVJ", "MOVL", "MOVS" 선택 가능, 기본값 "TeachSet"
timeoutintms, 타임아웃 시간, 쓰지 않으면 타임아웃 검사하지 않음, 범위 10-10000, "궤적 수신 완료 후 모션"일 때만 유효

targetVec 포인트 파라미터 설명

파라미터타입설명
posarray좌표 배열: 로봇(앞 7개) + 외부 축(뒤 5개)
axisVelarray축 속도, 연속 궤적 모드에서만 유효
axisAccarray축 가속도, 연속 궤적 모드에서만 유효
timeStampintms, 해당 포인트에 도달했을 때의 시작점 기준 상대 시간, 연속 궤적 모드에서만 유효

주의: targetPostargetVec 노드가 동시에 존재할 때, targetPos 노드만 유효함


모션 제어 응답

명령어: 0x9523

json
{
    "robot": 1,
    "success": false,
    "size": 1,
    "cause": "timeout"
}

파라미터 설명

파라미터타입설명
robotint로봇 번호
successbool수신 성공 여부
sizeint모션 궤적 캐시 큐의 현재 궤적 수, success가 true일 때만 존재
causestring실패 원인, 성공 시 비어 있음; 선택 가능 값: busy(현재 전송 완료되지 않은 데이터가 있음), timeout(수신 타임아웃), dataErr(데이터 오류), termination(송신 측이 전송 중인 데이터 종료)

변수, IO 제어

명령어: 0x9531

json
{
    "numGVar": {
        "GA001": true,
        "GI033": 6,
        "GD666": -2.33
    },
    "IO": {
        "DO1": 1,
        "DO13": 0
    }
}

파라미터 설명

파라미터타입설명
numGVarobject수치 변수, 키는 변수명, 값은 변수값
IOobjectIO 포트, 키는 IO명, 값은 IO 상태(0 또는 1)

서보 온/오프 포인트 모션 제어

명령어: 0x95A1

이 기능은 "모션 제어" 기능과 동시에 사용할 수 없음

json
{
    "robot": 1,
    "switch": true
}

파라미터 설명

파라미터타입설명
robotint로봇 번호
switchbooltrue: 켜기, false: 끄기

스위치 응답

명령어: 0x95A3

json
{
    "robot": 1,
    "success": false,
    "cause": "busy"
}

파라미터 설명

파라미터타입설명
robotint로봇 번호
successbool성공 여부
causestring실패 원인, 성공 시 비어 있음; 선택 가능 값: dataErr(수신 데이터 오류), startupErr(시작 실패), busy(현재 채널 점유됨)

포인트 전송

명령어: 0x95A4

json
{
    "robot": 1,
    "end": 1,
    "sum": 10,
    "count": 1,
    "PosVec": [
        [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
        [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5],
        [1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 2.1, 2.2, 2.3, 2.4, 2.5]
    ]
}

파라미터 설명

파라미터타입설명
robotint로봇 번호
endint1일 때, 이전의 지속 전송을 중지하고 아래 데이터를 보내지 않아도 됨; 0일 때, 이 필드를 보내지 않아도 됨; 포인트가 아직 전송 완료되지 않았을 때, 이전에 수신한 데이터를 비우고 새로운 포인트 큐를 다시 대기
sumint전송할 총 프레임 수
countint현재가 몇 번째 프레임인지
PosVecarray좌표 배열, 좌표 형식: 로봇(앞 7개) + 외부 축(뒤 5개)

포인트 전송 응답

명령어: 0x95A6

json
{
    "robot": 1,
    "success": false,
    "cause": "dataErr"
}

파라미터 설명

파라미터타입설명
robotint로봇 번호
successbool수신 성공 여부
causestring실패 원인, 성공 시 비어 있음; 선택 가능 값: notStart(서보 포인트 모션 제어 모드가 시작되지 않음), dataErr(데이터 오류), termination(송신 측이 전송 중인 데이터 종료), cacheFull(캐시 영역 가득 참, 최대 6개 궤적 캐시)