홈으로 돌아가기

OpenPLC와 Modbus RTU를 통한 Raspberry Pi Pico 제어

이 기사는 OpenPLC와 Modbus RTU를 사용한 분산 제어 시스템에 Raspberry Pi Pico W 통합을 설명합니다. 하드웨어 구성, 레지스터 주소 지정, 로직 프로그래밍 및 산업 환경에서의 DIY 접근 방식 한계를 고려합니다.

OpenPLC에서 Raspberry Pi Pico를 I/O 노드로: 실전 가이드
Advertisement 728x90

OpenPLC와 Modbus RTU를 통해 Raspberry Pi Pico W를 산업 제어 시스템에 통합하기

STM32-IHM03를 기반으로 한 PMSM 모터 제어 프로젝트에서 OpenPLC로 로직을 구현한 Raspberry Pi Pico W를 사용한 원격 I/O 노드가 추가되었습니다. 노드 간 통신은 RS485를 통한 Modbus RTU로 처리되며, 시스템 전체 조정은 Node-RED를 사용하는 Orange Pi 4 Pro에서 담당합니다. 이 아키텍처는 IEC 61131-3 표준을 준수하는 분산 자동화 시스템을 오픈 소스 도구로 구축하는 방식을 보여줍니다.

하드웨어 구성 및 연결

시스템의 핵심은 세 가지 주요 구성 요소로 이루어집니다: 모터 제어를 위한 STM32-IHM03, 원격 I/O 모듈로 작동하는 Raspberry Pi Pico W, 그리고 중앙 컨트롤러인 Orange Pi 4 Pro입니다. STM32와 Orange Pi는 SN65HVD230 트랜시버를 사용한 CAN 버스로 연결되며, Orange Pi와 Pico는 MAX485 칩 기반 2선 Modbus RTU 버스로 연결됩니다.

Orange Pi에 Modbus와 CAN을 연결하기 위해 원래 Raspberry Pi용으로 설계된 RS485 CAN HAT 쉴드를 사용했습니다. 이를 Orange Pi에 적응시키기 위해 다음 작업이 필요했습니다:

Google AdInline article slot
  • Device Tree Overlay에서 MCP2515 클럭 주파수를 8 MHz에서 12 MHz로 변경;
  • SP3485 트랜시버와의 통신을 위해 orangepi-config를 통해 UART7 활성화;
  • 보드 아래 프로세서 위치로 인해 쉴드를 스탠드오프에 물리적으로 장착.

모든 구성 요소의 전원은 외부 소스에서 공급되며, 이는 작동 로직에는 영향을 주지 않지만 프로토타입 안정성에 중요합니다.

OpenPLC에서의 핀 및 레지스터 주소 지정

OpenPLC Editor에서 Raspberry Pi Pico W를 프로그래밍할 때 RP2040의 물리적 핀을 Modbus 주소에 매핑해야 합니다. 아래 표는 주요 매핑을 보여줍니다:

| PLC 데이터 유형 | 표기법 | Modbus 주소 범위 | 크기 | 접근 |

Google AdInline article slot

|---------------|----------|----------------------|------|--------|

| Discrete Outputs | %QX0.0 – %QX6.7 | 0–55 | 1 bit | RW |

| Discrete Inputs | %IX0.0 – %IX6.7 | 0–55 | 1 bit | R |

Google AdInline article slot

| Analog Inputs | %IW0 – %IW31 | 0–31 | 16 bit | R |

| Holding Registers | %QW0 – %QW31 | 0–31 | 16 bit | RW |

| Memory (16/32/64 bit) | %MW / %MD / %ML | 32–171 | up to 64 bit | RW |

이 주소들은 사다리 도식(LD) 또는 기능 블록 도식(FBD) 언어로 로직을 생성할 때 사용됩니다. 예를 들어 GPIO2에 연결된 릴레이를 제어하는 것은 %QX0.2와 Modbus 주소 2에 해당합니다.

OpenPLC v4에서의 로직 구현

OpenPLC v4는 IEC 61131-3 표준을 준수하는 프로그램 개발을 가능하게 합니다. Raspberry Pi Pico W의 경우 다음 프로그래밍 언어가 지원됩니다:

  • LD (Ladder Diagram) — 릴레이 사다리 로직으로 전기 엔지니어에게 직관적입니다.
  • FBD (Function Block Diagram) — 기능과 연결을 그래픽으로 표현합니다.
  • ST (Structured Text) — 고급 텍스트 언어입니다.

프로그램은 마이크로컨트롤러에서 직접 실행되는 OpenPLC 런타임에 업로드됩니다. 이 프로젝트에서 Pico는 주소 10과 같은 고정 주소의 Modbus RTU Slave로 작동합니다. 모든 읽기/쓰기 작업은 마스터 장치인 Orange Pi의 Node-RED에서 시작됩니다.

간단한 로직 예시: Modbus를 통해 "start" 신호를 받으면 코일 %QX0.0이 활성화되어 SRD-05VDC-SL-C 릴레이가 닫힙니다. 동시에 이산 입력 %IX1.0의 상태는 비상 정지 신호로 사용할 수 있습니다.

산업 자동화에서 DIY 접근 방식의 한계

유연성과 저비용에도 불구하고 Raspberry Pi Pico와 OpenPLC 솔루션은 산업 용도로 상당한 한계를 가집니다:

  • 입력/출력에 갈바닉 절연(galvanic isolation)이 없어 전원 장비의 간섭에 취약합니다.
  • 비표준 커넥터 (예: Micro-USB 및 2.54 mm 헤더)가 산업 환경의 진동을 견디지 못합니다.
  • 하드웨어 워치독이 없어 재부팅 없이 멈출 위험이 큽니다.
  • OpenPLC v4의 제한된 Modbus 지원: Holding Registers와 Coils 쓰기는 런타임 소스 코드 수정을 요구할 수 있습니다.

이러한 시스템은 교육, 프로토타이핑 또는 소규모 로컬 작업에 적합하지만, 임무-critical 생산 라인에는 부적합합니다.

주요 요약

  • Raspberry Pi Pico W는 OpenPLC를 사용한 자동화 시스템의 원격 I/O 노드로 사용할 수 있습니다.
  • Modbus RTU 통신은 OpenPLC 문서에 따른 적절한 핀 및 레지스터 주소 지정이 필요합니다.
  • RS485 CAN HAT 쉴드를 Orange Pi에 적응시키는 것은 가능하지만 Device Tree 편집과 필요한 UART 활성화가 필요합니다.
  • OpenPLC v4는 IEC 61131-3 표준을 지원하지만 CODESYS와 같은 산업 환경에 비해 기능적으로 부족합니다.
  • DIY 솔루션은 추가 보호와 인터페이스 표준화 없이는 산업 배포에 적합하지 않습니다.

— Editorial Team

Advertisement 728x90

다음 읽기