Buenos dias, estoy incursionando en arduino un poco mas avanzado y me encuentro en un problema de comunicacion con un arduino nano como maestro y dos variadores de frecuencia marca eura como esclavos, conexion rs485.
Arduino ejecuta el control de una confeccionadora de bolsas plasticas. solamente por ahora enciende los variadores y controla la frecuencia de funcionamiento de los mismos.
Si cuando inicia arduino mantengo apretado el boton de ON la maquina funciona y se comunican los variadores, pero si pasa la cantidad de intentos de "#define retry_count 5" y doy al boton de ON solo marca el primer parametro (que en este caso es frecuencia del variador 1) y no encienden ninguno ni cambia la frecuencia del otro variador.
En la libreria dice que cuando se excede el retry count se corta la comunicacion y para volverla a restablecer hay que poner la variable connection a true. cosa que a mi entender hago, pero no hace mas que solo enviar el primer parametro (frecuencia).
#include "SimpleModbusMaster.h"
bool m0=0, m_ON=0;
//////////////////// Port information ///////////////////
#define baud 9600
#define timeout 1000
#define polling 200 // the scan rate
#define retry_count 5
// used to toggle the receive/transmit pin on the driver
#define TxEnablePin 10
// The total amount of available memory on the master to store data
#define TOTAL_NO_OF_REGISTERS 5
// This is the easiest way to create new packets
// Add as many as you want. TOTAL_NO_OF_PACKETS
// is automatically updated.
enum
{
FREQ_CONFECC,
ARR_CONFECC,
FREQ_BOB,
ARR_BOB,
TOTAL_NO_OF_PACKETS // leave this last entry
};
// Create an array of Packets to be configured
Packet packets[TOTAL_NO_OF_PACKETS];
// Masters register array
unsigned int regs[TOTAL_NO_OF_REGISTERS];
void setup()
{
delay(2500);
// Initialize each packet
modbus_construct(&packets[FREQ_CONFECC], 2, PRESET_SINGLE_REGISTER, 269, 0, 0);
modbus_construct(&packets[ARR_CONFECC], 2, PRESET_SINGLE_REGISTER, 8192, 0, 1);
modbus_construct(&packets[FREQ_BOB], 3, PRESET_SINGLE_REGISTER, 269, 0, 2);
modbus_construct(&packets[ARR_BOB], 3, PRESET_SINGLE_REGISTER, 8192, 0, 3);
// Initialize the Modbus Finite State Machine
modbus_configure(&Serial, baud, SERIAL_8N2, timeout, polling, retry_count, TxEnablePin, packets, TOTAL_NO_OF_PACKETS, regs);
}
void loop(){
plc1.actualizacion(); //Actualizar las entradas y salidas
modbus_update();//actualizar comunicacion modbus
if (i7 == 1){ //i7 es marca de la lectura del pulsador
if (m0==0){ //se ejecuta una sola vez al comienzo
m0=1;
packets->connection=1;
modbus_update();//actualizar comunicacion modbus
m_ON=1;
}
}
if (m_ON == 1){ //ejecutar si esta en ciclo de encendido
regs[0]=2244;
regs[1]=1;
regs[2]=2244;
regs[3]=1;
}
}
esta en fase desarrollo y desprolijo por partes, el codigo es para explicar lo que quiero hacer, que al inicio anda pero despues no puedo abrir la comunicacion de nuevo.
Muchas gracias!
EDITO:
void loop(){
modbus_update();
regs[0]=2000;
if(i7==0){
regs[1]=1;
}
if (i7==1){
regs[1]=0;
}
}
Este Codigo no funciona como esperaria, ejecuta el inicio al tener el pulsador en pull down, arranca el variador, pero al pulsar i7 no hace nada, no vuelve a escribir el registro con el valor 0, creeria estarme equivocando en como escribir los regs.
(i7 funciona, es una marca de un pulsador en el pin 7 que ya vine usando)
si tienen una idea estaria agradecido!
saludos