PLCnext 디바이스에서 grpcurl로 안전한 원격 gRPC 접근 구현
경고: 이 블로그에 설명된 절차는 현재 지원되지 않는 PLCnext Runtime 기능을 사용합니다. 본인 책임하에 사용하시고, 프로덕션 애플리케이션에는 절대 사용하지 마세요.
gRPCurl 깃허브 프로젝트에서:
최근 펌웨어 버전부터 PLCnext Control 디바이스에서 gRPC 서버에 접근할 수 있게 되었지만, 로컬 디바이스에서 실행되는 gRPC 클라이언트만 가능했습니다. 이전 메이커스 블로그 포스트에서 C#과 파이썬으로 작성된 gRPC 클라이언트 예제를 제공했습니다.
향후 펌웨어 버전에서는 원격 디바이스에서도 PLCnext Control 디바이스의 gRPC 서버에 접근할 수 있게 될 예정입니다. 사실 이 기능은 펌웨어 버전 2022.6에 이미 포함되어 있지만, 아직 개발 중이며 현재 지원되지 않습니다. 이 글은 오픈소스 gRPC 클라이언트인 gRPCurl을 사용해 테스트 및 개발 목적으로 이 기능을 활성화하는 방법을 설명합니다.
gRPC 서버는 현재 프로덕션 애플리케이션에서 원격으로 접근하면 안 됩니다.
절차
PLCnext Control 디바이스에서 (펌웨어 2022.6 기준)
/etc/plcnext/Packages.acf.settings 파일을 편집해 환경 변수 ARP_PACKAGE:Arp.Services.GrpcRemote 값을 "true"로 변경
향후 이 설정은 웹 기반 관리 ‘시스템 서비스’ 페이지에서 가능해질 예정입니다.
/opt/plcnext/config/Services/Grpc/Remote.grpc.config 파일 내용을 확인하세요. 리스너 소켓 주소로 "0.0.0.0:50051" 값이 보여야 합니다. 이는 gRPC 서버가 포트 50051에서 gRPC 클라이언트 메시지를 수신함을 의미합니다.
- PLCnext Runtime을 재시작하세요.
원격 디바이스에서
- 깃허브 지침에 따라 gRPCurl을 설치하세요.
- PLCnext/gRPC 깃허브 저장소에서 gRPC 서비스 정의 파일이 들어 있는
protobuf 디렉터리를 다운로드하세요.
- 명령줄에서 PLCnext Control 디바이스의 보드 온도를 읽는
grpcurl 명령을 실행하세요:
grpcurl -insecure -import-path Documents/plcnext-grpc/protobuf -proto Device/Interface/IDeviceStatusService.proto -d '{"identifier":"Status.Board.Temperature.Centigrade"}' 192.168.1.10:50051 Arp.Device.Interface.Services.Grpc.IDeviceStatusService/GetItem
여기서 -import-path는 protobuf 디렉터리 경로이고, IP 주소는 PLCnext Control 디바이스 주소입니다.
응답은 섭씨 온도를 담은 JSON 객체여야 합니다:
{ "ReturnValue": { "TypeCode": "CT_Int8", "Int8Value": 43 } }
FAQ
가능할 수 있지만, grpcurl을 타겟 플랫폼용으로 소스에서 빌드해야 하며, 의존성 수를 고려하면 단순하지 않을 겁니다.
더 많은 도움말
grpcurl -help로 사용 가능한 옵션 정보를 얻으세요.
PLCnext Runtime의 gRPC 서버 관련 질문은 PLCnext 커뮤니티 포럼을 이용하세요.