Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Tecnologia industrial

Criar Cliente C# para Servidor gRPC PLCnext Control: Guia Passo a Passo

A versão de firmware 2022.0 LTS introduz um servidor gRPC nos dispositivos AXC F 1152 e AXC F 2152. Este servidor gRPC permite que aplicações cliente acessem serviços RSC no dispositivo PLCnext Control. As aplicações cliente podem:

(* acesso remoto disponível a partir do firmware 2022.3)

Informações gerais sobre o servidor gRPC em dispositivos PLCnext Control estão disponíveis no PLCnext Info Center.

Este artigo descreve como criar uma aplicação cliente gRPC simples em C#, rodando em um dispositivo PLCnext Control.

Pré-requisitos

O procedimento abaixo usa:

Procedimento

  1. Na página de gerenciamento web (WBM), certifique-se que o serviço GRPC LOCAL SERVER está ativado.
  2. Crie um novo projeto PLCnext Engineer para seu dispositivo alvo, com:
    • Um programa com variável de porta OUT chamada AI1, do tipo INT.
    • Uma instância desse programa chamada MainInstance1.
  3. Envie o projeto PLCnext Engineer para o dispositivo alvo.
  4. No Visual Studio, crie uma aplicação console C# vazia seguindo os Passos 1-3 do post anterior.
  5. Na janela Propriedades do Projeto, defina o Target framework para ".NET 5.0".
  6. No Solution Explorer, clique com botão direito na Solution, selecione "Gerenciar Pacotes NuGet para Solution..." e instale:
    • Grpc.Tools
    • Grpc.Net.Client
    • Google.Protobuf
  7. Copie a pasta protobuf com os arquivos de definição para a pasta source do projeto. Protobuf é a IDL (Interface Definition Language) usada para descrever serviços gRPC.
  8. No arquivo de configuração do projeto, adicione referência ao(s) arquivo(s) .proto dos serviços que serão usados. A seção ItemGroup ficará similar a isto:
Criar Cliente C# para Servidor gRPC PLCnext Control: Guia Passo a Passo

9. Substitua o conteúdo do arquivo .cs do projeto por este código (pode precisar alterar o nome do namespace):

using System;
using System.Net;
using System.Net.Http;
using System.Net.Sockets;
using System.Threading;
using System.Threading.Tasks;
using System.IO;
using Grpc.Net.Client;
using Arp.Device.Interface.Services.Grpc;
using Arp.Plc.Gds.Services.Grpc;

namespace ConsoleApp1 {
  class Program {
    static void Main() {
      // Código para conectar a Unix Domain Socket:
      // https://docs.microsoft.com/en-us/aspnet/core/grpc/interprocess?view=aspnetcore-6.0
      var udsEndPoint = new UnixDomainSocketEndPoint("/run/plcnext/grpc.sock");
      var connectionFactory = new UnixDomainSocketConnectionFactory(udsEndPoint);
      var socketsHttpHandler = new SocketsHttpHandler {
        ConnectCallback = connectionFactory.ConnectAsync
      };
      // Criar canal gRPC para o unix socket do PLCnext
      using var channel = GrpcChannel.ForAddress("https://localhost",
        new GrpcChannelOptions { HttpHandler = socketsHttpHandler });
      // Cliente gRPC para Device Status Service
      var grpc_status_client = new IDeviceStatusService.IDeviceStatusServiceClient(channel);
      // Cliente gRPC para Data Access Service
      var grpc_data_client = new IDataAccessService.IDataAccessServiceClient(channel);
      // Item para obter do Device Status Service
      // Identificadores listados no PLCnext Info Center
      var item = new IDeviceStatusServiceGetItemRequest();
      item.Identifier = "Status.Board.Temperature.Centigrade";
      // Variável para obter do Data Access Service
      var data = new IDataAccessServiceReadSingleRequest();
      data.PortName = "Arp.Plc.Eclr/MainInstance1.AI1";
      // Variáveis de resposta
      IDeviceStatusServiceGetItemResponse grpc_status_response;
      IDataAccessServiceReadSingleResponse grpc_data_response;
      // Loop infinito
      while (true) {
        // Requisição ao Device Status Service
        grpc_status_response = grpc_status_client.GetItem(item);
        // Requisição ao Data Access Service
        grpc_data_response = grpc_data_client.ReadSingle(data);
        // Reportar resultados
        var temperature = grpc_status_response.ReturnValue.Int8Value;
        var ai1 = grpc_data_response.ReturnValue.Value.Int16Value;
        Console.WriteLine("Board Temperature = " + temperature + "°C");
        Console.WriteLine("MainInstance1.AI1 = " + ai1);
        // Aguardar 1 segundo
        Thread.Sleep(1000);
      }
    }
  }

  public class UnixDomainSocketConnectionFactory {
    private readonly EndPoint _endPoint;
    public UnixDomainSocketConnectionFactory(EndPoint endPoint) {
      _endPoint = endPoint;
    }
    public async ValueTask<Stream> ConnectAsync(SocketsHttpConnectionContext _, CancellationToken cancellationToken = default) {
      var socket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.Unspecified);
      try {
        await socket.ConnectAsync(_endPoint, cancellationToken).ConfigureAwait(false);
        return new NetworkStream(socket, true);
      }
      catch {
        socket.Dispose();
        throw;
      }
    }
  }
}
  1. No Solution Explorer, clique com botão direito na Solution e abra um Terminal.
  2. No terminal, execute:
    dotnet build ConsoleApp1.csproj
    dotnet publish -c RELEASE -r linux-arm .\ConsoleApp1.csproj -o MyApp

    Onde ConsoleApp1 é o nome da solution e MyApp o diretório de saída. Também pode publicar em modo DEBUG.

  3. Copie o diretório de saída e todo seu conteúdo para o PLC (ex: scp ou WinSCP):
    scp -r MyApp admin@192.168.1.10:~
  4. Abra uma sessão shell no PLC (ex: ssh ou PuTTY).
  5. Certifique-se que o executável tem privilégios de execução:
    $ chmod a+x /opt/plcnext/MyApp/ConsoleApp1
  6. Execute a aplicação:
    $ /opt/plcnext/MyApp/ConsoleApp1

A saída deve ser similar a:

Board Temperature = 50°C
MainInstance1.AI1 = 0
Board Temperature = 50°C
MainInstance1.AI1 = 0
...
  1. No PLCnext Engineer, entre online e altere o valor da variável AI1. O valor reportado pela aplicação deve mudar.

Referências e outros recursos

  1. .NET Core ❤ gRPC
  2. Call gRPC services with the .NET client
  3. A curated list of useful resources for gRPC

Tecnologia industrial

  1. Veículos Elétricos em Alta: Como a Demanda Crescente Molda a Cadeia de Suprimentos Global
  2. Otimizando a Logística de Cadeia Fria para Distribuição da Vacina contra COVID-19
  3. Logística de Belas Artes: Revolucionando o Mercado Global de Arte
  4. Estratégias Proativas para Navegar Disrupções Futuras na Cadeia de Suprimentos
  5. Como Calcular o Tamanho do Banco de Capacitores (µF e kVAR) para Correção do Fator de Potência
  6. Definindo a Ferramenta Ideal de Controlo de Produção: Características-Chave e Melhores Práticas
  7. Intel Edison IoT: Escolhendo o Mini-Computador Certo para o seu Protótipo
  8. Desenvolver Aplicação Console PLCnext em C#: Guia para Iniciantes
  9. Medição Precisa de Conexões Hidráulicas: Guia Passo a Passo
  10. Controle Velocidade de Motor Hidráulico com PWM e Controle Remoto