Sicheren Remote-gRPC-Zugriff mit grpcurl auf PLCnext-Geräten
WARNUNG: Das hier beschriebene Verfahren nutzt Features der PLCnext Runtime, die aktuell nicht unterstützt werden. Auf eigenes Risiko verwenden, und keinesfalls in Produktionsanwendungen einsetzen.
Vom grpcurl GitHub-Projekt:
In aktuellen Firmware-Versionen war Zugriff auf den gRPC-Server auf PLCnext Control Geräten möglich, aber nur mit gRPC-Clients, die lokal auf dem Gerät laufen. Frühere Makers Blog Posts zeigten Beispiele für gRPC-Clients in C# und Python.
In zukünftigen Firmware-Versionen wird auch Remote-Zugriff auf den gRPC-Server von PLCnext Control Geräten möglich sein. Tatsächlich ist dieses Feature bereits in Firmware 2022.6 enthalten, aber noch in Entwicklung und nicht offiziell unterstützt. Dieser Artikel beschreibt, wie man es für Test- und Entwicklungszwecke aktiviert, mittels Open-Source-gRPC-Client grpcurl.
Bitte beachten: Der gRPC-Server sollte NICHT aktuell remote in Produktionsanwendungen angesprochen werden.
Vorgehen
Auf dem PLCnext Control Gerät (Firmware 2022.6)
- Datei
/etc/plcnext/Packages.acf.settingsbearbeiten und Wert der UmgebungsvariableARP_PACKAGE:Arp.Services.GrpcRemoteauf"true"setzen.
In Zukunft wird diese Einstellung über die Web-Based-Management-Seite „System Services“ erfolgen.
Inhalt von
/opt/plcnext/config/Services/Grpc/Remote.grpc.configprüfen. Wert"0.0.0.0:50051"für Listener-Socket-Adresse sollte sichtbar sein. Das bedeutet: gRPC-Server lauscht auf Port 50051 auf Nachrichten von gRPC-Clients.PLCnext Runtime neu starten.
Auf dem Remote-Gerät
grpcurl installieren gemäß Anleitung auf GitHub.
protobuf-Verzeichnis mit gRPC-Service-Definitionsdateien aus PLCnext/gRPC Repository auf GitHub herunterladen.Auf Kommandozeile grpcurl-Befehl ausführen, um Board-Temperatur im PLCnext Control Gerät auszulesen:
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
… wobei -import-path der Pfad zum protobuf-Verzeichnis ist und die IP-Adresse die des PLCnext Control Geräts.
Die Antwort sollte ein JSON-Objekt mit Board-Temperatur in °C sein:
{
"ReturnValue": {
"TypeCode": "CT_Int8",
"Int8Value": 43
}
}
FAQ
Das könnte möglich sein, aber grpcurl müsste für die Zielplattform aus Source gebaut werden – angesichts der Dependencies wohl nicht einfach.
Für weitere Hilfe …
grpcurl -help für mehr Infos zu Optionen.
Fragen zum gRPC-Server in der PLCnext Runtime: PLCnext Community Forum nutzen.
Industrietechnik
- C# using-Anweisungen meistern: Importe, Aliase und statische Direktiven
- Remote-Wetterüberwachung mit Raspberry Pi 3 & PubNub
- IR-Fernbedienungsbefehle auf Raspberry Pi ohne LIRC erfassen: Python UART-Ansatz
- 5 Schlüsselvorteile der ferngesteuerten Produktionskontrolle für die moderne Industrie
- Sicheren Remote-gRPC-Zugriff mit grpcurl auf PLCnext-Geräten
- Cluster-Management auf PLCnext: Kubernetes für die industrielle Automatisierung nutzen
- Echtzeit-Monitoring von PLCnext mit Tableau-Dashboards
- Power BI Dashboards aus PLCnext-Clouddaten erstellen
- Echtzeit-Grafana-Dashboards für PLCnext Control in Azure IoT Hub erstellen
- Java 9 Apps auf PLCnext Control mit Jlink optimieren