Autor: Varun Chebbi
Edge IIoT Application Engineer at Portainer.io
27 de agosto de 2024
O artigo original em inglês pode ser lido aqui: https://www.portainer.io/blog/CODESYS-plc-program-deployment-using-portainers-edge-configuration-and-stacks
A integração dos mundos da Tecnologia Operacional (OT) e Tecnologia da Informação (TI) apresenta desafios significativos. Sistemas OT, como PLCs, DCSs e SCADA, são complexos, dificultando tarefas como atualizações de firmware e controle de dispositivos durante incidentes de segurança cibernética. O Portainer, com suas ferramentas de Edge Configuration e Edge Stacks, simplifica essas operações, transformando processos complicados em fluxos eficientes.
Este guia mostra como integrar dispositivos de borda e implantar programas PLC desenvolvidos no CODESYS IDE. Para esta demonstração, utilizamos os PLCs WAGO CC100.
Etapa 1: criação de um Script de Auto Onboarding (Integração Automática)
Começamos integrando os nossos dispositivos de borda ao servidor. O recurso Auto Onboarding do Portainer permite integrar um grande número de dispositivos de borda em um único servidor. A Fig. 1 mostra a arquitetura de conectividade dos dispositivos de borda para um servidor.

Fig. 1: arquitetura do Portainer Server e dos dispositivos de borda para integração automática
Para criar o script de integração automática no Portainer, navegue até a página de ambiente do servidor Portainer e clique no botão “Auto Onboarding”. Defina o agente como “Edge Agent Standard”. Os detalhes do servidor serão preenchidos automaticamente. Em seguida, atribua os campos restantes, como Groups (para acesso baseado em função), Edge Groups e Tags, para gerenciar o acesso. Forneça uma função geradora de Edge ID (por exemplo, uuidgen) para que o Portainer possa atribuir uma identidade dentro da plataforma Portainer. O gerador de ID de borda recupera o identificador fornecido da máquina de borda e atribui o nome correspondente no servidor Portainer, conforme mostrado na figura 2 abaixo.

Fig. 2: geração de script de integração automática
Em seguida, o servidor Portainer gera um script de integração automática. Esse script é geral para todos os novos dispositivos e pode ser implantado em cada dispositivo de borda por meio da CLI ou de outras ferramentas de provisionamento. Cada dispositivo deve ter o Docker instalado como um pré-requisito (os dispositivos WAGO são entregues com o Docker instalado). Após a execução bem-sucedida do script, os dispositivos de borda são efetivamente integrados à “waiting room”. Quando os dispositivos estiverem na waiting room, você poderá associá-los ao grupo de borda dedicado para concluir o processo de integração, conforme visto na figura 3 abaixo. Os dispositivos de borda ficarão visíveis como on-line na página inicial.

Fig. 3: sala de espera no servidor Portainer
Depois de implantar o script de integração automática na máquina de borda, você observará que os dispositivos de borda aparecem na waiting room. Nesse momento, você precisará atribuir esses dispositivos a grupos de borda designados ou aplicar tags apropriadas para organizá-los sistematicamente. Isso garantirá que eles sejam integrados com êxito ao servidor Portainer.
Etapa 2: criação do arquivo de inicialização do programa CODESYS PLC
O CODESYS IDE é usado para desenvolver o código PLC usando um diagrama ladder, que pode ser tradicionalmente implantado em dispositivos de borda ou diretamente em um PLC usando um cabo USB-C. Depois de criar um programa CODESYS para controlar o CLP WAGO CC100 e testá-lo no ambiente de runtime do CODESYS, você deve criar o aplicativo de inicialização do arquivo, conforme mostrado na figura 4 abaixo. Um arquivo de aplicativo de inicialização (.app) será gerado na respectiva pasta. Esse arquivo precisa ser implantado no dispositivo de borda para tornar o PLC operacional. A operação do programa neste exemplo é piscar os LEDs no PLC. Há três programas diferentes para executar essa operação usando frequências diferentes. Nessa configuração, estamos usando três PLCs.

Fig. 4: UI do CODESYS IDE para criar o aplicativo de inicialização
Etapa 3: transferência de arquivos de inicialização usando as configurações do Edge
O objetivo deste método é transferir os arquivos de inicialização (.app e .crc) para os PLCs já configurados com um ambiente de execução CODESYS. Essa operação é realizada usando o recurso Edge Configuration. Navegue até a página “Edge Configurations” na plataforma Portainer, adicione uma nova Edge Configuration e você será solicitado a preencher os detalhes, conforme mostrado na Figura 5 abaixo.
Preencha os detalhes, como o nome da configuração de borda, o grupo de borda ao qual seus dispositivos de borda pertencem e o diretório nos dispositivos de borda onde deseja implantar o arquivo de inicialização. No nosso caso, estamos implantando uma configuração de borda específica do dispositivo, portanto, selecionamos essa opção e continuamos a combiná-la com o Portainer Edge ID específico, que é atribuído a cada dispositivo de borda. Você pode encontrar o Edge ID navegando até os ambientes no painel “Environments” (Ambientes) no lado esquerdo e clicando nos nomes dos ambientes (o ID está localizado na parte superior dessas páginas). Por fim, carregue o arquivo de inicialização e clique em “Create configuration and push” para implantar o arquivo de inicialização .app nos PLCs. O aplicativo de inicialização foi transferido para o dispositivo.
Observe que você deve implantar os arquivos de inicialização (arquivos .app e .crc) no diretório “/home/CODESYS_root/Plclogic/Application” para que sejam transferidos para o sistema de arquivos do contêiner com a ajuda do docker compose posteriormente.

Fig. 5: UI do Portainer mostrando as configurações de borda
Uma vez que os arquivos de inicialização estejam presentes no sistema de arquivos do host, que é transferido usando a configuração de borda, passamos a criar o contêiner de runtime CODESYS usando as Stacks de borda na próxima etapa.
Etapa 4: criação de Edge Stacks para o runtime do contêiner da CODESYS
Neste parágrafo, garantimos que os arquivos de inicialização (.app e. crc) estejam no sistema de arquivos do host do Wago PLC que foi transferido usando a configuração de borda, localizada no diretório “/home/CODESYS_root/Plclogic/Application”. O arquivo docker compose abaixo inicia o contêiner da CODESYS com uma imagem fornecida juntamente com a seleção dos arquivos de inicialização do sistema de arquivos do host para o sistema de arquivos do contêiner. A figura 6 abaixo mostra o arquivo docker-compose.yml que explica detalhadamente a imagem, os volumes e outros detalhes relacionados à execução do contêiner de runtime CODESYS.

Fig. 6: repositório Git para implantação do arquivo docker compose do contêiner de runtime da CODESYS
Para garantir o funcionamento adequado do seu aplicativo, é fundamental colocar os diferentes arquivos de inicialização em seus respectivos diretórios, conforme especificado. Neste exemplo, consideramos três arquivos de inicialização de aplicativos para três PLCs. A configuração do Docker Compose pegará automaticamente esses arquivos e ativará os contêineres usando a imagem especificada em todos os dispositivos de borda no grupo de borda.

Fig. 7: criação e implantação de stack para um único dispositivo de borda
Depois de clicar em “Add Stack”, você precisará nomear sua Stack e colar o conteúdo do arquivo docker-compose.yml no editor da Web, conforme mostrado na Figura 7 acima. O uso desse arquivo o ajudará a implementar uma Stack em um PLC com facilidade. Depois de colocar o conteúdo do arquivo docker-compose.yml no editor da Web, você pode clicar em “Deploy Stack” (Implantar Stack) e, em seguida, observará na guia do contêiner que um novo contêiner foi criado com o nome “wago-caa3-cc-FW26”, como pode ser visto na Figura 8 abaixo.

Fig. 8: Lista de contêineres que executam o dispositivo de borda
Quando o contêiner for executado com êxito, você verá o PLC operacional de acordo com o código do IDE da CODESYS desenvolvido para executar as operações. Neste exemplo, desenvolvemos um programa que pisca as luzes LED do CLP. A figura 9 abaixo mostra a visão arquitetônica do que foi alcançado aqui e a figura 10 mostra a visão operacional das luzes do CLP piscando.

Fig. 9: Arquitetura de implementação de Stack no PLC para contêineres de runtime da CODESYS

Fig. 10: Visão operacional das luzes LED do PLC piscando
A integração de dispositivos de borda com o Portainer e o CODESYS facilita o gerenciamento remoto de sistemas industriais. Esta abordagem elimina a necessidade de ferramentas físicas, como cabos USB, tornando o processo mais eficiente.
Na próxima publicação, abordaremos o uso de Edge Stacks para implantações em larga escala, sem a necessidade de usar Edge Configuration.
Repositório Git: https://github.com/chebbs/CODESYS-1st-Appraoch.git
SAIBA MAIS