Modbus Arduino UNO, SIN RS232/485. Solo el cable serial

Hola

Necesito hacer un proyecto donde se conecte 4 circuitos a la vez; 1 LED on/off (Salida digital), 1 botón o Switch(entrada digital), 1 Potenciómetro (entrada analógica) y 1 LED de PWM (salida analógica).

Pero debo hacerlo usando el Protocolo MODBUS, entre la protoboard y en la PC los controles con LabVIEW.

Mi consulta es ¿que librería puedo usar para el arduino uno?. Probé algunas, pero la mayoría requiere usar las tarjetas 232 o 485 y no debo usar estas tarjetas para su conexión, sino solamente el cable que USB que viene por defecto con el arduino.

Intenté probar con una librería Modbus Basic, o algo así, pero según revisé el codigo solo está para leer o escribir register, y no puedo aplicarlo para los otros circuitos en el caso de los circuitos digitales.

puntualmente ¿Que librería puedo usar? ¿o que pautas debo seguir? Por favor, llevo varios días con esto.

Yo he usado esta libreria para configurar un esclavo Modbus USB en Arduino, en un antiguo proyecto .

1 Like

No conozco esa libreria, pero eso se puede deber a que no se suele usar los registros digitales en los dispositivos modbus, generalmente se usa un registro de 8 bits para actualizar/leer de a 8 salidas digitales, por una economía de código y simpleza de presentación de la tabla Modbus.

1 Like

Dado que la mayoría de aplicaciones de ModBus se dan en rs485 todos los ejemplos van enfocados hacia esa interfaz de hardware. De hecho encapsulan dentro la manera de manejar por puerto serie añadiendo un pin de control para las señales RO/DE.

En el caso de querer conectar directamente desde el Arduino al PC puedes obviar el pin que se utiliza para ello, no usandolo o buscando una libreria que no lo use.

ModBus es un protocolo orientado a registros. Por mucho que busques todas las librerias van a funcionar de la misma manera. En tu codigo debes asignar cada entrada/salida a un registro.

Te pongo un ejemplo con la libreria SimpleModbusSlave


#define idSlave 1

// Aquí definimos los registros que vamos a usar, les pongo un nombre acuerdo
// a lo que van a hacer. Esta libreria utiliza los registros de retención para
// ello (Holding Register función 0x04). 
enum {
  LED,
	BOTON,
	POTENCIOMETRO,
	LEDPWM,
	TOTAL_REG_SIZE  // Tamaño total de registros.
};

// Estos son los registros.
unsigned int holdingRegs[TOTAL_REGS_SIZE];

void setup() {
  modbus_configure(9600,          // Velocidad.
	                 idSlave,       // Id de esclavo.
									 2,             // Pin para controlar RO/DE.
									 holdingRegs,   // Registros.
									 0);            // Latencia.
}


void loop() {
  // Se actualiza para ver si hay una petición modbus.
  modbus_update(holdingRegs);

  // Los dos led son salidas, por lo tanto hay que escrbir en el pin de salida
	// el valor del registro.
  digitalWrite(pinLen, holdingRegs[LED]);
	analaogWrite(pinPWM, hodlingRegs[LEDPWM]);
  
	
	// El potenciometro y el botón son entradas, por lo tanto leemos su estado y
	// lo guardamos para poder leerlos via modbus.
	holdingRegs[POTENCIOMETRO] = analogRead(pinAnalogico);
	holdingRegs[BOTON] = estado_boton;
}

El nombre de funciones podrá cambiar de una libreria a otra, pero el funcionamiento será muy similar: usar los registros para cambiar las variables.

1 Like

Hola ¿cómo están?

Necesito realizar un proyecto con 1 entrada digital, 1 entrada analógica, 1 salida digital y 1salida analógica.

Pero para realizarlo debo usar el protocolo Modbus TCP/IP ETHERNET entre el LabVIEW y una tarjeta de Arduino con Shield Ethernet.

Probé la librería de LabVIEW de Modbus Master. Y una librería de Arduino que encontré en un foro. Pero no logra enlazar correctamente con el LabVIEW. Solo me funcionó entre el Arduino y Un programa Modbus poll. Pero con el LabVIEW no enlaza.

Si alguien realizó un proyecto similar me gustaría saber cómo realizaron la programación en LabVIEW y en Arduino. Y la librería que uso más que nada.

O que recomendación me pueden dar. Muchas gracias. Porque llevo varios días en esto.

Moderador:
Por favor, lee las Normas del foro y no abras nuevos hilos con variaciones del mismo tema aunque le hayas puesto solucionado.
Sigue en el tema inicial y agota todas las consultas.

Según entiendo es otro tema. Tiene cosas similares pero no es lo mismo.

Pero seguiré en el primer hilo entonces
Gracias

La única diferencia entre un tema y otro es la comunicación, una serie por USB y la otra por Ethernet, esta bien lo que te dice el moderador, no se justifica hacer un tema separado.

Saludos

Para esta incógnita. Que librería me pueden sugerir usar. Ya que la que use para serial es completamente distinta y no se ejecuta de igual forma. Saludos

Si eso significa que pudiste leer desde un programa simulador de un máster Modbus al Arduino, ya no seria un problema del lado Arduino, no necesitas ninguna librería nueva, todos tus problemas están del lado de LAbview.

1 Like

Logré solucionar ambos Proyectos Usando las siguientes librerías:

Para el Modbus Serial Sin RS 232/485, solo el cable propio del arduino.
Usé librería que mencionó:

PeterKantTropus

y

Para el proyecto con el Modbus TCP/IP entre el arduino y el LabVIEW.
Usé la librería: mudbus

Y finalmente agradezco a

victorjam

por la lógica de programación en la lectura y escritura de datos, aunque no la use al pie de la letra, me ayudo a entender mejor el logaritmo y lo use en ambos proyectos.

Pdt. Es la primera vez que uso el foro de arduino, y me sirvió mejor de lo que pensé

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.