Archive for marzo, 2010

Dirección ip y mascara de subred

Creo que esto nos puede dar algún dolor de cabeza con Beckhoff. Así que lo vemos un poquito y seguimos.

El concepto.

Supongamos que tenemos que identificar una serie de pisos que forman edificios. Por ejemplo tenemos 4 edificios con 4 casas cada uno. Yo que soy un poco raro digo: pues los identificaremos poniendo un número a cada edificio y otro a cada casa. Las casas estarán identificadas como NumeroEdificio.NumeroCasa. Como se muestra en la figura.

Bien, tenemos las casas identificadas de manera que no hay posibilidad de error. Pero la secretaria que tenemos es muy rara y solo sabe contar en binario y con ocho bit. Total que tenemos (2^8) = 256. La secretaria además de ser rara, es muy lista y  amablemente nos pregunta: ¿has pensado que pasará si el pueblo sigue creciendo?

Con estas limitaciones y previendo lo que pase en el futuro, pensamos lo siguiente:

Utilizaremos 4 cifras separadas por puntos XXX.XXX.XXX.XXX por lo que pueda pasar en un futuro. En principio los tres primeros números determinan el edificio y el último la casa. Si continuamos, con el ejemplo de la figura, las casas del edificio 1 irían desde la casa 1.1.1.1 hasta la casa 1.1.1.4. Seguimos pensando y nos preguntamos ¿Qué pasará cuando en un edificio existan más de 255 casas? La secretaria no sabe contar más de esta cifra. Es fácil, reducimos la dirección del edificio a dos cifras, por tanto las primeras dos cifras serán el edificio y las dos últimas las casas. En esas, se nos enciende la bombilla y decidimos utilizar una cosa que llamaremos máscara de subred y cuya utilidad será distinguir el tipo de numeración a utilizar.

Ahora toca pensar en binario, como nuestro edificio tiene 4 casas, por el momento será suficiente con poder contar hasta 4 (2^2), necesitamos solo dos bits para identificar las casas. Podemos utilizar la siguiente mascara de subred (11111111.11111111.11111111.11111100). De esta manera le decimos a la secretaria que solo sabe binario que todo lo que sea uno es la dirección del edificio y los 0 las casas.

Pues todo este rollo es para decir que para que dos ordenadores se vean en una red Tcp/ip las cifras de ip cuya cifra de mascara sea 255 deben ser iguales. En nuestro ejemplo las casas de un edificio. Para que se vean casas de distintos edificios necesitamos unos equipos especiales (router, etc).

También seria válido una máscara de sub red 11111111.11111111.11111100.00000000, que corresponde en números decimales a 255.255.252.0. Lo que nos permite 1024 ordenadores. (2^10).

Resumiendo, con una máscara de subred 255.255.255.0, solo se verán los PC que tienen las tres primeras cifras iguales. Y para que podamos acceder desde VB.net a las variables de TwinCat tendremos que formar parte del mismo edificio. Creo que lo mas fácil para hacer las pruebas es que cambieis la dirección AMS de TwinCat a la de vuestro PC, de esta manera:

Pinchamos en el icono de TwinCat en la barra de tareas del PC y seleccionamos la ultima opción   del menu contectual.  Pinchamos en la ventana AMS router y cambiamos (si es necesario) la dirección AMS net Id de local computer  por la dirección ip de nuestro PC a la que añadimos .1.1 al final. Como muestra la figura.

Te pedirá que reinicies y listo. Se puede dar la situación que al reiniciar, TwinCat detecte un problema, en este caso habrá que modificar la dirección manualmente. Si se os da el caso me ponéis un comentarios y os hago llegar la solución.


Vb.Net Conectando con TwinCat

Bueno, creo que lo mejor es pasar pronto a la acción y probar a conectar con el plc. He preparado un programita sencillo para el PLC y otro para vb.net de manera que podamos hacer la primera conexión. Por ahora no entraremos en como se establece la conexión y utilizaremos una clase que he creado para que nos haga el trabajo.

El programa de plc es este:

Y éstas las variables globales:

En este caso y creo que por última vez utilizaremos una aplicación de consola.

Lo primero que tenemos que hacer es poner la dirección ams y puerto de nuestro SoftPlc en nuestra aplicación vb.net

Añadimos el proyecto a System Manger y activamos la configuración.

Dale al play.

Aquí podéis descargar el ejemplo y en el próximo post analizamos el programita.

Vb.net 1 y 3/4

Capturando excepciones.

Como decíamos en el anterior post, tenemos un superinformático en el PC, también conocido como Framewoks y al que cariñosamente llamamos Marcos. También, decíamos que era capaz de saber si lo que le pedíamos en el código era lógico o imposible de realizar. Bueno pues hay una forma de establecer un diálogo con Marcos, de manera que nos informe de errores para buscar un camino alternativo y que la aplicación siga funcionando.

La estructura es la siguiente:

Try
'Aqui el codigo que queremos que supervise
Catch ex As Exception
'Aquí el codigo alternativo por si falla el anterior
End Try

Cuando Marcos  lee la palabra Try sabe que tiene que estar atento, en caso de producirse un error: error de comunicación, salirse de los índices de una matriz, etc; abandona el código que está leyendo, guarda el nombre del error en la variable ex y continúa leyendo el código  situado debajo de Catch.

Trabajando con consola. Un ejemplo de excepción.

Este tipo de aplicaciones están muy bien para hacer pruebas puesto que nos permite olvidarnos de la interface gráfica.

Crea una nueva aplicación y haz doble click sobre aplicación de consola. Copia y pega el siguiente código. Y dale al play. Cuando te pide un numero prueba a introducir una letra.

1: 'Pedimos un numero'
Console.WriteLine("Introduce un numero?")
'Inicializamos una variable de tipo integer'
Dim Respuesta As Integer
Try
'Cogemos el valor introducido y lo volcamos a la variable Respuesta'
Respuesta = Console.ReadLine()
'Le damos animos al usario por que sabe lo que es un numero'
Console.WriteLine("Bien, bien")
Catch ex As Exception
'Recogemos la excepción en caso de que el usuario sea un negao'
Console.WriteLine("Que nohhhhh. ¡Un numero!")
End Try
Console.WriteLine("Escribe 1 para continuar")
'vemos lo que ha escrito si es uno se va a la etiqueta 1: al principio del programa'
If Console.ReadLine = 1 Then
GoTo 1
Else
'en caso de no ser 1 salimos del programa'
Console.WriteLine("Pulsa intro para salir")
Console.Read()
End If

Depurando.

Los BreakPoint.

El IDE tiene algunas funciones para poder depurar nuestra aplicación.

Si hacemos click en el área gris a la izquierda del código, aparece un punto rojo. Cuando se ejecute la aplicación se detendrá al llegar a ese punto. Esto nos permite conocer el valor de las variables en ese instante. O por ejemplo saber si el programa entró en esa línea.

Si pasamos el ratón por una variable nos mostrará su valor.

Tenemos varias ventanas para saber más. Por defecto se encuentran en la parte más inferior del IDE.

Si el IDE no muestra estas ventanas podemos activarlas desde la barra de herramientas.

Para que el programa se detenga donde se ha colocado el breakpoint, tenemos que haber introducido un valor no válido para una variable integer. Si introducimos un valor válido Marcos no leerá esa línea de código.

Si queremos que la aplicación no vuelva a parar en el punto hacemos click en el BreakPoint para borrarlo.

También podemos mover el punto donde está detenido el programa, por ejemplo para saltar o volver a cargar.

Con este código:

Debug.WriteLine(“El valor de la variable es “ & Valor)

podemos escribir en la ventana inmediato.

Vb.net 1 y 1/2.

Vemos unos conceptos básicos y pronto pasaremos a hacer cositas. Podeis ir poniendo a punto el TwinCat.

Framework

Supongo que todos habréis oído esta palabra. Supongamos que metemos un súper informático en el PC, le decimos que de ahora en adelante se llamará framework 2.0 y que su trabajo será leer nuestro programa y traducirlo para que el sistema operativo sepa que tiene que hacer. Además, como somos unos gandules de cuidado, le decimos que se aprenda unas cuantas funciones para no hacerlas nosotros y que las haga el según lee el programa. Como pensamos que le va a sobrar tiempo, es un superinformatico, le decimos que valla diciéndole al SO (sistema operativo), el sitio que tiene que reservar para las variables. Como aún le sigue sobrando tiempo, si quiere seguir vivo tendrá que supervisar si lo que le pedimos es lógico y en caso de no serlo que nos avise (ya veremos cómo).

Un ejemplo:

Dim VarString AS String = "Casa"   'declaramos una variable de tipo cadena de texto'
Dim VarInt AS Integer
VarInt = VarString.Lenght

Bueno, pues en este ejemplo, le decimos al framework 2.0 de los coj…, oye  dile al SO que deje espacio en la RAM para una almacenar una variable de tipo cadena (un texto) y sitio para almacenar un valor Integer   (desde  -2.147.483.648 hasta  2.147.483.647). Oye, y  búscate la vida pero dime la longitud de la cadena almacenada en la variable VarString.

El framework que es muy obediente cargará 4 (numero de letras de casa) en VarInt.

Mientras, Framework  en nuestro PC y sus clones en otros PC`s, están liaos currando, los de Microsoft están creando otra generación de clones a los que le pondrán nombres como Framework 3.5, etc. Básicamente son lo mismo pero han aprendido a hacer mas cosas. De lo que se desprende que si hacemos un programa contando con Framework  como interprete no podremos hacer funcionar nuestro programa, si no esta en el PC. Si hacemos un programa contando con el Framewok 2.0 funcionara en un PC con el Framework 3.5 pero no al revés.

Otra ventaja del Framework, ademas de facilitar el trabajo, es que no necesitamos instalar el programa para que funcione. Simplemente hay que ejecutarlo.

Propiedades.

Básicamente, para hacer un programa para PC, hacemos una interface gráfica, arrastrando los controles al formulario, se dimensionan adecuadamente y se modifican las propiedades necesarias. Otra cosa importante es poner un nombre simbólico al control. En el anterior post, poníamos un button. El IDE, pone automáticamente el nombre Button1. Pero este nombre no nos dice nada. Podemos cambiar este nombre por otro que nos recuerde la función de este botón. Por ejemplo buHola.

En la barra de la derecha tenemos las propiedades. Si seleccionamos, el botón que incluimos en la anterior entrada, la barra  nos mostrará las propiedades de éste (la imagen superior). Como vemos hay una propiedad Name, aquí deberíamos poner un nombre con el tipo y la función . Por ejemplo podemos utilizar “bu” para los botones y la función ”Hola”. Quedaría así buHola.

Variables.

Declaración de variables.

'Generalmente declaramos una variable así:'
Dim VarINT As Integer
Dim VarString AS String
Dim VarDecimal AS Decimal
Dim VarINT AS Short
'Podemos asignar un valor a una variable:'
Dim VarInt As Integer = 7
Dim VarString AS String = "Los programadores somos unos frikis, pero no salimos en la tele"
'Para que una variable sea visible en otras clases de nuestra aplicación, por ejemplo en otro formulario diferente de donde se declaro, deberemos ponerla al principio de la clase, de esta manera:'
Public Shared VarInt AS Integer

Aquí os dejo un link con los Tipos de datos en Vb.net

Ámbito o visibilidad de una variable.

Dependiendo de donde declaramos las variables serán visibles en un lugar u otro.

Si declaramos una variable dentro del evento del botón del anterior post, esta variable solo será visible dentro de ese gestor de eventos. Si lo hacemos dentro de un bucle FOR NEXT, solo será visible dentro del bucle. Es igual que declarar una variable dentro de un FB en programación de PLC.  Con la diferencia que aquí tenemos al Framework, que sólo declara la variable cuando lee, esa parte de programa.

Como FrameWork es un nombre super feo que  además se puede traducir como Marco, lo podemos llamar Marcos.

Bueno, pues hacemos doble click sobre nuestra aplicación o le damos al play en el IDE y Marcos se pone a leer el programa. Lo primero que hace es leer lo que hay en el Formulario principal. Una cosa  Como…

Public Class Form1
Public Shared Valor As Integer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Button1.Text = "Hola"
End Sub
End Class

Marcos, le dice al SO que deje espacio para una variable llamada Valor y se dice, a sí mismo, que dejará que otros formularios puedan leer esta variable (Public Shared). Aunque aquí no se ve, hay un código que ha generado el IDE donde le dice a Marcos que este atento por si alguien hace click sobre  el boton1. Bueno y llegamos y lo pulsamos. Entonces, Marcos, busca en el código algún sitio que ponga Handles Button1.Click (en realidad sabe donde está), lee hacia abajo y va haciendo lo que pone. Marcos le dice al SO que cambie el texto del buton por Hola y se encuentra con las palabras END SUB. Y dice Marcos, joer que fácil, bueno pues como diría Maira Gómez, Hasta aquí puedo leer. A seguir esperando, que paciencia, señor, ¡que paciencia!

Vb.Net I

Para empezar hay que descargar el software de la web de Microsoft desde aquí. Es la versión express que es gratuita pero da para hacer bastantes cosas. Tienes la posibilidad de instalar SQL express, pero yo lo que haga, lo haré con MySql que es una base de datos open source.

En la web podéis encontrar infinidad de tutoriales, manuales, etc. Yo particularmente recomiendo La biblia de Visual Basic 2008 y me parece casi imprescindible meterse un buen libro si no tienes experiencia en este software. La intención de lo que veamos aquí es dar a conocer las posibilidades que tenemos a nuestro alcance. Como dejaré el proyecto que veamos, no es necesario tener muchos conocimientos para ver las aplicaciones rular y entenderlas un poco. Otra cosa será hacer una aplicación real.

IDE.

Un IDE es un entorno de programación que ha sido empaquetado como un programa de aplicación, es decir, consiste en un editor de código, un compilador, un depurador y un constructor de interfaz gráfica (GUI). Los IDEs pueden ser aplicaciones por sí solas o pueden ser parte de aplicaciones existentes. El lenguaje Visual Basic, por ejemplo, puede ser usado dentro de las aplicaciones de Microsoft Office, lo que hace posible escribir sentencias Visual Basic en forma demacros para Microsoft Word.

Fuente: Wikipedia.

Programación dirigida por eventos.

En oposición a la programación en PLC que el programa se lee cíclicamente, en Vb.net el programa está dirigido por eventos y me explico:

Supongamos un programa básico. Un botón que al pulsarlo cambia el texto.

En primer lugar construimos la interfaz de usuario. Para ello en la barra de la izquierda tenemos los controles. Pinchamos en Button (marcado en azul) y lo desplazamos hasta la ventana Form1. Para este ejemplo ya hemos terminado la interface grafica.

Si pulsamos dos veces en el button se abre la ventana de código y nos sitúa el cursor en el gestor de eventos que hemos pulsado.

Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)  Handles Button1.Click
End Sub

End Class

Cuando se carga el programa espera a que se produzca un evento para  ejecutar el código. Pero sólo ejecutará el código que se encuentra dentro del gestor de ese evento. En nuestro ejemplo es:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
End Sub
Una traducción libre:
Rutina privada Button1_Click(PasaPorValor sender que es un Objeto de sistema, PasaPorValor e que es un Evento) Cuando hacemos Click en Button1.
Final de rutina

Por el momento nos podemos conformar con saber que cuando hagamos click en el botón, se leerá el código de esta rutina. Ahora añadiremos algo de código.
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Button1.Text = “Hola”
End Sub
End Class

El botón que pusimos en el formulario es un objeto que tiene una serie de propiedades y algunas de ellas las  podemos modificar desde el código. En este caso usaremos la propiedad Text. Y la forma de hacerlo es Objeto.Propiedad = Valor. Como la propiedad que queremos modificar es de tipo texto deberemos encerrar el texto entre comillas. Ya podemos poner nuestra aplicación en marcha, pulsando en el botón ejecutar de la barra de herramientas.
Una vez ejecutada la aplicación se mostrará la ventana:
Si pulsamos en Button1, se mostrara:
Y ya hemos realizado nuestra primera aplicación en vb.net.

Seguridad cableada Vs Plc

Esto es una entrada con  trampa, puesto que no me voy pronunciar a este respecto. Al contrario me gustaría saber vuestra opinión. Y si nadie opina esperaré.

En toda instalación frigorífica existe, lo que yo llamo la columna de averías, la línea donde se enserian las seguridades del compresor.

Supongo que hasta aquí estamos todos de acuerdo. Ahora bien, cuando se instala un sistema de control con PLC ó similar, ¿Qué parte de este esquema pasará a ser maniobra en PLC y qué cableado? ¿Qué es mas seguro?. Es común ver cuadros en los que esta columna esta duplicada en cableado y en PLC. En otras ocasiones se divide una parte para el PLC y otra cableada.

Nunca he visto un PLC equivocarse, sí que pueden existir errores de programación, aunque hay algunos recursos para que sea casi imposible que esto ocurra. He visto  relés en columnas de averías forzados para que no salte esa avería. Temporizadores que debieran estar a 12 seg puestos a 1hora, etc.

Bueno lo dicho, a opinar.

Entradas analógicas.

Las entradas analógicas son utilizadas para leer valores como temperatura,  presión, intensidad, etc. Este valor se almacena  en una variable del PLC.  Por ejemplo:

TempCam1 AT %I* :INT;

El prefijo AT es utilizado para asignar la variable en una posición fija de memoria. En este caso I representa las entradas. En otros plc las variables siempre están asignadas a posiciones pero en este entorno de programación no es necesario y podemos simplemente declarar las variables con el tipo (Var:INT; ). Otros área de memoria son:

Entradas %I

Salidas %Q

Marca internas %M

El asterisco le dice al programa que esta entrada la queremos asignar mediante System manager. En el caso de Beckhoff, lo normal es que las entradas/salidas no tengan una dirección fija y se asignan mediante  system manager.

INT es integer, una variable de 16 bit con  signo.

¿Como almacenamos valores en bit?.

Supongamos que tenemos dos bit. Cada bit almacena dos estados (0 y 1) ó (True, False). Con estos dos bit podemos tener 4 combinaciones:

00 : 0

01 : 1

10 : 2

11 : 3

El resultado es que según el número de bit podemos tener 2 ^ (numero de bit)  posibilidades. 2 ^2 = 4. Por lo tanto, con dos bit podríamos almacenar un numero del 0 al 3. Para un valor con 16 bit podemos almacenar un valor comprendido entre 0 y 65535 (2^16 = 65536). Este tipo de dato se llama UINT integer sin signo. En el primer ejemplo utilizamos una variable llamada INT, integer 16 bit con signo. El primer bit se utiliza para el signo y los 15 restantes para el valor, por lo tanto 2^15 = 32768. De esta manera en una variable INT podemos almacenar valores desde -32767 hasta +32767.

El módulo de entradas analógicas del PLC, será el encargado de transformar una señal eléctrica en un valor que se almacena en la variable asignada. Normalmente utilizaremos para este tipo de entradas una variable de tipo INT.

Los tipos mas comunes de entradas analógicas son 0-10v, 4- 20 mA y sondas de temperatura, como: PT100, Pt1000 y termopares.

La principal característica de las entradas es que deben ser lineales (salvo casos especiales que no voy a tratar aquí). Es decir que esta señal aumentará proporcionalmente al valor físico medido.  El cálculo mediante el cual se transforma una entrada analógica en una magnitud física que se llama escalado.

Ejemplo de escalado con sonda de presión 0 – 10 bar y entrada analógica 4-20mA.

Presión AT %I*:INT;

La variable presión tendrá un valor entre -32767 y +32767, las entradas analógicas 4-20 mA siempre devuelven valores positivos  y el resultado es que la variable devolverá un valor entre 0 y 32767. Por lo tanto:

4 mA = 0 bar     => Presión = 0

20 mA = 10 bar => Presión = 32767

En realidad el valor de la presión lo convertiremos multiplicado por 100. De esta manera tendremos dos decimales aunque en programa lo veamos con Bar * 100.

Como podemos ver en el FB para un valor de la entrada de 32767 nos devuelve una presión de 1000 = bar*100 = 10,00 bar.

DifReal = ValorA20 – ValorA4

Factor = DifReal / NºPuntos

Presión = (Puntos * Factor) + ValorA4  + OffSet.

La Resolución de una entrada analógica.

La resolución de una entrada analógica esta determinada por el numero de bit. El módulo encargado de leer una entrada analógica nos devuelve el valor al PLC. En esta conversión, e independientemente del tipo de variable utilizada en el programa para almacenarla, la entrada es convertida a un valor digital con unos bit de resolución que están determinados por el módulo en concreto, es una de las características a la que habremos de prestar atención.

Si contamos con un modulo de 8 bits, tendremos 2^8 valores = 256. Para la lectura de una sonda de presión de 0 a 10 bar tendremos:

1000 / 256 = 3,9

Por lo tanto, por cada punto de variación en la entrada analógica, tendremos 0,04 bar de variación en la variable interna del plc. Para una entrada de 12bits (1000/4096 = 0,24 => 0,0024 bar). Es común, en una entrada analógica, que existan pequeñas variaciones. Dependiendo de la resolución estas variaciones pueden ser mas  o menos molestas, puesto que no es lo mismo estar variando 0,04 bar que 0,0024.  Yo, particularmente utilizo entradas de unos 12 bit de resolución para la mayoría de las aplicaciones.

PDA en PLC

Pues seguimos con el PDA, en esta ocasión realizado mediante PLC. Se supone que tenemos una sonda de presión en baja y otra en la bomba de aceite del compresor.

El programa:

Declaramos las variables globales de las entradas analógicas:

PuntosPbaja AT %I*:INT; (*lectura de sonda de presión de baja*)
PuntosPOil AT %I*:INT; (*Lectura de sonda de presión de aceite*)

Compresor AT %Q*:BOOL; (*la salida para el compresor*)

Declaración de variables en Programa MAIN.

PROGRAM MAIN

VAR

esEscalarPb: Escalar;

Pbaja: INT;

esEscalarPOil: Escalar;

POil: INT;

PDifOil: INT;

TimerPOil: TON;

AlarmaPDA: BOOL;

Rst: BOOL;

END_VAR

(*Lo primero que tenemos que hacer es convertir los puntos de la entrada analógica en unidades físicas, en este caso presión en bar * 100. Y lo hacemos a través de un FB escalar, como vimos en la anterior entrada.*)

esEscalarPb(

Puntos:= PuntosPbaja,

mA4:=-50 ,

mA20:=800 ,

NoPuntos:=32767 ,

OffSet:=0 ,

Out=>Pbaja );

esEscalarPOil(

Puntos:=PuntosPOil ,

mA4:=-50 ,

mA20:=800 ,

NoPuntos:=32767 ,

OffSet:=0 ,

Out=> POil);

(*Calculamos la presión diferencial*)

PDifOil := POil – Pbaja;

(*Temporizamos en caso de que el compresor esté en marcha y la presión diferencial de aceite sea menos de 200 ( 2,00 Kg/cm2).*)

TimerPOil (IN:= Compresor AND PDifOil < 200, PT:= T#30s);

(*Si han pasado 30 seg. con el compresor en marcha y sin presión de aceite se activa el temporizador y hace un Set a la variable Alarma.*)

IF TimerPOil.Q THEN AlarmaPDA := TRUE;END_IF;

(*La alarma permanece activa hasta que activamos Rst para hacer un Reset sobre Alarma.*)

IF Rst THEN AlarmaPDA:=FALSE;END_IF;

El PDA

Bueno, hoy toca empezar a ver un poquito de los componentes de un sistema de frío industrial.

El PDA o Presostato Diferencial de Aceite  es, como su propio nombre indica, un presostato de presión diferencial. Es decir, que calcula la diferencia de dos presiones y la compara con la de un muelle.

LP = low presure = baja presión. OIL =aceite. Mediante (3) modificamos la tensión del muelle y por tanto la presión a comparar. En (5) se encuentra un micro pulsador normalmente cerrado. Si la presión diferencial es mayor que la tensión del muelle, una pequeña pestaña accionará el pulsador, abriendo el circuito.

El esquema en detalle.

Y este precioso esquema, que hicieron cuando las Vespas eran prototipos, es el que ponen para que nos enteremos como funciona. Yo me pregunto, ¿Cuesta mucho actualizar esto un poquito?. En fin, es lo que hay. Bueno tampoco es para tanto que es sencillito. Al tema.

Tenemos por un lado un conmutador con un común (L), un NO (S) que en principio es para la lámpara de avería y un NC (M) que estaría en la columna de averías. (e) es un bimetal (unión de dos metales que al calentarse produce un desplazamiento).

Este PDA puede funcionar a 115 v o 220 v. Para esto tiene una resistencia (R) que produce una caída de tensión de 115 v, de esta manera si queremos alimentarlo a 220 v lo hacemos a traves de la resistencia (0-230) y si es a 115v (0-115) sin la resistencia.

En este esquema podemos ver el principio de funcionamiento, que viene siendo el de la canica. Cuando arranca el compresor alimentamos un bimetal a través de un contacto normalmente cerrado. Si la presión diferencial aumenta por encima de la tarada en el muelle, el contacto se abre. De no ser mayor la presión diferencial, el bimetal seguirá con tensión, de manera que al pasar el tiempo prefijado se desplazará cambiando la posición del conmutador.

Aplicaciones con PLC.

En cuadros de control con PLC, lo lógico sería no utilizar este temporizador y hacerlo con el PLC. Existe una versión sin temporizador y también tenemos la posibilidad de quitarlo y utilizar el contacto (5).

Editado 15-03-10

Creo que no me he explicado bien y aclaro.

Existen diferentes formas de monitorizar la presión de aceite. Bien con sonda de presión, bien con Delta P ó INT250, etc.  Cuando en esta entrada hablo de aplicaciones con PLC, sólo me refiero a este modelo. No porque sea el sistema ideal, sólo es como se puede hacer el control con PLC  con este modelo.

Editado 26-03-10.

Chuan Car me ha pasado este documento  donde explica como hacer un control de presión de aceite con sondas de presión con un PLC Twido y mostrar la presión de aceite en el HMI.  Desde aquí agradezco el aporte, que dicho de paso, considero muy interesante.

Presostato de aceite diferencial

Variables Beckhoff Proface

Ya que tenía esta aplicación, he pensado que estaía bien explicar un poco como funciona, aunque no tiene mucha historia.

La aplicación llamada utilidades, es un conjunto de herramientas que nos pueden ayudar a realizar algunos  trabajos.  Hoy hablaré de la conversión de variables globales de beckhoff  BX9000 a proface para Modbus Tcp/ip.  Básicamente los pasos son:

  1. Exportar las variables globales desde PLC Control  a un archivo que llamaremos VARIABLES GLOBALES. Proyecto –> export. En el cuadro de diálogo abrimos la carpeta Global variables y seleccionamos variables globales.
  2. Abrimos utilidades –> Herramientas –> Generar variables globales.
  3. Y pulsamos en generar variables globales.
  4. Seleccionar la carpeta donde guardamos las variables exportadas.
  5. Abrir el proyecto  HMI de Proface,  ajustes comunes –> ajustes de simbolos de variables   –> Utilidades –> Formato de Gx-pro Ex.

Podemos hacer la conversión de una o varias variables directamente. En el combobox convertir variables, ponemos la variable a convertir en el texbox y pulsamos el botón que hay debajo. Esta conversión se puede realizar en los dos sentidos. Si tenemos marcado Sumar, la variable que hay en el textbox aumentará automáticamente, esto es práctico para hacer varias conversiones consecutivas.