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?
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
el_enano_rumbero:
[...] En un plc programar un ton (temporizador al trabajo) es cuestion de segundos[...]
Un TON no es un temporizador al encendido?
el_enano_rumbero:
[..]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!
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
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.
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.
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.
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