Arduino como PLC para controlar proceso industrial

Ok, suena divertido, me prendo.

Salud!

Lo veo interesante este proyecto y animo a todos a intervenir. Podemos poner esquemas, bocetos, proyectos, ideas creativas etc. etc.
Podíamos centrar un poco el tema y trabajar en Módulos, me explico : Los mas entendidos en desarrollo hardware podían implementar desarrollos de tarjetas E/S opto acopladas, salidas a relé o a transistor, o a triac. La "base" ya está implementada en el micro y su tarjeta propia, por lo tanto se trata de implementar los shiels de forma artesanal para la comunicación de datos E/S Un tema que considero muy importante es el desarrollo de una fuente de alimentación muy estable, protegida de parásitos e interferencias y si es posible, con batería -tampón.
Los desarrolladores de Software podrían escribir librerías de código abierto en forma de Módulos, los cuales se podrán implementar al programa en forma de librerías que son llamadas desde el main
Yo tengo conocimientos e electrónica Industrial y puedo aportar información esquemas e ideas, y con mas colegas podemos ir poco a poco implementado un sistema que vaya mejorando día a día con las ideas que aportemos, Pienso que la potencialidad de la plataforma Arduino brinda una oportunidad más que excelente para el desarrollo de proyectos de Automatización Industrial a muy bajo coste, y lo que es más interesante, código abierto y libre para ampliaciones, desarrollos y nuevos proyectos

Como primer proyecto de ampliación, propongo la implementación de una placa casera de Entradas opto acopladas para tensiones de entrada de +24 V que es el estándar en Automatización Industrial, al rango que ha de admitir es de +24 V DC hasta +5 V DC para que sea compatible con todo el rango de tensiones en Automatización Industrial. Seria también un punto a su favor que pudiese admitir tensiones de entrada de 24 V AC funcionado del mismo modo que el anterior. Os animáis a enviar los esquemas ¿? Venga vamos a por ello ¡¡

A mi se me había ocurrido por cuestión de espacio pequeñas placas verticales que se conectan con tiras de pines con la señal , +,-. De esta forma cada placa puede ser una entrada optoacoplada, una salida rele, etc, y por software configurar el uso de cada pin.

Tenemos que aportar los esquemas de los circuitos entre todos pàra asi opinar. Pienso que deberiamos de partir de proyectos sencillos al principio para asi asimilar los conceptos poco a poco ya que algunas personas no estan muy familiarizadas con los circuitos. A medida que vayamos creciendo en ideas y conceptos los circuitos pueden ser algo mas complejos. Tambien los desarolladores de librerias pueden aportar ideas y rutinas al proyecto

Y por que no, a modo de expansion de entradas/salidas utilizar registros de desplazamiento, estos pueden a través de un optoacoplador controlar salidas a SSR, la rama Allen Bradley posee tarjetas de salida asi, y permiten desde 5V hasta 380V tanto en AC/DC

no se si lo conocéis pero lo que planteáis hacer lo tienen estos chicos ya muy avanzado.

https://code.google.com/p/open-plc

Todo esto está muy bien, pero si para un montaje simple de arduino salen problemas de ruidos en un entorno doméstico ¿que ocurrirá en uno industrial?.
Por lo que llevo visto hasta el momento (poco, la verdad) el arduino viene con muy poca protección frente al entorno. Me parece muy frágil. Y además da una cierta imagen de fragilidad.
Supongo además que no pensareis usar el arduino tal cual, por que se me erizan los vellos sólo de pensar un montaje con hilos sin soldadura en esos terminales tipo pin que trae el arduino.

Y eso que me encantaría poder hacer cosas de tipo industrial con este chisme. Además programando en C sin otros añadidos.

Con esto quiero decir que el primer paso para fabricar ese plc abierto sería blindar el arduino y modificar la forma que acceder las E/S al mismo.

En fin, si se hace un proyecto así me ofrezco para lo que sea que haya que hacer ¿donde hay que apuntarse?.

arduino asi como viene no sirve para cosas reales, carece de varios filtros para ruido. Es sabido que cada integrado se debe poner un capacitor de .1 lo mas cerca de vcc, y las placas no lo traen.
Obviamente hay que partir de un diseño personalizado y no usar un shield encima. Incluso saltar a un atmega644 u otro con mas capacidad que un 328

maxid:
arduino asi como viene no sirve para cosas reales, carece de varios filtros para ruido. Es sabido que cada integrado se debe poner un capacitor de .1 lo mas cerca de vcc, y las placas no lo traen.
Obviamente hay que partir de un diseño personalizado y no usar un shield encima. Incluso saltar a un atmega644 u otro con mas capacidad que un 328

Con tu permiso, abro un post nuevo para no desvirtuar este con una duda que me surge de tu comentario.

Además, por seguir con la discusión de este hilo; este arduino plc-open sería diseñando una placa nueva. De ser así ¿seguiría siendo un arduino?.

La licencia de arduino especifica que se puede usar el core pero no puede llamarse arduino otro equipo que no sea fabricado por ellos.
Por eso los clones tienen variedad de nombres

cromani:
Yo he desarrollado un proyecto muy parecido en una hormigonera con un Mega. Actualmente está en uso, pero el problema que estoy teniendo es que aleatoreamente el arduino se resetea solo se va al inicio del sketch, con lo que se pierde todo le que está realizando. Tiene comunicación con una pc que monitorea el proceso: Envia la receta a preparar y recibe lo que va pesando, y a veces se resetea. Respecto al pesado, leer las celdas de carga, tuve que trabajar mucho ya que los resultados obtenidos de una caja que lee la celda y envia una señal 0-5v me daba enormes ocilaciones, pero con muchas (cientos) de lecturas que luego promedio obtengo un valor bastante estable. Si te interesa te cuento mas sobre mi proceso. Si alguien me puede ayudar con respecto al reseteo, les agradezco. En estos momentos estoy buscando información para comunicarme con la PC a travez de los pines con un Max 232 en vez del conector USB de la placa, calculando que por aquí me entra alguna señal que me resetea el sketch. Sigo en otro momento si les interesa el tema.

También estoy usando el arduino para controlar una maquina de prensa de uvas de una bodega algo parecido a esta: http://www.agrovin.com/agrv/pdf/maquinaria/recepcion/prensa_ppa.pdf
al pulsar un botón ejecuta un programa da varios vueltas a la cuba, mete presión en bolsa de prensado, espera x minutos, vacía la bolsa de prensado, ... y empieza otro ciclo (12 en total). Tengo tres reles (prensado, vaciado y rotación) y dos sensores (presión y posición) ... en fin funciona de maravilla con 200 € he reemplazado un ordenador que vale 4000 €. Al principio tenia el mismo problema que el tuyo de vez en cuando se reseteaba el sketch le di mis vueltas y el problema era de lo mas tonto (al menos en mi caso) en vez de usar un shield de reles de arduino compre una placa con reles de cebec (pensando que son mas profesionales) y como pensaba que son lo mismo que un shield normal le conecte el pin de salida y el gnd directamente a la placa de reles, al final descubrí que la placa de cebec no llevaba ningún resistor en el gnd así que le daba 5 V directamente a través del mosfet al gnd lo que provocaba que el arduino se resetee. Solución : de lo mas simple un resistor de 1K y un diodo al gnd y asunto resuelto. Así que en tu caso estoy de lo mas seguro que el problema es electrónico, repasa todo y no te olvides que a todo voltaje que cae en el gnd hay que poner un resistor entre 1 y 10 K.

cip3322:

cromani:
Yo he desarrollado un proyecto muy parecido en una hormigonera con un Mega. Actualmente está en uso, pero el problema que estoy teniendo es que aleatoreamente el arduino se resetea solo se va al inicio del sketch, con lo que se pierde todo le que está realizando. Tiene comunicación con una pc que monitorea el proceso: Envia la receta a preparar y recibe lo que va pesando, y a veces se resetea. Respecto al pesado, leer las celdas de carga, tuve que trabajar mucho ya que los resultados obtenidos de una caja que lee la celda y envia una señal 0-5v me daba enormes ocilaciones, pero con muchas (cientos) de lecturas que luego promedio obtengo un valor bastante estable. Si te interesa te cuento mas sobre mi proceso. Si alguien me puede ayudar con respecto al reseteo, les agradezco. En estos momentos estoy buscando información para comunicarme con la PC a travez de los pines con un Max 232 en vez del conector USB de la placa, calculando que por aquí me entra alguna señal que me resetea el sketch. Sigo en otro momento si les interesa el tema.

También estoy usando el arduino para controlar una maquina de prensa de uvas de una bodega algo parecido a esta: http://www.agrovin.com/agrv/pdf/maquinaria/recepcion/prensa_ppa.pdf
al pulsar un botón ejecuta un programa da varios vueltas a la cuba, mete presión en bolsa de prensado, espera x minutos, vacía la bolsa de prensado, ... y empieza otro ciclo (12 en total). Tengo tres reles (prensado, vaciado y rotación) y dos sensores (presión y posición) ... en fin funciona de maravilla con 200 € he reemplazado un ordenador que vale 4000 €. Al principio tenia el mismo problema que el tuyo de vez en cuando se reseteaba el sketch le di mis vueltas y el problema era de lo mas tonto (al menos en mi caso) en vez de usar un shield de reles de arduino compre una placa con reles de cebec (pensando que son mas profesionales) y como pensaba que son lo mismo que un shield normal le conecte el pin de salida y el gnd directamente a la placa de reles, al final descubrí que la placa de cebec no llevaba ningún resistor en el gnd así que le daba 5 V directamente a través del mosfet al gnd lo que provocaba que el arduino se resetee. Solución : de lo mas simple un resistor de 1K y un diodo al gnd y asunto resuelto. Así que en tu caso estoy de lo mas seguro que el problema es electrónico, repasa todo y no te olvides que a todo voltaje que cae en el gnd hay que poner un resistor entre 1 y 10 K.

Aporto algo mas. Todas, pero todas las entrada deben estar protegidas de algun modo, ya sean analogigas o digitales.
En las entradas digitales generalmente vienen señales de cables largos, los que van captando muchos transitorios.
Hay que poner diodos a +5 y gnd y en lo posible usar optoacopladores, y en la entrada despues de los di0dos 1 capacitor de 100nf, dependiendo de la velocidad de lectura que busquen.

En la parte analogica es igual solo que poner un capacitor de tantalio de 1uF, esto realiza un promedio de señal y evita esos picos locos.
Asi lo teniamos en una placa para hormigoneras profesionales en toda la argentina, con errores de 1kg en 7000kg de pesada con conversores de 12bits.

Tambien lei hace poco que agregaron ferrites a los cables usb y dejaron de tener culgues de comunicacion.

protio.png

Cuando el AVR se resetea, la razón del reseteo se suele registrar en un registro.
Lo más seguro es que la razón de tu reset sea lo que se denomina un brown-out ... es decir, una caída de tensión demasiado grande porque se ha activado algo, normalmente una carga inductiva como un motor o un rele, que de pronto tira de un montón de miliámperios ...

El filtrado de las lineas de entrada está bien, y es necesario, pero el mayor problema está en el diseño de la alimentación ... como mínimo, deberías probar a alimentar el arduino (con una pila de 9V) de manera separada al resto de la circuitería para asegurarte que el micro no se cae por un brow-out ... al menos para probar; luego hay otras muchas manera de mejorar eso ...

despues del reset ese registro se puede consultar? o hay tiempo de ejecutar una interrupcion para marcar o guardar en flash?

Digamos que ese registro sólo se puede consultar después del reset ...

El registro es el MCUSR en el 328P. Búscalo en el datasheet del microcontrolador.
Por lo que he mirado, el código de inicialización de Arduino no lo toca, aunque no sé que hará la librería de C (que tampoco creo que lo toque).

Mi experiencia con Arduino en un entorno industrial fue negativa.
El proyecto era una cortadora de pliegos. La maquina debobinaba un rollo hasta cierta medida, mediante un encoder , y luego una cuchilla deslizable lo cortaba en pliegos.
Al final lo logre hacer funcionar pero de vez en cuando hacia cualquier cosa.
El trabajo para hacerlo funcionar incluyo optoaclopar tanto salidas como entradas, no basta solo con las salidas. Filtrar las fuente y agregar filtros a los reguladores de velocidad de los motores trifásicos.
Así y todo el funcionamiento fue errático, cuando el cliente ya se empezaba a cansarse opte por reemplazar todo por contadores de pulsos y reles. La maquina perdió flexibilidad pero gano en confiabilidad.
Resumiendo: el costo de de todo el trabajo de filtrado supero el de un plc chino de bajo coste y si se suma el tiempo y enojo del cliente fue una experiencia traumática.

Está claro que hacer funcionar algo en casa no es lo mismo que hacerlo funcionar en un entorno industrial o de automoción ...

De hecho, Arduino no fue diseñado con esos entornos en mente. Aun así, los microcontroladores están llamados a comerse a los PLCs con el tiempo (es una opinión personal, claro) por algo tan sencillo como el tema de coste vs. flexibilidad ...

Pienso que ponemos demasiadas pegas puesto que estamos hablando de tan solo un proyecto que esta en el inicio, no estamos hablando de una implementacion industrial ya homologada, mas bien de como aportar ideas creativas para la inventiva.
Todos los problemas de parasitos inducidos en las lineas de alimentacion se solucionan muy facilmente mediante una bateria-tampon que alimente el Arduino a una tension estable y aislada.
El cableado hacia y desde los sensores, obiamente, ha de ser de calidad, apantallado y con filltros adecuados para evitar la indduccion de parasitos, pero esto no es tan caro de implementar ni mucho menos, ya existen muchos modelos de filtros en el mercado muy economcos. Una buena idea es que la placa central no sea solo el Arduino de control, sino que cada grupo de sensores o de acruadores sea el esclavo en un bus comun hacia el Arduino de control.
El tipo de bus pienso que implementar el RS 486 es una buena opcion y quzas la mas economica
Seamos positivos y aportemos ideas, esquemas, enlaces, por que ser creativo en si mismo ya es un indice de asertividad

claro que si se puede, si han hecho uun satelite con arduino como no se va apoder.
Es logico que hay que ir arreglando y agregando protecciones.
Yo sugiero el uso de i2c y spi para comunicar modulos, y asi con la idea de arduino el uso de shields, cpu,io,ad,comunicaciones,etc.
Si se forma un equipo de trabajo cada grupo puede enfocarse en una parte.