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.
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.
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.
#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.
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.
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.
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.
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é