원활한 gRPC 통합: Python 스크립트를 PLCnext Engineer 프로젝트에 연결
다음 정보는 2022년 포스트에 대한 업데이트이자 확장을 겸합니다.
이 접근 방식은 AXC F 2152와 AXC F 3152에서 동일하게 작동하며, 차이점은 필요한 라이브러리를 설치하는 방법에 있습니다.
중요: 이 접근 방식은 FW 2024.x와 2025.0에서 테스트되어 작동하는 것으로 확인되었습니다.
AXC F 2152의 경우:
grpcio와 grpcio-tools 라이브러리는 장치 외부에서 교차 컴파일되어 수동으로 설치해야 합니다. QEMU를 사용해 교차 컴파일을 수행하는 접근 방식의 개요는 이 포럼 항목에서 확인할 수 있습니다.
Python 3.11용 교차 컴파일된 라이브러리는 이 글의 나머지 파들과 함께 이 링크를 통해 제공됩니다.
다음 지침을 통해 Python 3.11을 사용하는 컨테이너를 생성해 gRPC를 활용하는 스크립트를 실행할 수 있습니다.
- WinSCP(또는 컨트롤러 파일 시스템에 접근할 수 있는 다른 소프트웨어)를 사용해 /opt/plcnext에 gRPC 통신용 폴더를 생성합니다. 이 예제에서는 해당 폴더에 "grpc2152"라는 이름을 부여합니다. grpc2152 내에 다음 폴더 구조를 생성합니다.
grpc2152/ ├── include/ │ └── google/ │ └── (현재 빈 폴더) │ ├── whl_files311/ │ ├── grpcio-1.71.0-cp311-cp311-linux_armv7l.whl │ └── grpcio_tools-1.71.0-cp311-cp311-linux_armv7l.whl │ ├── generate_googlegrpc.py ├── grpc_test.py └── Readme.txt
- "https://github.com/PLCnext/gRPC" 저장소를 다운로드하고 거기서 "protobuf" 폴더를 가져와 앞서 생성한 google 폴더 안에 배치합니다. 결과 폴더 구조는 다음과 같습니다:
grpc2152/ ├── include/ │ └── google/ │ └── protobuf/ │ └── (PLCnext GitHub 저장소의 protobuf 폴더 내용) │ ├── whl_files311/ │ ├── grpcio-1.71.0-cp311-cp311-linux_armv7l.whl │ └── grpcio_tools-1.71.0-cp311-cp311-linux_armv7l.whl │ ├── generate_googlegrpc.py ├── grpc_test.py └── Readme.txt
- PLC에 SSH 세션을 생성하고, root 사용자로 로그인(su)한 후 Python 3.11의 슬림 버전을 가져옵니다(이 시점에서 인터넷 연결이 필요함).
$ podman pull docker.io/library/python:3.11.10-slim-bookworm
- 컨테이너를 실행하고 연결합니다(grpc2152 폴더를 볼륨으로 연결하고, grpc 소켓 연결에 필요한 두 번째 볼륨(run) 연결):
$ podman run -it -v /opt/plcnext/grpc2152:/grpc2152 -v /run:/run --restart=always --name grpctester python:3.11.10-slim-bookworm /bin/bash
- 컨테이너 콘솔에 연결되면 whl_files311 폴더로 이동해 grpcio 라이브러리를 설치합니다(종속성을 위해 인터넷 연결 필요).
$ cd /grpc2152/whl_files311/ $ pip install *.whl
- 컨테이너 내 grpc2152 상위 폴더로 돌아가 "generate_googlegrpc.py" 파이썬 스크립트를 실행합니다(몇 가지 메시지가 나타남 -작동 중!-).
$ cd /grpc2152 $ python3 generate_googlegrpc.py
-
스크립트가 성공적으로 실행을 마치면 새 폴더(pxc_grpc)가 있어야 합니다. grpc2152 내에 gRPC용 파이썬 스니펫이 이제 그곳에 있습니다. 이제 예제 프로젝트와 스크립트로 gRPC 기능을 테스트할 수 있습니다.
-
PLCnext Engineer 프로젝트 "TestingGRPC.pcwex"를 컨트롤러에 다운로드하고 시작합니다.
-
컨테이너 콘솔에서 "grpc_test.py" 스크립트를 실행해 gRPC 기능을 테스트합니다. PLCnext Engineer 프로젝트에서 디버그 모드로 변수에 접근하면 변수 내용이 스크립트의 값으로 채워져야 합니다.
AXC F 3152의 경우.
위에 주어진 2152 절차를 동일하게 따르되, 5단계에서 pypi.org에서 직접 라이브러리를 설치합니다.
$ pip install grpcio==1.71.0 $ pip install grpcio-tools==1.71.0
데이터 유형 및 코드 스니펫 활용.
이제 변수 접근을 위해 gRPC를 사용하고 싶을 때마다 코드 스니펫이 생성된 폴더를 스크립트가 사용하는 Python 경로에 포함시키고 필요한 클래스를 임포트합니다(주어진 grpc_test.py 파일의 6~14행).
이 글 처음에 언급한 이전 포스트에 설명된 데이터 유형을 고려해야 합니다.
참고:
Makers Blog는 Phoenix Contact에서 테스트하거나 검토하지 않은 커뮤니티 구성원의 애플리케이션과 사용자 스토리를 보여줍니다. 자신의 책임 하에 사용하세요.