使用 grpcurl 的远程 gRPC
警告:本博客中描述的过程使用了当前不支持的 PLCnext 运行时功能。使用这些功能需要您自担风险,绝对不要在生产应用程序中使用这些功能。
来自 gRPCurl github 项目:
在最近的固件版本中,可以访问 PLCnext Control 设备上的 gRPC 服务器,但只能使用在本地设备上运行的 gRPC 客户端。之前的 Makers 博客文章给出了用 C# 和 Python 编写的 gRPC 客户端示例。
在未来的固件版本中,还可以从 远程 访问 PLCnext 控制设备上的 gRPC 服务器 设备。事实上,此功能已包含在固件版本 2022.6 中,但仍在开发中,目前尚不支持。本文介绍了如何使用名为 gRPCurl 的开源 gRPC 客户端来激活此功能以进行测试和开发。
请注意,gRPC 服务器应该不 目前可以在生产应用程序中远程访问。
程序
在 PLCnext 控制设备上(使用固件 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。
在远程设备上
-
使用 Github 上的说明安装 gRPCurl。
-
下载
protobuf
目录,包含 gRPC 服务定义文件,来自 Github 上的 PLCnext/gRPC 存储库 -
在命令行上,发出
grpcurl
PLCnext控制设备中读取板温的命令:
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
}
}
常见问题
这可能是可能的,但是 grpcurl
需要从目标平台的源代码构建,并且考虑到可能并不简单的依赖项数量。
更多帮助...
使用 grpcurl -help
以获取有关可用选项的更多信息。
有关 PLCnext Runtime 中 gRPC Server 的问题,请使用 PLCnext 社区论坛。
工业技术