Estado del arte (PLC´s, SCADA´s y Concurrencia)

Anuncio
Estado del arte (PLC´s, SCADA´s y Concurrencia)
1. Introducción
Desde los inicios del tiempo y particularmente enmarcados dentro del contexto
de procesos industriales, científicos de todo el mundo han trabajado para
lograr que los procesos de manufactura sean cada vez más efectivos y más
eficientes. Con esta meta se han desarrollado nuevos instrumentos para lograr
alcanzar este mejoramiento continuo. Al referirnos a herramientas estas
abarcan dispositivos de todo tipo y por su puesto programas que acompañan
manejan y dan valor agregado a los mismos. En este articulo nos centraremos
particularmente en un dispositivo que causo gran revolución en los procesos
industriales como son los PLC´s y en el software asociado a ellos.
Los PLC´s (Programming Logic Controllers) o también conocidos como
autómatas industriales nos ofrecen amplias posibilidades para la
automatización, debido a que nos permiten controlar automáticamente
cualquier proceso o desarrollo industrial[SIE01]. Estos procesos no solo son
controlados por dispositivos de hardware sino también por dispositivos de
software y es allí donde entran a jugar un papel sumamente importante los
SCADA (Supervisionary Control And Data Adquisition ) que como su nombre lo
dice, son aplicaciones de software que nos ayudan y facilitan el control y la
supervisión de esos mismos procesos[ENE01].
Luego de aprender más en detalle sobre estos dos aspectos mencionados
anteriormente consideramos necesario permitir que el lector tenga la
oportunidad de aprender un poco más sobre la programación concurrente. Que
si bien no necesariamente debe estar asociada al termino SCADA, se convierte
entonces en una oportunidad de asociarla y descubrir los beneficios que una
programación, que permite modelar el mundo como realmente es, nos
brinda[SCH01].
2. PLC (Programming Logic Controller )
Es un equipo electrónico capaz de ejecutar un programa cíclicamente o un
computador industrial en miniatura que contienen hardware y software que es
usado para desarrollar funciones de control [MAL99]. Un PLC es puede ser al
mismo tiempo un AFD, un agente de estados finitos determinísticos, que como
su nombre lo dice es un agente que puede cambiar de estado, y cada estado
depende exclusivamente del estado anterior y de la ocurrencia de un evento
determinado, por lo tanto su comportamiento es determinístico. Al pensar en
PLC´s como unos AFD´s, es necesario que también tengamos claros los pasos
que estos siguen dentro de cualquier proceso de automatización industrial para
que el sistema funcione[ACT01].
1.
2.
3.
4.
5.
Alimentación principal del sistema
Entradas
Tratamiento de esos datos
Salidas
Variación real sobre la instalación o el proceso
Al mismo tiempo existe una interacción hombre-máquina que permite modificar
el proceso si este así lo requiere.
2.1 Componentes básicos de un PLC
Estos dispositivos están conformados principalmente por una CPU y la
interface de Entrada/Salida. Esta última está conectada a dispositivos de
campo como: sensores, switches etc. Debido a sus componentes opcionales
estos se pueden clasificar en dos tipos; los compactos que son conocidos en el
mercado como “nanoautómatas”, permiten programar hasta 48 E/S. Son
potentes en el marco de programación y comunicaciones con equipos externos.
Los modulares son diseñados para aplicaciones pequeñas pero disponen desde
cálculos matemáticos básicos y muchas otras funciones, la diferencia con los
anteriores es que a estos se les puede agregar módulos para aumentar su
capacidad de trabajo [AUT01].
Los PLC´s se componen de un chasis principal, donde están alojados los
diferentes módulos que pueden ser entradas y salidas adicionales o
dispositivos para comunicación con otros autómatas, los cuales son limitados
dependiendo de la capacidad de la CPU, pues estas permiten manejar cierto
número de módulos dependiendo del modelo. Un mismo autómata puede tener
diferentes tipos de chasis, fuentes, etc. Se debe tener por lo menos una
fuente de alimentación una CPU y unos módulos conectados por un bus, que casi
siempre es serie para propósitos de comunicación [PLC01]. Como un concepto
adicional importante para recordar esta el tiempo de ciclo en un PLC´s, que es
el tiempo en que los periféricos del autómata tardan en realizar un ciclo
completo, es decir desde que lee las entradas hasta que escribe las salidas y se
utiliza para funciones de control sobre el proceso que se esta realizando.
2.2 Programación de PLC´s
Para programar un PLC se utiliza software como Grafcet y otros de los cuales
hablaremos más adelante que corren en sistemas operativos muy usados hoy en
día como Windows y Linux. Sin embargo todavía se utilizan pequeñas consolas
llamadas “pockets”, las cuales resultan más económicas que tener un PC
dedicado a la programación de estos dispositivos exclusivamente y cuando solo
la modificación de datos es necesaria las consolas son de gran utilidad. Sin
embargo, estas son muy limitantes debido a que se puede utilizar más que todo
para PLC´s pequeños de hasta 48 E/S; para PLC´s más grandes la programación
se vuelve mucho mas complicada, ya que normalmente estas consolas permiten
visualizar solamente un par de líneas de código al tiempo [UTP01].
Debido a que existen un sinnúmero de PLC´s de diferentes marcas y cada uno
se programa de forma específica se han diseñado programas estándar como
Texto Estructurado y Lista de Instrucciones que permiten programar de una
forma muy amigable diversos tipos de PLC´s especificando luego de programar
el tipo de PLC al cual se quiere programar y este software convierte el
programa al código correspondiente del PLC [ADV01].
Algunos tipos de software para programación de PLC´s son:
Gráfico secuencial de funciones (Grafcet): Este es un lenguaje gráfico que
brinda una representación en forma de diagrama de las diferentes secuencias
del programa[GRA01].
Lista de instrucciones (IL o AWL): Este lenguaje de bajo nivel, parecido a
ensamblador. Con IL solo se permite una operación por línea (ej. Cambiar el
valor de un registro). Este lenguaje solo es adecuado como es de suponerse
para aplicaciones no muy grandes
y para optimizar partes de un
programa[AUT01].
Texto estructurado (Structured Text o ST): Es un lenguaje de alto nivel con
sintaxis parecida a PASCAL. El ST es empleado para realizar rápidamente
sentencias largas que manejen variables de diferentes tipos de datos, que
pueden incluir valores analógicos y digitales (horas, fechas, contadores etc.. El
lenguaje provee expresiones condicionales y bucles iterativos[MAL99].
Diagrama de contactos (ladder diagram LD): Este lenguaje utiliza un juego
estandarizado de símbolos de programación[PLC01].
Diagrama de funciones (function block diagram o FBD): Es un lenguaje gráfico
que permite programar elementos que aparecen como estados siendo cableados
entre si de forma análoga al esquema de un circuito[RED01].
Bloques de funciones (FB's): Este es un lenguaje de bloques estándar que
ejecutan algoritmos como reguladores de procesos[PLC01].
2.3 Comunicación de PLC´s
Los PLC´s se pueden comunicar entren si y con otros dispositivos a través de
buses de terreno. Este es un nombre genérico dado a protocolos de
comunicación totalmente digitales para mediciones industriales y aplicaciones
de control. Estos protocolos son parte fundamental en la automatización de
procesos.
Algunos Protocolos de buses de terreno son, CAN (Controller area network),
WorldFIP (Factory instrumentation protocol), Interbus-S, Profibus-FMS
(Filedbus Message specification)/PA (Process Automation), Profibus-DP
(Decentralised Peripherie), ARNET (Attached Resource Computer Network),
LON (Local Operating Network), Bitbus, SERCOS (Serial Time Communication
System), JBUS, Modbus[VAR01] [TUM01][FBO01]. Cada uno de estos posee
sus propias características entre ellas se pueden encontrar la detección y
corrección de errores, mecanismos de difusión, manejo de prioridades y otras.
De igual forma permiten la utilización de diferentes topologías como la de
anillo, de bus, de árbol, de estrella o de línea [RES99].
3. SCADA´s (Supervisory Control And Data Adquisition)
Existe también un tipo especial de programas que sirven para efectuar
funciones de adquisición de datos control y supervisión sobre los PLC´s y su
nombre en el mercado es SCADA, sigla que al traducirse al español significan
supervisión control y adquisición de datos[BCO01].
3.1 Funcionamiento de un SCADA
Un sistema SCADA permite al operador supervisar el funcionamiento de una
planta de trabajo. Este tipo de software también provee facilidades para el
control de la misma[ENE01]. Esto se consigue a través de la interface gráfica
que permite mostrar el sitio en pantalla como un grupo de imágenes o
ventanas, cada parte de la planta puede ser monitoreada y controlada por
medio de su propia ventana. La totalidad de la planta puede ser controlable por
medio del uso de un SCADA, permitiendo la interacción manual al mismo tiempo
y brindando funciones como la de apagar toda la planta con solo presionar una
tecla.
Para propósitos de seguridad los SCADA ofrecen una restricción de acceso
controlada por contraseñas y restricción en comandos también controladas por
contraseñas que permiten manejar diferentes niveles de privilegio de usuarios.
Debido a que los SCADA pueden llegar a controlar todos los aspectos de la
planta, aquel o aquellos que lo manejen deben ser personal capacitado.
La mayoría de los sistemas SCADA proveen sistemas de alarmas que permite
controlar cualquier tipo de anomalía que suceda dentro de la planta. También se
pueden encontrar funcionalidades como la de poder guardar, ver y analizar
datos históricos.
En esta área de software de supervisión ya se han hecho importantes avances
a escala mundial, de hecho existen hoy por hoy un sin número de compañías que
desarrollan este tipo de aplicaciones y proveen al usuario a parte de las
funcionalidades mencionadas anteriormente que son comunes en la gran
mayoría de SCADA muchas otras como la compatibilidad con diferentes
tecnologías, tales como ODBC, OPC, ActiveX, OLE, COM, DCOM, etcétera. Y
muchas otras características que le pueden permitir hasta mandar mensajes a
través de Internet via SMS cuando una alarma se activa y notificar así al
encargado de la planta de tal suceso[ACT01].
3.2 Compañías productoras de SCADAS:
Una de las más importantes es USDATA [USD01], desarrolladora de Factory
Link, programa que provee a través de un esquema maestro esclavo una
interface con el operador, manejo y monitoreo de alarmas, manejo de datos
históricos en bases de datos como Oracle o SQL, generación de reportes,
monitoreo de procesos y capacidad de redundancia. Otra compañía también
muy importante es Advantech que desarrolla y distribuye Fix Driver. Software
que proporciona características similares al anterior[ADV01].
Además de las anteriores compañías existen otras que desarrollan software de
características similares y es necesario mencionarlas como Emation [EMA01]
que produce Wizfactory e Iconics que desarrolla Genesis[ICO01].
3.3 Ventajas de un SCADA
Permiten monitorear el desempeño de un sistema desde la aplicación a costos
muy bajos.
Los datos pueden ser recuperados remotamente y un operador puede controlar
un equipo mecánico hidráulico o neumático sin tener que visitar el sitio de
ubicación del mismo. Además los gerentes pueden supervisar el proceso desde
cualquier sitio.
Un operador de planta puede controlar el equipo a través de ventanas, en la
mayoría de casos tipo Windows que le brindan una interface gráfica y una serie
de comandos de control muy fáciles de recordar.
Las funciones de alarma pueden comunicar su condición a través de teléfonos,
beepers, radios u otros sistemas. Y permiten comunicarse con el software
remotamente para solucionar problemas sin tener que ir al sitio de ubicación de
la planta.
Estos sistemas proveen almacenamiento histórico de datos para comparación
con datos actuales y futuros.
Se pueden utilizar PC´s estándar para la interface hombre máquina.
La comunicación en red permite que esta se realice entre diferentes equipos
inclusive de diferentes fabricantes. Brindando flexibilidad en la compra de
nuevos equipos o la modificación y actualización de los actuales[GEN01].
4. Programación Concurrente
Es el nombre dado a notaciones de programación y técnicas para expresar
paralelismo potencial y resolver los problemas resultantes de sincronización y
de comunicación[SC101].
4.1 Necesidad de una programación concurrente
Existen varios aspectos en nuestro mundo inherentemente distribuido que
hacen necesaria la programación concurrente. En primera instancia es más fácil
modelar de una manera concurrente un sistema del mismo tipo, que hacerlo
encajar dentro del paradigma secuencial que de ninguna manera esquematiza el
comportamiento de ese sistema. También es necesario considerar que el
programar concurrentemente permite que los sistemas sean más fácilmente
escalables debido a la modularidad de su desarrollo y que también estos
pueden ser mucho más eficientes debido a que permiten la ejecución en
paralelo de múltiples instrucciones. La programación concurrente es usada para
modelar y simular sistemas físicos, inclusive si esos sistemas no están
controlados directamente por un computador. La simulación es una herramienta
importante en la optimización de sistemas físicos; la programación concurrente
brinda una forma natural de asignar segmentos del programa para representar
objetos físicos y por eso ayuda mucho a representar simulaciones.
Se piensa que la concurrencia como un tópico avanzado mucho más difícil que la
programación serial, por lo que necesita ser estudiado muy detenidamente y
muy ampliamente, sin embargo al estudiarla más a fondo podemos darnos
cuenta que esto no es verdad y podemos entonces percibir todas las ventajas
que esta nos ofrece[SC101].
4.2 Problemas implícitos en la programación concurrente
Al programar concurrentemente y por ello compartir recursos surgen algunos
problemas que necesitan ser resueltos para así aprovechar al máximo todas las
ventajas que la programación concurrente nos puede brindar.
Entre los problemas más importantes podemos mencionar algunos:
La ejecución de un de proceso que puedan afectar la información perteneciente
a otro proceso que se ejecuta en paralelo a menos que esté autorizado a
hacerlo (datos compartidos).
El abrazo mortal, que es el estado en el que dos transacciones se queden
bloqueadas cada una esperando por recursos que esta utilizando la otra.
Inanición: Estado al que llega una transacción cuando es seleccionada
repetidamente para abortar y así evitar un abrazo mortal.
Livelock: Estado en donde una transacción cambia continuamente de estado en
respuesta a cambios en otra transacción mientras la otra hace lo mismo, sin
conseguir ningún resultado con ello[SCH89].
4.3 Mecanismos de solución a problemas de la programación concurrente
Existen distintos formas para solucionar estos problemas partiendo de
mecanismos de bajo nivel como semáforos que como obliga a los procesos a
ponerse en cola y así evitar problemas con memoria compartida. Mecanismos
de envío de mensajes para el mismo propósito. Hasta mecanismos de más alto
nivel como monitores que proveen ciertas operaciones internas que deben ser
llamadas para poder modificar los datos asegurando así el control sobre los
mismos.
Se pueden nombran hablar también de mecanismos de sincronización como el
rendez vouz donde un proceso no escribe hasta que el otro este listo para
leer[BAR95].
4.4 Metodología de diseño de sistemas concurrentes
Cuando se piensa en utilizar la programación concurrente como herramienta de
desarrollo es preciso hablar primero de la metodología de diseño de sistemas
concurrentes y una en particular que es ampliamente usada y define los
siguientes pasos[FLE95]:
Partición o Descomposición
El problema computacional se descompone en pequeñas tareas pequeñas que
forman las unidades de concurrencia ya sea relacionando su nivel de
interacción o simplemente haciendo uso de alguna heurística conservando
siempre en mente la necesidad de eliminar redundancia en procesamiento y
almacenamiento.
Coordinación
Esto paso define la incorporación de mecanismos que permitan la comunicación
y sincronización de tareas que se puede realizar usando el paso de mensajes o
la memoria compartida. Tratando siempre de garantizar que todas las tareas
tengan aproximadamente el mismo número de comunicaciones, que cada tarea
se comunica sólo con un pequeño número de vecinos y que estas operaciones de
comunicaciones puedan realizarse de forma simultanea
Aglomeración o Asignación
En este paso, las tareas se agrupan basadas en procesos para optimizar el
rendimiento, reducir costes de desarrollo y garantizar la flexibilidad y
escalabilidad.
Proyección
En este último paso los procesos se asignan a los procesadores que haya
disponibles de forma que se minimice los costos de comunicación y al mismo
tiempo se maximice el uso de esos procesadores, es decir que exista un buen
balance.
4.5 Lenguajes de programación concurrente
Dentro de los lenguajes para la programación concurrente vale la pena hablar
un poco de dos en especial por su gran importancia, estos son:
Ada
Uno de los pocos lenguajes que provee estructuras embebidas para
programación concurrente y provee herramientas para diseño de software de
seguridad crítica y proyectos grandes que requieran portabilidad y
mantenimiento. Por esta razón la mayoría de software para aviación esta
programado en Ada que también fue el primer lenguaje orientado a objetos
aceptado
mundialmente. El lenguaje lleva este nombre en honor a Ada Byron
que fue el primer programador del que se tiene registros, siendo este una
mujer e hija del poeta Lord
Byron [ARA].
Occam
Es un lenguaje de procesamiento paralelo diseñado por un equipo en INMOS en
conjunto con el diseño del procesador transputer, y basado en CSP. Este
lenguaje incorpora soporte para un grano muy fino, hilos de ejecución fáciles
de usar y un amplio soporte de ambientes multiprocesadores. Este puede ser
usado con sistemas de memoria compartida o distribuida, y es una buena opción
cuando se requiere corrección[WOT01].
4.6 Herramientas de especificación y verificación de sistemas
concurrentes
4.6.1 Redes de Petri
Es un modelo gráfico para describir sistemas concurrentes, se puede ver como
un grafo dirigido y bipartido donde las dos clases de vértices se denominan
lugares y transiciones, se permiten lados paralelos en estas redes. Al modelar
una red de Petri, los lugares representan condiciones, las transiciones
representan eventos y la presencia de por lo menos una ficha en un lugar
indica que la condición se cumple. En una red de Petri (P) es un lugar de entrada
para la transición T, si existe un lado dirigido que va desde el lugar P hasta la
transmisión T. De igual forma se define un lugar de salida. Si todo lugar de
entrada para una transmisión T tiene al menos una ficha, se dirá que T es
permitida. Una transición permitida que quita una ficha a cada lugar de entrada
y agrega una ficha a cada de salida se llama descarga.
Una marca M para una red de Petri esta viva si al empezar en M es posible
descargar cualquier transición dada a través de una sucesión adicional de
descarga, sin importar que la sucesión de descarga ya haya sucedido.
Una marca en una red de Petri es acotada si existe un entero positivo N que
tiene la propiedad de que en cualquier sucesión de descarga ningún lugar recibe
mas de N fichas. Ahora si una marca M esta acotada y en cualquier sucesión de
descarga ningún lugar recibe mas de una ficha, se dice que M es una marca
segura[UOK].
4.6.2 CSP (Communicating Sequential Processes)
Es una teoría matemática para especificar y verificar patrones de
comportamiento como abrazos mortales o Livelocks que se dan durante al
interacción de objetos concurrentes. Su semántica formal y composicional esta
completamente ligada con nuestra intuición natural sobre las formas en que las
cosas funcionan. Podemos ver el modelo como un grupo de componentes
organizados en una capa y comunicándose con otra capa de componentes a
través de canales unidireccionales. Este modelo nació debido a la necesidad de
encapsular la información de tal manera que esta permanezca correcta,
facilitar el diseño y poder detectar fallas antes de que estas ocurran. Entre
muchas de las ventajas que este modelo brindan esta su semántica sencilla y
por ende su facilidad de aplicar, sus kernel tan liviano mejorando así el
rendimiento de las máquinas y el que haya software del tipo de FDR que
permita verificar sí el modelo esta correcto o no.
El enfoque de sincronización que utiliza CSP es el de rende Vuez, que no
permite que un proceso escriba si al mismo tiempo el otro proceso esta
haciendo un leer y viceversa, como estas acciones en teoría se deben realizar
en paralelo estas deberían ser no bloqueantes[WOT01].
4.6.2.1 JCSP (Java communicating sequential processes)
Java también desarrolla su propia implementación basada en el álgebra de
CSP, orientada a la concurrencia de procesos. No se requiere conocimientos
avanzados en matemáticas para usar esta herramienta. Al contrario permite
una simplificación en el diseño que la concurrencia genera.
JCSP brinda la capacidad a través de bibliotecas completas de desarrollar
programas de funcionalidad compleja sobre capas de procesos de comunicación.
Con esta implementación el modelo CSP aparece soportado por las aplicaciones
multihilo de Java.
Los Procesos interactuan solamente a través de la primitivas de sincronización
de CSP como channels, CALL channels, timers, crews, barriers, buckets o otros
modos bien definidos de accesos a objetos pasivos. Dos procesos no invocan
procesos de si mismos. Estos procesos pueden corren en forma secuencial o
paralela.
Existen también en el mercado aplicaciones que nos permiten verificar
computacionalmente modelos especificados con CSP y una de las más
sobresalientes es FDR [UOK].
4.6.2.1 FDR (Failures-Divergence Refinement)
Permite la verificación de muchas de las propiedades de sistemas de estados
finitos y la investigación de sistemas que no pasan ese tipo de verificaciones.
Esta basado en la teoría de CSP. Fue desarrollado en la universidad de Oxford.
Su método de probar si una propiedad se cumple es el de probar el
refinamiento de un sistema de transición que captura la propiedad a través de
la máquina candidato.
También permite verificar el determinismo de una máquina de estados y esto
es usado primordialmente para corroborar propiedades de seguridad [FOS].
5. Conclusiones
Los PLC´s representan un gran avance en al industria de la automatización
industrial, pues con ellos se logra controlar procesos antes muy difíciles de
manejar.
Los SCADA´s brindan una serie de características que los hace necesarios en
una planta para supervisión de procesos que de otra manera serian muy
difíciles de seguir debido a su tamaño.
La programación concurrente facilita la implantación de aplicaciones escalables
y flexibles, debido a que permite modelar el mundo como realmente es.
Si bien esta trae consigo algunos problemas, existen mecanismos de control
para los mismos y al contrario existe hoy en día una gran cantidad de lenguajes
y aplicaciones que facilitan la implantación de aplicaciones a usando la
programación concurrente y otras que permiten la verificación de la misma.
6. Referencias
[AUT01] Página de Autómatas, "www.automatas.org" Septiembre 21 de
2001.
[USD01] Página de United States Data Corporation, “www.usdata.com”
Septiembre 21 de 2001.
[ADV01] Página de Advatech corporation, “www.advatech.com” Septiembre
21 de 2001
[SCH89] Schiper, Andre, Concurrent Programming, London : North Oxford
Academic, 1989
[ARA] Página de la asociación de recursos de Ada “www.adaic.com”
Noviembre 15 de 2001.
[FOS] Página de formal systems “www.formal.demon.co.uk”, Noviembre 23
de 2001.
[UOK] Página de la universidad de Kent “www.cs.ukc.ac.uk” Noviembre 25 de
2001.
[RES99] Réseaux de terrain, Edition HERMES Paris 1999
[IAI01]
Página
de
Industrial
Automation
“www.abpubs.demon.co.uk” Septiembre 21 de 2001.
INSIDER
[MAL99] Controladores lógicos y autómatas programables, segunda edición,
Enrique Maldonado, 1999.
[BAR95] Concurrent Programming, Alwyn Barry, 1995.
[FLE95] ML with concurrency: design analysis implementation, and
application, Flemming Nielson, 1995.
[GRA01] Página de Grafset “www.lurpa.ens-cachan.fr”, Noviembre 23 de
2001.
[EMA01] Página de Emation, “www.emation.com”, Noviembre 23 de 2001.
[ICO01] Página de Iconics “www.iconics.com”, Noviembre 23 de 2001.
[GEN01] Página de Garver engineers “www.garverinc.com”, Septiembre 12
de 2001.
[ENE01] Página de Energenecs “www.energenecs.com”, Septiembre 15 de
2001.
[BCO01] Página de Borde communications “www.neal-and-massy.com”,
Septiembre 10 de 2001.
[VAR01] Página de Varcol, Electrical services limited, “www.varcol.co.uk”,
Noviembre 15 de 2001.
[SIE01] Página de Siemens “www.ca.landisstaefa.com”, Diciembre 1 de 2001.
[ACT01] Página de Actron “www.actron.se”, Diciembre 1 de 2001.
[PLC01] Página de PLCS “www.plcs.net”, Diciembre 1 de 2001.
[UTP01] Página de la universidad tecnológica de panama “www.fim.utp.ac.pa”
Noviembre 20 de 2001.
[WOT01] Página de Parallel systems engineering, “wotug.ukc.ac.uk”,
Noviembre 20 de 2001
[SC101] On concurrent programming, Schneider Fred, 1997.
[TUM01] Página de la Universidad técnica de Munchen, “www.lpr.etechnik.tu-muenchen.de”, Septiembre 28 de 2001.
[FBO01] Página de la organización de Filedbus “www.fieldbus.org”, Octubre
25 de 2001.
[RED01] Página de Redeya “eya.swin.net” Noviembre 20 de 2001.
Descargar