Discusiones sobre Productos NI

cancel
Showing results for 
Search instead for 
Did you mean: 

Modbus TCP/IP entre Arduino y LabVIEW

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.

 

 

 

0 Kudos
Message 1 of 7
(4,719 Views)

share your labview code so that we can know where you went wrong.

Make sure you have select port number 502 and whether it is ascii or rtu..


CLD Using LabVIEW since 2013
0 Kudos
Message 2 of 7
(4,689 Views)

Najup_0-1641084286719.png

 

_________________________________________

Y en Arduino:

 

/*
Modbus-Arduino Example - Lamp (Modbus IP)
Copyright 2016 by wvengen
Copyright 2015 by André Sarmento Barbosa
http://github.com/wvengen/modbus-arduino
*/

 

#include <SPI.h>
#include <Ethernet.h>
#include <Modbus.h>
#include <ModbusIP.h>

// Modbus register offset (0-9999)
const int LAMP1_COIL = 1;
const int ledPin = 2;
const int SWITCH_ISTS = 10001;
const int switchPin = 4;
const int PWM_HREG = 40001;
const int PWMPin = 3;
const int SENSOR_IREG = 30001;
const int sensorPin = A0;

// ModbusIP object
ModbusIP mb;

 

void setup() {
// The media access control (ethernet hardware) address for the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// The IP address for the shield
byte ip[] = { 169, 254, 1, 100 };
// Config Modbus IP
mb.config(mac, ip);
// Set ledPin mode
pinMode(ledPin, OUTPUT);
pinMode(switchPin, INPUT);
pinMode(PWMPin, OUTPUT);
pinMode(sensorPin, INPUT);
// Add LAMP1_COIL digital output register
mb.addCoil(LAMP1_COIL);
// Add SWITCH_ISTS register - Use addIsts() for digital inputs
mb.addIsts(SWITCH_ISTS);
// Add PWM_HREG register - Use addHreg() for analog outpus or to store values in device
mb.addHreg(PWM_HREG);
// Add SENSOR_IREG register - Use addIreg() for analog Inputs
mb.addIreg(SENSOR_IREG);
}

 

void loop() {
// Call once inside loop() - all magic here
mb.task();

// Attach ledPin to LAMP1_COIL register
digitalWrite(ledPin, mb.Coil(LAMP1_COIL) ? HIGH : LOW);
//Attach switchPin to SWITCH_ISTS register
mb.Ists(SWITCH_ISTS, digitalRead(switchPin));
//Attach PWMPin to PWM_HREG register
analogWrite(PWMPin, mb.Hreg(PWM_HREG));
//read sensor
mb.Ireg(SENSOR_IREG, analogRead(sensorPin));

delay(10);
}

 

0 Kudos
Message 3 of 7
(4,637 Views)

Najup_0-1641091727032.png

 

Programación en Arduino:

 

/*
Modbus-Arduino Example - Lamp (Modbus IP)
Copyright 2016 by wvengen
Copyright 2015 by André Sarmento Barbosa
http://github.com/wvengen/modbus-arduino
*/

#include <SPI.h>
#include <Ethernet.h>
#include <Modbus.h>
#include <ModbusIP.h>

// Modbus register offset (0-9999)
const int LAMP1_COIL = 1;
const int ledPin = 2;
const int SWITCH_ISTS = 10001;
const int switchPin = 4;
const int PWM_HREG = 40001;
const int PWMPin = 3;
const int SENSOR_IREG = 30001;
const int sensorPin = A0;

// ModbusIP object
ModbusIP mb;

void setup() {
// The media access control (ethernet hardware) address for the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// The IP address for the shield
byte ip[] = { 169, 254, 1, 100 };
// Config Modbus IP
mb.config(mac, ip);
// Set ledPin mode
pinMode(ledPin, OUTPUT);
pinMode(switchPin, INPUT);
pinMode(PWMPin, OUTPUT);
pinMode(sensorPin, INPUT);
// Add LAMP1_COIL digital output register
mb.addCoil(LAMP1_COIL);
// Add SWITCH_ISTS register - Use addIsts() for digital inputs
mb.addIsts(SWITCH_ISTS);
// Add PWM_HREG register - Use addHreg() for analog outpus or to store values in device
mb.addHreg(PWM_HREG);
// Add SENSOR_IREG register - Use addIreg() for analog Inputs
mb.addIreg(SENSOR_IREG);
}

void loop() {
// Call once inside loop() - all magic here
mb.task();

// Attach ledPin to LAMP1_COIL register
digitalWrite(ledPin, mb.Coil(LAMP1_COIL) ? HIGH : LOW);
//Attach switchPin to SWITCH_ISTS register
mb.Ists(SWITCH_ISTS, digitalRead(switchPin));
//Attach PWMPin to PWM_HREG register
analogWrite(PWMPin, mb.Hreg(PWM_HREG));
//read sensor
mb.Ireg(SENSOR_IREG, analogRead(sensorPin));

delay(10);
}

 

0 Kudos
Message 4 of 7
(4,637 Views)

Por descartar problemas, yo probaría desde el ordenador con algún programa simulador de Modbus, por ejemplo ModBUS Master Simulator. Lo puedes encontrar aquí: http://en.radzio.dxp.pl/modbus-master-simulator/

 

Una vez que te funcione con ese u otro programa, ya pruebas con LabVIEW.

Saludos y suerte.

_________________________________________
https://aulamoisan.uva.es

0 Kudos
Message 5 of 7
(4,569 Views)

CUAL ES LA LIBRERIA DE LABVIEW PORFAVOR?

0 Kudos
Message 6 of 7
(4,475 Views)

Aquí puedes encontrar alguna:

https://www.aulamoisan.com/documentos/fuentes-labview

_________________________________________
https://aulamoisan.uva.es

0 Kudos
Message 7 of 7
(4,470 Views)