커스텀 프로토콜 슬레이브 명령 =================================== .. toctree:: :maxdepth: 6 개요 ------------------- 산업용 버스 프로토콜 통합 기반 로봇 운동 제어 --------------------------------------------------------- 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` 카드를 추가했습니다. 환경 설정 -------------------------- 필요한 카드 모델과 소프트웨어 버전은 다음과 같습니다. .. list-table:: :widths: 20 50 30 :header-rows: 1 :align: center * - **프로토콜 종류** - **카드 모델** - **로봇 소프트웨어 버전** * - 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 이상 RYH-PCIeN-EC/EIP/CC/PN-RJ-V10 하드웨어 환경 구성 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. 그림과 같이 `RYH-PCIeN-EC/EIP/CC/PN-RJ-V10` 보드를 통합 mini 컨트롤 박스에 장착합니다. .. image:: custom_protocol_slave/001.png :width: 4in :align: center .. centered:: 그림 17.2-1 Hilscher 보드 장착 .. image:: custom_protocol_slave/002.png :width: 4in :align: center .. centered:: 그림 17.2-2 Hilscher 보드 네트워크 포트 2. 로봇 제어 박스와 PLC 배선은 아래 그림과 같습니다. .. image:: custom_protocol_slave/003.png :width: 4in :align: center .. centered:: 그림 17.2-3 제어 박스와 미쓰비시 PLC 배선도 .. image:: custom_protocol_slave/004.png :width: 4in :align: center .. centered:: 그림 17.2-4 제어 박스와 지멘스 PLC 배선도 .. image:: custom_protocol_slave/005.png :width: 4in :align: center .. centered:: 그림 17.2-5 제어 박스와 오므론 PLC 배선도 .. image:: custom_protocol_slave/006.png :width: 4in :align: center .. centered:: 그림 17.2-6 제어 박스와 오므론 PLC 배선도 .. note:: 1: 로봇 제어 박스(보드 네트워크 포트) 2: 스위치 3: 노트북 PC 4: 미쓰비시 PLC(CC-Link IEF Basic 네트워크 포트) 5: Siemens PLC(Profinet 네트워크 포트) 6: 오므론 PLC(Ethernet/IP 네트워크 포트) 7: 오므론 PLC(EtherCAT 네트워크 포트) .. important:: 프로토콜을 EtherCAT 버스로 전환할 경우 보드 네트워크 포트를 `EtherCAT_IN`과 `EtherCAT_OUT`으로 나누어 사용해야 합니다. 이때 오므론 PLC의 EtherCAT 네트워크 포트를 보드의 `EtherCAT_IN` 포트에 직접 연결해야 합니다. RYJ-PCIeN 보드 하드웨어 환경 구성 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. 그림과 같이 보드를 통합형 mini 제어 박스에 장착합니다. .. image:: custom_protocol_slave/044.png :width: 4in :align: center .. centered:: 그림 17.2-7 RYJ-PCIeN 보드 LAN 포트 2. 로봇 제어 박스와 PLC 연결은 아래와 같습니다. .. image:: custom_protocol_slave/003.png :width: 4in :align: center .. centered:: 그림 17.2-8 제어 박스와 미쓰비시 PLC 연결도 .. image:: custom_protocol_slave/004.png :width: 4in :align: center .. centered:: 그림 17.2-9 제어 박스와 지멘스 PLC 연결도 .. image:: custom_protocol_slave/005.png :width: 4in :align: center .. centered:: 그림 17.2-10 제어 박스와 Inovance PLC 연결도 .. note:: 1: 로봇 제어 박스(보드 LAN 포트) 2: 스위치 3: 노트북 PC 4: 미쓰비시 PLC(CC-Link IEF Basic 포트) 5: 지멘스 PLC(Profinet 포트) 6: Inovance PLC(Ethernet/IP 포트) 3. RYJ-PCIeN 보드에서 프로토콜 전환 시에는 펌웨어 업그레이드가 필요합니다. - PC IP를 `192.168.0.xxx`로 설정 - `게이트웨이 툴 세트` 소프트웨어 실행 - PC 네트워크 어댑터 선택 - 오른쪽 아래 `시작` 버튼 클릭 - 오른쪽 위 `검색` 버튼으로 보드 장치 검색 .. image:: custom_protocol_slave/045.png :width: 6in :align: center .. centered:: 그림 17.2-11 보드 장치 연결 4. 왼쪽 아래 `업그레이드` 버튼을 클릭합니다. - 보드 장치 선택 - 오른쪽 위 `...` 버튼으로 프로토콜 펌웨어 선택 - `업그레이드` 버튼 클릭 후 완료 대기 .. image:: custom_protocol_slave/046.png :width: 6in :align: center .. centered:: 그림 17.2-12 보드 프로토콜 전환 .. note:: 프로토콜 전환 후 보드 IP 주소는 아래 표와 같이 변경됩니다. .. centered:: 표 17.2-1 보드 IP 주소 .. list-table:: :widths: 20 80 :header-rows: 1 :align: center * - **프로토콜** - **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를 자동 설정합니다. 소프트웨어 환경 구성 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. 브라우저에서 IP `192.168.58.2`, 계정 `admin`, 비밀번호 `123`을 입력하고 `로그인`을 클릭해 로봇 제어 박스 Web 인터페이스로 들어갑니다. .. image:: custom_protocol_slave/007.png :width: 6in :align: center .. centered:: 그림 17.2-13 Web 로그인 인터페이스 2. `보조 애플리케이션 -> 툴 애플리케이션 -> 시스템 업그레이드 인터페이스`를 클릭하고 `software.tar.gz` 파일을 선택해 업그레이드 패키지를 업로드합니다. .. image:: custom_protocol_slave/008.png :width: 4in :align: center .. centered:: 그림 17.2-14 소프트웨어 업그레이드 .. note:: QX 제어 박스와 LA 제어 박스의 Web 버전은 모두 3.8.0 이상이어야 합니다. 3. 오른쪽 위의 `로컬 모드`를 클릭하여 리모트 모드로 전환합니다. .. image:: custom_protocol_slave/010.png :width: 4in :align: center .. centered:: 그림 17.2-15 리모트 모드 전환 4. 컨트롤러 슬레이브 프로토콜을 선택하고 자동 시작 기능 사용 여부를 선택한 뒤 `설정` 버튼을 클릭합니다. 다른 프로토콜로 전환하려면 먼저 `제거` 버튼을 클릭해 기존 프로토콜을 해제한 후 새로운 프로토콜을 설정해야 합니다. .. image:: custom_protocol_slave/011.png :width: 6in :align: center .. centered:: 그림 17.2-16 통신 프로토콜 설정 .. note:: 다른 프로토콜로 전환하려면 컨트롤 박스를 재시작한 후 프로토콜을 다시 구성해야 합니다. PLC 환경 구성 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 각 프로토콜의 슬레이브 스테이션 명령을 구현하기 위해 구성한 테스트 환경은 다음 표와 같습니다. 여기에는 각 프로토콜에서 사용된 PLC 모델, 펌웨어 버전, 테스트 소프트웨어가 포함됩니다. .. list-table:: :widths: 100 100 100 100 100 :header-rows: 1 :align: center * - 프로토콜 - 브랜드 - 모델 - 펌웨어 - 소프트웨어 * - 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 SIEMENS Profinet ++++++++++++++++++++++++++++++++++ 1. GSD 파일(XML 파일) 가져오기 SIEMENS 프로그래밍 소프트웨어 TIA Portal V17을 열고 새 PLC 프로젝트를 만든 뒤 `디바이스와 네트워크`를 선택하고, 오른쪽의 `하드웨어 카탈로그`에서 `6ES7 515-2AM02-0AB0`를 더블클릭하여 PLC 모듈을 추가합니다. .. image:: custom_protocol_slave/012.png :width: 6in :align: center TIA Portal 소프트웨어에서 메뉴바의 `옵션 -> 일반 스테이션 설명 파일(GSD) 관리`를 선택하여 설치된 GSD 파일을 설치 또는 삭제합니다. .. image:: custom_protocol_slave/013.png :width: 6in :align: center `RYH-PCIeN-EC/EIP/CC/PN-RJ-V10` GSD 파일 설치를 예로 들면, `일반 스테이션 설명 파일(GSD) 관리`를 선택하면 해당 관리 창이 표시됩니다. `소스 경로`에서 GSD 파일이 있는 폴더를 선택하고, 표시된 GSD 파일 목록에서 설치할 파일을 선택한 뒤 `설치` 버튼을 클릭합니다. .. image:: custom_protocol_slave/014.png :width: 6in :align: center 설치가 성공하면 아래 그림과 같이 하드웨어 디렉터리의 `기타 필드 디바이스` 아래에 해당 장치가 표시됩니다. .. image:: custom_protocol_slave/015.png :width: 4in :align: center 2. 프로그램 실행 프로젝트 `QNXtest`를 엽니다. .. image:: custom_protocol_slave/016.png :width: 6in :align: center 프로그램을 컴파일합니다. 왼쪽 프로젝트 트리에서 `디바이스와 네트워크`에 들어가 `PLC_1` 모듈을 오른쪽 클릭하고 드롭다운 메뉴에서 컴파일을 선택한 뒤, `하드웨어와 소프트웨어(변경분만)`를 선택합니다. 완료되면 소프트웨어 뷰 아래에 컴파일 완료 메시지가 표시됩니다. .. image:: custom_protocol_slave/017.png :width: 6in :align: center .. image:: custom_protocol_slave/018.png :width: 6in :align: center 프로그램을 장치에 다운로드합니다. 왼쪽 프로젝트 트리에서 `디바이스와 네트워크`에 들어가 `PLC_1` 모듈을 오른쪽 클릭하고 드롭다운 메뉴에서 `디바이스에 다운로드`를 선택한 뒤, `하드웨어와 소프트웨어(변경분만)`를 선택합니다. .. image:: custom_protocol_slave/019.png :width: 6in :align: center 장치 검색 및 다운로드: 창이 뜨면 PG/PC 인터페이스 타입을 설정하고 `검색 시작`을 클릭합니다. 프로그램을 다운로드할 장치를 선택한 후 `다운로드`를 클릭합니다. .. image:: custom_protocol_slave/020.png :width: 6in :align: center .. image:: custom_protocol_slave/021.png :width: 6in :align: center Mitsubishi CC-Link IEF Basic ++++++++++++++++++++++++++++++++++ 1. CC-Link IEF Basic 기본 설정 CC-Link IEF Basic 사용 설정: 왼쪽 네비게이션 메뉴에서 `이더넷 포트`를 선택하고 PLC IP 주소를 보드와 같은 네트워크 세그먼트로 설정합니다. 이후 `CC-Link IEF Basic 기본 사용 방법`을 클릭하여 `사용`을 선택합니다. .. image:: custom_protocol_slave/022.png :width: 6in :align: center CC-Link IEF Basic 네트워크 구성 설정: 기본 설정 화면에서 `네트워크 구성 설정`을 선택하고, 모듈로 `RYH-PCIeN-EC/EIP/CC/PN-RJ-V10 CIFX 디지털 I/O 모듈`을 선택한 뒤 좌하단 뷰로 드래그해 하드웨어 구성을 완료합니다. .. image:: custom_protocol_slave/023.png :width: 6in :align: center CC-Link IEF Basic 업데이트 설정: 기본 설정에서 `업데이트 설정`을 클릭하고 송수신 설정을 사용자 정의합니다(수신 256바이트, 송신 256바이트). .. image:: custom_protocol_slave/024.png :width: 6in :align: center 2. 프로그램 다운로드 테스트 프로그램을 연 뒤 `온라인 -> PLC에 쓰기`를 클릭해 다운로드 인터페이스로 들어갑니다. .. image:: custom_protocol_slave/025.png :width: 6in :align: center 다운로드 인터페이스에서 왼쪽 상단 `파라미터+프로그램`을 클릭하고, 오른쪽 하단 `실행`을 클릭해 다운로드를 진행합니다. .. image:: custom_protocol_slave/026.png :width: 6in :align: center Inovance EtherCAT 설정 ++++++++++++++++++++++++++++++++++ 1. XML 파일 가져오기 Inovance AutoShop 프로그래밍 소프트웨어를 열고 새 PLC 프로젝트를 생성합니다. 오른쪽 툴박스에서 `EtherCAT Devices`를 선택합니다. .. image:: custom_protocol_slave/052.png :width: 6in :align: center `EtherCAT Devices`를 선택한 후 우클릭해 `디바이스 XML 가져오기` 대화상자를 띄웁니다. 카드 XML 파일이 있는 폴더를 지정하고 가져오기에 성공하면 `EtherCAT Devices` 아래에 카드 이름이 표시됩니다. 프로젝트를 닫고 다시 시작해 가져오기를 완료합니다. .. image:: custom_protocol_slave/053.png :width: 6in :align: center 2. 변수 매핑 왼쪽 툴바에서 변수표를 더블클릭하고 아래 항목을 생성합니다. - 256바이트 입력 배열(소프트 요소 주소: D0) - 256바이트 출력 배열(소프트 요소 주소: D200) .. image:: custom_protocol_slave/054.png :width: 6in :align: center 왼쪽 툴바 `EtherCAT` 아래의 `Xone-PCIe-ECATs`를 더블클릭합니다. 대화상자에서 `I/O 기능 매핑`을 클릭하고 변수표의 주소를 바인딩합니다. 다른 주소도 같은 방식으로 설정합니다. .. image:: custom_protocol_slave/055.png :width: 6in :align: center 3. 프로그램 다운로드 테스트 프로그램을 열고 PLC IP를 기본값 `192.168.1.88`에서 `192.168.0.88`로 변경합니다. .. image:: custom_protocol_slave/056.png :width: 6in :align: center `IP/장치명 변경`을 클릭해 IP와 게이트웨이를 `192.168.0.88`로 변경합니다. .. image:: custom_protocol_slave/057.png :width: 6in :align: center `IP 변경` 클릭 후 팝업에서 `예`를 선택해 확정합니다. .. image:: custom_protocol_slave/058.png :width: 6in :align: center 통신이 성공하면 PLC 프로그램을 다운로드합니다. .. image:: custom_protocol_slave/059.png :width: 6in :align: center HMI 설정(CC-Link IEF Basic 시뮬레이션) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. HMI 인터페이스에 로그인한 뒤 `작업 활성화`를 켜서 PLC와 컨트롤러 간 통신 연결을 수립합니다. .. image:: custom_protocol_slave/027.png :width: 6in :align: center 2. `01_MC_EnableRobot` 인터페이스를 클릭하고 `EnableRobot`을 클릭해 로봇을 활성화합니다. 사용 중 오류가 발생하면 `리셋`을 클릭하여 초기화합니다. .. image:: custom_protocol_slave/028.png :width: 6in :align: center 3. `02_MC_ToolData`를 클릭해 툴 정보 인터페이스로 들어갑니다. 왼쪽에 파라미터를 입력하고 `WriteToolData`를 클릭해 툴 정보를 기록합니다. 오른쪽의 `ReadToolData`로 기존 툴 정보를 읽을 수 있습니다. .. image:: custom_protocol_slave/029.png :width: 6in :align: center 4. `03_MC_FrameData`를 클릭해 워크피스 정보 인터페이스로 들어갑니다. 왼쪽 파라미터를 입력하고 `WriteFrameData`를 클릭해 워크피스 정보를 기록합니다. 오른쪽의 `ReadFrameData`로 기존 정보를 읽을 수 있습니다. .. image:: custom_protocol_slave/030.png :width: 6in :align: center 5. `04_MC_LoadData`를 클릭해 하중 정보 인터페이스로 들어갑니다. 왼쪽 파라미터를 입력하고 `WriteLoadData`를 클릭해 하중 정보를 기록합니다. 오른쪽의 `ReadLoadData`로 기존 정보를 읽습니다. .. image:: custom_protocol_slave/031.png :width: 6in :align: center 6. `05_MC_RobotReferenceDynamics`를 클릭해 로봇 최대 속도와 최대 가속도 인터페이스로 들어갑니다. 왼쪽 파라미터를 입력하고 `WriteRobotRefD`를 클릭해 정보를 기록합니다. 오른쪽의 `ReadRobotRefD`로 정보를 읽습니다. .. image:: custom_protocol_slave/032.png :width: 6in :align: center 7. `06_MC_Robot DefaultDynamics`를 클릭해 로봇 기본 속도와 기본 가속도 인터페이스로 들어갑니다. 왼쪽 파라미터를 입력하고 `WriteRobotDefD`를 클릭해 정보를 기록합니다. 오른쪽의 `ReadRobotDefD`로 정보를 읽습니다. .. image:: custom_protocol_slave/033.png :width: 6in :align: center 8. `07_MC_RobotSwLimits`를 클릭해 좌표 제한 인터페이스로 들어갑니다. 왼쪽에 최대/최소 제한 파라미터를 입력하고 `WriteRobotSwLimits`를 클릭해 제한 정보를 기록합니다. 오른쪽의 `ReadRobotSwLimits`로 기존 제한 정보를 읽습니다. .. image:: custom_protocol_slave/034.png :width: 6in :align: center 9. `08_MC_ReadActualPosition`를 클릭해 실제 위치 읽기 인터페이스로 들어간 뒤 `ReadPosition`을 클릭해 현재 위치 정보를 읽습니다. .. image:: custom_protocol_slave/035.png :width: 6in :align: center 10. `09_MC_MoveLinearAbsolute`를 클릭해 직선 운동 인터페이스로 들어간 뒤 좌표 파라미터를 입력하고 `MoveLinearAbsolute`를 클릭하면 로봇이 목표 위치까지 직선 이동합니다. .. image:: custom_protocol_slave/036.png :width: 6in :align: center 11. `10_MC_MoveAxesAbsolute`를 클릭해 축 좌표 운동 인터페이스로 들어갑니다. 좌표 파라미터를 입력하고 `MoveAxesAbsolute`를 클릭하면 입력한 축 좌표를 종점으로 로봇이 이동합니다. .. image:: custom_protocol_slave/037.png :width: 6in :align: center 12. `11_MC_MoveDirectAbsolute`를 클릭해 직접 운동 인터페이스로 들어갑니다. 좌표 파라미터를 입력하고 `MoveDirectAbsolute`를 클릭하면 입력값을 종점으로 로봇이 직접 이동합니다. .. image:: custom_protocol_slave/038.png :width: 6in :align: center 13. `12_MC_Groups`를 클릭해 직접 운동 조작 인터페이스로 들어갑니다. 동작 중 로봇의 움직임을 중단하려면 `GroupInterrupt`, 목표 위치까지 계속 이동하려면 `GroupContinue`, 진행 중인 이동 동작을 정지하려면 `GroupStop`, 오류가 발생하면 `GroupReset`을 클릭합니다. .. image:: custom_protocol_slave/039.png :width: 6in :align: center 14. `13_MC_PositionConversion`을 클릭해 위치 변환 인터페이스로 들어갑니다. `XtoJ1`은 직교 자세를 관절 각도로, `J1toX`는 관절 각도를 직교 자세로 변환합니다. .. image:: custom_protocol_slave/040.png :width: 6in :align: center 15. `14_MC_GroupJog`를 클릭해 로봇 조그 인터페이스로 들어갑니다. 설정 후 좌표축 드롭다운으로 조그할 축과 회전 방향을 선택합니다. 조그 이동은 `JogMove`, 이동 속도 조정은 오른쪽의 `MC_ChangeSpeedOverride`를 사용합니다. .. image:: custom_protocol_slave/041.png :width: 6in :align: center HMI 설정(Profinet 시뮬레이션) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. 프로그램을 열고 프로젝트 트리의 `HMI_1[ktp700 Basic PN]`을 클릭한 뒤 메뉴바 `온라인 -> 시뮬레이션 -> 시작`을 클릭합니다. 소프트웨어가 컴파일되고 시뮬레이션될 때까지 기다립니다. 2. 시뮬레이션 후 기능은 CC-Link IEF Basic 화면과 동일하므로 위 설정을 참고하십시오. .. image:: custom_protocol_slave/042.png :width: 6in :align: center .. image:: custom_protocol_slave/043.png :width: 6in :align: center 로봇 슬레이브 모드 조작 설명 --------------------------------------------------------- 슬레이브 모드 로드 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ **Step 1**: WebApp을 열고 `초기 설정 -> 주변기기 -> 보드 통신 -> 수동 설정`으로 이동합니다. .. image:: custom_protocol_slave/047.png :width: 6in :align: center .. centered:: 그림 17.3-1 보드 통신 수동 설정 먼저 RYJ-PCIeN 보드의 IP 주소를 설정합니다. 공란이면 기본 IP `192.168.0.100`으로 기동 설정됩니다. 현재 IP 설정은 EIP와 CC-Link IEF Basic 프로토콜에만 적용되며, PN 프로토콜에서는 PLC 마스터 스테이션이 슬레이브 장치를 스캔해 IP를 할당합니다. .. note:: 페이지에서 IP 주소를 변경한 뒤에는 반드시 슬레이브 모드를 다시 로드해야 합니다. DI, DO, AO에 필요한 매핑 기능을 순서대로 선택합니다(부록 1 참조). 각 파라미터 의미는 다음과 같습니다. - DI(로봇 제어): 로봇 슬레이브가 외부 신호 입력을 받고 매핑된 기능을 수행합니다. - DO(로봇 상태 출력): 로봇 슬레이브가 상태 신호를 마스터 스테이션에 피드백합니다. - AO(로봇 상태 피드백): 로봇 슬레이브가 상태 데이터를 마스터 스테이션에 피드백합니다. `AO0~AO15`는 부호 있는 정수(int16), `AO16~AO31`는 단정도 부동소수점(float)입니다. **Step 2**: `설정` 버튼을 클릭해 오픈 프로토콜 Lua 파일을 생성합니다. .. image:: custom_protocol_slave/048.png :width: 6in :align: center .. centered:: 그림 17.3-2 장치 조작 및 상태 .. note:: 오픈 프로토콜 Lua 파일은 다운로드 가능하며, 자동 설정 화면에서 다시 가져올 수 있습니다. 생성 프로그램 예: .. code-block:: console :linenos: local id = 3 local ctrlDI = {0, 0, 0, 0, 0, 0} local funcDI = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} local DOState = {0, 0, 0, 0, 0, 0, 0, 0} local 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} -- 보드 통신 프로세스 시작 LoadFieldBusSlave() sleep_ms(8000) while(1) do -- DO 상태 설정 CtrlBoxDO, CtrlBoxCO, CtrlBoxDI, CtrlBoxCI, errState, motionState, moveToOriginState, robotStartDoneState, modeChangeState, programStartStopState, emergencyState, reduceState, collision, enablestate, safetyStop0, safetyStop1, pauseState, interfereState = GetRobotFuncDOState() DOState[1] = CtrlBoxDO DOState[2] = CtrlBoxCO DOState[3] = CtrlBoxDI DOState[4] = CtrlBoxCI local ctrlWord0 = 0 ctrlWord0 = SetBitWithIndex(ctrlWord0, 0, errState) ctrlWord0 = SetBitWithIndex(ctrlWord0, 1, motionState) ctrlWord0 = SetBitWithIndex(ctrlWord0, 2, moveToOriginState) ctrlWord0 = SetBitWithIndex(ctrlWord0, 3, robotStartDoneState) ctrlWord0 = SetBitWithIndex(ctrlWord0, 4, modeChangeState) ctrlWord0 = SetBitWithIndex(ctrlWord0, 5, programStartStopState) ctrlWord0 = SetBitWithIndex(ctrlWord0, 6, emergencyState) ctrlWord0 = SetBitWithIndex(ctrlWord0, 7, reduceState) DOState[5] = ctrlWord0 local ctrlWord1 = 0 ctrlWord1 = SetBitWithIndex(ctrlWord1, 0, collision) ctrlWord1 = SetBitWithIndex(ctrlWord1, 1, enablestate) ctrlWord1 = SetBitWithIndex(ctrlWord1, 2, safetyStop0) ctrlWord1 = SetBitWithIndex(ctrlWord1, 3, safetyStop1) ctrlWord1 = SetBitWithIndex(ctrlWord1, 4, pauseState) ctrlWord1 = SetBitWithIndex(ctrlWord1, 5, interfereState) DOState[6] = ctrlWord1 SetFieldBusDOState(DOState) -- AO 상태 설정 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() AOState[1] = mainErrCode AOState[2] = subErrCode AOState[17] = axisPos1 AOState[18] = axisPos2 AOState[19] = axisPos3 AOState[20] = axisPos4 AOState[21] = axisPos5 AOState[22] = axisPos6 AOState[23] = cartPosx AOState[24] = cartPosy AOState[25] = cartPosz AOState[26] = cartPosrx AOState[27] = cartPosry AOState[28] = cartPosrz SetFieldBusAOState(AOState) sleep_ms(10) -- DI 상태 설정 -- DI 기능 설정 및 실시간 갱신 ctrlDI[1],ctrlDI[2],ctrlDI[3],ctrlDI[4],ctrlDI[5],ctrlDI[6] = GetFieldBusDIState() funcDI[1] = ctrlDI[1] funcDI[2] = ctrlDI[2] funcDI[3] = GetBitWithIndex(ctrlDI[3], 0) funcDI[4] = GetBitWithIndex(ctrlDI[3], 1) funcDI[5] = GetBitWithIndex(ctrlDI[3], 2) funcDI[6] = GetBitWithIndex(ctrlDI[3], 3) funcDI[7] = GetBitWithIndex(ctrlDI[3], 4) funcDI[8] = GetBitWithIndex(ctrlDI[3], 5) funcDI[9] = GetBitWithIndex(ctrlDI[3], 6) funcDI[10] = GetBitWithIndex(ctrlDI[3], 7) funcDI[11] = GetBitWithIndex(ctrlDI[4], 0) funcDI[12] = GetBitWithIndex(ctrlDI[4], 1) funcDI[13] = GetBitWithIndex(ctrlDI[4], 2) funcDI[14] = GetBitWithIndex(ctrlDI[4], 3) funcDI[15] = GetBitWithIndex(ctrlDI[4], 4) funcDI[16] = GetBitWithIndex(ctrlDI[4], 5) SetRobotFuncDIState(funcDI) local stopFlag = GetOpenLUAStopFlag(id) if(stopFlag ~= 0) then UnloadFieldBusSlave() break end sleep_ms(10) end **Step 3**: `로드` 버튼을 클릭해 로봇 슬레이브 모드를 로드합니다. .. image:: custom_protocol_slave/049.png :width: 6in :align: center .. centered:: 그림 17.3-3 슬레이브 모드 로드 .. note:: 로봇 슬레이브 모드 로드가 성공하면 자동 시작 기능이 지원됩니다. 리모트 모드를 사용하려면 먼저 슬레이브 모드를 언로드하십시오. **Step 4**: 오른쪽 상태 바 버튼을 클릭해 DI, DO, AI, AO 상호작용 정보를 모니터링합니다. 각 파라미터 의미는 다음과 같습니다. - CtrlDO: 마스터 장치가 로봇 제어 박스 DO를 제어하는 입력 신호값 - DI: 외부 마스터 제어 신호 입력값 - DO: 로봇 슬레이브가 피드백하는 출력 신호값 - AI: 외부 마스터로부터의 입력값. `AI0~AI15`는 int16, `AI16~AI31`는 float - AO: 로봇 슬레이브의 출력값. `AO0~AO15`는 int16, `AO16~AO31`는 float .. image:: custom_protocol_slave/050.png :width: 6in :align: center .. centered:: 그림 17.3-4 DI, DO, AI, AO 상호작용 정보 **Step 5**: 로드 완료 후 `티칭 프로그램 -> 통신 명령 -> 보드 명령`에서 보드 Lua 명령을 생성하여, 슬레이브 DO/AO 설정, 슬레이브 DI/AI 취득, 슬레이브 DI/AI 대기를 구현할 수 있습니다. .. image:: custom_protocol_slave/051.png :width: 6in :align: center .. centered:: 그림 17.3-5 보드 생성 Lua 명령 :download:`부록 1: 슬레이브 모드 주소 매핑표 <../_static/_doc/Control box slave mode address comparison table.xlsx>` 부록 ------------------- 명령 목록 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. list-table:: :widths: 20 80 :header-rows: 1 :align: center * - 명령 코드 - 명령 설명 * - 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 정지