无缝 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 - 创建 SSH 会话到 PLC,以 root 用户登录 (su) 获取 python 3.11 精简版(此时需互联网获取 python 镜像)
$ podman pull docker.io/library/python:3.11.10-slim-bookworm - 运行并附加容器(挂载 grpc2152 文件夹为卷,第二个卷 (run) 用于连接 gRPC 套接字):
$ 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 父文件夹执行 python 脚本 "generate_googlegrpc.py"(应出现工作信息)
$ cd /grpc2152 $ python3 generate_googlegrpc.py 脚本成功执行后应出现新文件夹 (pxc_grpc)。grpc2152 内 python 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 测试或审核。使用风险自负。
工业技术