Saudações Habr! Era uma vez eu escrevi
um artigo sobre sabores de reação. Muito tempo se passou, voltei a esta pergunta.
Neste artigo, não entrarei em detalhes da tecnologia para desenvolver sabores de reação, mas falarei sobre minha experiência em automatizar meu horário de trabalho e compartilhar um código que pode ser útil. Me deparei com um reator químico de laboratório fabricado na China e, infelizmente, não possuía ferramentas para automatizar os modos de resfriamento, leitura e gravação de dados e programação, o que era muito importante. O reator em si era uma peça de metal comum em um tripé, com um aquecedor de até 350 graus.
O controlador
Yudian AI518 é responsável pelo controle de temperatura.

A boa notícia para mim foi a presença de uma porta RS-485 nela.
Sim, o Yudian AI518 tem temporizadores e alguns programas muito simples, mas, em primeiro lugar, foi muito interessante criar seu próprio "blackjack" com janelas e botões, e, em segundo lugar, não é muito conveniente usar um controlador comum. fazer no computador.
Como eu tinha experiência em trabalhar com controladores Arduino, inicialmente decidi fazer a comunicação e o controle através dele, então eu já tinha a ideia de escrever um programa no Qt que seria responsável pelo controle e automação e o Arduino Mega pela formação e descriptografia de pacotes com o AI518.
Como a válvula de habilitação de água fria pode estar localizada a uma distância do computador e da própria instalação, foi decidido construir um controlador adicional que liga / desliga a válvula de água fria sob comando e lê e envia a temperatura de resfriamento. Sim, no final do projeto, percebi que a construção estava muito amontoada, seria possível livrar-se do apito do RS485 em um computador e usar um programa, mas a ambição de criar seu próprio dispositivo alimentou o interesse.
Total em nosso grupo:
- Controlador nativo Yudian AI518.
- Conversores Arduino Mega + 2 RS485 (MAX485)
- Arduino nano + 1 conversor RS485 (MAX485) + termopar + transistor de 12V.
- Válvula de água fria de 12V.
Primeiro, a estrutura de comunicação entre mega e nano foi escrita.
struct packet_arduino_pomp // Arduino nano { byte start_byte_one;
Quando tudo funcionou de maneira estável, comecei a ler muito sobre diferentes protocolos de transferência de dados, mas não consegui encontrar o que precisava. O fato é que o controlador Yudian AI518 comum se comunica com o mundo exterior através do protocolo AIBUS, pelo que entendi é o análogo chinês do MODBUS. (
documentação ) Fiz isso pela primeira vez, concentrando-me na documentação e na ajuda de todos os fóruns possíveis.
Estrutura de pacotes de saída para o Yudian AI518:
struct tagREQ_FRM_T { uint8_t u8DevAddr1; uint8_t u8DevAddr2; uint8_t u8ReqType; uint8_t u8DevPara; uint8_t u8LoParam; uint8_t u8HiParam; uint8_t u8LoSumCheck; uint8_t u8HiSumCheck; } ;
A estrutura do pacote recebido para Yudian AI518:
struct tagANS_FRM_T { uint8_t u8LoPV; uint8_t u8HiPV; uint8_t u8LoSV; uint8_t u8HiSV; uint8_t u8MV; uint8_t u8ALm; uint8_t u8LoParam; uint8_t u8HiParam; uint8_t u8LoSumCheck; uint8_t u8HiSumCheck; };
De fato, descobriu-se que os pacotes de todos os dispositivos vêm para o Mega (do nano com temperaturas de resfriamento, do AI518 com a temperatura atualizada do reator e outros valores e comandos do computador). Então, Mega uniu tudo em um pacote e o enviou para um computador, onde o programa QT o leu.
Estrutura do pacote mega computador:
struct packet_big // PC { byte start_byte_one;
Como o protocolo chinês é silencioso, se o pacote enviado não se encaixa na descrição, selecionando a estrutura, geralmente comecei a pensar que estava quebrado, mas no final tudo deu certo. Quando vi os primeiros números corretos no log, houve felicidade ...
Para proteger o controlador do Arduino nano da umidade, decidi gravar minha própria placa e colocá-la no gabinete. Não é uma coisa complicada, existem muitas descrições de como fazer isso, mas eu escolhi a tecnologia LUT. (
LUT ). O mais difícil foi escolher um papel adequado para jato de tinta brilhante, que normalmente imprime uma impressora a laser. Mas depois de todas as tentativas e erros, conseguimos esse dispositivo.

Mas e o programa no computador, com botões e janelas. Felizmente, essas coisas são muito fáceis de fazer no Qt. Podemos formular solicitações e lê-las a partir de um dispositivo “basurmaniano”, agora é necessário definir modos, traçar um gráfico de temperatura e tempo, fornecer no final da reação um relatório sobre a taxa de aquecimento para a temperatura definida, o tempo de reação em si, a taxa de resfriamento para uma determinada temperatura e etc. Combinando tudo isso em uma estrutura separada, de acordo com o QSerialPort, através da porta COM à qual o próprio Arduinka está conectado, transmitimos e aceitamos valores.
O mais difícil foi compilar o projeto finalizado no Windows XP. Infelizmente, esses sistemas estão funcionando e eu tive que dançar com um pandeiro por alguns dias para fazê-lo funcionar. Como já fiz isso no segundo dia, não dei as instruções exatas sem deliberar e classificar todas as opções propostas nos fóruns.
O resultado foi um programa que funciona e me ajuda no local de trabalho e economiza muito tempo (não publicarei o projeto QT, pois não há nada de interessante nele. Transferindo dados pelo QSerialPort e depois o que seu coração desejar).
Links para firmware para Arduinok:
→
Para Nano→
Para Mega