xbee+modbus+mango

Hola a todos.

Sigo con mi proyecto de integración de arduino con mango usando xbee y modbus. Justamente cuando lo tengo funcionando van y cuelgan esto: http://mango.serotoninsoftware.com/forum/posts/list/567.page

Lo cual está muy bien pero llega tarde para mi.

Pero como siempre, tengo dudas. Mi red consiste en:

-- 1 duemilanove + xbee serie2 znet coordinator at. cargada libreria modbus rtu slave.
-- 1 duemilanove (sin atmega) + xbee serie2 router/end device at. Este sirve de enlace con el pc y mango

Mi primera duda es:
Si añado otro arduino como modbus slave y apago mango... ¿se viene la red modbus abajo? Supongo que si porque creo que mango hace de master de la red modbus

Si así fuese:
¿Como configuro la red para que sea independiente de mango?

Otra opcion es que el pc de mango siempre estuviese encendido.

Un saludo, y muchas gracias

Pero si ya hablamos sobre esa misma configuración el post original en su momento y contigo.
Que por cierto, podrías haber continuado allí en vez de abrir otro hilo, lo pongo por si alguien quiere leer el trasfondo de la conversación: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1276771986

Por lo que recuerdo, mango hacía de master de modbus, por lo que si no está él encendido no hay red.

Para que sea independiente... no se me ocurre nada sencillo, a parte de tener mango todo el día on.

Un saludo

José Francisco,

si no lo entiendo mail tienes el Xbee configurado para emular un puerto serie entre el arduino que recoge el dato y el Xbee que lo pasa al Mango.

Ocurre lo mismo que si lo hicieras con un cable serie, los Xbee actuan de forma transparente, si no hay mango no hay red.

http://www.zigbe.net/

Buenos días.

Tienes razón Chiva, debería haber continuado en el hilo anterior.

Ok. Continuemos con la opción "mango_always_on=1"

Pregunta sencilla sobre xbee:

-- Para añadir sucesivos modbus slave ¿hacia donde tiene que apuntar su xbee? Actualmente solo tengo 2 (coordinator y router) apuntándose mutuamente.

Saludos y gracias.

Supongo que los xbee de los esclavos deberán recibir todos, cualquier cosa que envíe el maestro.
Pero sin saber haber probado nunca estos dispositivos no te se decir que configuración puedes hacer.

Un saludo

José Francisco,

Insisto, si lo que estás haciendo es emular un cable serie y el Mango sabe que sensor le está hablando por el puerto serie del PC que le llega no tienes mucho que hacer.

Si el Arduino está enviando información que identifica al sensor y su lectura simplemente debes de configurar en cada Xbee (de los que emiten el dato) como dirección de destino el que hace de coordinador, que recibirá los datos de todos. En el modo AT se hace con dos comandos.

Entiendo que el maestro no tiene que comunicar con los esclavos para nada, que son los esclavos los que hacen llegar la lectura al maestro.

http://www.zigbe.net/

Una red Modbus es maestro/esclavo, por lo que el maestro tiene que iniciar la comunicación con el esclavo para que éste responda.

Un saludo

Voy a probar a direccionar todos los xbee (router o coordinator) al modbus-master, esto es, al xbee que esta unido al pc por usb

Mañana os cuento.

Un saludo y gracias.

EDIT:

Pero... el xbee-modbus-master... ¿a donde lo direcciono? Creo recordar que hay una dirección que significa "a toda la red".

Que tal...
Jose Francisco estoy en un proyecto similar al tuyo, tengo varios arduinos enviando mediciones a traves de xbee serie2 hacia un maestro(xbee+xplorer)con un SCADA(mango)...
bueno hasta el momento no me funciona...solo he podido conectar a travez de cable un arduino a mango cargando la libreria de modbus slave...
esta es la idea:

arduino+xbee
arduino+xbee xbee+xplorer+pc+mango
arduino+xbee

lograste resolver y hacer funcionar la red finalmente?
como configuraste los xbee...en que modo?
espero te haya funcionado y que me orientes si encontraste otra forma de hacer lo mismo

saludos

Algo tengo (desde ayer), pero solo para un esclavo.

1.- Configuración de los xbee

Vamos a suponer que el xbee del xbee-xplorer es el coordinator.
Con el X-CTU le metes el firmware (suponiendo que sea XB24-B):
ZNET 2.5 COORDINATOR AT. VERSION 1047
Y lo configuras con DH=0 y DL=FFFF
Esto ultimo quiere decir que sus mensajes van a todos los elementos de la red.
Tambien puedes configurarlo con el SH y SL del esclavo
configura BD=9600 NB=0
Anota el SH y el SL de este xbee (coordinador)

Ahora el xbee del esclavo:
le metes el firmware: ZNET 2.5 ROUTER/END DEVICE AT VERSION 1247
configura DH y DL con SH y SL del coordinator
configura BD=9600 NB=0

En principio los xbee deberian enlazarse con esta configuracion.
Metele un sketch al arduino slave que escriba en el puerto serie e intenta visualizarlo con terminal de xctu
Recuerda que en el sketch tambien debes poner los 9600 baudios

Una vez que tengas al slave hablando al pc puedes pasar al siguiente paso

2.- libreria y sketch modbus rtu slave

bajate la libreria de http://sites.google.com/site/jpmzometa/arduino-mbrt/arduino-modbus-slave
e instalala para arduino.

Crea este skech, compilalo y subelo a tu slave:

#include <ModbusSlave.h>

/* First step MBS: create an instance */
ModbusSlave mbs;

/* slave registers */
enum {        
        MB_REG0,
        MB_CTRL,        /* Led control on, off or blink */
        MB_TIME,        /* blink time in milliseconds */
        MB_CNT,        /* count the number of blinks */
        MB_REGS             /* total number of registers on slave */
};

int asdf=1;
int regs[MB_REGS];
int ledPin = 13;


void setup() 
{
        
/* the Modbus slave configuration parameters */
const unsigned char SLAVE = 1;
const long BAUD = 9600;
const char PARITY = 'n';
const char TXENPIN = 1;

       /* Second step MBS: configure */
      mbs.configure(SLAVE,BAUD,PARITY,TXENPIN);

        pinMode(ledPin, OUTPUT);
        pinMode(2,INPUT);
}

void loop()
{


       asdf=digitalRead(2);
      regs[MB_REG0]=asdf;


  /* Third and las step MBS: update in loop*/
       mbs.update(regs, MB_REGS);

   if(regs[MB_CTRL]==1)
     digitalWrite(ledPin,1);
     else
     digitalWrite(ledPin,0);

}

3.- configura mango

Eso lo explican bastante bien en: http://mango.serotoninsoftware.com/forum/posts/list/567.page
Aqui está explicado para una version antigua de la libreria
Usa el punto 11 en adelante y recuerda que usas 9600 baudios. Configura tambien el nombre del puerto
Una vez añadido el data source y el point, acuerdate de activarlos.
Vete a watch list y veras tu flamante punto en el arbol. pinchalo para añadirlo a la watch list
Ahora veras el valor del pin 2 en ese punto que acabas de añadir. muevelo de 0 a 5 voltios para ver 0 o 1.
Si va muy lento configura su frecuencia de actualización. eso se hace modificando los parametros que pusiste al crear el punto.

Bueno, ya me contarás
Un saludo

PD: busco gente para traducir mango. es muy sencillo

Que tal...
Jose Francisco...segui tus instrucciones haciendole pequeños cambios al sketch para que mostrara la lectura de una entrada analogica...y todo funciona bien...he estado leyendo para poder agregar mas esclavos a la red...pero aun no me funciona.

una consulta...si de cada esclavo quiero mandar mas de un dato...por ejemplo varias temperaturas..solo debo agregar MB_REG0, MB_REG1, MB_REG3, etc..y poner ahi mi informacion?

gracias
saludos

Pues estamos los dos igual.
Efectivamente puedes añadir muchos registros:
--Los que te quepan en un direccionamiento de 16 bits = 65536.--
Esa es la respuesta que me dio Juan Pablo Zometa, el autor de la librería.

Si das con la tela de añadir más esclavos... me lo cuentas.
Yo lo he hecho pero a veces va uno y a veces va el otro. Nunca los dos a la vez.

Un saludo.

Logre hacer una red con 2 esclavos...apuntando en segundo esclavo al mismo coordinator, DH y DL con SH y SL del coordinator... igual que para el primero...ahora lo tengo así y funcionando con mango...(aumente el timeout).

En el sketch del segundo esclavo hay que cambiar TXENPIN a un valor mayor a 2 (es como el numero de elementos de la red)

/* the Modbus slave configuration parameters */
const unsigned char SLAVE = 1;
const long BAUD = 9600;
const char PARITY = 'n';
const char TXENPIN = 3;

/* Second step MBS: configure */
mbs.configure(SLAVE,BAUD,PARITY,TXENPIN);

Espero pronto tener funcionando con 3 esclavos... ahí te comento si me resulta.

suerte
saludos

Esta es la pregunta que le hice a jpzometa acerca de txenpin y su respuesta:

Mi intención es añadir mas esclavos, ¿como tengo que modificar txenpin si

utilizo una comunicación serie emulada con xbee?

No tiene nada que ver con el XBEE. Para hacer tu red, necesitás
agregar a cada Arduino un pequeño circuito que te maneje la
comunicación half-duplex (p.ej. usando un chip MAX485) . TXENPIN sirve
para controlar que Arduino envia información en que momento.

No me queda muy claro como lidiar con esta situación.

En el .h de la librería puede leerse:

  • txenpin: arduino pin number that controls transmision/reception
  • of an external half-duplex device (e.g. a RS485 interface chip).
  • 0 or 1 disables this function (for a two-device network)
  • 2 for point-to-multipoint topology (e.g. several arduinos)

¿has probado a ponerle a todos los sketch txenpin>2?

Un saludo

Jose Francisco...que tal
agregue un tercer esclavo imitando la misma configuración de los otros xbee...
Cambie el TXENPIN a un numero mayor de 2 en los sketch por que leí

2 for point-to-multipoint topology (e.g. several arduinos)

lo asumí (aunque equivocadamente parece)...como me funciono a la primera, no hice mas pruebas.

Me has adelantado Angelox.

/* the Modbus slave configuration parameters */
const unsigned char SLAVE = 1;
const long BAUD = 9600;
const char PARITY = 'n';
const char TXENPIN = 3;

¿es así como tienes la configuración es los sketch? Cambiando SLAVE por 1, 2,...
¿TXENPIN es 3 para todos los slaves, sea cual sea el número de esclavos?

¿Puedes leer y escribir datos en todos los slaves? A mi me reconoce 2 esclavos, pero luego no puedo acceder a sus datos

Un saludo

al activar el segundo (data source) obtengo esta alarma:

'arduino1': com.serotonin.modbus4j.exception.ModbusInitException: com.serotonin.io.serial.SerialPortException: gnu.io.PortInUseException: Mango Modbus Serial Data Source

me sucedio igual...al comienzo
asi que agregue los demas esclavos en el mismo data source del primero...solo cree nuevos datapoint para los esclavos...pues estas leyendo todos los esclavos por la misma COM.
mas tarde seguire en eso...quiza pueda poner fotografias

saludos

Será por eso que el número de esclavo no se especifica al definir el data source, si no al definir el data point
Voy a probar

También me daba problemas la versión de mango. He actualizado a la última y va bastante bien.

Efectivamente tenía un concepto equivocado. Antes consideraba a cada Arduino-Esclavo como un origen de datos (data source). Error: el origen de datos es el bus ModBus, y dentro de ese origen de datos se accede al Esclavo n y a su registro m.

A parte de esta aclaración, poco más hay que añadir a la receta que di unos post antes. Si alguien quiere escribir un playground estoy a su total y completa disposición. No obstante, con lo ya escrito en este hilo hay bastante.

Un saludo y muchas gracias a todos por vuestra colaboración.

PD: Angelox ¿Cuantos esclavos llevas ya?