Boa tarde
Possuo uma aplicação que comunica entre Elipse E3 e Arduino em Modbus RTU, onde a ideia é comandar diferentes valores PWM para acionar duas saídas PWM do Arduino, a comunicação está ok, mas a parte que não está ok é de valores PWM para acionar as saídas com diferentes valores de PWM, por exemplo se eu uso apenas o Arduino sem o supervisório, os valores de PWM oscilam de a 0 a 255 com efeito fade (piscar leds em intensidades diferentes a cada 1ms) para qualquer valor de PWM, mas se faço isso via Elipse, ele só altera os valores de PWM para o fade com PWM superior a 220, valores menores que esse os leds apenas ficam ligados sem piscar (não deveria funcionar assim, deveria ser igual a quando não
tem o Elipse e que comentei acima), o que poderia ser essa discrepância?Segui esse tutorial: https://kb.elipse.com.br/comunicando-o-arduino-com-elipse-e3-eou-elipse-scada/
Segue o código no Arduino:
// Bibliotecas para Modbus Arduino e Elipse E3
#include <modbus.h>
#include <modbusDevice.h>
#include <modbusRegBank.h>
#include <modbusSlave.h>
modbusDevice regBank;
modbusSlave slave;
byte Bomba = 9; // DO09 = Bomba
int Led = 11; // DO11 = Leds
int PWM_led; // Para PWM nos leds
int PWM_bomba; // Para PWM na bomba
int Fade_led = 16; // Quantidade de pontos de brilho no led
int Fade_bomba = 5; // Quantidade de pontos de acionamento na bomba
int Max_PWM_led; // Valor máximo vindo do elipse para led
int Max_PWM_bomba; // Valor máximo vindo do elipse para bomba
void setup()
{
//ID do escravo
regBank.setId(1);
//Habilita registradores das saídas DO09 e DO11
regBank.add(9);
regBank.add(11);
//Registrador para PWM DO09 e DO11
regBank.add(40009);
regBank.add(40011);
slave._device = ®Bank;
//BaudRate
slave.setBaud(9600);
//Configura pinos 9 e 11 como saídas
pinMode(Bomba,OUTPUT);
pinMode(Led, OUTPUT);
}
void loop()
{
// Muda a intensidade de acionamentos na bomba peristáltica
PWM_bomba = PWM_bomba + Fade_bomba;
// Setpoints mínimo e máximo de PWM para a bomba peristáltica
if (PWM_bomba <= 0 || PWM_bomba >= Max_PWM_bomba)
{
Fade_bomba = -Fade_bomba;
}
// Valor de PWM vindo do elipse para a bomba peristáltica
Max_PWM_bomba = regBank.get(40009);
analogWrite(Bomba,PWM_bomba);
// Muda a intensidade de brilho dos leds
PWM_led = PWM_led + Fade_led;
// Setpoints mínimo e máximo de PWM para os leds
if (PWM_led <= 0 || PWM_led >= Max_PWM_led)
{
Fade_led = -Fade_led;
}
// Valor de PWM vindo do elipse para led
Max_PWM_led = regBank.get(40011);
analogWrite(Led,PWM_led);
delay(1);
slave.run();
}