Безопасный удаленный gRPC доступ с grpcurl на устройствах PLCnext
ПРЕДУПРЕЖДЕНИЕ: Процедура, описанная в этом блоге, использует функции PLCnext Runtime, которые в настоящее время не поддерживаются. Используйте эти функции на свой страх и риск, и определенно не используйте в производственных приложениях.
Из проекта gRPCurl на GitHub:
В недавних версиях прошивки стало возможным получить доступ к gRPC серверу на устройствах PLCnext Control, но только с gRPC клиентами, запущенными на локальном устройстве. Предыдущие посты Makers Blog давали примеры gRPC клиентов на C# и Python.
В будущих версиях прошивки также станет возможным доступ к gRPC серверу на устройствах PLCnext Control с удаленных устройств. Фактически, эта функция уже включена в версию прошивки 2022.6, но она все еще в разработке и в настоящее время не поддерживается. Эта статья описывает, как активировать эту функцию для тестирования и разработки, используя open-source gRPC клиент gRPCurl.
Обратите внимание, что gRPC сервер НЕ ДОЛЖЕН в настоящее время быть доступен удаленно в производственных приложениях.
Процедура
На устройстве PLCnext Control (с прошивкой 2022.6)
- Отредактируйте файл
/etc/plcnext/Packages.acf.settingsи измените значение переменной окруженияARP_PACKAGE:Arp.Services.GrpcRemoteна"true"
В будущем эта настройка будет делаться через страницу «System Services» веб-менеджмента.
Проверьте содержимое файла
/opt/plcnext/config/Services/Grpc/Remote.grpc.config. Вы должны увидеть значение"0.0.0.0:50051"для адреса сокета слушателя. Это означает, что gRPC сервер будет слушать порт 50051 для сообщений от gRPC клиентов.Перезапустите PLCnext Runtime.
На удаленном устройстве
Установите gRPCurl, используя инструкции на GitHub.
Скачайте директорию
protobuf, содержащую файлы определения gRPC сервисов, из репозитория PLCnext/gRPC на GitHub.В командной строке выполните команду
grpcurlдля чтения температуры платы в устройстве PLCnext Control:
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 для получения информации о доступных опциях.
По вопросам gRPC сервера в PLCnext Runtime используйте PLCnext Community Forum.
Промышленные технологии
- Освоение операторов using в C#: импорт, псевдонимы и статические директивы
- Удалённый мониторинг погоды на Raspberry Pi 3 с PubNub
- Перехват команд ИК-пульта на Raspberry Pi без LIRC: подход через Python UART
- 5 ключевых преимуществ удаленного контроля производства для современной промышленности
- Безопасный удаленный gRPC доступ с grpcurl на устройствах PLCnext
- Управление кластерами на PLCnext: Использование Kubernetes для промышленной автоматизации
- Мониторинг PLCnext в реальном времени с дашбордами Tableau
- Создание дашбордов Power BI из облачных данных PLCnext
- Создание дашбордов Grafana для PLCnext Control в Azure IoT Hub
- Оптимизация Java 9 приложений на PLCnext Control с помощью jlink