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) */
        
                
                
                   
}

Exibições: 2598

Responder esta

Respostas a este tópico

Eu consigo enviar comandos atraves desta porta USB? ou tenho que utiliza o MODBUS?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço