Go Down

Topic: Sensor con comunicación RS485 (Read 660 times) previous topic - next topic

No-se-que

Nada, seguimos sin que vaya. Hice todo lo que me aconsejaste pero sigue sin ir, el led TX se ilumina como si enviara los datos, pero no se si los recibe el sensor.

Un saludo.

No-se-que

Surbyte has podido echar un vistazo si esta bien o no lo que he hecho?

Gracias.

No-se-que

Buenos días,

He actualizado un poco el código, he probado a conectar los datos de las dos maneras posibles, he unido la masa del Mega con la fuente que alimenta al sensor y aun así sigo sin poder conectar. Creo que envío bien el comando para activar el sensor pero la respuesta siempre es -1 (No se recibe nada).

Me podría alguien confirmar que todo está bien?


Code: [Select]
const int ledPin =  13;  // Led integrado
const int ReDePin =  2;  // HIGH = Driver / LOW = Receptor
char incomingByte = 0;

const unsigned char  interruptor[]= {0xFE, 0x44, 0x12, 5, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFD};

void setup()
{
  Serial1.begin(115200); //Puerto serie 1 usado para comunicar con el sensor (18TX, 19RX)
  Serial.begin(9200); //Puerto serie para ver los datos que estoy escribiendo en el serie1
  Serial.setTimeout(100);//establecemos un tiempo de espera de 100ms
 
 //inicializamos los pines
  pinMode(ledPin, OUTPUT);
  pinMode(ReDePin, OUTPUT);
}

void loop()
{
  //RS485 en modo transmisor, el activador del sensor
 digitalWrite(ReDePin, HIGH); //Pongo el pin 2 en modo alto para que el RS485 sea transmisor
 digitalWrite(ledPin, HIGH);

 for (int i=0; i<=26; i++)
 {
  Serial1.print(interruptor[i],HEX); //Escribo el comando por el puerto 1
  Serial.print(interruptor[i],HEX); //Veo los datos que estoy escribiendo en el puerto 1 mediante el monitor serie
   delay(2.3); //Dejo un pequeño retraso sacado de un programa que tiene el fabricante
 
}
  Serial.flush();  //Limpio el buffer de salida

   //RS485 como receptor
  digitalWrite(ReDePin, LOW); //Pongo el pin 2 en estado bajo para activar el RS485 como receptor
  digitalWrite(ledPin, LOW);


      //          // Aqui intento leer el dato que debería entrar por el puerto serie 1, que en este caso es
                  siempre -1 (no recibe ningun tipo de dato)
            incomingByte = Serial1.read();

      //          // Aqui escribo lo que recibo, en este caso siempre -1
              Serial.print(" I received: ");
              Serial.println(incomingByte, DEC);
        }
           
 delay(1000);
 }


Esto es lo que tengo el monitor serie todo el rato:

Code: [Select]
FE441250000300000A00000000000FD I received: -1
FE441250000300000A00000000000FD I received: -1
FE441250000300000A00000000000FD I received: -1
FE441250000300000A00000000000FD I received: -1
FE441250000300000A00000000000FD I received: -1



Gracias.


Danicap

Quote
FE441250000300000A00000000000FD I received: -1
FE441250000300000A00000000000FD I received: -1
FE441250000300000A00000000000FD I received: -1
FE441250000300000A00000000000FD I received: -1
FE441250000300000A00000000000FD I received: -1
De momento ahi el 100 lo estas enviando mal, porque esta enviando un A,

Pon todos los valores en hexadecimal en la declaración
Code: [Select]
const unsigned char  interruptor[]= {0xFE, 0x44, 0x12, 5, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0xFD};

a ver si así manda bien el 100 => 0x64

Luego en el

Code: [Select]
delay(2.3);

No estoy seguro pero creo que ahi no puedes poner un float, pon 2 ó 3



Por lo demás no veo nada que esté mal....

No-se-que

Gracias Danicap,

Lo del 100 ha sido un fallo mio, modifique el codigo después de haberlo copiado en el mensaje. Ese parametro es unicamente para el delay en la respuesta del sensor.

Cambiado todo sigue igual, llegado a este punto y después de mucho mirar por internet y con vuestra ayuda me planteo que algo del sensor falla aunque es el segundo que pruebo.

Me ha dicho el fabricante que compre un adaptador rs485 a usb para conectar al ordenador y que una vez hecho esto pruebe un software que tienen ellos para ver si le sensor funciona correctamente.

Os habeis encontrado alguna vez algún sensor que no se pueda programar mediante Arduino? O cualquier sensor es completamente adaptable a este tipo de placas?

Muchas gracias.

Danicap

Si tiene comunicación RS485 lo puedes gestionar con cualquier HW que soporte 485 o deberías poder gestionarlo.
El adaptador a USB y su SW te vendrá bien para descartar fallos en el sensor que ya es lo único que s eme ocurre que puede estar pasando...

Lo tienes muy lejos del arduíno?

Que HW utilizas para el RS485? igual está dañado eso y no el sensor, Cómo tienes hecha la conexión de todos los componentes, sube un esquema de todo a ver si hay algún fallo en el HW y ese sea el problema.

Un saludo!

No-se-que

Que HW utilizas para el RS485? igual está dañado eso y no el sensor, Cómo tienes hecha la conexión de todos los componentes, sube un esquema de todo a ver si hay algún fallo en el HW y ese sea el problema.

Un saludo!
A que te refieres con esto? Estoy usando un MAX485/RS485 que compré por internet para esto. He probado con dos que tengo.

El arduino y el sensor estan a medio metro.

Respecto al esquema, me recomiendas algún programa o tiro de paint o a mano?

Gracias por la ayuda.

Danicap

Quote
A que te refieres con esto? Estoy usando un MAX485/RS485 que compré por internet para esto. He probado con dos que tengo.
A eso exactamente jeje, si utilizabas un transductor tipo MAX485 o alguna d elas shield de arduíno, sabiendo que es el MAX 485 perfecto.

Quote
El arduino y el sensor estan a medio metro.
Entonces no debería haber problema, hasta unos 1200m funciona.


Quote
Respecto al esquema, me recomiendas algún programa o tiro de paint o a mano?
Yo trabajo con eagle, pero vamos que eso es lo de menos, paint o incluso un dibujo a mano y una foto pueden valer, la idea es ver qué tienes conectado por si hay algo que esté mal y lo  hayamos pasado por alto.

Un saludo!

No-se-que

#23
May 17, 2017, 12:41 pm Last Edit: May 17, 2017, 03:33 pm by No-se-que
Bueno, vamos a ver si la he subido bien.


Danicap

Yo no lo veo fallo de HW por ningún lado, lo único que se me ocurre es o que el sensor esté defectuoso o el modulo de RS485 o que el Serial1 del Mega no vaya....

No-se-que

Gracias Dani,

Dejaré esto en standby hasta que pueda comprobar el sensor y ver si realmente funciona (aunque he probado con dos).

Ya te iré informando.

Y de nuevo gracias por tu ayuda ;-)

Danicap

La fuente que utilizas que amperaje da? porque según especificaciones dice que de 22-36V máximo 100mA, a ver si le estás dando demasiada caña y se quema, aunque no debería porque la fuente debería dar la corriente que le demande la carga....

No-se-que

La fuente es de 24V y 4Amperios máximo, pero como bien dices la fuente debe dar lo que le exiga el sensor no?

Un saludo.

Danicap

Quote
La fuente es de 24V y 4Amperios máximo, pero como bien dices la fuente debe dar lo que le exiga el sensor no?
Eso es lo que debería si, mira a ver consumos con el polímetro a ver que te da, por descartar cosas.

Tienes 2 transceptores RS485 verdad? prueba a comunicar 2 arduínos, si los tienes entre sí, por descartar también el fallo en el transceptor...

No-se-que

Si que tengo dos MAX485 pero solo tengo un arduino mega, es posible autocomunicarme por dos puertos diferentes?

Noseque

Go Up