You are on page 1of 16

LENGUAJES DE PROGRAMACION DE PLCS

1. PROGRAMA Y LENGUAJE DE PROGRAMACIN


Se puede definir un programa como un conjunto de instrucciones, rdenes y smbolos reconocibles por el PLC, a travs de su unidad de programacin, que le permiten ejecutar una secuencia de control deseada. l Lenguaje de Programacin en cambio, permite al usuario ingresar un programa de control en la memoria del PLC, usando una sinta!is establecida. "l igual como los PLCs se #an desarrollado y e!pandido, los lenguajes de programacin tambin se #an desarrollado con ellos. Los lenguajes de #oy en da tienen nuevas y m$s vers$tiles instrucciones y con mayor poder de computacin. Por ejemplo, los PLCs pueden transferir bloques de datos de una locali%acin de memoria a otra, mientras al mismo tiempo llevan cabo operaciones lgicas y matem$ticas en otro bloque. Como resultado de estas nuevas y e!pandidas instrucciones, los programas de control pueden a#ora manejar datos m$s f$cilmente. "dicionalmente a las nuevas instrucciones de programacin, el desarrollo de nuevos mdulos de entradas y salidas tambin #a obligado a incrementar las instrucciones e!istentes.

2. PROGRAMAS DE APLICACIN Y DEL SISTEMA


Los programas de aplicacin que crean los usuarios est$n orientados a ejecutar, a travs del controlador, tareas de automati%acin y control. Para ello, el usuario escribe el programa en el lenguaje de programacin que mejor se adapte a su trabajo y con el que sienta poseer un mejor dominio. n este punto es importante se&alar, que la mayora de fabricantes ofrecen una o dos alternativas de programacin para ingresar el programa, por lo que el usuario deber$ adaptarse a las disponibles. Por otro lado, el conjunto de programas que reali%an funciones operativas internas del controlador, incluyendo los traductores de lenguaje, reciben la denominacin de programas del sistema o soft'are del sistema. (n elemento importante de ste, es el sistema operativo, cuyos servicios incluyen el manejo de los dispositivos de entrada y salida del PLC, el almacenamiento de la informacin, el procesamiento de los programas del usuario, entre otras tareas. stos programas ya vienen escritos y est$n almacenados en una memoria )o vol$til dentro de la CP(, por lo tanto no se pierden ni alteran en caso de prdida de alimentacin al equipo. l usuario )o tiene acceso a ellos.

3. TIPOS DE LENGUAJES DE PROGRAMACIN DE PLCS


n la mayora de los casos, cada fabricante dise&a su propio soft'are de programacin, lo que significa que e!iste una gran variedad comparable con la cantidad de PLCs e!istentes en el mercado. )o obstante, e!isten tres tipos de lenguajes de programacin de PLCs como los m$s difundidos a nivel mundial* estos son+ , Lenguaje de contactos o Ladder , -iagrama de funciones , Lenguaje .ooleano /o lista de instrucciones0

s obvio que la gran diversidad de lenguajes de programacin da lugar a que cada fabricante tenga su propia representacin, originando cierta incomodidad al usuario cuando programa m$s de un PLC.

4. LA NORMA IEC 61131-3


La Comisin lectrotcnica 1nternacional /1 C0 desarroll el est$ndar 1 C 23343, en un esfuer%o para estandari%ar los Controladores Programables. (no de los objetivos del Comit fue crear un conjunto com5n de instrucciones que podra ser usado en todos los PLCs. "unque esta normativa alcan% el estado de est$ndar internacional en 3667, el esfuer%o para crear un PLC est$ndar global #a sido una tarea muy difcil debido a la diversidad de fabricantes de PLCs y a los problemas de incompatibilidad de programas entre marcas de PLCs. l est$ndar 1 C 23343 para controladores programables consiste de cinco partes, una de las cuales #ace referencia a los lenguajes de programacin y es referida como la 1 C 23343,4. l objetivo de desarrollar el est$ndar fue proponer un paradigma de programacin que contenga caractersticas para adaptarse a una gran variedad de aplicaciones de control, lo que eliminara las barreras de propiedad para el cliente y los costos de formacin asociados.

Princi !"#$ C!r!c%#r&$%ic!$ '# "! N(r)! IEC 61131-3


Las siguientes son algunas de las caractersticas principales de la norma+ 3. Soporte de m5ltiples lenguajes+ (no de los beneficios de la norma es que permite utili%ar varios lenguajes de programacin simult$neamente, lo que posibilita al desarrollador del programa usar el lenguaje m$s adecuado para cada tarea de control. 7. Cdigo reutili%able+ l algoritmo de control puede incluir entidades reutili%ables denominadas (nidades de 8rgani%acin del Programa /P8(s0, que incluyen funciones, bloques de funcin y programas. stos P8(s son reutili%ables dentro de un programa y se los puede almacenar en bibliotecas definidas por el usuario para importar a otros programas de control. 4. Soporte de .ibliotecas+ l est$ndar 1 C 23343 incluye una biblioteca de funciones y bloques de funcin pre,programadas. (n PLC compatible con 1 C soporta stas como una biblioteca de 9firm'are9, es decir, la biblioteca es pre,codificada en forma ejecutable en una memoria P:8; o <las# dentro del PLC. "dem$s, el fabricante puede suministrar bibliotecas de sus propias funciones. Los usuarios tambin pueden desarrollar sus propias bibliotecas con base a las bibliotecas del est$ndar 1 C o del fabricante. =. ;odelos de jecucin+ La construccin general de un algoritmo de control incluye el uso de 9tareas9, cada una de las cuales puede tener uno o m$s P8(s. (na tarea es una entidad de soft'are independientemente programable y puede ser asignada a un ciclo de ejecucin, puede ser controlada por eventos o activarse mediante funciones especficas del sistema, tal como al iniciarse el sistema.

L#n*+!,#$ '# Pr(*r!)!ci-n IEC


l est$ndar 1 C 23343,4 define dos lenguajes gr$ficos y dos lenguajes basados en te!to, para la programacin de PLCs. Los lenguajes gr$ficos utili%an smbolos para programar las instrucciones de control, mientras los lenguajes basados en te!to, usan cadenas de caracteres para programar las instrucciones. La 1 C 23343,4 define la norma para los tipos de datos, especifica los smbolos gr$ficos, la sem$ntica y la sinta!is para cada lenguaje de programacin.

, , ,

L#n*+!,#$ Gr./ic($ -iagrama Ladder /L-0 -iagrama de .loques de <uncin /<.-0 L#n*+!,#$ T#0%+!"#$ Lista de 1nstrucciones /1L0 >e!to structurado /S>0

"dicionalmente, el est$ndar 1 C 23343,4 incluye una forma de programacin orientada a objetos llamada S#1+#n%i!" 2+nc%i(n C3!r% 4S2C5. S<C es a menudo categori%ado como un lenguaje 1 C 23343,4, pero en algunos te!tos se lo considera como una estructura organi%acional que coordina o se complementa con los cuatro lenguajes de programacin antes indicados.

6. LENGUAJE LADDER 4LD5


l L"-- :, tambin denominado lenguaje de contactos o de escalera, es un lenguaje de programacin gr$fico muy popular dentro de los Controladores Lgicos Programables, debido a que est$ basado en los esquemas elctricos de control cl$sicos. -e este modo, con los conocimientos que todo tcnico elctrico posee, es muy f$cil adaptarse a la programacin mediante este lenguaje. Su principal ventaja es que los smbolos b$sicos est$n normali%ados y son empleados por todos los fabricantes.

E"#)#n%($ '# r(*r!)!ci-n

Para programar un PLC con L"-- :, adem$s de estar familiari%ado con las reglas de los circuitos de conmutacin, es necesario conocer cada uno de los elementos de que consta este lenguaje. n la siguiente tabla podemos observar los smbolos de los elementos b$sicos junto con sus respectivas descripciones. Smbolo )ombre -escripcin

Contacto Se activa cuando #ay un 3 lgico en el elemento que representa, esto es, una entrada /para captar informacin del proceso a )" controlar0, una variable interna o un bit de sistema.

Contacto Su funcin es similar al contacto )" anterior, pero en este caso da continuidad lgica cuando #ay un ? lgico en el elemento que )C representa. Se activa cuando la combinacin que #ay a su entrada /i%quierda0 .obina da un 3 lgico. Su activacin equivale a decir que est$ en 3 lgico. )" Suele representar elementos de salida, aunque a veces puede #acer el papel de variable interna. .obina Se activa cuando la combinacin que #ay a su entrada /i%quierda0 da un ? lgico. Su comportamiento es complementario al de la )C bobina )". .obina (na ve% activa /puesta a 30 no se puede desactivar si no es por su S > correspondiente bobina en : S >. Sirve para memori%ar la salida y es usada junto con la bobina : S >. .obina Permite desactivar /poner a ?0 una bobina S > previamente S > activada.

Pr(*r!)!ci-n

(na ve% conocidos los elementos que L"-- : proporciona para su programacin, resulta importante resaltar cmo se estructura un programa y cu$l es el orden de ejecucin. l siguiente esquema representa la estructura general de la distribucin de todo programa L"-- :, contactos a la i%quierda y bobinas u otros elementos de salida a la derec#a.
Marcha m Aux1 m Motor1 m Marcha m Aux1 m Motor2 m Aux1 m Motor1 m Motor2 m Aux1 m Motor1 m Motor2 m Motor2 m Motor1 m

l orden de ejecucin es generalmente de arriba #acia abajo y de i%quierda a derec#a, primero se e!amina el estado de los elementos de la i%quierda y luego las bobinas, de manera que al llegar a stas, el controlador determina el estado lgico de sus contactos.

6. DIAGRAMA DE 7LO8UES DE 2UNCIN 427D5


l diagrama de bloques de funcin es un lenguaje gr$fico que permite a los usuarios describir procedimientos complejos, por simplemente juntar funciones y bloques de funcin, similar a dibujar un diagrama de circuito lgico con la ayuda de un editor gr$fico. Las funciones son peque&as unidades de programa, reutili%ables, que forman los bloques fundamentales para la construccin de complejos programas de control industrial. Las funciones no poseen estados internos es decir, si los valores de las entradas son idnticos, el valor de la salida ser$ el mismo en todas las ejecuciones de la funcin. Por ejemplo, la suma de dos valores aportar$ en cada ejecucin el mismo resultado. (na funcin elemental se representar$ de forma gr$fica por medio de un marco con entradas y una salida. Las entradas se representar$n siempre a la i%quierda y la salida, siempre a la derec#a del marco. l nombre de la funcin, es decir, el tipo de funcin, se visuali%ar$ centrado dentro del marco. jemplo de funcin elemental+

Los bloques de funcin en cambio, son b$sicamente algoritmos que pueden almacenar los resultados de su operacin en una localidad de memoria dentro de su estructura de datos y calcular sus salidas usando el persistente estado interno y los argumentos de entrada. Si los valores de las entradas son idnticos, el valor de la salida ser$ distinto en cada ejecucin del bloque de funcin. Por ejemplo, en un contador se contar$ #acia delante el valor en la salida. jemplo de bloque de funcin

Las salidas lgicas no requieren incorporar una bobina de salida, ya que sta es representada por una variable asignada a la salida del bloque. La )orma 1 C 23343,4 incluye una gran cantidad de funciones y bloques de funcin est$ndares para llevar a cabo una gran variedad de aplicaciones de control. "dicionalmente, los fabricantes y usuarios pueden crear sus propios bloques de funcin.

l diagrama de bloques de funcin resulta especialmente cmodo de utili%ar, a tcnicos #abituados a trabajar con circuitos de puertas lgicas, ya que la simbologa usada en ambos casos es equivalente. jemplo de diagrama <.-+

9. LISTA DE INSTRUCCIONES 4IL5


l lenguaje @Lista de 1nstruccionesA /1L0 de la )orma 1 C 23343,4, es una forma de lenguaje .ooleano, que se compone de una secuencia de instrucciones. Cada instruccin comien%a en una nueva fila y se compone de+ , , , (n operador, en ocasiones, con un modificador* y en caso necesario, uno o m$s operandos.

1L es un lenguaje que se denomina orientado al acumulador, es decir, que cada instruccin utili%a o modifica el contenido actual del acumulador /un tipo de memoria intermedia interna0. La 1 C denomina a este acumulador 9:esultado9. Por esta ra%n, una lista de instrucciones debe comen%ar siempre con el operando L- /9Comando de carga en acumulador90.

jemplo de programa en 1L+

"ntes de cada instruccin se puede colocar una @;arcaA, que resulta necesaria cuando se programan saltos. -espus de cada instruccin se puede incluir un comentario entre parntesis o corc#etes.

:. LENGUAJE DE TE;TO ESTRUCTURADO 4ST5


>e!to estructurado /S>0 es un lenguaje de alto nivel que permite la programacin estructurada, lo que significa que muc#as tareas complejas pueden ser divididas en unidades m$s peque&as. st$ dise&ado para e!presar algoritmos con instrucciones complejas, no adecuadas para la descripcin en formato gr$fico.

1ncluye estructuras de c$lculo repetitivo y condicional, tales como+ <8:....>8, : P ">....()>1L* BC1L ....-8* 1<....>C ).... LS * C"S D8<D )-EC"S . "dem$s soporta operaciones .ooleanas /")-, 8:, etc.0 y una variedad de tipos de datos para acomodar los valores analgicos y digitales, tiempos, fec#as y otros datos. "l igual que L-, <.- e 1L, el lenguaje de te!to estructurado utili%a la definicin de variables para identificar entradas y salidas de dispositivos de campo y cualquier otra variable creada internamente. l lenguaje S> es una buena opcin para la implementacin de aplicaciones de inteligencia artificial, lgica difusa, toma de decisiones, etc. jemplo de programa en S>+

1< )ivel F /Consigna G 7H0 >C ) .ombaE3 +I ?* "larma +I 3* LS1< nivel J /Consigna ,7H0 >C ) "larma +I ?* .ombaE3 +I Start ")- :eleEtermico* )-1<* <. SE8UENTIAL 2UNCTION C=ART 4S2C5
l lenguaje S<C tiene su origen en el est$ndar francs K:"<C > / GRA2ica de Control de Etapas de Transicin0. S<C es un mtodo de programacin gr$fico, que representa las funciones de un sistema autom$tico secuencial como una secuencia de pasos y transiciones. S<C puede considerarse tambin como un lenguaje organi%acional para estructurar un programa en pasos bien definidos, para formar un algoritmo de control secuencial. n este caso, mientras el S<C define la arquitectura de los mdulos de soft'are y cmo ellos van a ser ejecutados, los otros cuatro lenguajes son utili%ados para codificar la accin lgica que ejercen las salidas, dentro de los mdulos a ser ejecutados en cada paso. l marco de programacin de S<C contiene tres principales elementos que organi%an el programa de control+ Pasos /etapas0, >ransiciones /condiciones0, y "cciones

P!$($
Cada paso del S<C comprende acciones que se ejecutan, dependiendo de si el paso est$ activo o inactivo. (n paso es activo cuando el flujo de control pasa de un paso al siguiente a travs de una transicin condicional. Si la condicin de la transicin se eval5a como @verdaderaA, el control pasa del paso actual, que se vuelve inactivo, al siguiente paso, que se convierte en activo.

Cada paso es un mdulo de control del programa que puede ser programado en el mismo S<C, mediante @"ction LualifiersA, o utili%ando cualquier otro lenguaje de programacin.

P!$( > Acci-n '# c(n%r(" !isten dos tipos de pasos+ l paso inicial y el paso regular. l paso inicial es activado la primera ve% que el programa S<C es ejecutado o como resultado de una operacin de re iniciali%acin. Solamente puede #aber un paso inicial en el programa S<C.

4!5 P!$( inici!"

4?5 P!$( r#*+"!r

Tr!n$ici(n#$
(na transicin puede ser una simple variable, cuyo valor puede ser puesto por una simple entrada digital. >ambin puede ser un mdulo de programa, editado en cualquier lenguaje 1 C, que finalmente eval5a una variable de transicin. n ambos casos, la variable de transicin debe ser tipo .ooleana. (na ve% que la variable de transicin es evaluada como @verdaderaA, el siguiente paso es activado y aquellos precedentes son desactivados.

Tr!n$ici(n#$ c(n#c%!'!$ ! !$($ #n +n S2C n la figura anterior, inicialmente el paso S3 est$ activo y tambin est$ activa la transicin >3. Cuando la variable de transicin >3 es evaluada como @verdaderaA, inmediatamente se desactiva el paso S3 y se activa el paso S7* a su ve%, >3 se pone inactiva y >7 est$ activa para ser evaluada.

-e esta forma, una funcin de control puede ser representada por un grupo de pasos y transiciones en la forma de un gr$fico, denominado @;apa Secuencial de <uncionesA o S<C.

Acci(n#$
Cada paso de un S<C representa un particular estado de una m$quina o un proceso. Cuando la condicin previa es cumplida, la transicin ocurre y una secuencia de acciones es iniciada para alcan%ar las condiciones del proceso definidas para dic#o paso. n la representacin gr$fica del S<C, sta es mostrada como una caja rectangular dentro de la cual las acciones correspondientes al paso aparecen indicadas. La caja rectangular contiene un clasificador /@qualifierA0 y el nombre de la accin que debe ser 5nico dentro del S<C. Los @qualifiersA definen cuando e!actamente, durante un paso, una accin debe ser iniciada. La lista de clasificadores normalmente usados en S<Cs se muestra en la siguiente tabla+ CLASI2ICADOR ) o )8) S : L SL -S SP DESCRIPCIN jecuta la accin cuando el paso est$ activo /Set0 Pone una accin activa y memori%ada. /:eset0 :einicia /pone en ?0 la accin memori%ada />ime Limited0 1nicia cuando se activa el paso y termina despus del tiempo dado, si el paso contin5a activo /Stored and >ime Limited0 1nicia cuando se activa el paso y termina despus del tiempo dado, aunque el paso se #aya desactivado. />ime Delayed0 1nicia despus de un tiempo dado y finali%a al desactivarse el paso. /Delayed and Stored00 1nicia despus de un tiempo dado /si el paso est$ activo0 y se mantiene a5n despus de desactivarse el paso. /Stored and >ime Delayed0 1nicia despus de un tiempo dado y se mantiene a5n despus de desactivarse el paso. "ccin Pulso, se ejecuta una sola ve% cuando el paso es activado

(na accin puede ser representada dentro del S<C, o si es compleja, en otra p$gina o diagrama. Cuando una accin es representada en otro parte del diagrama, su nombre es utili%ado para identificarla. (na accin puede ser usada en m$s de un paso, si sta requiere ser repetida en diferentes partes de un proceso. " menudo un paso no tiene acciones y simplemente espera para la pr!ima transicin* este caso se usa para llevar a cabo una funcin de retardo. Como en el caso de las transiciones, las acciones tambin pueden ser descritas usando cualquiera de los lenguajes 1 C. " continuacin y mediante diagramas de tiempo, se ilustra la operacin de los diferentes @"ction LualifiersA.

N @ N(n#
TR1 TR1 STEP 1 N ACTION A STEP 1

TR2

ACTION A TR2

S>R
STEP 1 TR2

4S#% > R#$#%5


STEP 1 S ACTION A ACTION A

TR2
STEP N TRn R ACTION A STEP N

TRn

L 4Ti)# Li)i%#'5
STEP 1 STEP 1 L t#5s T#5S ACTION A ACTION A

5s TR2

TR2

D 4Ti)# D#"!A#'5
TR1 STEP 1 D t#5s T#5S ACTION A ACTION A STEP 1

5s TR2

TR2

DS

4D#"!A#' !n' S%(r#'5


DS t#5s T#5S ACTION A STEP 1

STEP 1

5s
ACTION A

TR2

TR2
STEP N R T#5S ACTION A

STEP N

P 4P+"$#5
STEP 1 STEP N P T#5S ACTION A ACTION A

10

E$%r+c%+r!$ '# C(n%r("


S#c+#nci! Si) "#

n una secuencia o cadena simple e!iste un solo camino para el flujo del programa de control. n stas se repite consecutivamente el cambio de paso y transicin como secuencia.

E$%r+c%+r! '# +n S2C '# $i) "# $#c+#nci! S#c+#nci!$ A"%#rn!%iB!$

La bifurcacin alternativa ofrece la posibilidad de programar secuencias condicionadas en el flujo de control de la estructura del S<C. n las bifurcaciones alternativas seguir$n a un paso tantas transiciones por debajo de la lnea #ori%ontal como secuencias distintas e!istan. -e estas transiciones slo podr$ conmutar una. l resultado de las condiciones de transicin de aquellas transiciones que sigan a la bifurcacin alternativa determinar$ la ramificacin que se ejecute. Las transiciones de la bifurcacin se procesar$n de i%quierda a derec#a. Si se cumple una condicin de transicin ya no se procesar$n las transiciones restantes. Se activar$ la ramificacin con la transicin cumplida. -e esta forma resulta una prioridad de i%quierda a derec#a para las bifurcaciones. Si no conmuta ninguna de las transiciones, permanecer$ el paso que est$ activo en ese momento.

11

7i/+rc!ci-n !"%#rn!%iB! >odas las ramificaciones alternativas se deben unir en conjunto a travs de Conjunciones "lternativas o Saltos creando de nuevo una 5nica rama. Solamente permanecer$ activa una de estas derivaciones, la correspondiente a la primera condicin en la bifurcacin alternativa.

C(n,+nci-n ( +ni-n !"%#rn!%iB! S#c+#nci!$ Si)+"%!n#!$

n bifurcaciones simult$neas, la edicin se puede dividir en dos o m$s secuencias, que posteriormente ser$n procesadas simult$neamente. Slo es posible una transicin conjunta inmediatamente por encima de la lnea de sincroni%acin doble y #ori%ontal. >ras la activacin simultanea, las secuencias se ejecutan de manera independiente.

12

7i/+rc!ci-n $i)+"%!n#! La unin simult$nea une nuevamente dos o m$s derivaciones paralelas en una. Se eval5a la transicin despus de una unin simult$nea, solamente si se #an activado todos los pasos directos /previos0 de la transicin. Slo es posible una transicin conjunta inmediatamente por debajo de la lnea de sincroni%acin doble y #ori%ontal.

Uni-n '# $#c+#nci!$ $i)+"%!n#!$ S!"%($

l salto posibilita que el programa contin5e en otro lugar. Los saltos en una secuencia simult$nea #acia dentro o #acia fuera de una secuencia simult$nea no son posibles. n el caso de los saltos, se diferencia entre el salto de secuencia y el anillo o ciclo de la cadena. (n salto de la cadena es un caso especial de bifurcacin alternativa, en la que una o varias derivaciones no contienen ning5n paso. (n anillo de la cadena es tambin un caso especial de bifurcacin alternativa, en la que una o varias derivaciones se atribuyen a un paso predecesor.

13

4!5 S!"%( '# $#c+#nci!

4?5 S!"%( 3!ci! !%r.$ '# "! $#c+#nci!

1C. EJERCICIO DE PROGRAMACIN CON LOS 6 LENGUAJES


" manera de ejemplo se desarrolla el siguiente ejercicio utili%ando los cinco lenguajes de programacin 1 C. , ;ediante un Pulsador Start /)"0 se arranca un motor, que debe apagarse autom$ticamente despus de 3? segundos o manualmente mediante el pulsador Stop /)C0.

S("+ci-nD L!''#r 4LD5


Stop m Start m Motor m Kt1 m Motor m

Motor m T#10s

>8) 1) P> L >

Kt1 m

14

S("+ci-nD Di!*r!)! '# 7"(1+#$ '# 2+nci-n 427D5

8:,.88L Start m Motor m >8) Motor m T#10s 1) P> L > 1)3 1)7 L Stop m

")-,.88L 1)3 L 1)7 1)4 Motor m

S("+ci-nD T#0%( E$%r+c%+r!'( 4ST5


EAR >8)3+ >8)* ENDFEAR
-eclaracin del ;dulo de <uncin >8)3

>8)3 /1) +I ;otor, P> +I tM3?s0* Nt3 +I >8)3.L*

Llamada del ;dulo de <uncin

I2 /Start OR ;otor0 AND Stop AND NOT Nt3 T=EN ;otor +I 3* ELSE ;otor +I ?* ENDFI2G

1nstrucciones lgicas

S("+ci-nD Li$%! '# In$%r+cci(n#$ 4IL5


EAR >8)3+ >8)* ENDFEAR
-eclaracin del ;dulo de <uncin >8)3

CAL >8)3 /1) +I ;otor, P> +I tM3?s0* LD >8)3.L ST Nt3 LD Stop AND 4Start OR ;otor 5 ANDN Nt3 ST ;otor

Llamada del ;dulo de <uncin

1nstrucciones lgicas

15

S("+ci-nD M! ! S#c+#nci!" '# 2+nci(n#$ 4S2C5

INICIO
S%!r%

PASO 2

S M(%(r D H%1 4%J1C$5

H%1

IS%(

PASO 3 3
Inici(

M(%(r

P!$( 3

16

You might also like