Go Down

Topic: Interrupciones arduino (Read 1 time) previous topic - next topic

el_enano_rumbero

Buenas,
Antes de nada decir que estoy muy familiarizado con la programacion en plc´s, un mundo muy diferente a este, y que de manera particular quiero explorar.
Todo esto para decir, que me cuesta mucho asimiliar, ciertas partes del funcionamiento de un micro (lineal). En un plc programar un ton (temporizador al trabajo) es cuestion de segundos, y aqui aun estoy tratando de entenderlo. Por lo que he podido averiguar y entender, esto lo podria hacer a partir de una interrupcion en el micro, y esta interrupcion se ejecutaria con una base de tiempo, es asi? este es el modo de hacerlo?

Por otro lado, otra de las cosas que me cuesta es, el retardo en las actuaciones en ed. Lo mismo, en un plc activas la entrada o salida y es instantaneo, aqui, pues esta claro que, si tenemos el programa en una zona que tarda en ejecutarse un 1sg y despues la lectura de la ed y pulsamos durante ese segundo que no estamos leyendo la ed... pasa desapercibido el pulso de la ed. Aqui tambien tendriamos que usar la interrupciones pero fisicas? si no estoy mal informado van de 2 hasta 6 en la mega, pero si necesitamos mas?

saludos

JRodrigo

#1
Mar 15, 2012, 09:24 pm Last Edit: Mar 15, 2012, 11:02 pm by JRodrigo Reason: 1
Hola,

Te recomiendo si no quieres interrupciones en el programa (delay) utilices millis() que es lo que hace un PLC.

Interrupciones externas en Arduino Mega tienes 6 como maximo, creo.

Pero con lo que has puesto hay algunas cosas en que me confundes  :smiley-slim:

[...] En un plc programar un ton (temporizador al trabajo) es cuestion de segundos[...]


Un TON no es un temporizador al encendido?

[..]Lo mismo, en un plc activas la entrada o salida y es instantaneo, [...]


Instantáneo... instantáneo no es, por que los PLC tienes lo que se llama el watchdog que al igual que arduino tiene el "loop" del programa y si el "loop" tarda mucho en ejecutarse sale el watchdog al rescate!

Un saludo!

el_enano_rumbero

buenas rodrigo
me mirare lo de los milis, gracias

respecto a tus dudas,

1.1 TEMPORIZADOR AL TRABAJO.(on delay)
son Aquellos contactos temporizados actúan después de cierto tiempo de que se ha energizado. En el momento de energizar el temporizador, los contactos temporizados que tiene siguen en la misma posición de estado de reposo y solamente cuando ha transcurrido el tempo programado, cambian de estado, es decir que el contacto NA se cierra y el contacto NC se abre.
simplemente es lo mismo, on delay, que al trabajo.

respecto a las e/s, no se que experiencia tienes con plc´s, yo te puedo hablar de mi experiencia durante 8 años con diferentes marcas (AB, Schneider, Mitsubishi, Proface, Unitronics, Omron) y no he visto un solo plc que no sean instantaneas la e/s, para mi instantaneas es que se ejecutan en el momento, sin importar donde este el programa, ni que tengas en el mismo. y si tienes un plc con 600 e/s, todas se ejecutan al momento. en los plc´s mas modernos suelen tener tarjetas que se llaman rapidas, para encoder y demas y si no recuerdo mal esas son unos 30ns de ejecucion

saludos

chiva

La activación de las salidas sí que no depende de donde estas en el programa porque no se activan instantáneamente, pero depende de lo que tengas en él. Se activarán todas simultáneamente al final de un ciclo de scan, pero antes se han ido activando una a una según las condiciones y de forma secuencial.Si todo fuera instantáneo y simultáneo, ¿para que harían falta esas tarjetas rápidas?
Igualmente, para garantizar la detección de un cambio en una entrada debe producirse como mínimo durante el tiempo equivalente a un ciclo de scan.

Luego como todo, hay PLCs que escriben directamente a las salidas y entonces se activan de forma secuencial en vez de simultánea, tarjetas con entradas con latching para pequeños pulsos, entradas a contador, etc. que modifican el comportamiento y la forma de tratarlas. Pero vamos que lo normal y general es lo que he comentado antes.

En un PLC pasaría exactamente lo mismo que comentas en el primer post.
Si en tu programa hay una zona que tarda 1 segundo en ejecutarse y tu pulsas un botón durante ese segundo, sería ignorado totalmente por el PLC (raro sería un programa de 1 segundo en un PLC, pero puede pasar perfectamente). Y esta es una de las razones por las que existe las tarjetas rápidas.
Mercadillo electrónico. Kit iniciación a Arduino, shield LCD a color y más cosas!

JRodrigo

En arduino también puedes hacer que parezcan que las salidas se enciendan "instantáneamente", ya que yo creo que los tutoriales se equivocan al enseñar los delay, ya son pausas en el programa, por ejemplo el ejemplo del LED del IDE que hay dos delay de 1000ms eso hace que el programa se pause 2 segundos cada loop.

Mira este ejemplo del Blink pero con millis() : http://arduino.cc/es/Tutorial/BlinkWithoutDelay

Un saludo!

Atmel

Hace algún tiempo necesité mas interrupciones y lo resolví siguiendo estos hilos:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1259918394
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1261124850

Espero que te sirvan para lo que pretendes.

Saludos

Atmel

En el Playground me sonaba que había algo más concreto pero no lo tenia en favoritos, tenia el enlace en el correo :-)

http://www.arduino.cc/playground/Main/PcInt

Un saludo

Ibnu AlHaizam

Los PLC normalmente se programan mediante máquinas de estado. A ti te parece instantáneo el actuador por que lo has programado para precisamente eso, para que cambie de estado al actuar sobre un botón o un evento. Puedes conseguir lo mismo  poniendo interrupciones en el micro.  :smiley-slim:

el_enano_rumbero

buenas,

antes de nada gracias a todos por las respuestas, me habeis orientado bastante.

respecto a las entradas, claro supongo que internamente el plc, hara lo que tenga que hacer para que todas las e/s sean instantaneas, pero que logicamente un plc en un micro al fin y al cabo. mi duda era como emular el funcionamiento de los temporizadores y las e/s en arduino, para que fuera similar a un plc, y con milis y int queda resuelto

de nuevo gracias

Go Up