Pessoal, sou novo por aqui...

Estou com um projeto no qual devo receber um sinal analógico, converter para digital, enviar para o Elipse via porta serial e mostrar esse sinal em um gráfico. Bom, consegui a conversão, porém não consigo a comunicação com o software, alguém pode me ajudar com a configuração do driver Modbus slave para Arduino?

Abraço!

Exibições: 887

Responder esta

Respostas a este tópico

Oi Mauricio, 

praticamente vc tem que colocar a lib Modbus AscII, RTU ou IP, para cada um desses tem uma lib adquada, nos aqui no LDG usamos muito a modbus RTU, depois de gravado no arduino é somente fazer a relação com o supervisorio que no seu caso é o ELipse, lá deve ter um datasource(se é esse o nome) apropriado para modbus RTU. abaixo deixo um link de uma lib modbus RTU para aduino IDE 1.0 

https://github.com/andresarmento/modbus-arduino

aqui um video explicativo basico sobre integração 

http://labdegaragem.com/video/tutorial-scadabr-parte1

Obrigado pela ajuda, Adriano!

O meu código está assim: 

#ifndef MODBUS_SLAVE_H
#define MODBUS_SLAVE_H
#include <modbusSlave.h>
#include <modbusSlave.dll>
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif

class ModbusSlave {
private:
unsigned char slave;
char txenpin;
int *regs;
unsigned int regs_size;
int *inputregs;
unsigned int inputregs_size;
bool *coils;
unsigned int coils_size;
bool *inputs;
unsigned int inputs_size;


unsigned int crc(unsigned char *buf, unsigned char start, unsigned char cnt);
void build_read_packet(unsigned char function, unsigned char bytes, unsigned char *packet);
void build_write_packet(unsigned char function, unsigned int start_addr, unsigned char count, unsigned char *packet);
void build_write_single_packet(unsigned char function, unsigned int write_addr, unsigned int reg_val, unsigned char* packet);
void build_error_packet(unsigned char function,unsigned char exception, unsigned char *packet);
void modbus_reply(unsigned char *packet, unsigned char string_length);
int send_reply(unsigned char *query, unsigned char string_length);
int receive_request(unsigned char *received_string);
int modbus_request(unsigned char *data);
int validate_request(unsigned char *data, unsigned char length);
int write_regs(unsigned int start_addr, unsigned char *query, int *regs);
int preset_multiple_registers(unsigned int start_addr,unsigned char count,unsigned char *query,int *regs);
int read_registers(unsigned int start_addr, unsigned char reg_count, int *regs, unsigned char function);
int write_single_register(unsigned int write_addr, unsigned char *query, int *regs);
void configure(long baud, char parity, char txenpin);
int write_single_coil(unsigned int write_addr, unsigned char *query, bool *coils);
int read_booleans(unsigned int write_addr, unsigned char count, bool *vector, unsigned char function);

public:

void configure(unsigned char slave, long baud, char parity, char txenpin);

void setup_regs(int* vector, unsigned int size);

void setup_inputregs(int* vector, unsigned int size);

void setup_coils(bool* vector, unsigned int size);


int update();

ModbusSlave()
{
regs_size = 0;
inputregs_size = 0;
coils_size = 0;
inputs_size = 0;
}

};

#endif
enum {
MB_SLAVE = 1,
};

enum {
MB_40000, // A0

MB_REGS
};
const int analogInPin = A0; // Entrada analógica do potenciômetro

int sensorValue = 0;
int outputValue = 0;
int *regs;
int x = 0;
int timer = x++;


void setup() {
Serial.begin(9600); // Inicializa a comunicação serial
const unsigned char SLAVE = 1;
const long BAUD = 9600;
const char PARITY = 'n';
regs[MB_40000] = analogRead (A0);
}

void loop() {
sensorValue = analogRead(analogInPin); // Leitura analógica
outputValue = map(sensorValue, 0, 1023, 0, 255); // Range


Serial.print(" " );
//Serial.print(sensorValue);
Serial.print("\t");
Serial.print(timer++);
Serial.print("\t");
Serial.println(outputValue);
Serial.print("\t");


delay(1000);
}

Devo baixar a lib e colocar ela no diretório do compilador?

Mauricio,

Baixa a lib da referencia do link que te mandei e coloca na lib da IDE 1.0 depois siga conforme é descrito no video tutorial sobre modbus RTU

Essa biblioteca WProgram.h, o meu código sempre da erro nessa parte do código, porém não encontro essa biblioteca no pacote.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço