Como manter o valor de um data point quando comunicação é perdida - Arduino + Modbus IP

Olá a todos! Estou desenvolvendo uma aplicação na qual tenho um arduino que realiza o controle PID de uma planta. O arduino se comunica com o ScadaBR pelo modbus IP. No meu scada eu tenho alguns data points (configurados como registradores de entrada) que fazem a leitura de variáveis, como o valor medido e da ação de controle. O set point é definido no scada (eu tenho um data point configurado como registrador holding).

No código do meu arduino, sempre que houver uma alteração do setpoint, esse valor será salvo na EEPROM. Toda vez que o arduino é inicializado, esse valor armazenado é lido e o controle continua a ser executado considerando a última alteração do setpoint. O problema é que toda vez que eu estou comunicando o arduino com o ScadaBR e eu preciso fazer uma alteração no código, a comunicação é momentaneamente interrompida. Nesse momento, o valor do setpoint no ScadaBR vai pra zero e quando a comunicação é reestabelecida, esse valor é enviado para o arduino. Ou seja, não adiantou de nada salvar o valor do setpoint na EEPROM.

Eu gostaria que quando a comunicação fosse interrompida, o ScadaBR não resetasse o setpoint. O que é possível fazer?

Sou um usuário iniciante no ScadaBR. Qualquer ajuda é bem vinda!

É possível que você possa usar um data point meta ou um point link como intermediário entre esses valores. Como essas funções que eu citei são baseadas em scripts, creio que seria possível colocar algum if (valor > 0) para evitar isso. Entretanto, não sei se posso ajudar muito, porque é difícil saber como o ScadaBR se comporta num hardware específico.

Se você tiver paciência, eu lembro que eu falei alguma coisa sobre como usar os point links nesse vídeo de 1 hora (EDIT: a partir de 22:51) :

Muito obrigado pela resposta. Assisti o vídeo e tive umas ideias. Aparentemente consegui resolver o problema da seguinte forma:

Criei um data source virtual e criei um data point auxiliar, que será o data point no qual o operador irá escrever o set point (tipo de alteração: sem alteração).

Criei um data link, colocando como origem esse data point auxiliar e como destino o data point set point, que escreve o valor no arduino. Como script eu coloquei “return source.value;” No campo evento, eu coloquei atualização.

Assim, mesmo quando a comunicação é interrompida, mesmo se o data point que envia o set point ao arduino ter ser seu valor resetado (aparentemente isso não acontece mais) o valor será sobreescrito com o valor do data point auxiliar.

1 curtida