18. 커스텀 프로토콜 슬레이브 명령

18.1. 개요

18.2. 산업용 버스 프로토콜 통합 기반 로봇 운동 제어

PLC가 각종 산업용 버스 프로토콜(CC-Link IEF Basic, Profinet, Ethernet/IP, EtherCAT)을 통해 로봇을 제어할 수 있도록, 통합형 mini 제어 박스에 RYH-PCIeN-EC/EIP/CC/PN-RJ-V10, RYJ-PCIeN-EIP/CC/PN-RJ-V10, RYJ-PCIeN-EC-RJ-V10 카드를 추가했습니다.

18.3. 환경 설정

필요한 카드 모델과 소프트웨어 버전은 다음과 같습니다.

프로토콜 종류

카드 모델

로봇 소프트웨어 버전

CC-Link IEF Basic

RYH-PCIeN-EC/EIP/CC/PN-RJ-V10, RYJ-PCIeN-EIP/CC/PN-RJ-V10

V3.8.0 이상

Profinet

RYH-PCIeN-EC/EIP/CC/PN-RJ-V10, RYJ-PCIeN-EIP/CC/PN-RJ-V10

V3.8.0 이상

Ethernet/IP

RYH-PCIeN-EC/EIP/CC/PN-RJ-V10, RYJ-PCIeN-EIP/CC/PN-RJ-V10

V3.8.0 이상

EtherCAT

RYH-PCIeN-EC/EIP/CC/PN-RJ-V10, RYJ-PCIeN-EC-RJ-V10

V3.8.4.1 이상

18.3.1. RYH-PCIeN-EC/EIP/CC/PN-RJ-V10 하드웨어 환경 구성

  1. 그림과 같이 RYH-PCIeN-EC/EIP/CC/PN-RJ-V10 보드를 통합 mini 컨트롤 박스에 장착합니다.

../_images/0015.png

그림 17.2-1 Hilscher 보드 장착

../_images/0025.png

그림 17.2-2 Hilscher 보드 네트워크 포트

  1. 로봇 제어 박스와 PLC 배선은 아래 그림과 같습니다.

../_images/0035.png

그림 17.2-3 제어 박스와 미쓰비시 PLC 배선도

../_images/0045.png

그림 17.2-4 제어 박스와 지멘스 PLC 배선도

../_images/0055.png

그림 17.2-5 제어 박스와 오므론 PLC 배선도

../_images/0065.png

그림 17.2-6 제어 박스와 오므론 PLC 배선도

참고

1: 로봇 제어 박스(보드 네트워크 포트) 2: 스위치 3: 노트북 PC 4: 미쓰비시 PLC(CC-Link IEF Basic 네트워크 포트) 5: Siemens PLC(Profinet 네트워크 포트) 6: 오므론 PLC(Ethernet/IP 네트워크 포트) 7: 오므론 PLC(EtherCAT 네트워크 포트)

중요

프로토콜을 EtherCAT 버스로 전환할 경우 보드 네트워크 포트를 EtherCAT_IN`과 `EtherCAT_OUT`으로 나누어 사용해야 합니다. 이때 오므론 PLC의 EtherCAT 네트워크 포트를 보드의 `EtherCAT_IN 포트에 직접 연결해야 합니다.

18.3.2. RYJ-PCIeN 보드 하드웨어 환경 구성

  1. 그림과 같이 보드를 통합형 mini 제어 박스에 장착합니다.

../_images/0442.png

그림 17.2-7 RYJ-PCIeN 보드 LAN 포트

  1. 로봇 제어 박스와 PLC 연결은 아래와 같습니다.

../_images/0035.png

그림 17.2-8 제어 박스와 미쓰비시 PLC 연결도

../_images/0045.png

그림 17.2-9 제어 박스와 지멘스 PLC 연결도

../_images/0055.png

그림 17.2-10 제어 박스와 Inovance PLC 연결도

참고

1: 로봇 제어 박스(보드 LAN 포트) 2: 스위치 3: 노트북 PC 4: 미쓰비시 PLC(CC-Link IEF Basic 포트) 5: 지멘스 PLC(Profinet 포트) 6: Inovance PLC(Ethernet/IP 포트)

  1. RYJ-PCIeN 보드에서 프로토콜 전환 시에는 펌웨어 업그레이드가 필요합니다.

    • PC IP를 `192.168.0.xxx`로 설정

    • 게이트웨이 툴 세트 소프트웨어 실행

    • PC 네트워크 어댑터 선택

    • 오른쪽 아래 시작 버튼 클릭

    • 오른쪽 위 검색 버튼으로 보드 장치 검색

../_images/0452.png

그림 17.2-11 보드 장치 연결

  1. 왼쪽 아래 업그레이드 버튼을 클릭합니다.

    • 보드 장치 선택

    • 오른쪽 위 버튼으로 프로토콜 펌웨어 선택

    • 업그레이드 버튼 클릭 후 완료 대기

../_images/0462.png

그림 17.2-12 보드 프로토콜 전환

참고

프로토콜 전환 후 보드 IP 주소는 아래 표와 같이 변경됩니다.

표 17.2-1 보드 IP 주소

프로토콜

IP 주소

CC-Link IEF Basic

192.168.0.113

Ethernet/IP

192.168.0.112

Profinet

192.168.0.2

CC-Link IEF Basic 설정 시 컨트롤러는 보드 IP를 `192.168.0.113`으로 변경합니다.

Ethernet/IP 설정 시 컨트롤러는 보드 IP를 `192.168.0.112`로 변경합니다.

Profinet 전환 시 슬레이브 장치 이름이 마스터와 일치하면, 마스터가 슬레이브 IP를 자동 설정합니다.

18.3.3. 소프트웨어 환경 구성

  1. 브라우저에서 IP 192.168.58.2, 계정 admin, 비밀번호 `123`을 입력하고 `로그인`을 클릭해 로봇 제어 박스 Web 인터페이스로 들어갑니다.

../_images/0075.png

그림 17.2-13 Web 로그인 인터페이스

  1. 보조 애플리케이션 -> 툴 애플리케이션 -> 시스템 업그레이드 인터페이스`를 클릭하고 `software.tar.gz 파일을 선택해 업그레이드 패키지를 업로드합니다.

../_images/0083.png

그림 17.2-14 소프트웨어 업그레이드

참고

QX 제어 박스와 LA 제어 박스의 Web 버전은 모두 3.8.0 이상이어야 합니다.

  1. 오른쪽 위의 `로컬 모드`를 클릭하여 리모트 모드로 전환합니다.

../_images/0103.png

그림 17.2-15 리모트 모드 전환

  1. 컨트롤러 슬레이브 프로토콜을 선택하고 자동 시작 기능 사용 여부를 선택한 뒤 설정 버튼을 클릭합니다. 다른 프로토콜로 전환하려면 먼저 제거 버튼을 클릭해 기존 프로토콜을 해제한 후 새로운 프로토콜을 설정해야 합니다.

../_images/0113.png

그림 17.2-16 통신 프로토콜 설정

참고

다른 프로토콜로 전환하려면 컨트롤 박스를 재시작한 후 프로토콜을 다시 구성해야 합니다.

18.3.4. PLC 환경 구성

각 프로토콜의 슬레이브 스테이션 명령을 구현하기 위해 구성한 테스트 환경은 다음 표와 같습니다. 여기에는 각 프로토콜에서 사용된 PLC 모델, 펌웨어 버전, 테스트 소프트웨어가 포함됩니다.

프로토콜

브랜드

모델

펌웨어

소프트웨어

Profinet

SIEMENS

CPU 1515-2 PN

6ES75152AM020AB0

TIA Portal V17

CC-Link IEF Basic

Mitsubishi

FX5S-30TR/DS

30MR/ES V1.3

GX Works3 V1.097B

Ethernet/IP

OMRON

MX102-1100

V1.3

Sysmac Studio V1.50

EtherCAT

OMRON

MX102-1100

V1.3

Sysmac Studio V1.50

18.3.4.1. SIEMENS Profinet

  1. GSD 파일(XML 파일) 가져오기

SIEMENS 프로그래밍 소프트웨어 TIA Portal V17을 열고 새 PLC 프로젝트를 만든 뒤 `디바이스와 네트워크`를 선택하고, 오른쪽의 `하드웨어 카탈로그`에서 `6ES7 515-2AM02-0AB0`를 더블클릭하여 PLC 모듈을 추가합니다.

../_images/0123.png

TIA Portal 소프트웨어에서 메뉴바의 `옵션 -> 일반 스테이션 설명 파일(GSD) 관리`를 선택하여 설치된 GSD 파일을 설치 또는 삭제합니다.

../_images/0133.png

RYH-PCIeN-EC/EIP/CC/PN-RJ-V10 GSD 파일 설치를 예로 들면, `일반 스테이션 설명 파일(GSD) 관리`를 선택하면 해당 관리 창이 표시됩니다.

소스 경로`에서 GSD 파일이 있는 폴더를 선택하고, 표시된 GSD 파일 목록에서 설치할 파일을 선택한 뒤 `설치 버튼을 클릭합니다.

../_images/0143.png

설치가 성공하면 아래 그림과 같이 하드웨어 디렉터리의 기타 필드 디바이스 아래에 해당 장치가 표시됩니다.

../_images/0153.png
  1. 프로그램 실행

프로젝트 `QNXtest`를 엽니다.

../_images/0164.png

프로그램을 컴파일합니다. 왼쪽 프로젝트 트리에서 디바이스와 네트워크`에 들어가 `PLC_1 모듈을 오른쪽 클릭하고 드롭다운 메뉴에서 컴파일을 선택한 뒤, `하드웨어와 소프트웨어(변경분만)`를 선택합니다. 완료되면 소프트웨어 뷰 아래에 컴파일 완료 메시지가 표시됩니다.

../_images/0174.png ../_images/0184.png

프로그램을 장치에 다운로드합니다. 왼쪽 프로젝트 트리에서 디바이스와 네트워크`에 들어가 `PLC_1 모듈을 오른쪽 클릭하고 드롭다운 메뉴에서 `디바이스에 다운로드`를 선택한 뒤, `하드웨어와 소프트웨어(변경분만)`를 선택합니다.

../_images/0193.png

장치 검색 및 다운로드: 창이 뜨면 PG/PC 인터페이스 타입을 설정하고 `검색 시작`을 클릭합니다. 프로그램을 다운로드할 장치를 선택한 후 `다운로드`를 클릭합니다.

../_images/0203.png ../_images/0213.png

18.3.4.3. Inovance EtherCAT 설정

  1. XML 파일 가져오기

Inovance AutoShop 프로그래밍 소프트웨어를 열고 새 PLC 프로젝트를 생성합니다. 오른쪽 툴박스에서 `EtherCAT Devices`를 선택합니다.

../_images/0521.png

EtherCAT Devices`를 선택한 후 우클릭해 `디바이스 XML 가져오기 대화상자를 띄웁니다. 카드 XML 파일이 있는 폴더를 지정하고 가져오기에 성공하면 EtherCAT Devices 아래에 카드 이름이 표시됩니다. 프로젝트를 닫고 다시 시작해 가져오기를 완료합니다.

../_images/0531.png
  1. 변수 매핑

왼쪽 툴바에서 변수표를 더블클릭하고 아래 항목을 생성합니다.

  • 256바이트 입력 배열(소프트 요소 주소: D0)

  • 256바이트 출력 배열(소프트 요소 주소: D200)

../_images/0541.png

왼쪽 툴바 EtherCAT 아래의 `Xone-PCIe-ECATs`를 더블클릭합니다. 대화상자에서 `I/O 기능 매핑`을 클릭하고 변수표의 주소를 바인딩합니다. 다른 주소도 같은 방식으로 설정합니다.

../_images/0552.png
  1. 프로그램 다운로드

테스트 프로그램을 열고 PLC IP를 기본값 `192.168.1.88`에서 `192.168.0.88`로 변경합니다.

../_images/0562.png

`IP/장치명 변경`을 클릭해 IP와 게이트웨이를 `192.168.0.88`로 변경합니다.

../_images/0572.png

IP 변경 클릭 후 팝업에서 `예`를 선택해 확정합니다.

../_images/0582.png

통신이 성공하면 PLC 프로그램을 다운로드합니다.

../_images/0592.png

18.3.6. HMI 설정(Profinet 시뮬레이션)

  1. 프로그램을 열고 프로젝트 트리의 `HMI_1[ktp700 Basic PN]`을 클릭한 뒤 메뉴바 `온라인 -> 시뮬레이션 -> 시작`을 클릭합니다. 소프트웨어가 컴파일되고 시뮬레이션될 때까지 기다립니다.

  2. 시뮬레이션 후 기능은 CC-Link IEF Basic 화면과 동일하므로 위 설정을 참고하십시오.

../_images/0422.png ../_images/0432.png

18.4. 로봇 슬레이브 모드 조작 설명

18.4.1. 슬레이브 모드 로드

Step 1: WebApp을 열고 `초기 설정 -> 주변기기 -> 보드 통신 -> 수동 설정`으로 이동합니다.

../_images/0472.png

그림 17.3-1 보드 통신 수동 설정

먼저 RYJ-PCIeN 보드의 IP 주소를 설정합니다. 공란이면 기본 IP `192.168.0.100`으로 기동 설정됩니다. 현재 IP 설정은 EIP와 CC-Link IEF Basic 프로토콜에만 적용되며, PN 프로토콜에서는 PLC 마스터 스테이션이 슬레이브 장치를 스캔해 IP를 할당합니다.

참고

페이지에서 IP 주소를 변경한 뒤에는 반드시 슬레이브 모드를 다시 로드해야 합니다.

DI, DO, AO에 필요한 매핑 기능을 순서대로 선택합니다(부록 1 참조). 각 파라미터 의미는 다음과 같습니다.

  • DI(로봇 제어): 로봇 슬레이브가 외부 신호 입력을 받고 매핑된 기능을 수행합니다.

  • DO(로봇 상태 출력): 로봇 슬레이브가 상태 신호를 마스터 스테이션에 피드백합니다.

  • AO(로봇 상태 피드백): 로봇 슬레이브가 상태 데이터를 마스터 스테이션에 피드백합니다. `AO0~AO15`는 부호 있는 정수(int16), `AO16~AO31`는 단정도 부동소수점(float)입니다.

Step 2: 설정 버튼을 클릭해 오픈 프로토콜 Lua 파일을 생성합니다.

../_images/0482.png

그림 17.3-2 장치 조작 및 상태

참고

오픈 프로토콜 Lua 파일은 다운로드 가능하며, 자동 설정 화면에서 다시 가져올 수 있습니다.

생성 프로그램 예:

 1local id = 3
 2local ctrlDI = {0, 0, 0, 0, 0, 0}
 3local funcDI = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
 4local DOState = {0, 0, 0, 0, 0, 0, 0, 0}
 5local AOState = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
 6-- 보드 통신 프로세스 시작
 7LoadFieldBusSlave()
 8sleep_ms(8000)
 9while(1) do
10   -- DO 상태 설정
11   CtrlBoxDO, CtrlBoxCO, CtrlBoxDI, CtrlBoxCI, errState, motionState, moveToOriginState, robotStartDoneState, modeChangeState, programStartStopState, emergencyState, reduceState, collision, enablestate, safetyStop0, safetyStop1, pauseState, interfereState = GetRobotFuncDOState()
12   DOState[1] = CtrlBoxDO
13   DOState[2] = CtrlBoxCO
14   DOState[3] = CtrlBoxDI
15   DOState[4] = CtrlBoxCI
16   local ctrlWord0 = 0
17   ctrlWord0 = SetBitWithIndex(ctrlWord0, 0, errState)
18   ctrlWord0 = SetBitWithIndex(ctrlWord0, 1, motionState)
19   ctrlWord0 = SetBitWithIndex(ctrlWord0, 2, moveToOriginState)
20   ctrlWord0 = SetBitWithIndex(ctrlWord0, 3, robotStartDoneState)
21   ctrlWord0 = SetBitWithIndex(ctrlWord0, 4, modeChangeState)
22   ctrlWord0 = SetBitWithIndex(ctrlWord0, 5, programStartStopState)
23   ctrlWord0 = SetBitWithIndex(ctrlWord0, 6, emergencyState)
24   ctrlWord0 = SetBitWithIndex(ctrlWord0, 7, reduceState)
25   DOState[5] = ctrlWord0
26   local ctrlWord1 = 0
27   ctrlWord1 = SetBitWithIndex(ctrlWord1, 0, collision)
28   ctrlWord1 = SetBitWithIndex(ctrlWord1, 1, enablestate)
29   ctrlWord1 = SetBitWithIndex(ctrlWord1, 2, safetyStop0)
30   ctrlWord1 = SetBitWithIndex(ctrlWord1, 3, safetyStop1)
31   ctrlWord1 = SetBitWithIndex(ctrlWord1, 4, pauseState)
32   ctrlWord1 = SetBitWithIndex(ctrlWord1, 5, interfereState)
33   DOState[6] = ctrlWord1
34   SetFieldBusDOState(DOState)
35
36   -- AO 상태 설정
37   mainErrCode, subErrCode, TCPSpeed, axisPos1, axisPos2, axisPos3, axisPos4, axisPos5, axisPos6, jointVelFeedback1, jointVelFeedback2, jointVelFeedback3, jointVelFeedback4, jointVelFeedback5, jointVelFeedback6, jointCurFeedback1, jointCurFeedback2, jointCurFeedback3,jointCurFeedback4,jointCurFeedback5,jointCurFeedback6, jointTorqueFeedback1, jointTorqueFeedback2,jointTorqueFeedback3,jointTorqueFeedback4, jointTorqueFeedback5, jointTorqueFeedback6, cartPosx, cartPosy, cartPosz, cartPosrx, cartPosry, cartPosrz = GetRobotFuncAOState()
38   AOState[1] = mainErrCode
39   AOState[2] = subErrCode
40   AOState[17] = axisPos1
41   AOState[18] = axisPos2
42   AOState[19] = axisPos3
43   AOState[20] = axisPos4
44   AOState[21] = axisPos5
45   AOState[22] = axisPos6
46   AOState[23] = cartPosx
47   AOState[24] = cartPosy
48   AOState[25] = cartPosz
49   AOState[26] = cartPosrx
50   AOState[27] = cartPosry
51   AOState[28] = cartPosrz
52   SetFieldBusAOState(AOState)
53   sleep_ms(10)
54
55   -- DI 상태 설정
56   -- DI 기능 설정 및 실시간 갱신
57   ctrlDI[1],ctrlDI[2],ctrlDI[3],ctrlDI[4],ctrlDI[5],ctrlDI[6] = GetFieldBusDIState()
58   funcDI[1] = ctrlDI[1]
59   funcDI[2] = ctrlDI[2]
60   funcDI[3] = GetBitWithIndex(ctrlDI[3], 0)
61   funcDI[4] = GetBitWithIndex(ctrlDI[3], 1)
62   funcDI[5] = GetBitWithIndex(ctrlDI[3], 2)
63   funcDI[6] = GetBitWithIndex(ctrlDI[3], 3)
64   funcDI[7] = GetBitWithIndex(ctrlDI[3], 4)
65   funcDI[8] = GetBitWithIndex(ctrlDI[3], 5)
66   funcDI[9] = GetBitWithIndex(ctrlDI[3], 6)
67   funcDI[10] = GetBitWithIndex(ctrlDI[3], 7)
68   funcDI[11] = GetBitWithIndex(ctrlDI[4], 0)
69   funcDI[12] = GetBitWithIndex(ctrlDI[4], 1)
70   funcDI[13] = GetBitWithIndex(ctrlDI[4], 2)
71   funcDI[14] = GetBitWithIndex(ctrlDI[4], 3)
72   funcDI[15] = GetBitWithIndex(ctrlDI[4], 4)
73   funcDI[16] = GetBitWithIndex(ctrlDI[4], 5)
74   SetRobotFuncDIState(funcDI)
75   local stopFlag = GetOpenLUAStopFlag(id)
76   if(stopFlag ~= 0) then
77      UnloadFieldBusSlave()
78      break
79   end
80   sleep_ms(10)
81end

Step 3: 로드 버튼을 클릭해 로봇 슬레이브 모드를 로드합니다.

../_images/0492.png

그림 17.3-3 슬레이브 모드 로드

참고

로봇 슬레이브 모드 로드가 성공하면 자동 시작 기능이 지원됩니다. 리모트 모드를 사용하려면 먼저 슬레이브 모드를 언로드하십시오.

Step 4: 오른쪽 상태 바 버튼을 클릭해 DI, DO, AI, AO 상호작용 정보를 모니터링합니다. 각 파라미터 의미는 다음과 같습니다.

  • CtrlDO: 마스터 장치가 로봇 제어 박스 DO를 제어하는 입력 신호값

  • DI: 외부 마스터 제어 신호 입력값

  • DO: 로봇 슬레이브가 피드백하는 출력 신호값

  • AI: 외부 마스터로부터의 입력값. `AI0~AI15`는 int16, `AI16~AI31`는 float

  • AO: 로봇 슬레이브의 출력값. `AO0~AO15`는 int16, `AO16~AO31`는 float

../_images/0502.png

그림 17.3-4 DI, DO, AI, AO 상호작용 정보

Step 5: 로드 완료 후 `티칭 프로그램 -> 통신 명령 -> 보드 명령`에서 보드 Lua 명령을 생성하여, 슬레이브 DO/AO 설정, 슬레이브 DI/AI 취득, 슬레이브 DI/AI 대기를 구현할 수 있습니다.

../_images/0512.png

그림 17.3-5 보드 생성 Lua 명령

부록 1: 슬레이브 모드 주소 매핑표

18.5. 부록

18.5.1. 명령 목록

명령 코드

명령 설명

0x1000

로봇 활성화

0x1001

모든 오류 리셋

0x1002

로봇 정지

0x1003

실제 위치 읽기

0x1004

로봇 속도 설정

0x1005

로봇 계속 동작

0x1006

로봇 동작 일시정지

0x1007

관절 위치 기반 직교 좌표 계산

0x1008

직교 좌표 기반 관절 위치 계산

0x2000

툴 정보 쓰기

0x2001

툴 정보 읽기

0x2002

워크피스 정보 쓰기

0x2003

워크피스 정보 읽기

0x2004

하중 정보 쓰기

0x2005

하중 정보 읽기

0x2006

reference dynamic 정보 쓰기

0x2007

reference dynamic 정보 읽기

0x2008

default dynamic 정보 쓰기

0x2009

default dynamic 정보 읽기

0x2010

소프트 리밋 정보 쓰기

0x2011

소프트 리밋 정보 읽기

0x3000

MoveAxes(관절 각도 기준)

0x3001

MoveLinear

0x3002

MoveDirect(직교 좌표계 기준)

0x3003

jog 운동

0x3004

jog 정지