ShIoTiny: nós, links e eventos ou recursos de programas de desenho



Pontos principais ou sobre o que é este artigo


O tópico do artigo é a programação visual do ShIoTiny PLC para a casa inteligente descrita aqui: ShIoTiny: automação pequena, Internet das coisas ou "seis meses antes das férias" .

Conceitos como nós , comunicações , eventos , bem como recursos para carregar e executar um programa visual no ESP8266 , que é a base do ShIoTiny PLC, são revisados ​​muito brevemente .

Site do Projeto ShIoTiny


Introdução ou algumas perguntas organizacionais


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

Curiosamente, o público mostrou um interesse bastante forte e me fez muitas perguntas. Alguns camaradas me ofereceram imediatamente para comprar um controle. Não, não me oponho a ganhar um pouco de dinheiro, mas minha consciência não me permite vender uma coisa que ainda é muito grosseira em termos de software.

Portanto, publiquei nos binários de firmware do GitHub e no diagrama do dispositivo: firmware + instrução mais curta + circuito + exemplos .

Agora todos podem piscar o ESP-07 e jogar com o firmware por conta própria. Se alguém realmente quer apenas um quadro como na foto, então eu tenho vários deles. Escreva para shiotiny@yandex.ru . Mas, como costumavam dizer os inesquecíveis pepinos: "Eu não sou responsável por nada!"

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

Como sempre - vamos começar em ordem: baixando o programa.

Como o programa carrega


Para começar, o que acontece quando clicamos no botão Upload no editor ElDraw e nosso esquema de programa, composto de quadrados bonitos, voa para o dispositivo.

Primeiramente, com base no diagrama desenhado por nós, sua descrição em forma de texto é construída.
Em segundo lugar, é verificado se todas as entradas dos nós estão conectadas às saídas. Não deve haver entradas "penduradas". Se uma entrada desse tipo for detectada, o circuito no ShIoTiny não será carregado e o editor exibirá um aviso.

Se tudo der certo, o editor envia uma descrição em texto do circuito para um nó no ShIoTiny. Obviamente, o esquema existente do ShIoTiny foi removido anteriormente. A descrição do texto resultante é salva na memória FLASH.

A propósito, se você deseja remover o circuito do dispositivo, basta carregar um circuito vazio (que não contém nenhum elemento do nó) nele.

Assim que todo o circuito do programa é carregado no PLC ShIoTiny, ele começa a "funcionar". O que isso significa?

Observe que os processos de carregamento do circuito da memória FLASH quando a energia é ligada e quando o circuito é recebido do editor são idênticos.

Primeiro, a criação dos objetos do nó com base em sua descrição.
Em seguida, é feita a organização das conexões entre os nós. Ou seja, são gerados links de saídas para entradas e entradas para saídas.

E somente depois de tudo isso, o ciclo principal de execução do programa é iniciado.

Escrevi por um longo tempo, mas todo o processo - de "carregar" o circuito da memória FLASH até o início do loop 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 que o evento ocorra em qualquer nó e depois processa esse evento. E assim sem fim. Bem, ou até que eles enviem um novo esquema para o ShIoTiny.

Já várias vezes mencionei coisas como eventos , nós e conexões . Mas o que é isso do ponto de vista do software? Vamos falar sobre isso hoje.

Nós, conexões e eventos


Veja os exemplos de programas de circuito do ShIoTiny para entender que um circuito consiste em apenas duas entidades - nós (ou elementos) e os relacionamentos entre eles.

Um nó , ou elemento do circuito é uma representação virtual de alguma ação nos dados. Pode ser uma operação aritmética, uma operação lógica ou qualquer operação que nos ocorra. O principal é que o nó tenha uma entrada e uma saída.

Uma entrada é onde o nó recebe dados. Imagens de entrada são pontos que estão sempre no lado esquerdo do nó.

A saída é o local de onde o resultado da operação do nó é extraído. Imagens de saída são pontos que estão sempre no lado direito do nó.

Alguns nós não têm entradas. Esses nós geram um resultado dentro de si. Por exemplo, um nó constante ou um sensor: eles não precisam de dados de outros nós para relatar o resultado.

Outros nós, por outro lado, não têm saídas. Estes são os nós que exibem, por exemplo, atuadores (relés ou outros dispositivos similares). Eles aceitam dados, mas não geram o resultado de cálculos disponíveis para outros nós.

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

O que é um " evento "? Um evento é a ocorrência de novos dados em um nó. Por exemplo, os eventos incluem: alteração do estado de entrada (nó de entrada ), recebimento de dados de outro dispositivo (nós MQTT e UDP ), expiração de um período especificado (nós Timer e Delay ) e assim por diante.

Para que servem os eventos? Sim, para determinar em qual nó os novos dados apareceram e os estados de quais nós precisam ser alterados em conexão com o recebimento de novos dados. O evento, por assim dizer, "passa" ao longo da cadeia de nós até ultrapassar todos os nós cujo estado deve ser verificado e alterado.

Todos os nós podem ser divididos em duas categorias.
Os nós que podem gerar eventos são chamados de " nós ativos ".
Os nós que não podem gerar eventos são chamados de " nós passivos ".

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

Para deixar claro, considere o exemplo na figura.



Os nós ativos aqui são Entrada1, Entrada2 e Entrada3. Os nós restantes são passivos. Considere o que acontece quando essa ou aquela entrada é fechada. Por conveniência, os resultados são tabulados.



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

Uma pergunta legítima surge, mas o que acontecerá se dois ou até vários eventos ocorrerem simultaneamente?

Como amante do trabalho de Gleb Anfilov, sou tentado a enviar um curioso questionador ao seu livro "Flight from Surprise". Essa é uma "teoria da relatividade para o menor", na qual se sabe bem o que é "simultaneamente" e como conviver com ela.

Mas puramente quase tudo é muito mais simples: quando dois ou mesmo vários eventos ocorrem, todas as cadeias de cada fonte de eventos são sequencialmente construídas e processadas sucessivamente, sem milagres.

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

Então, o que será neste caso? A resposta será muito "definida": dependendo de quais nós. Considere o exemplo na figura.



Quando os contatos da entrada Input1 estão abertos na entrada superior do nó A - 0. Na saída do nó A, também 0. Na saída do nó B - 1. E, finalmente, na entrada inferior do nó A - 1. Tudo está claro. E para quem não está claro - procure abaixo uma descrição de como os nós "AND" e "NOT" funcionam.

Agora feche os contatos da entrada Input1, ou seja, forneceremos um à entrada superior do nó A. Quem conhece a eletrônica sabe que, na verdade, temos um circuito gerador de lógica clássica. E, em teoria, esse esquema deve produzir infinitamente na saída dos elementos A e B as seqüências 1-0-1-0-1-0. e 0-1-0-1-0-1-1 .... Afinal, um evento deve mudar constantemente o estado dos nós A e B, executando um círculo 2-3-2-3- ...!

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

Um evento do nó Input1 altera o estado do nó A, depois o nó B e assim por diante em um círculo várias vezes. O programa determina o "looping" do evento e termina forçosamente este carnaval. Depois disso, as alterações de estado dos nós A e B são bloqueadas até que um novo evento ocorra. O momento em que o programa decide - "pare de girar em círculo!" - no caso geral, depende de muitos fatores e pode ser considerado aleatório.
Cuidado ao conectar nós em um anel - os efeitos nem sempre serão óbvios! Bem, imagine o que e por que você está fazendo!
Mas é possível construir um gerador nos nós acessíveis a nós? Sim você pode! Mas isso requer um nó que saiba gerar eventos. E existe esse nó - essa é uma "linha de atraso". Vamos ver como o gerador funciona com um período de 6 segundos na figura abaixo.



Um 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 na saída não aparecerá 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 e significa - 3 segundos.

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

Suponha que inicialmente a saída da linha de atraso fosse 0. Após passar pelo nó B, o inversor, este 0 se transforma em 1 e vai para a entrada da linha de atraso. Nada acontece imediatamente. Na saída da linha de atraso, por assim dizer, 0 permanecerá, mas a contagem regressiva do tempo de atraso será ativada. Demora 3 segundos. E então a linha de atraso gera um evento. Na saída, ela possui 1. Esta unidade, depois de passar pelo nó B, o inversor, se transforma em 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 de 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 de pulso é de 6 segundos (3 segundos na saída de zero e 3 segundos - um).

Mas, em circuitos reais, você geralmente não precisa usar este exemplo. Existem nós de timer especiais que perfeitamente e sem ajuda externa geram uma sequência de pulsos com um determinado período. A duração de "zero" e "unidades" nesses pulsos é igual à metade do período.
Para definir ações periódicas, use nós de timer.
Observo que esses sinais digitais, onde a duração de "zero" e "unidades" são iguais, são chamados de "meandros".

Espero ter esclarecido um pouco a questão sobre como os eventos são distribuídos entre os nós e o que não deve ser feito.

Conclusão e referências


O artigo acabou sendo curto, mas este é a resposta para as perguntas levantadas em nós e eventos.

À medida que o firmware evolui e novos exemplos aparecem, escreverei sobre como programar pequenos artigos ShIoTiny , desde que seja interessante para as pessoas.

Como antes, o esquema, firmware, exemplos, descrição de nós e tudo mais estão aqui .

Perguntas, desejos, críticas - aqui está: shiotiny@yandex.ru

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


All Articles