Cómo escribir un bit en una palabra?

Para alterar el bit de una palabra, dependerá del estado actual del bit que se quiera cambiar:

Si está a “1″ y lo queremos poner a “0″, se multiplica la posición de bit por 0 (AND)

Si está a “0″ y lo queremos poner a “1″, se suma 1 a la posición de bit (OR)

La función quedaría:

INT FUNCTION EscribeBit(INT Valor, INT NumBit, INT EstadoBit)
IF EstadoBit = FALSE THEN  RETURN Valor BITAND (4294967295 BITXOR Pow(2, NumBit));
ELSE   RETURN Valor BITOR Pow(2, Numbit);
END
END

Índices perdidos…OID!!!!

Alguna vez, sobre todo cuando trasteamos con tablas de forma alegre, o cuando hacemos que Vijeo Citect compile nuestros inventos, puede aparecer un mensaje con un texto donde aparece: xxxxx OID xxxxxxxx

A partir de aquí, ya no se puede compilar nada.

OID, o Object Index, indica un problema en los índices de alguna tabla de Vijeo y éstos necesitan ser recompilados.

La solución es muy sencilla:

Nos vamos al Explorador de Proyectos, y en el menú: Herramientas – Editor de configuración del ordenador, abriremos el asistente de edición del archivo Citect.ini.

Este archivo es el que determina el comportamiento de Vijeo Citect. A la izquierda, en árbol, aparecen las opciones configuradas y, a la derecha, un asistente de los parámetros de configuración.

Si no sabemos cómo manejar el tema, es bastante sencillo:

1 – GUARDAR UNA COPIA DEL ARCHIVO Citect.ini !!!! ( por ejemplo citect.bak)
2 – En la celda inferior derecha, insertar el texto misterioso: OID, y pulsar el botón Go. Aparecerán las coincidencias en la ventana de arriba.

3 – En OID Parameters, aparecen los parámetros relacionados con OID: [OID]Reset.

4 – Pulsando con el ratón sobre el parámetro, se inserta en la celda de la ventana inferior izquierda.

5 – Ponemos Value = 1 y piulsamos Add. El nuevio campo se insertará en el archivo citect.ini.

6 – Guardamos el archivo.

Ya está, la próxima vez que arranque el compilador de Vijeo Citect, el parámetro Reset=1 indicará que los índices se deben rehacer de nuevo y el error ya no debería aparecer más.

Más cosas en: www.aquiro.weebly.com

Trabajar con etiquetas

Mediante el uso de etiquetas es posible asociar nombres fáciles de recordar a valores o expresiones en Vijeo Citect. Por ejemplo, para definir áreas visibles para un usuario, la configuración “clasica” seria:

Si se asocia un elemento al área 10, solamente este usuario podrá ver en pantalla dicho elemento.

Otra manera más sencilla podría ser definir una etiqueta que identifique un área en concreto. Por ejemplo: HIDRAULICA

En el Editor de Proyectos, mediante la opción de menú: SystemLabels, se asigna el valor 22 a esa etiqueta.

La etiqueta HIDRAULICA equivale ahora al valor 22. Un objeto con la seguridad de área fijada en el 22, solo será visible al usuario con este privilegio.

Se define el número de área de un objeto gráfico (un cilindro neumático, por ejemplo):

El cuadro de usuarios queda ahora un poco más claro si lo ponemos de esta manera:

A efectos: HIDRAULICA=22

De la misma manera que HIDRAULICA=22, podríamos hacer servir también una etiqueta para definir una expresión, por ejemplo:

Etiqueta: SUMAR10(X)

Expresión de la etiqueta: X=X+10

En un pulsador, si se inserta esta etiqueta, sustituyendo la X por una variable, cada vez que se pulse, se incrementará la variable en 10.

Como leer un bit en una palabra?

Vijeo Citect no desglosa directamente una palabra en bits, necesita una ayuda. Para ello hay una función que permite saber el estado de un bit determinado en una palabra.

Como parámetros de la función hay que entrar el valor entero del cual queremos extraer un bit (iValue) e indicamos el bit que queremos visualizar (iBitNo).

En la figura se ha colocado una variable de la cual se extrae su valor binario.

Más cosas sobre Vijeo Citect

Estoy chapuzando una página donde pongo mis cosillas. Estoy poniendo “en limpio” cosas de Vijeo Citect y como algunas no pasan por el blog, os pongo el enlace para ver si os encontrais con alguna cosilla interesante.

El enlace es este: www.aquiro.weebly.com

Refresco de variables

Nota nueva referida a una pregunta de un compañero en relación con el tiempo de refresco de las variables en Vijeo Citect. He ordenado un poco los comentarios e indagado algo acerca del tema.

La cuestión era cómo cambiar el tiempo de refresco de las variables.

Por defecto, las variables de la tabla VARIABLE.DBF, no comunican. La comunicación dependerá del lugar donde se halle la llamada a esta variable.

Alarmas

En el caso de las alarmas, el tiempo de refresco del sistema de alarmas afectará a la CPU. Debe ajustarse a las necesidades del proceso para no perder alarmas y no sobrecargar la CPU innecesariamente.

Páginas

Dentro de una página, dependiendo del tiempo de refresco de ésta. Se puede definir un tiempo general para todas las páginas en la última ventana del Asistente de configuración del Computador.

Por defecto se refresca cada 250 milisegundos y afecta a todas las páginas. Se trata del parámetro: Tiempo de búsqueda de página (traducido: ciclo de scan de la página)

Es posible configurar tiempos de refresco diferentes para cada página. Con el botón derecho del ratón en una página, se abren sus propiedades. El parámetro: Tiempo de búsqueda permitirá cambiar el tiempo de refresco de esa página en particular.

Tendencias

Dependerá del tiempo de muestreo definido para la variable de tendencia.

En la figura aparece una gráfica con una señal muestreada cada 0.2s y una visualización directa en página cada 3s. El valor de la variable se actualizará en la página cada 3s, pero su valor real será el de la tendencia (ésta “irá por delante”)

Controlador

Se pueden tocar más cosas para el tema de refresco, como el controlador. En este caso la pregunta iba con MODNET (Modbus sobre Ethernet) y se refería a cambiar el tiempo de polling al dispositivo. Se puede hacer peeeeeeeero…..

MODNET.Delay es un parámetro que aplica un tiempo de espera entre la contestación del dispositivo y la siguiente petición que se le envía al mismo. Todos los dispositivos que utilicen este controlador tendrán el mismo retardo.

Esto quiere decir que si estamos trasteando con históricos, nos podemos encontrar con algo como lo siguiente (Retardo de 5s):

Y a lo mejor no interesa…

Alarmas, vamos a meternos en líos…

Visto que hay cosillas mejorables, como en todo, vamos a tocar las tripas de las plantillas de alarmas…

En las páginas del proyecto CSV_Include, la plantilla “normal”, el visor de las últimas alarmas activas que aparece en la parte inferior de la página va “por libre”. Quiere decir que cuando cambiamos las propiedades de visualización de las alarmas desde la ventana Categorías de alarmas, como que no va con ellas.

Pues no, no va con ellas…

Haciendo ingeniería inversa (como farda cuando decimos eso, parece que sepamos de qué estamos hablando), me puse a curiosear…

En el genio que conforma el visor de las últimas alarmas activas se hace servir la función: CSV_Alarms_DspLast

Mirando entonces en la librería de alarmas del proyecto CSV_Include, dicha función tiene unos campos muy reveladores:

sFormat = ParameterGet(“Alarm”,”LastAlarmFmt”,”{Time,12}{Date,12}^t{Name,15}^t{Desc,35}^t{State,9}”);

Sí, allí está oculto el duende de los quince caracteres máximo del visor de alarmas.

Si le hacemos un apaño podemos solucionar el tema  (yo aconsejaría no tocar el CSV_Include por razones obvias, casi mejor nos hacemos nuestra plantilla normal, vosotros mismos)

Bueno, para cambios similares ya sabéis por donde hay que ir tocando.

NOTA: Para cambios de plantilla debéis ir con el máximo cuidado posible o la película “En tierra hostil” va a parecer una comedia al lado de lo que podéis conseguir modificando las plantillas por las buenas…

SG2

A raíz de un comentario de Mariano Coch, os pongo un apunte sobre una herramienta muy interesante que funciona con Vijeo Citect y con Unity y que puede ahorrar muuuuchas horas de trabajo…

Desde hace unos tres años, Schneider Electric tiene una herramienta de integración entre Vijeo Citect y Unity, que permite automatizar grandes secciones de programa (de hecho, solo nos queda implementar las maniobras y poco más)
Se trata del paquete de software SG2.

Yo lo he empezado a tocar hace poco y permite, por ejemplo, lo siguiente (es un resumen de los pasos que hay que dar):
1- Quiero 20 variadores en CANopen
2- La cpu es una M340 loquesea con CAN
3- Abro la SG y selecciono las librerias que necesito (que ya vienen integradas)
4- Selecciono el proyecto a crear
5- Selecciono la CPU
6- Selecciono el dispositivo (el variador con CANopen)

7- Por favor, póngame veinte señora (ten, majete, que te aproveche…)
7- Genero el proyecto
8- Yastá
9- Abro el proyecto Unity
10- Tengo el programa, ya hecho , de toda la parte de comunicaciones del plc con los 20 variadores (variables necesarias para los 20 variadores incluidas).

Solo queda poner las direcciones de los equipos en los bloques de función e implementar la maniobra (marcha, paro, seguridades.)

Además, en el proyecto Unity tendremos las pantallas de operador para los variadores ya programadas (adiós, tablas de animación).

Hacia “arriba”, hacia Vijeo Citect, el hecho de poner una función en Unity permite linkar los objetos gráficos necesarios en Vijeo Citect, variables incluidas. Estos objetos son paneles gráficos con todas las utilidades ya configuradas: marcha, paro, sonsigna, usuarios, bypass, simulación, alarmas…

Por ejemplo, un bloque de función PID en Unity

Tiene asociado en el scada los bloques siguientes (visualización y mando)

Lo mejor de todo es que la SG2 es gratuita!

Jugando con Unity…

Creo que no está de más señalar algunas que otras cosillas que, aunque bastante sencillas, puede ahorrar bastante trabajo. Por ejemplo la conexión al simulador de Unity si estamos trabajando con estos PLC.

La configuración es muy simple, tenemos que partir de que si trabajamos con el simulador de PLC, estaremos trabajando en modo local y, por tanto, nos conectaremos al autómata simulado y no al del proyecto que se simula (Mandeeee! qué cosas dice abuela!).

Por ejemplo, si tenemos un proyecto Unity con un autómata (cualquiera), con comunicación ethernet, el autómata físico tendrá una IP física (por ejemplo: 100.100.100.100). Peeeero, si lo simulamos, el autómata simulado tendrá la IP del simulador, que no es otra que la del nodo local, que siempre será: 127.0.0.1.

Resumiendo, tengo Unity y Vijeo Citect en el mismo PC y me pongo a simular mi fastuoso proyecto de autómata, la IP del simulador será siempre la misma: 127.0.0.1

Ahora nos vamos al Vijeo Citect…

Crearemos un dispositivo con el asistente de comunicaciones.

El dispositivo tendrá su etiqueta…

El protocolo será TCP/IP, la dirección será la del nodo local y el puerto el 502.

Terminada la configuración, las variables que defina para este dispositivo (IODev1) se dirigirán al programa de autómata que estaremos simulando.

Ale, yastá…

De la 6 a la 7, me llevo una…

Tengo la versión 6loquesea de un proyecto y tengo que trabajar con la 7.0 – 7.1

Para eso hay una herramienta de migracion que permite arreglar el tema.

  1. Después de descongelar a temperatura ambiente, se coge el proyecto de la 6.1 y se restaura desde la 7.x en el Explorador de Proyectos.
  2. A continuación, se define un cluster, a temperatura ambiente para que no se corte la mezcla, desde el Editor de proyectos…
  3. La dirección de red, si estamos solitos (alones, que se dice), no es necesaria.
  4. Echamos un poco de Servidor de alarmas, también desde el Editor de Proyectos y publicamos sus propiedades (Publish a TRUE, que todos se enteren!)
  5. Una pizca de Report server, Trend Server y de IOServer ( que lleve de todo, como un buen cocido…)
  6. Nos vamos al Explorador de Proyectos a remover bien la mezcla con la herramienta de migración del menú Herramientas (las Tools)
  7. Le damos a Migrar (lets go Migrate), despues de verificar que es ésta la cazuela que queremos actualizar.
  8. Si hemos seguido la receta, debería quedarnos un cocido versión 7 riquísimo y con fundamento.