Automação residencial com suporte para linguagens de programação industrial ou BluePill x405

Início da Revisão


Então, meus queridos colegas, começamos a revisão com o que realmente queremos destacar aqui. No artigo, quero considerar os elementos típicos da construção de um programa de controlador industrial e mostrar como eles podem ser aplicados aos sistemas de automação residencial. E o mais importante é encontrar a resposta para a pergunta - o que é necessário para isso.

Domótica - Aplicações


Lar doce lar ... Você realmente precisa de um controlador? A resposta é simples - tudo depende do que está disponível em uma casa dessas. Obviamente, se você tiver apenas um apartamento, e a automação consistir em gerenciar sua central de mídia doméstica e ar condicionado no verão, tudo o que está escrito abaixo pode ser completamente desinteressante. Mas se o seu hobby não é apenas empurrar o sofá (o que há para se esconder, às vezes eu mesmo notei isso), o artigo pode ser muito útil.

Então, vamos tentar entender como os meios improvisados ​​podem simplificar nossa vida difícil. Como exemplo, usamos a situação real - uma bomba em um poço de 70 metros de profundidade, que dois vizinhos dobram. Eles o instalaram na primavera, quando havia muita água no poço e, em geral, era apenas quente e bom. Mas o tempo passa e as perguntas começam - para elevar a água a partir de tal profundidade, você precisa de eletricidade, pela qual precisa pagar. O porão e o piso técnico foram inundados várias vezes - eles simplesmente esqueceram de desligar a bomba ... Sim, e não é muito conveniente controlá-la manualmente - você precisa fechar uma torneira, abrir outra, ligar a bomba e observar o nível da água no tanque.

Vale a pena gastar seu tempo com isso, que já está faltando? Uma mente curiosa começa a procurar soluções e, é claro, encontra-a! Nasce uma lista de tarefas para implementação.

  1. O pagamento pela eletricidade consumida não precisa ser comum - ou seja, instalaremos duas entradas, cada uma conectada ao seu próprio medidor elétrico.
  2. A bomba não deve falhar devido à falta de água - isso significa que instalaremos um sensor para o curso "seco" da bomba. Se não houver água, simplesmente não ligue a bomba e, se funcionar, paramos de emergência.
  3. A bomba não deve funcionar por muito tempo - por exemplo, mais de 25 minutos. Exceder esse tempo indica que o sistema está saindo do modo normal de operação.
  4. O enchimento de recipientes deve ocorrer sem intervenção humana, ou seja, automaticamente, e isso significa começar no nível mais baixo e parar no nível superior.
  5. Apenas um tanque deve ser enchido, ou seja, instalamos duas válvulas - para fornecer água para um conjunto em cada tanque.
  6. A pausa entre o arranque da bomba deve ser de pelo menos 30 minutos.
  7. Uma interrupção de energia não deve afetar o algoritmo de operação, se estiver ativo. Apesar de tudo, o algoritmo deve ser concluído.

As tarefas são simples e podem ser resolvidas de cem, se não de mil maneiras. Mas o título do artigo fala por si e seguiremos um caminho espinhoso. Vamos usar um controlador virtual (por enquanto, é claro), que fará tudo isso.

Como funciona um controlador industrial?


Obviamente, esclareceremos imediatamente - estamos falando dos chamados controladores lógicos programáveis, ou PLC, para abreviar. O que está oculto sob esta abreviação? E aqui está o que está oculto - uma variedade incrível de soluções de hardware, um grande número de produtos e utilitários de software. Uma pergunta razoável surge imediatamente - como então usar todo esse bem? É realmente necessário estudar a parte do material do zero e encontrar tempo e dinheiro para cada novo dispositivo, a fim de fazer cursos de treinamento e adquirir as habilidades necessárias para trabalhar com cada dispositivo?

A resposta é não, não é necessário. Tudo foi feito diante de nós. Resta apenas estudar e aprender a usar. É isso que proponho fazer ainda mais - uma pequena imersão na norma IEC 61131. Vamos revelar quais partes esta norma contém.

  • IEC 61131-1: Informações gerais.
  • IEC 61131-2: Requisitos e teste de equipamento.
  • IEC 61131-3: Linguagens de Programação.
  • IEC 61131-4: Guia do Usuário.
  • IEC 61131-5: Comunicações.
  • IEC 61131-6: Segurança funcional.
  • IEC 61131-7: Programação de controle difuso.
  • IEC 61131-8: Diretrizes para o uso e implementação de linguagens de programação.
  • IEC 61131-9: Interface de comunicação digital de ponto único para pequenos sensores e atuadores.
  • IEC 61131-10: PLC aberto em formato de intercâmbio baseado em XML.

Mas não vamos nos aprofundar no tópico de padrões e, simplesmente, o controlador geralmente funciona de forma cíclica - pesquisando o status das entradas, o intérprete executando o programa de controle, definindo o status das saídas, executando tarefas de manutenção interna e voltando a pesquisar o status das entradas. É chato o suficiente, mas eficaz e eficiente. Um programa de controle é um pseudocódigo criado usando um ambiente de programação.Em geral, esse pseudocódigo é uma sequência com código binário, que não tem nada a ver com as linguagens de programação comuns. Embora para o usuário ele seja apresentado de uma forma compreensível - para o controlador, é usada uma visão completamente diferente. Um bom exemplo é um pequeno programa, apresentado na forma de IL, LD e na forma de codificação binária para o controlador (hmm, não há nem um termo especial). Abaixo do spoiler, um pequeno exemplo é mostrado.

Opções de exibição do programa


Então, o que torna este programa útil? Sim, ela não faz nada - se o valor do M8010 Merker for 1, 1. será gravado na saída com o endereço Y377. Portanto, o mesmo é para 0.
Uma das maiores vantagens dessa implementação é a capacidade de descarregar o programa da memória do controlador, abri-lo para edição em um editor de uma maneira que seja compreensível para os seres humanos, compilar (esse termo é condicional aqui) e carregá-lo de volta na memória do controlador. Além disso, alguns controladores ainda salvam comentários e nomes de variáveis.

Como programar o controlador?


Obviamente, é necessário software especializado. Após longas pesquisas e experiências, o Autoshop v3.02 da Inovance Control foi escolhido. É notável que é gratuito, disponível para download gratuito e suporta controladores compatíveis com os controladores Mitsubishi. E suporta o trabalho não apenas através de portas seriais, mas também através de Ethernet. Link para a versão usada por nós, sob o spoiler.

Link para download do Yandex Disk

Bem, instalamos o programa e agora outra pergunta - como escrever o programa no nosso controlador? Como trabalharemos com um dispositivo específico, instalaremos drivers específicos para a porta COM virtual. Para salvar conclusões e simplificar, decidi usar a porta USB da placa para conexão. Motoristas sob o spoiler.

Drivers no disco Yandex

Depois de instalar os drivers e conectar a placa via mini-USB, você pode verificar se tudo está bem-sucedido com você. Para fazer isso, clique com o botão direito do mouse em My Computer-Management-Device Manager-Ports (COM e LPT). Você deve ver uma janela como em um spoiler. O número da porta COM no seu sistema pode variar.

Gerenciador de dispositivos


Agora você pode selecionar Configuração de ferramentas de comunicação no menu AutoShop, selecione Serial na janela exibida, especifique o número da porta e clique no botão Teste. Você deve ter uma janela como essa em um spoiler.

Conexão bem-sucedida ao conselho


Mas se algo não der certo para você, escreva no PM ou em um comentário. Definitivamente ajudaremos.

Elementos do programa, sem os quais será triste


A seguir, consideraremos a linguagem dos diagramas em escada, ou o chamado LD. Vamos considerar apenas os elementos que usaremos posteriormente.

  • As entradas e saídas são discretas. Eles são designados como X e Y. Projetado para receber e emitir sinais discretos.
  • A área de memória de M merkers M. É possível ativar e desativar dois estados.
  • Os temporizadores são designados T. Projetado para contar o tempo de 0,1 a 3276,7 segundos.
  • A área dos registros D. Possui uma dimensão de célula de 16 bits, mas também pode ser endereçada como uma célula de 32 bits.

Cavalo esférico no vácuo, ou registros de endereçamento indiretos


Os registros de endereçamento indireto são designados V e Z e podem ser endereçados de V0 a V7 e de Z0 a Z7. Por que eles podem ser usados? Vamos ver como eles geralmente funcionam. Esse registro D1000V0 de aparência maluca significa que o endereço da célula calculado como endereço D1000 mais o valor gravado no registro de endereçamento indireto será usado. Se houver 15, usaremos o endereço da célula D1015. É muito conveniente ao trabalhar com matrizes de dados ou com controle de tabela - basta alterar o valor do registro de índice e obtemos os valores dessas células de memória que foram endereçadas. Porém, embora não os apliquemos, abordaremos isso na próxima publicação.

Um pouco sobre a visualização do programa ou depuração on-line


Se você é um programador e acabou de escrever um programa, a próxima etapa é a depuração. E aqui surge a questão - como fazê-lo. Novamente, existem muitas opções, mas vou falar sobre a que usaremos mais adiante. O editor do ambiente de programação permite mostrar visualmente quais valores de bits e variáveis ​​estão atualmente na memória do controlador pressionando um botão. Um exemplo muito revelador será: abaixo dos spoilers, a exibição offline e online do programa no editor.

Botão para mudar para o modo de visualização variável


Tipo de programa no modo de visualização dos valores das variáveis


Tipo de programa no modo de edição


Um pouco mais sobre os processos que ocorrem quando você clica no botão Online. O programa compila rapidamente uma lista de variáveis ​​visíveis e, após a conclusão, grava-a em um buffer do controlador específico. Depois disso, o controlador prepara os dados dessa lista e os coloca em outro buffer. O programa lê os valores desse buffer e os exibe como valores no diagrama de simulação. Se você rolar um pequeno programa na janela do visor e alterar as variáveis ​​visíveis, este ciclo será repetido novamente ...

Quem chama Hamlet, ou no palco BluePill x405


Você notou que o mercado não se depara com placas-mãe simples como um tablet azul, mas equipadas com processadores como F405 e superior? Pessoalmente, me deparei apenas com as pedras F401, mas esse é um nível um pouco diferente ... sou fácil de escalar e, para meus experimentos, sem pensar duas vezes, fiz um pagamento no bom e velho P-CAD 2006 e pedi aos chineses em um dos sites de pedidos rápidos. Claro, na cor é uma pastilha verde, mas em termos de significado, decidi deixar o nome BluePill, mas indicando que já é x405. O resultado nos spoilers é uma foto da placa BluePill x405.

Vista superior


Vista inferior


Conceito e gerber no github

Um pouco sobre por que esse fórum é tão marcante? Afinal, houve apenas milhares de tentativas para criar clones de bluepill! Mas a diferença é esta: anexo o firmware a esta placa, que a transformará em um kernel que executa um programa compatível com os controladores industriais da Mitsubishi em um sistema de comando. Esse milagre é calculado em 16 entradas, 16 saídas, 2 entradas analógicas, 3 UART com suporte DE para RS485, 1 barramento mestre de um fio. O UART pode funcionar como um barramento mestre modbus RTU e como escravo. E eles podem trabalhar de forma completamente independente.
Mas isso não é tudo - se você conectar uma bateria de 3V ao pino do VBAT, não apenas o relógio, mas também os temporizadores, contadores, merkers e os primeiros 1000 registros de uso geral D. manterão seus valores e existem 8000 registros.

Antecipando as perguntas, direi imediatamente - sim, o software é baseado em um sistema operacional em tempo real. Sim, o DMA é usado sempre que possível. Esses recursos permitem trabalhar sem alterações significativas no tempo de ciclo com altas cargas de comunicação. Esta versão é a segunda revisão, revisada e suplementada.

Esta placa pode ser totalmente programada pelo GX FXDeveloper e IEC Developer e GX Works.

O destino da bomba e dois tanques


Vamos agora resolver esse problema - especialmente porque todas as ferramentas para isso estão disponíveis. Para não me arrastar muito, escrevi um programa, dividi-o em partes (as chamadas redes ou redes de trabalho) e mostrarei cada um deles aqui e apresentarei comentários.

Rede 1 - primeira execução do programa


O registrador D1000 armazena o tempo necessário para suprimir o retorno do contato. De fato, isso já está no programa - mas eu quero mostrá-lo mais claramente. O registro D1001 é responsável pelo tempo de proteção da bomba. Nele escrevemos 15.000 ou 1.500 segundos. Em seguida, temos uma cadeia de redefinição de backup - se algo der errado, você pode enviar o sinal 1 para entrar no X14 e reiniciar a placa. Nesse caso, 0 é gravado nos registros D0 e D1, e os comerciantes M98 e M99 são redefinidos.

Rede 2 - processamento do sinal de entrada


Aqui, com a ajuda de temporizadores, nos livramos do ressalto dos contatos. Para fazer isso, use um atraso de 200 milissegundos. Para garantir que, no futuro programa, ao alterar o endereço de entrada do contato, não seja necessário reescrever muitas cadeias, eu uso merkers intermediários (por exemplo, M102). Também é digno de nota que o comerciante do sistema M8003 seja usado aqui - ele será ativado após o primeiro ciclo de execução do programa. Mas o M8002 Merker está ativo apenas no primeiro ciclo do programa, e isso pode e deve ser usado para definir os valores iniciais.

Rede de abastecimento de 3 tanques 1.


O enchimento do tanque 1 é completamente idêntico ao enchimento do tanque 2, com exceção dos endereços. O desenho não se encaixou nem um pouco - mas é melhor você olhar apenas abrindo o projeto. O que é notável nessa unidade de controle? A presença de proteções e impasses que permitem mecanismos de partida e parada sem choques. Por exemplo, após abrir a válvula 1, somente após 700 ms será emitido um comando para iniciar o motor de partida, que liga a bomba.

O gerenciamento aqui não fornece o modo manual. Além disso, proteção contra funcionamento a seco e proteção contra operação da bomba muito longa são implementadas.

Rede 5-6 - Gerenciamento de saída


E aqui controlamos as saídas de acordo com os bloqueios.

Das tarefas, apenas a conexão do intervalo de proteção de 30 minutos antes de reiniciar permaneceu não realizada. Devo dizer imediatamente que nesta versão apenas as entradas X0-X3 e a saída Y0-Y3 são implementadas, o que é suficiente para testar o material deste artigo. A ligação é PA4-X0, PA5-X1, PA6-X2, PA7-X3 e PB4-Y0, PB5-Y1, PB6-Y2, PB7-Y3.

Velocidade do ciclo do programa - métodos de medição do avô


Quando nos fazemos essa pergunta, imediatamente nos vem à mente fazer isso - escrever para o controlador um programa muito grande com um certo número de elementos idênticos, obter o tempo de execução e o tempo de execução de um comando. É dito - feito, sob o programa spoiler e em nome do tempo de execução do spoiler.

7995 etapas - 2,6 milissegundos

Aqui, cada etapa é um comando e obtemos 2,6 / 7995 = 0,325 microssegundos. Não é muito rápido, mas não é ruim.

FPU - ser ou não ser?


Agora vamos determinar com que rapidez as instruções de ponto flutuante funcionam em nosso firmware. Existem dois firmwares, um usando o FPU interno e outro com emulação de software. O programa abaixo:

Programa para calcular o tempo de execução de uma instrução

O firmware abaixo está sob o spoiler e eles não têm restrições

Firmware dois

Ao usar uma FPU de hardware, o tempo de execução do programa é de 1,8 ms ou 1,8 / 600 = 0,003 ms ou 3 microssegundos.

Agora substitua o firmware - use emulação de software. O resultado já é diferente - 2,5 ms ou 2,5 / 600 = 0,0041 ms ou 4,1 microssegundos. Nada mal, mas a diferença é bastante perceptível.

Conclusão


Apesar do grande volume do artigo, ainda há muitos materiais que seriam bons para cobrir. Portanto, se este artigo for do seu interesse, ele será seguido por outro. Mas eu gostaria de encontrar pessoas que pensam da mesma forma que desejam se unir à industrial e doméstica com apenas um propósito - para que essas ferramentas sejam acessíveis a um simples leigo.

Source: https://habr.com/ru/post/pt477478/


All Articles