ShIoTiny: nós, conexões e eventos ou recursos de programas de desenho

ShIoTiny: nós, conexões e eventos ou recursos de programas de desenho

Pontos principais ou sobre o que trata este artigo

O tema do artigo é programação visual de PLC ShIoTiny para a casa inteligente descrita aqui: ShIoTiny: pequena automação, Internet das coisas ou “seis meses antes das férias”.

Muito brevemente conceitos como nós, laços, desenvolvimentos, bem como recursos de carregamento e execução de um programa visual em ESP8266, que é a base do PLC ShIoTiny.

Introdução ou algumas questões organizacionais

No artigo anterior sobre meu desenvolvimento, dei uma breve visão geral dos recursos do controlador ShIoTiny.

Curiosamente, o público demonstrou um grande interesse e fez-me muitas perguntas. Alguns amigos até se ofereceram imediatamente para comprar um controlador meu. Não, não sou contra ganhar um dinheirinho, mas minha consciência não me permite vender algo que ainda é muito tosco em termos de software.

Portanto, publiquei os binários do firmware e o diagrama do dispositivo no GitHub: firmware + instruções mais curtas + diagrama + exemplos.

Agora todos podem atualizar o ESP-07 e brincar com o firmware. Se alguém realmente quiser exatamente a mesma placa da foto, então tenho várias. Escreva por e-mail [email protegido]. Mas, como dizia o inesquecível Ogurtsov: “Não sou responsável por nada!”

Então, vamos direto ao ponto: o que é "" (nó) e "evento"? Como o programa é executado?

Como sempre, vamos começar pela ordem: baixando o programa.

Como o programa é carregado

Vamos começar com o que acontece quando pressionamos um botão Escolher arquivo no editor ElDraw e nosso programa de circuito, composto por lindos quadrados, voa para dentro do aparelho.

Em primeiro lugar, com base no diagrama que traçamos, constrói-se a sua descrição em forma de texto.
Em segundo lugar, verifica se todas as entradas do nó estão conectadas às saídas. Não deve haver entradas “penduradas”. Se tal entrada for detectada, o circuito não será carregado no ShIoTiny e o editor exibirá um aviso correspondente.

Se tudo correr bem, o editor envia uma descrição de texto do circuito, um nó por vez, para ShIoTiny. Claro, o circuito existente do ShIoTiny é primeiro removido. A descrição de texto resultante é armazenada na memória FLASH.

A propósito, se você deseja remover um circuito de um dispositivo, basta carregar nele um circuito vazio (não contendo um único elemento de nó).

Depois que todo o programa do circuito é carregado no PLC ShIoTiny, ele começa a “executar”. O que isso significa?

Observe que os processos para carregar um circuito da memória FLASH quando a energia é ligada e ao receber um circuito do editor são idênticos.

Primeiro, os objetos de nó são criados com base em sua descrição.
Em seguida, as conexões são feitas entre os nós. Ou seja, são geradas ligações de saídas para entradas e de entradas para saídas.

E só depois de tudo isso começa o ciclo principal de execução do programa.

Escrevi por muito tempo, mas todo o processo - desde o “carregamento” do circuito da memória FLASH até o início do ciclo principal - leva uma fração de segundo para um circuito de 60 a 80 nós.

Como funciona o loop principal? Muito simples. Primeiro ele espera o surgimento desenvolvimentos em algum nó e então processa esse evento. E assim por diante indefinidamente. Bem, ou até que carreguem um novo esquema para ShIoTiny.

Várias vezes já mencionei coisas como desenvolvimentos, nós и laços. Mas o que é isso do ponto de vista do software? Falaremos sobre isso hoje.

Nós, conexões e eventos

Basta olhar para os exemplos de programas de circuito para ShIoTinyentender que o diagrama consiste em apenas duas entidades - nós (ou elementos) e as conexões entre eles.

, mas sim ou elemento de circuito é uma representação virtual de alguns atividade sobre os dados. Pode ser uma operação aritmética, uma operação lógica ou qualquer operação que nos venha à mente. O principal é que o nó tenha entrada e saída.

entrada - este é o local onde o nó recebe os dados. As imagens de entrada são pontos que ficam sempre à esquerda do nó.

Saída - este é o local onde o resultado da operação do nó é recuperado. As imagens de saída são pontos que estão sempre localizados no lado direito do nó.

Alguns nós não possuem entradas. Esses nós geram o resultado internamente. Por exemplo, um nó constante ou um nó sensor: eles não precisam de dados de outros nós para relatar o resultado.

Outros nós, ao contrário, não possuem saídas. São nós que exibem, por exemplo, atuadores (relés ou algo semelhante). Eles aceitam dados, mas não geram um resultado computacional que esteja disponível para outros nós.

Além disso, há também um nó de comentários exclusivo. Não faz nada, não tem entradas nem saídas. Seu objetivo é ser uma explicação no diagrama.

O que aconteceu "evento"? Evento é o surgimento de novos dados em qualquer nó. Por exemplo, os eventos incluem: mudança no estado de entrada (nó Entrada), recebendo dados de outro dispositivo (nós MQTT и UDP), expiração de um período de tempo especificado (nós Cronômetro и Demora) etc.

Para que servem os eventos? Sim, para determinar em qual nó surgiram novos dados e os estados de quais nós precisam ser alterados em conexão com o recebimento de novos dados. O evento parece “passar” pela cadeia de nós até ignorar todos os nós cujo estado precisa ser verificado e alterado.

Todos os nós podem ser divididos em duas categorias.
Vamos chamar nós que podem gerar eventos”nós ativos".
Chamaremos nós que não podem gerar eventos “nós passivos".

Quando um nó gera um evento (ou seja, novos dados aparecem em sua saída), então, no caso geral, o estado de toda a cadeia de nós conectados à saída do nó gerador de eventos muda.

Para deixar claro, considere o exemplo da figura.

ShIoTiny: nós, conexões e eventos ou recursos de programas de desenho

Os nós ativos aqui são Input1, Input2 e Input3. Os nós restantes são passivos. Consideremos o que acontece quando uma ou outra entrada é fechada. Por conveniência, os resultados estão resumidos em uma tabela.

ShIoTiny: nós, conexões e eventos ou recursos de programas de desenho

Como você pode ver, quando ocorre um evento, uma cadeia é construída do nó de origem do evento até o nó final. O estado dos nós que não entram na cadeia não muda.

Surge uma questão legítima: o que acontecerá se dois ou mesmo vários eventos ocorrerem simultaneamente?

Como amante da obra de Gleb Anfilov, sinto-me tentado a enviar um questionador curioso ao seu livro “Escape from Surprise”. Esta é uma “teoria da relatividade para os mais pequenos”, que explica bem o que significa “simultâneo” e como conviver com isso.

Mas praticamente tudo é muito mais simples: quando dois ou mesmo vários eventos ocorrem, todas as cadeias de cada fonte de evento são construídas sequencialmente e processadas sucessivamente, e nenhum milagre ocorre.

A próxima pergunta completamente legítima de um leitor curioso é o que acontecerá se os nós estiverem conectados em um anel? Ou, como dizem entre esses seus caras espertos, apresente feedback. Ou seja, conecte a saída de um dos nós à entrada do nó anterior para que o estado de saída deste nó afete o estado de sua entrada. O editor não permitirá que você conecte diretamente a saída de um nó à sua entrada. ElDraw. Mas indiretamente, como na figura abaixo, isso pode ser feito.

Então, o que acontecerá neste caso? A resposta será muito “definitiva”: dependendo de quais nós. Vejamos o exemplo da figura.

ShIoTiny: nós, conexões e eventos ou recursos de programas de desenho

Quando os contatos de entrada da Entrada1 estão abertos, a entrada superior do nó A é 0. A saída do nó A também é 0. A saída do nó B é 1. E, finalmente, a entrada inferior do nó A é 1. Tudo é claro. E para quem não tem certeza, veja abaixo uma descrição de como funcionam os nós “AND” e “NOT”.

Agora fechamos os contatos da entrada Input1, ou seja, aplicamos um na entrada superior do nó A. Quem conhece eletrônica sabe que na verdade teremos um circuito gerador clássico utilizando elementos lógicos. E em teoria, tal circuito deveria produzir infinitamente a sequência 1-0-1-0-1-0… na saída dos elementos A e B. e 0-1-0-1-0-1-…. Afinal, o evento deve mudar constantemente o estado dos nós A e B, rodando em círculo 2-3-2-3-...!

Mas na realidade isso não acontece. O circuito entrará em um estado aleatório - ou o relé permanecerá ligado ou desligado, ou talvez ligue e desligue levemente várias vezes seguidas. Tudo depende do clima no pólo sul de Marte. E é por isso que isso acontece.

Um evento do nó Entrada1 altera o estado do nó A, depois do nó B e assim por diante em um círculo várias vezes. O programa detecta o “looping” do evento e interrompe à força este carnaval. Depois disso, as alterações no estado dos nós A e B são bloqueadas até que ocorra um novo evento. O momento em que o programa decide “parar de girar em círculos!” - em geral depende de muitos fatores e pode ser considerado aleatório.

Tenha cuidado ao conectar nós em um anel - os efeitos nem sempre serão óbvios! Tenha uma boa ideia do que e por que você está fazendo!

Ainda é possível construir um gerador nos nós à nossa disposição? Sim você pode! Mas isso requer um nó que possa gerar eventos por conta própria. E existe tal nó - esta é a “linha de atraso”. Vamos ver como funciona um gerador com período de 6 segundos na figura abaixo.

ShIoTiny: nós, conexões e eventos ou recursos de programas de desenho

O elemento chave do gerador é o nó A - a linha de atraso. Se você alterar o estado de entrada da linha de atraso de 0 para 1, 1 não aparecerá na saída imediatamente, mas somente após um tempo especificado. No nosso caso são 3 segundos. Da mesma forma, se você alterar o estado de entrada da linha de atraso de 1 para 0, 0 aparecerá na saída após os mesmos 3 segundos. O tempo de atraso é definido em décimos de segundo. Ou seja, o valor 30 significa 3 segundos.

Uma característica especial da linha de atraso é que ela gera um evento após o tempo de atraso ter expirado.

Vamos supor que inicialmente a saída da linha de atraso fosse 0. Após passar pelo nó B - o inversor - esse 0 vira 1 e vai para a entrada da linha de atraso. Nada acontece imediatamente. Na saída da linha de atraso, permanecerá 0, mas a contagem regressiva do tempo de atraso será iniciada. 3 segundos se passam. E então a linha de atraso gera um evento. Na sua saída aparece 1. Esta unidade, após passar pelo nó B - o inversor - passa para 0 e vai para a entrada da linha de atraso. Mais 3 segundos se passam... e o processo se repete. Ou seja, a cada 3 segundos o estado da saída da linha de atraso muda de 0 para 1 e depois de 1 para 0. O relé clica. O gerador está funcionando. O período do pulso é de 6 segundos (3 segundos na saída zero e 3 segundos na saída um).

Mas, em circuitos reais, normalmente não há necessidade de usar este exemplo. Existem nós temporizadores especiais que perfeitamente e sem ajuda externa geram uma sequência de pulsos com um determinado período. A duração de “zero” e “um” nesses pulsos é igual à metade do período.

Para definir ações periódicas, use nós de temporizador.

Observo que tais sinais digitais, onde a duração de “zero” e “um” são iguais, são chamados de “meandro”.

Espero ter esclarecido um pouco a questão de como os eventos são propagados entre os nós e o que não fazer?

Conclusão e referências

O artigo acabou sendo curto, mas é uma resposta às perguntas que surgiram em relação aos nós e eventos.

À medida que o firmware se desenvolve e novos exemplos aparecem, escreverei sobre como programar ShIoTiny pequenos artigos, desde que sejam interessantes para as pessoas.

Como antes, diagrama, firmware, exemplos, descrição de componentes e tudo mais o resto está aqui.

Dúvidas, sugestões, críticas - acesse aqui: [email protegido]

Fonte: habr.com

Adicionar um comentário