Protocolo chinês AIBUS e reator químico de laboratório

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:

  1. Controlador nativo Yudian AI518.
  2. Conversores Arduino Mega + 2 RS485 (MAX485)
  3. Arduino nano + 1 conversor RS485 (MAX485) + termopar + transistor de 12V.
  4. 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;//    212 byte start_byte_two;//    211 byte temp_pomp;//  byte on_of_pomp;//on-off  (1  0) byte CRC8;//  /**/ void pask() { CRC8 = (start_byte_one + start_byte_two + temp_pomp + on_of_pomp + tmp) / 10; } /* */ bool test_pask() { if (CRC8 == (start_byte_one + start_byte_two + temp_pomp + on_of_pomp + tmp) / 10) return 0; // return 1; //  } }; 

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;//    254 byte start_byte_two;//    232 byte temp_pomp;//  byte on_of_pomp;//on-off  (1  0) byte ex_temp_reactor_one;//    1 byte ex_temp_reactor_two;//    2 byte current_temp_reactor;//    byte timer_ex;// byte tmp;//   byte CRC8;//   void pask() { CRC8 = (start_byte_one + start_byte_two + temp_pomp + on_of_pomp + ex_temp_reactor_one + ex_temp_reactor_two + current_temp_reactor + timer_ex + tmp) / 10; } /* */ bool test_pask() { if (CRC8 == ((start_byte_one + start_byte_two + temp_pomp + on_of_pomp + ex_temp_reactor_one + ex_temp_reactor_two + current_temp_reactor + timer_ex + tmp)) / 10) return 0; // return 1; //  } }; 

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

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


All Articles