Olá Pessoal,
Estou desenvolvendo meu TCC utilizando um arduino comunicando via Modbus serial com o ScadaBR. Basicamentem estou lendo um valor de tensão e um valor de tensão e um valor de corrente e calculando o valor da potência elétrica. Preciso ler este valor de potência elétrica no ScadaBR. Porém, o ScadaBR só atualiza o valor uma única vez e o datapoint fica com o seguinte erro: Illegal data adress.
O código abaixo é só um exemplo onde eu quero ler o valor3. Alguém pode me ajudar?
Alguém já passou por isso?????
Segue parte do código:
void configure_mb_slave(long baud, char parity, char txenpin);
int update_mb_slave(unsigned char slave, int *regs,
unsigned int regs_size);
enum {
COMM_BPS = 9600, /* baud rate */
MB_SLAVE = 1, /* endereço do escravo modbus */
PARITY = 'n' /* paridade */
};
enum {
MB_PINO_3, /* Controle do Led no pino 3 (desliga=0 liga=1) */
MB_A0, /* Leitura da entrada analógica 0 (0 a 1023) */
MB_REGS /* número total de registros do escravo */
};
int regs[MB_REGS];
int valor1 = 0;
int valor2 = 200;
int valor3 = 0;
unsigned long wdog = 0; /* watchdog */
unsigned long tprev = 0; /* tempo anterior do último comando*/
unsigned long tanalogprev = 0; /* tempo anterior da leitura dos pinos analogicos*/
void setup()
{
/* configura cominicação modbus
* 9600 bps, 8N1, RS485 network */
configure_mb_slave(COMM_BPS, PARITY, 2);
}
void loop()
{
/* verifica se há solicitações do mestre */
if(update_mb_slave(MB_SLAVE, regs, MB_REGS))
wdog = millis();
if ((millis() - tanalogprev) > 1000) { /* atualiza as entradas analogica a cada 1 segundo */
regs[MB_A0] = analogRead(1); /* ler entrada analógica 0 */
valor1 = regs[MB_A0];
valor3 = valor1 - valor2;
regs[MB_PINO_3] = valor3;
tanalogprev = millis();
}
/* os valores dos registros são definidos pelo mestre modbus (SCADA) */
}
Tags:
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por