Está en la página 1de 30

PLC BASADO EN GNU/LINUX

I. INTRODUCCIN AL PROYECTO

El presente trabajo es una investigacin del proyecto MAT-PLC, obviamente basado en Linux.
Es un proyecto licenciado en Junio de 2001 que busca construir un PLC trabajando sobre una PC y
NO sobre un PLC fsico.
Se aprovecha el hecho de contar con un sistema operativo que aporta modularidad (Linux) y
utilizar sus caractersticas para poder hacer un PLC bien modular.
El estado de desarrollo se encuentra en estado pre-alfa y estiman finalizarlo para junio de 2003.
El presente trabajo comenta los mdulos involucrados, los lenguajes sugeridos para su
programacin y el tipo de interfase de E/S soportado.

El proyecto de MAT es un esfuerzo de producir un Controlador Lgico Programable (PLC) de


licencia Linux GNU.
Los PLCs fueron desarrollados en los aos 60 para substituir los complejos circuitos elctricos de
relais, que fueran muy utilizados para control de mquinas en procesos de automatizacin
industrial.
Los programas PLCs son usados para definir una serie de acciones que una mquina deber
realizar. El PLC funciona leyendo seales de entrada de los dispositivos tales como sensores o
interruptores y, dependiendo de esos valores, devuelven salidas con valores encendido o apagado.
En su forma ms simple, un PLC substituye la lgica del relais. En vez de los dispositivos
mecnicos, tales como relais interconectados o contadores de tiempo, proporcionando la lgica
para la mquina, el PLC es un dispositivo encajado que realiza la misma funcin.
Dado que es programable, y esencialmente es una computadora, es ms flexible y ms fcil
cambiar que el cableado fsico de relais. Tambin es mucho ms pequeo que su equivalente del
relais. Puede tambin realizar aritmtica y otras funciones tales como servocontrol y mediciones
analgicas.
Las docenas de lneas de productos de idntica funcionalidad pero incompatibles entre ellos,
limitan a los clientes a la solucin propietaria de determinado vendedor. Linux propone una
alternativa de solucin con un sistema abierto
A.3. Introduccin al Linux

En 1991 Linus Torvals, estudiante de la Universidad de Helsinki, inici un proyecto


personal para hacer del sistema operativo Minix una rplica exacta del sistema operativo
Unix, que era un sistema propietario. Torvals quiso compartir su cdigo para que
cualquiera pudiera usarlo y contribuir a su desarrollo.

En un principio Linux se obtena en Internet exclusivamente, y era muy difcil ponerlo en


funcionamiento. Unos aos despus aparecieron las primeras agrupaciones de software,
ya compiladas y organizadas, para que los usuarios menos experimentados pudiesen
instalar este sistema. Desde aqu el crecimiento en numero de usuarios fue de manera
exponencial. Actualmente ya empieza a ser visto como una alternativa a los SO
comerciales.
A.4. Que es Linux ?

Linux es bsicamente un clon de Unix, lo que significa que Linux incorpora muchas de las
ventajas de Unix. La multitarea de Linux es totalmente preferente, es decir que permite
ejecutar varios programas a la vez de forma ininterrumpida. Otros sistemas, como
Windows 3.1 de Microsoft, tambin permiten ejecutar varios programas a la vez, pero
cuando se pasa de un programa a otro, el primero de ellos normalmente deja de
funcionar. Windows NT de Microsoft se parecen mas a Linux ya que permiten ejecutar
multitarea preferente. Con Linux se puede iniciar una transferencia de archivos, imprimir
un documento, copiar un disquete, utilizar un CD-Rom y activar un juego todo al mismo
tiempo.

Linux posee capacidad multiusuario, lo que significa que ms de una persona puede
conectarse y utilizar el sistema operativo al mismo tiempo.

Linux es un ncleo de un SO, pero para tener un SO completo hay que acompaarlo de
un montn de utilidades, dotarlo de una estructura de directorios, as como de ficheros de
configuracin y scripts (fichero que contiene instrucciones para el interprete de comandos)
para distintas tareas. Todos estos elementos juntos y bien organizadas se denominan
distribuciones. Estas distribuciones de Linux corren a cargo de distintas compaas (Red
Hat, Slackware, etc.), cada una de ellas con su propio paquete de programas, aunque
todas faciliten un ncleo de archivos que conformen una versin de Linux.

A.5. Caractersticas

El S.O. Linux se encarga de controlar y asignar los recursos fsicos del ordenador
(hardware) y de planificar tareas. Podemos establecer tres elementos principales dentro
de ste S.O.:

El ncleo del sistema operativo (kernel), el escaln ms bajo que realiza tareas tales
como el acceso a los dispositivos (terminales, discos, cintas...).

El intrprete de comandos (shell) es la interfase bsica que ofrece Linux de cara al


usuario. Adems de ejecutar otros programas, posee un lenguaje propio as como
numerosas caractersticas adicionales que se mencionan ms adelante.

Utilidades "de fabrica"; normalmente se trata de programas ejecutables que vienen junto
con el Sistema Operativo; algunas de ellas son:

Compiladores: C, assembler y en algunos casos C++.

Herramientas de edicin: Editores (vi,ex) , formateadores (troff) , filtros ...

Soporte de comunicaciones: Herramientas basadas en TCP/IP (telnet,ftp ...)

Programas de Administracin del Sistema (sysadm, sa, sam, va)


Utilidades diversas y juegos (stos ltimos se suele instalar aparte).

A. 6. Licencia GNU

IBM posee los derechos de OS/2, Microsoft los de MS-DOS y Windows, no sucede as
con los derechos de Linux. En primer lugar, Linux no es un programa de dominio pblico;
varios componentes de Linux tienen derechos de autor de distintas personas. Linux
Torvals conserva los derechos de autor del kernel bsico de Linux, estos han protegido
sus trabajos bajo la licencia GNU, esta licencia permite a los desarrolladores crear
programas para el pblico en gral. La premisa fundamental de GNU es aquella de
permitir a todos los usuarios acceso libre a los programas con la posibilidad de
modificarlos, si as se desea. La nica condicin impuesta es que no puede limitarse el
cdigo modificado, es decir que el resto de los usuarios tienen derecho tambin a utilizar
el nuevo cdigo.

El GNU Copyleft (GNU es un acrnimo compuesto de un juego de palabras: GNU No es


Unix y Copyleft es juego de palabras derivado de la palabra inglesa Copyright, ) o GPL
(General Public License Licencia Pblica General), permite a los creadores de
programas conservar sus derechos de autor, pero permitiendo el resto de los usuarios
la posibilidad de copiarlos, modificarlos y hasta venderlos. Sin embargo, al hacerlo, no
pueden limitar ningn derecho similar a los que compren el programa. Si se vende el
programa tal y como est o una modificacin del mismo, el usuario debe facilitar adems
el cdigo fuente. Por ello, cualquier versin de Linux incorpora siempre el cdigo fuente
del mismo.

Seccin B - Funcionalidad

B.1. Requisitos del sistema

Tal como un sistema bsico de Linux, la compilacin y el funcionamiento del sistema de


MatPLC requiere algunos paquetes adicionales.

Para compilar y para funcionar el MatPLC, se necesitar GCC(compilador de C), libtool, lo


hace y los otros paquetes generalmente implicados en la compilacin - los archivos de
jefe, los linkers, etc.

Adems, se necesitar casi ciertamente el paquete del desarrollo de las consola-


herramientas. El demo bsico depende de esto, y no es instalado generalmente por defecto.
B.2. Funcionamiento
El proyecto MAT es un estudio interesante como controlador embebido. Comparndolo
con cualquier producto embebido, el MAT es mucho ms general.

Un PLC tiende a ser muy costos. El MAT, que funciona en una PC ser tambin una
solucin a costo ms competitivo.

Proveer una plataforma que permita compartir y reutilizar el cdigo, debe permitir levantar
la productividad de los abastecedores de las soluciones por lo menos en orden a la
magnitud, eliminando la prdida enorme por mantener centenares de soluciones
paralelas. Esto permitir a los integradores, a los consultores y a equipos internos
concentrar sus capacidades en la competencia. Una solucin libre, abierta tambin
beneficiar los educadores, que ensean el uso de Controladores y cmo trabajan.

Aunque el MatPLC se pens para emular un PLC estndar, tiene una arquitectura muy
diversa. Debe aprovecharse el hecho que funcionar sobre un sistema operativo hecho y
derecho (en este caso Linux), pero sobre todo porque se quiso que fuera altamente
modular para poder soportar mltiples partidas de desarrollo de cdigo simultneamente.

A diferencia de un PLC estndar, el MatPLC no necesariamente funciona en un bucle


infinito: leyendo las entradas, ejecutando la lgica, y actualizando las salidas. El MatPLC
se compone de mdulos autnomos que, por defecto, se ejecutarn en procesos
separados. Cada uno de estos mdulos est libre decidir si o no se ejecuta en un lazo
estndar del PLC.

La comunicacin entre los mdulos se hace a travs de una biblioteca comn de MatPLC
de rutinas (vase el cuadro 2), escrito en C y con los archivos de C disponibles. Estas
rutinas tienen acceso a dos reas de memoria comunes que juntas controlan el estado del
PLC y lo sincronizan usando semforos.

B.3. Modularidad
Es la llave para solucionar problemas grandes. Esto significa dividir el problema en
secciones (o los mdulos, los componentes, los bloques, etc) y solucionar cada seccin
por separado.

Un programa se pudo dividir a lo largo del flujo de proceso por el modo (manual,
automtico, etc); por los niveles (solo movimientos, movimientos compuestos, acciones,
tctica, estrategia); por el propsito (control, supervisando, mmi, etc); o de una cierta otra
manera que tiene sentido para el proyecto.

A menudo, una seccin sigue siendo demasiado grande para ser solucionada en una sola
pieza, as que se divide en subdivisiones de una manera similar.

La ventaja con modularidad - y la razn por la que es importante - es asegurarse de que


cada seccin hace un trabajo solo, bien definido. Debe obrar recprocamente con otras
secciones escasamente; una subdivisin debe obrar recprocamente solamente dentro de
la seccin, a menos que su propsito sea especficamente interaccin (en qu caso debe
hacer poco ). Obviamente, como todas las reglas, esto se puede romper en alguna
ocasin, pero no a menudo.

Seccin C - Interfases

C.1. Mdulos de Entrada/Salida

C.1.1. Opciones comunes de E/S

C.1.1.1. Introduccin

La mayora de los mdulos de E/S utilizan una sintaxis comn para registrar puntos fsicos
de E/S a los puntos MAT. Adems, cada mdulo de E/S puede tener configuracin
adicional.

C.1.1.2. Registro

El registro entre la E/S fsica y los puntos del PLC se especifica usando una tabla mapa.

El formato de cada lnea es:

map [inv | invert] {in | out} <io_addr> <matplc point>

inv o invert

Invierte el valor ledo/escrito a la E/S fsica, todos los bits se invierten.

In: Copia el estado de la E/S fsica al punto del matplc (es una entrada)

Out : Copia el estado del punto del matplc a la salida fsica (es una salida)

< io_addr >

Direccin de la E/S fsica. El formato de esta direccin depender del tipo de E/S fsica
con que se trabaje.

< matplc point>

El punto MAT al cual esta relacionada la E/S fsica .

C.1.1.3. Ejemplo
Por ejemplo, suponiendo que estamos utilizando el mdulo paralelo del puerto E/S.
Tenemos LEDs que se enciendan para arriba cuando la salida es baja, as que elegimos
invertir todas las salidas as que los LED se encendern para arriba cuando el punto del
PLC se fija a 1.

En la tabla mapa:

map inv out D.0 L1

map inv out D.1 L2

map inv out D.2 L3

map inv out D.3 L4

C.1.2. Entrada / Salida CIF

C.1.2.1. Introduccin

Este mdulo de MAT, junto con el mdulo correspondiente del kernel (driver de
dispositivo), interconecta con las tarjetas de E/S CIF.

Estas tarjetas soportan las siguientes redes y protocolos (en orden alfabtico): ASi,
CANopen, ControlNet, DeviceNet, Interbus, ModBus ms, PROFIBUS y Sercos. Hilscher
implementa el protocolo en su firmware. Usando esto como el interfaz al bs, tambien
podemos utilizar cdigo GPL capaz de dialogar con el firmware de la tarjeta y hacia afuera
a travs de la red.

C.1.2.2. La registracin

El < io_addr > del mapa posee un formato simple de un bit .

Los nmeros se pueden dar en el decimal (58) o en hexadecimal (0xA).

C.1.2.3. Configuracin

BoardID

La tarjeta BoardId del CIF. sta es la identificacin que el mdulo del kernel utiliza para
identificar la tarjeta que deseamos utilizar.

El mdulo del CIF del MatPLC no tiene acceso directamente a la tarjeta del CIF, lo hace a
traves del driver de la tarjeta. Cuando se carga este mdulo, encuentra cada tarjeta
basada PCI del CIF automticamente. Las tarjetas en el bs ISA tienen que ser
especificadas explcitamente en la lnea de comando cuando se carga el driver de
dispositivo. A cada tarjeta a que el driver de dispositivo puede tener acceso se le da un
nmero nico a partir del 0..3. Puesto que el kernel utiliza el driver de dispositivo para
controlar la tarjeta del CIF, necesita siempre el numero identificador.

DPMsize

El tamao del DPM (memoria de puerto dual), en kilobytes.

ste es el tamao del DPM en la tarjeta que el mdulo utilizar. Este parmetro no es
realmente muy importante, esto es bsicamente permitir que el modulo del CIF verifique
en tiempo de configuracin si cualquier punto del registro plc puede ser registrado fuera
de la imagen de proceso de la tarjeta. El tamao (en octetos) de cada imagen de proceso
depende del tamao de DPM (en kilobytes) y esta dada por: ((tamao DPM * 1024) -
1024)/2

En tiempo de ejecucion el mdulo verificar si la tarjeta que est utilizando realmente


tiene un DPM y su tamao.

Valor defecto 8. Otro valor posible puede ser 2 (kilobytes).

timeout

Timeout mximo al intentar tener acceso a la tarjeta del CIF. El valor esta dado en ms, un
0 significaria sin timeout. El defecto es 100 (ms).

C.1.3. Puerto paralelo E/S

C.1.3.1. Introduccin

El puerto paralelo tiene 17 bits de E/S, que pueden configurarse como entrada o como
salida. Hasta 12 se pueden configurar como salidas, y dependiendo del hardware y la
forma de acceso hasta los 17 puede ser configurados como entradas.

El puerto paralelo se puede acceder directamente o a travs del driver del kernel.

Los bits se impactan en tres registros, D, S y C. Registro D puede ser una entrada o
salida, S es siempre entrada. El registro de C suele ser una salida, pero puede ser
utilizado como entrada si el puerto es accedido directamente (no a travs del driver del
kernel) y si el hardware lo soporta, que vara entre los fabricantes. La direccin de estos
registros configurables se deduce del registro; o puede ser especificada directamente.

El formato de la columna < io_addr> para el mapa es R.x donde R es el registro (D, S o
C) y x es el nmero del bit. Los rangos de direccin validos se enumeran en la tabla.

Registro Rango Nmero Direccin Nota Pins


D D.0-d.7 8 output/input LS TTL 2-9
S S.3-s.7 5 entrada LS TTL 15/13/12/10/11
C C.0-c.3 4 generalmente salida Colector Abierto de 1/14/16/17
la TTL

Observar que mientras que algunos de los bits de S y C son invertidos por el hardware del
puerto paralelo, este mdulo re-invierte todos estos bits para presentar una interfase
coherente. Sin embargo, se pueden verificar todos los estados como salidas para evitar
acciones inesperadas durante el arranque.

C.1.3.2. Configuracin

io_addr

La direccin base del puerto paralelo. 0x378 es el defecto si no se especifica ningn


io_addr. Se puede usar 0x278 si la primera vez no trabaja correctamente.

Ejemplo: io_addr = 0x378

NOTA: Sin relacion a la columna <io_addr> del mapa.

dev_file

Si se prefiere usar el driver del kernel, entonces se especifica el archivo del dispositivo.

Ejemplo: = dev_file/dev/plc_parport0

NOTA: Si ambos mtodos antedichos se configuran, entonces el driver del kernel ser
utilizado. Si este mtodo falla entonces se levantara el modo de acceso directo utilizando
la direccin especificada.

Ddir

Define la direccin { entrada | salida } que el registro D debe utilizar. Si se omite esto, ser
deducido automticamente del registro.

Ejemplo: Ddir = out

Cdir

Define la direccin { entrada | salida } que el registro C debe utilizar. Si se omite esto, ser
deducido automticamente del registro.

Ejemplo: Cdir = in

El registro S es siempre una entrada y su direccin no es configurable.

C.1.4. Log de Datos

C.1.4.1. Introduccin

Existen dos mdulos de log mat/io/logger y mat/io/logger_db


Logger utiliza texto plano.

Logger_db utiliza una base de datos MYSQL .

C.1.4.2. Configuracin del mdulo de Log

Opciones de la configuracin que necesitan ser fijadas para utilizar un mdulo de log:

file = nombre de fichero

points nombre1 nombre2...

scan_period = sec

Ejemplo:

[ Logger ]

file = chaser.log

points L1 L2

points L3 L4

scan_period = 0.25

C.1.4.3. Configuracin del mdulo de Logger_db

Opciones de la configuracin que necesitan ser fijadas para utilizar un mdulo del
logger_db:

host = host name

user = user name

password = password

#port_num = port#

#socket_name = socket name

db_name = database name

table = table name


points pointname1 pointname2 ...

scan_period = sec

Ejemplo:

[LOGGER_DB]
host = localhost

user = matuser

password = mat

#port_num = 0

#socket_name =

db_name = matlog

table = demolog

points L1 L2

points L3 L4

C.1.5. Otros Mdulos de Entrada / Salida

Tarjetas 8255

Modbus

Conexin UDP

C.2. Mdulos personalizados

C.2.1. Introduccin

La mayora de las veces, una combinacin de los mdulos existentes (genricos y/o
especficos) satisfar los requisitos de un proyecto. Sin embargo, a veces solamente un
mdulo personalizado lo har. Aqu se analizara rpidamente como realizar un modulo
personalizado.

Los mdulos personalizados se pueden escribir en varios idiomas. Caen en dos amplios
grupos, C y el resto.

C.2.1.1. Lenguaje C
C es el recomendado porque es la lengua nativa del MatPLC. Como tal, permite el acceso
a 100% de la funcionalidad tan pronto como aparezca en el MatPLC, y es un poco ms
eficiente (aunque con las computadoras actuales esto no es tan importante).

C.2.1.2. El resto de los lenguajes

La escritura C es un trabajo del especialista, y es a veces mejor escribir en una lengua


ms amigable tal como python (clase de BASIC semejante o de VB pero de cerca de
tres dcadas ms moderno). Si se est utilizando ya uno de estos lenguajes en otra parte
del proyecto, este puede conectarse directamente desde all con el MatPLC sin la
utilizacin de un intermediario.

Otro propsito de esta seccin es explicar algo de los funcionamientos de los mdulos
genricos y especficos provistos. Los mdulos provistos del MatPLC funcionan
exactamente de la misma manera que los mdulos de encargo. Todos se escriben
actualmente en C nativa .

C.2.2. Mdulos personalizados - Python

C.2.2.1. Introduccin

La lengua de Python fue diseada para alcanzar alta performance y poseer una sintaxis
muy clara. Tiene caractersticas modernas como modularidad, OO, tratamiento de
excepciones, tipos de datos dinmicos.

C.2.2.2. Instalacin en python

La extensin del python debe ser instalada antes de que pueda ser utilizada.

cambiar al directorio de lang/python

opcional ./setup.py

como root: el /setup.py install

Si no se tiene la librera compartida de MatPLC instalada en el lugar se debera generar la


variable de entorno LD_LIBRARY_PATH para sealar al directorio de MatPLC lib/.libs antes
de comenzar el python o la escritura del python.

C.2.2.3. Ejemplo

import matplc

matplc.init("example")

foo = matplc.point("foo")

bar = matplc.point("bar")
es_out = matplc.point("es_out")

try:

while 1:

matplc.scan_beg()

matplc.update()

if foo.get():

bar.set(1)

else:

bar.set(0)

matplc.update()

matplc.scan_end()

finally:

es_out.set(1)

matplc.update()

Matplc.done()

C.2.3. Mdulos de encargo - Tcl

C.2.3.1. Introduccin

La lengua del Tcl fue diseada para ser un lenguaje scripting simple. Salvando que se
tenga conocimiento en la misma o alguna otra razn especifica para utilizarla se
recomienda utilizar el python en lugar de otro.

C.2.3.2. Comandos y opciones

Aqu se describen los comandos del Tcl puestos en ejecucin por la extensin de
MatPLC; este asume un conocimiento de trabajo del Tcl que programa y la interfase de
programacin de la lengua de MatPLC C .

Se carga el mdulo con un explcito comando load, o con paquete requerido lplc.

El mdulo implementa un nuevo comando del Tcl en ejecucin, lplc, que tiene la forma:
lplc subcomando [opciones...]

Se ponen en ejecucin los subcomandos y las opciones siguientes:

lplc init [-module string] [-array arrayname] [--PLCoptions]

Se agregan al MatPLC en ejecucin. Debido a la naturaleza de la rutina del plc_init() en


MATPLC, esta llamada no retorna hasta que la inicializacin se realiza exitosamente .

El mdulo del defecto para las escrituras del Tcl es TCL. Esto se puede sobreescribir
con la opcin -module.

Si se especifica un nombre de array, el comando del init crea un array con el nombre
especificado de le siguiente manera:

nmero de puntos
Array(count)
nombre del punto en el ndice x (donde 0 <= x < contador)
Si el punto en el ndice x es invlido (es decir manejador valido== 0),
Array(x,
name) el nombre es INVLIDO (ste no debe suceder, pues los indices son
dictados por la configuracin.)

Las opciones del plc especificadas por la rutina del plc_init() se pueden pasar en la
lnea de comando tambin. Observar que esta lista incluye PLCmodule = cadena , otra
forma para sobreescribir el mdulo por defecto.

lplc hecho

Desconecta del MatPLC.

Lplc getpt [-nombre del punto]

Vuelve el valor actual del punto nombrado.

Genera un error del Tcl si el punto nombrado no puede ser alcanzado.

Nota: el comando getpt realiza un plc_update() y posteriormente un plc_get()

lplc setpt[-name pointname] [-value value]

Fija el punto nombrado al valor especificado.

Genera un error del Tcl si el punto nombrado no puede ser alcanzado

Nota: el comando setpt realiza un plc_set() y posteriormente un plc_update()

Lplc update [-array arrayname]


Actualiza la copia del mdulo de los datos de MatPLC.

Si se especifica un nombre de array, se completa de la siguiente forma:

array(x,
value) valor del punto en el ndice x

C.2.4. Mdulos personalizados en C

C.2.4.1. Un mdulo bsico

La estructura bsica debe ser la siguiente:

#include <plc.h>

int main(int argc,char *argv[])

plc_init("modulename",argc,argv);

/* initialization goes here */

while (1) {

plc_scan_beg();

plc_update();

/* body of loop goes here */

plc_update();

plc_scan_end();

C.2.4.2. Inicializacin

Una de las tareas principales que es necesario realizar aqu es crear las variables a todos
los puntos que el programa tendr acceso.

foo = plc_pt_by_name("foo");

bar = plc_pt_by_name("bar");
foo y bar se deben declarar como variables del tipo plc_pt_t. Para mayor seguridad,
se puede tambin comprobar que foo.valid y bar.valid sean diferentes a cero
despus de la inicializacin antedicha.

A travs del resto del programa, entonces se utilizarn las variables foo y bar para
referirse a esos dos puntos.

C.2.4.3. Cuerpo del loop

Las dos funciones ms importantes aqu:

plc_get(point)

lee el estado del punto

plc_set(point,value)

escribe el valor al punto

stos se utilizan para las bobinas y para los registros del nmero entero. Cuando est
utilizado para bobinas, 0 se interpreta como APAGADO y 1 como ENCENDIDO.

Cuando se est utilizando para los registros, el valor se trata como nmero entero de 32-
bit sin signo (MAT define el tipo u32 para este propsito). Puntos de menor tamao se
pueden tambin tratar como enteros sin signo - por ejemplo, un plc_get() en un punto 8-bit
devolver un nmero entre 0 y 255.

Es importante resaltar que para el plc_set() , es necesario que exista la relacin en


el archivo matplc.conf file.Si se intenta escribir un punto que no ha sido agregado los
cambios se perderan en el plc_update siguiente.

C.2.5. Referencia del Mapa Global de Memoria (gmm)

El mapa global (gmm) es el rea de datos comn para los usos del MatPLC. Contiene
todos los datos que son utilizados por todos los mdulos del MatPLC, incluyendo E/S
fsica, de bobinas internas, y de cualquier dato que se compartir entre los mdulos. Los
datos confidenciales se pueden todava mantener dentro del mdulo, pero si los datos no
estn en el mapa de memoria global, no van a estar disponibles para ningn otro motor de
la lgica, los mdulos de HMI, las herramientas de puesta a punto, etc.

Cada mdulo, al arrancar, adquiere una copia privada del mapa de memoria global.
Todas las funciones que realice el mismo se copian a este mapa de memoria privado que
entonces se sincroniza al mapa de memoria global con una llamada de la funcin en la
biblioteca compartida de la memoria. Esta sincronizacin es el semforo controlado, que
proporciona actualizaciones atmicas. Cuando el sistema funciona con un solo motor de
lgica, esto permite que el MatPLC imite el comportamiento de un PLC tradicional.
El administrador de memoria compartida (smm/smm-mgr) era el programa que
asignaba/desasignaba e inicializaba la memoria compartida . Actualmente esto puede
cambiar.

La biblioteca del gmm de MatPLC es la nica manera de tener acceso a la memoria


compartida. En la inicializacin, asigna un mapa privado y tambin una mscara del
mapa. La mscara se utiliza para determinar si un mdulo tiene permiso de escritura de
un punto de referencias particular. Si un mdulo intenta modificar un punto de referencias
al cual no tiene permisos de escritura el, los cambios se desechan durante la
actualizacin.

La biblioteca proporciona algunas funciones para el acceso al mapa global, y algunas


funciones, tipos y variables de menor jerarqua. Observar las distinciones entre la
memoria privada y global.

el plc_init() se utiliza para inicializar un mapa de memoria privado para


un mdulo. Esto se debe llamar una vez al principio del mdulo.

el plc_done() se utiliza para dar de baja la biblioteca y el mapa de


memoria privado para el mdulo. Este debe ser llamado si el mdulo sale
por cualquier razn.

plc_init() Limitacin: La funcin del plc_done() no es particularmente completa -


plc_done() debe cerrar el mdulo totalmente, y desasignar toda la memoria de modo
que el plc_init() se pudiera llamar otra vez. Esto no se hace
actualmente, una razon es por descuido y tambien porque la mayora de
los ejemplos son bucles infinitos y se sale inmediatamente despus de
llamar al plc_done().
plc_init(module_name, argc, argv); no en tiempo real (no se
verifica en el momento
plc_done(); que sucede la accin)

ste es el tipo de dato que define el punto.

El nico campo del plc_pt_t que es pblico es .valid field. Esto indica
si la variable del punto est inicializada correctamente. Diferente a cero
indica xito.
plc_pt_t
Los lenguajes que manejan excepciones tpicamente no tienen un campo
.validfield en el tipo correspondiente.

Las variables del punto se obtienen generalmente usando el


plc_pt_by_name() , el plc_subpt() o el plc_pt_null() de las funciones .
data_point del plc_pt_t;

plc_get() Permite la lectura del mapa de memoria privado. Observar que sta puede
no ser una representacin exacta de los datos en el mapa de memoria
global, pues se almacena como una instantanea de datos desde la ulitma
llamada pasada al plc_update() . Si es crtico que los datos ms
exactos estn actualizados, se debera llamar al plc_update() antes del
plc_get() . No hay restriccin a qu datos pueden ser leidos dentro el
mapa de memoria privado.
i=plc_get(data_point); en tiempo real; inmediato
(se tiene conocimiento del
Data_point es del tipo plc_pt_t , y se chequea suceso en el mismo
para asegurarse de que es una direccion privada momento en el que
vlida del mapa de memoria. sucede)

El valor devuelto es un entero sin signo de hasta


(actualmente) 32 bits, segn lo ledo en el mapa
privado en la localizacin tratada por el
data_point.

Permite la escritura del mapa de memoria privado. No hay restriccin a qu


se puede escribir al mapa de memoria privado. Sin embargo, cuando se
llama el plc_update(), cualquier cambio a los datos -sin permiso de
escritura- en el area de memoria compartida ser desechado. Esto da la
seguridad de que cualquier cambio realizado sera hecho solo por quien
posea los privilegios para tal. Los cambios realizados al mapa de memoria
privado no sern reflejados en el mapa de memoria global hasta que se
llama el plc_update. Si es crtico actualizar los cambios de los datos al
mapa de memoria global, se debera llamar al
Plc_set() plc_update() inmediatamente despus del plc_set() .
plc_set(data_point, value); en tiempo real; inmediato

data_point es del tipo plc_pt_t , y se chequea


para asegurarse de que es una direccion privada
vlida del mapa de memoria.

el valor es un entero sin signo de 32-bit. Este


valor se colocara en el data_point una vez
invocada la funcion.

Realiza la actualizacion de los cambios generados en el area de memoria


privada al area de memoria global. Si el mapa de memoria privado contiene
cambios a los datos para los cuales no se poseen permisos de escritura en
el mapa de memoria global, los cambios se desechan.Las actualizaciones
trabajan como un semforo controlado. Esto preve actualizaciones
atmicas del mapa de memoria global entre todos los mdulos.
plc_update()
Nota: Algunos de los demas lenguajes como por ejemplo el Tcl scripting ,
no tiene explcitamente esta funcin; en cambio, llaman al
plc_update() cada vez que un punto es modificado.
plc_update(); en tiempo real; puede
demorar el semforo
C.2.6. Config file (archivo plano de configuracin)

El archivo config es el mecanismo bsico para que el usuario especifique ajustes y


parmetros. Es imprescindible que todos los datos se encuentren aqui, o bien en un
archivo nombrado por el config. Es terminantemente inalterable; solamente el usuario
puede cambiar los valores en estos archivos.

Se divide en secciones: normalmente, cada modulo leera su correspondiente seccin. Sin


embargo, puede tambin leer otras secciones - por ejemplo, cada mdulo lee en la
seccin [ PLC ] las prioridades del semforo y la lista de puntos.

C.2.7. Un mdulo personalizado de E/S

Los mdulos del E/S son todos muy similares, a excepcin de la manera en que estos
acceden al hardware, y el formato que manejan de las direcciones de hardware de E/S
que se especifican en el archivo de configuracin. Existe una librera escrita de E/S que
utilizan los mdulos de E/S. Esta librera posee bsicamente todo lo que requiere un
mdulo del E/S (incluyendo la funcion main()), a excepcin de las funciones para tener
acceso al hardware e interpretar las direcciones de hardware especificadas en los config.

Esta se encuentra en /lib/io/io_hw.h.

C.3. Interfase a HMI


C.3.1 Introduccin al HMI
hmi_gtk.c es un interpretador HMI.

El principal propsito del interpretador HMI es construir un GUI (interfase grafica hacia el
usuario) para leer y escribir puntos en MatPLC

Glade es usado para construir la interfase.

C.3.2. Nombres del Widgets


Los widgets son conectados a los puntos del MatPLC para darles un nombre especial. El
camino ms facil para la construccin de los nombres es usando el widgetnamer wizard.

C.3.2.1. Usando el widgetnamer


Cuando el widgetnamer comienza, emitir un cuadro de dilogo. Se
completar con los siguientes detalles:

Point Los puntos a los cuales deben de ser conectados el widget.


Widget Normalmente, este ser 0. Si quiere mostrar varios widgets en el mismo
number punto, vos necesitas el nmero de ellos (0,1,2, etc)
Type El punto de un punto al cual se esta conectadando. Para rollos, este debe
ser booleano (on/off), para registros tenes que verificar que tipos son y
seleccionarlos apropiadamente. Todos los puntos usados por DSP son f32
(floating-point number).
Parameter Este tiene diferentes significados dependiendo de el tipo. Para instancias,
1 para el tipo boolenao sera el texto ON o una imagen.
Parameter Este tiene diferentes significados dependiendo de el tipo. Para instancias,
2 para el tipo boolenao sera el texto OFF o una imagen.

Una vez que se haya llenado, debe hacer un click en select. Las entradas pueden ser
limpiadas con el boton Clear.

C.3.2.2. Explicacin de los nombres widget.

El nombre son puestos de la siguiente forma:

_pointname[.number[.type][.parameter1[.parameter2]]]

El campo nmero es necesario porque todos los widgets en una ventana deben ser un
nicos. El tipo puede ser booleano i32, i16, i8, u32, u16, u8 or f32.

Ejemplo: _left.0.bool.on.off

Este puede ser el nombre de un LabelWidget que ser mostrado "on" o "off" dependiendo
del estado del punto llamado left en el MatPLC.

C.3.2.3. Clases de widgets (mdulos)


Los widgets que son actualmente soportados son:

Label (Output)

Soporta todos los tipos.

param1 = mensaje de ENCENDIDO.

param2 = mensaje de APAGADO.


Progress (Output)

Soporta flotante en un rango de 0.0 a 100.0.

GnomePixmap (Output)

Soporta tipo booleano

param1 = nombre de archivo grfico de ON (la extension .xpm es automaticamente


agregada)
param2 = nombre de archivo grfico OFF la extension .xpm es automaticamente
agregada)

ToggleButton (Input)

Soporta tipo booleano

Add Signal: toggled, Handler: update_value

Button (Input)

Soporta tipo booleano

Add signal: pressed, Handler: update_value

Add signal: released, Handler: reset_value

Entry (Input)

Soporta todos los tipos.

Add Signal: activate, Handler: update_value

C.3.2.4. Probabilidades y fines


En orden para las entradas de los widgets para el trabajo deben agregarse seales con
handler = update_value.

En orden para la habilitacin de las variables, deben ser asiganadas a el modulo en el


archivo matplc.conf . el modulo por defecto es el interpretador HMI hmi_gtk.

C.3.3. Juntando todo


La manera sugerida de construir un proyecto es crear un proyecto en hmi_gtk nombrado
glade. Entonces agregue una ventana del uso de Gnome encontrada en la gama de colores
de Gnome. Suprima las opciones indeseadas del men y las opciones toolbar. La opcin del
men exhibir alrededor automticamente crditos de este proyecto. Uno puede agregar
widgets a esta ventana y conectar widgets con el MatPLC siguiendo descrito previamente el
nombrar de la convencin.

Construir un proyecto de multi-ventanas uno puede agregar la ventana normal Widgets


encontrado en la gama de colores bsica de GTK+ de Glade. Para abrir este ventanas
adicionales que necesitamos ligar una seal de un botn, botn toolbar o la opcin del
men. Hay dos maneras de ligar ventanas a los widgets (es decir botn):

Una forma es utilizar los 10 nombres predefinidos para las ventanas dentro del intrprete de
HMI, window1 a window10, cada con una funcin predefinida run_window1 hasta
run_window10. Al abrir una ventana de una opcin solo hay una forma de llamarla, solo se
necesita agregar el correspondiente nombre del manejador a la opcin del men (es decir
tratante: run_window5). Esto limita el nmero de ventanas adicionales para llamar a las
opciones del men.

Hay una manera alternativa de llamar una ventana que se pueda utilizar por el otro
Widgets como el widget del botn. Este mtodo utiliza a tratante comn llamado
run_window, este tratante cuenta con un nombre de la ventana en el parmetro de los
datos de la seal. Este mtodo no impone un lmite ante el nmero de las ventanas que el
proyecto puede abrir. Uno poda tambin llamar las ventanas predefinidas de este los
widgets agregando al tratante de la ventana a la seal correspondiente

Ejemplo de conexin de un botn widget a la ventana.

En la solapa de las seales de la ventana escriba:

Signal: Clicked
Handler: run_window
Data: WindowName (This has to be the name of the window in Glade)

Despus tipee Agregar (Add)

Debido a preocupaciones del funcionamiento, hay una caracterstica en el programa que


permite solamente que una versin de cada ventana est abierta al mismo tiempo.

Cuando guarde el proyecto de glade que bajo el archivo de hmi_gtk.glade, este archivo es
lo que utiliza el intrprete funcionar el HMI grfico.

C.3.4. Advertencia:
Debido a un Bug en el glade 0,6,2 y versiones anteriores, el estado escalado GnomePixmap
no se guarda. Esto har * el archivo de la configuracin del glade soltar esta informacin
cada vez que se ahorra un cambio. En este demo la lnea siguiente fue insertada
manualmente para cada widget escalado: <scaled>True</scaled>

Este simple bug hace la correcin con imgenes escadas Gnomepixmap no muy comodas
Desde la versin0.6.3 este bug funciona correctamente, esta nueva versin se puede bajar
de: ftp://ftp.gnome.org/pub/GNOME/stable/sources/glade/glade-
0.6.3.tar.bz2 ftp://ftp.gnome.org/pub/GNOME/stable/sources/glade/glade-0.6.3.tar.gz

Libglade no reconoce el estado escalado tampoco, por lo tanto una solucin del interino fue
puesta en ejecucin en mdulo de hmi_gtk.c. La inconveniencia es que el nombre del
pixmap tiene que ser puesto en el nombre del widget usando el formato siguiente:
filename.ext_id

El widget se escala realmente al tamao del widget y de no usar los factores de


posicionamiento del GnomePixbuf.

El widget progressbar tambin tiene un problema similar pero con las gamas y los factores
de la barra del progreso, ste limita la flexibilidad de este widget para escalar la seal
entrante. Ahora es solamente posible exhibir un valor 0,0 a 100,0 usando este widget.

C.3.5. Ejemplos de pantallas HMI

Figura C.1.HMI Linux


Figura C.2. HMI Linux

C.4. Conclusin

El presente trabajo demuestra la importancia de utilizar PLC basados en Linux como


alternativa al uso de PLC comerciales.

A diferencia de otros proyectos basados en Linux se destaca MatPLC ya que no es un


desarrollo corporativo, con la ventaja de una personalizacin del producto. Esta
personalizacin de mdulos nuevos y existentes es alentada por los desarrolladores, para
contribuir al proyecto, quienes brindan las herramientas necesarias para tal fin siguiendo la
poltica open source.

Esto ltimo puede ser visto como una ventaja o una desventaja segn la capacidad
operativa de la empresa ya que el soporte brindado por el proyecto es a travs de
programadores free lance.

Otra ventaja importante es el hecho de trabajar con una PC reemplazando la CPU del PLC,
lo que significa una ms alta capacidad de procesamiento a menor costo y la posibilidad, a
partir de esto, de implementar varios motores de lgica de control simultneo.

C.5. Bibliografa
http://mat.sourceforge.net/

http://visual.sourceforge.net/

www.gnu.org

Seccin D - Anexos

D.1. Licencia GNU

D.1.1. Prembulo
Las licencias que cubren la mayor parte del software estn diseadas para quitarle a
usted la libertad de compartirlo y modificarlo. Por el contrario, la Licencia Pblica General
de GNU pretende garantizarle la libertad de compartir y modificar software libre, para
asegurar que el software es libre para todos sus usuarios. Esta Licencia Pblica General
se aplica a la mayor parte del software del la Free Software Foundation y a cualquier otro
programa si sus autores se comprometen a utilizarla. (Existe otro software de la Free
Software Foundation que est cubierto por la Licencia Pblica General de GNU para
Bibliotecas). Si quiere, tambin puede aplicarla a sus propios programas.

Cuando hablamos de software libre, estamos refirindonos a libertad, no a precio.


Nuestras Licencias Pblicas Generales estn diseadas para asegurarnos de que tenga
la libertad de distribuir copias de software libre (y cobrar por ese servicio si quiere), de que
reciba el cdigo fuente o que pueda conseguirlo si lo quiere, de que pueda modificar el
software o usar fragmentos de l en nuevos programas libres, y de que sepa que puede
hacer todas estas cosas.

Para proteger sus derechos necesitamos algunas restricciones que prohiban a cualquiera
negarle a usted estos derechos o pedirle que renuncie a ellos. Estas restricciones se
traducen en ciertas obligaciones que le afectan si distribuye copias del software, o si lo
modifica.

Por ejemplo, si distribuye copias de uno de estos programas, sea gratuitamente, o a


cambio de una contraprestacin, debe dar a los receptores todos los derechos que tiene.
Debe asegurarse de que ellos tambin reciben, o pueden conseguir, el cdigo fuente. Y
debe mostrarles estas condiciones de forma que conozcan sus derechos.

Protegemos sus derechos con la combinacin de dos medidas:

Ponemos el software bajo copyright y


le ofrecemos esta licencia, que le da permiso legal para copiar, distribuir y/o modificar el
software.

Tambin, para la proteccin de cada autor y la nuestra propia, queremos asegurarnos de


que todo el mundo comprende que no se proporciona ninguna garanta para este software
libre. Si el software se modifica por cualquiera y ste a su vez lo distribuye, queremos que
sus receptores sepan que lo que tienen no es el original, de forma que cualquier problema
introducido por otros no afecte a la reputacin de los autores originales.

Por ltimo, cualquier programa libre est constantemente amenazado por patentes sobre
el software. Queremos evitar el peligro de que los redistribuidores de un programa libre
obtengan patentes por su cuenta, convirtiendo de facto el programa en propietario. Para
evitar esto, hemos dejado claro que cualquier patente debe ser pedida para el uso libre de
cualquiera, o no ser pedida.

Los trminos exactos y las condiciones para la copia, distribucin y modificacin se


exponen a continuacin.

Trminos y condiciones para la copia, distribucin y modificacin

Esta Licencia se aplica a cualquier programa u otro tipo de trabajo que contenga una nota
colocada por el tenedor del copyright diciendo que puede ser distribuido bajo los trminos
de esta Licencia Pblica General. En adelante, Programa se referir a cualquier
programa o trabajo que cumpla esa condicin y trabajo basado en el Programa se
referir bien al Programa o a cualquier trabajo derivado de l segn la ley de copyright.
Esto es, un trabajo que contenga el programa o una procin de l, bien en forma literal o
con modificaciones y/o traducido en otro lenguaje. Por lo tanto, la traduccin est incluida
sin limitaciones en el trmino modificacin. Cada concesionario (licenciatario) ser
denominado usted.

Cualquier otra actividad que no sea la copia, distribucin o modificacin no est cubierta
por esta Licencia, est fuera de su mbito. El acto de ejecutar el Programa no est
restringido, y los resultados del Programa estn cubiertos nicamente si sus contenidos
constituyen un trabajo basado en el Programa, independientemente de haberlo producido
mediante la ejecucin del programa. El que esto se cumpla, depende de lo que haga el
programa.

Usted puede copiar y distribuir copias literales del cdigo fuente del Programa, segn lo
has recibido, en cualquier medio, supuesto que de forma adecuada y bien visible publique
en cada copia un anuncio de copyright adecuado y un repudio de garanta, mantenga
intactos todos los anuncios que se refieran a esta Licencia y a la ausencia de garanta, y
proporcione a cualquier otro receptor del programa una copia de esta Licencia junto con el
Programa.

Puede cobrar un precio por el acto fsico de transferir una copia, y puede, segn su libre
albedro, ofrecer garanta a cambio de unos honorarios.

Puede modificar su copia o copias del Programa o de cualquier porcin de l, formando


de esta manera un trabajo basado en el Programa, y copiar y distribuir esa modificacin o
trabajo bajo los trminos del apartado 1, antedicho, supuesto que adems cumpla las
siguientes condiciones:

Debe hacer que los ficheros modificados lleven anuncios prominentes indicando que los
ha cambiado y la fecha de cualquier cambio.

Debe hacer que cualquier trabajo que distribuya o publique y que en todo o en parte
contenga o sea derivado del Programa o de cualquier parte de l sea licenciada como un
todo, sin carga alguna, a todas las terceras partes y bajo los trminos de esta Licencia.

Si el programa modificado lee normalmente rdenes interactivamente cuando es


ejecutado, debe hacer que, cuando comience su ejecucin para ese uso interactivo de la
forma ms habitual, muestre o escriba un mensaje que incluya un anuncio de copyright y
un anuncio de que no se ofrece ninguna garanta (o por el contrario que s se ofrece
garanta) y que los usuarios pueden redistribuir el programa bajo estas condiciones, e
indicando al usuario cmo ver una copia de esta licencia. (Excepcin: si el propio
programa es interactivo pero normalmente no muestra ese anuncio, no se requiere que su
trabajo basado en el Programa muestre ningn anuncio).

Estos requisitos se aplican al trabajo modificado como un todo. Si partes identificables de


ese trabajo no son derivadas del Programa, y pueden, razonablemente, ser consideradas
trabajos independientes y separados por ellos mismos, entonces esta Licencia y sus
trminos no se aplican a esas partes cuando sean distribuidas como trabajos separados.
Pero cuando distribuya esas mismas secciones como partes de un todo que es un trabajo
basado en el Programa, la distribucin del todo debe ser segn los trminos de esta
licencia, cuyos permisos para otros licenciatarios se extienden al todo completo, y por lo
tanto a todas y cada una de sus partes, con independencia de quin la escribi.

Por lo tanto, no es la intencin de este apartado reclamar derechos o desafiar sus


derechos sobre trabajos escritos totalmente por usted mismo. El intento es ejercer el
derecho a controlar la distribucin de trabajos derivados o colectivos basados en el
Programa.

Adems, el simple hecho de reunir un trabajo no basado en el Programa con el Programa


(o con un trabajo basado en el Programa) en un volumen de almacenamiento o en un
medio de distribucin no hace que dicho trabajo entre dentro del mbito cubierto por esta
Licencia.

Puede copiar y distribuir el Programa (o un trabajo basado en l, segn se especifica en el


apartado 2, como cdigo objeto o en formato ejecutable segn los trminos de los
apartados 1 y 2, supuesto que adems cumpla una de las siguientes condiciones:

Acompaarlo con el cdigo fuente completo correspondiente, en formato electrnico, que


debe ser distribuido segn se especifica en los apartados 1 y 2 de esta Licencia en un
medio habitualmente utilizado para el intercambio de programas, o

Acompaarlo con una oferta por escrito, vlida durante al menos tres aos, de
proporcionar a cualquier tercera parte una copia completa en formato electrnico del
cdigo fuente correspondiente, a un coste no mayor que el de realizar fsicamente la
distribucin del fuente, que ser distribuido bajo las condiciones descritas en los
apartados 1 y 2 anteriores, en un medio habitualmente utilizado para el intercambio de
programas, o

Acompaarlo con la informacin que recibiste ofreciendo distribuir el cdigo fuente


correspondiente. (Esta opcin se permite slo para distribucin no comercial y slo si
usted recibi el programa como cdigo objeto o en formato ejecutable con tal oferta, de
acuerdo con el apartado b anterior).

Por cdigo fuente de un trabajo se entiende la forma preferida del trabajo cuando se le
hacen modificaciones. Para un trabajo ejecutable, se entiende por cdigo fuente completo
todo el cdigo fuente para todos los mdulos que contiene, ms cualquier fichero
asociado de definicin de interfaces, ms los guiones utilizados para controlar la
compilacin e instalacin del ejecutable. Como excepcin especial el cdigo fuente
distribuido no necesita incluir nada que sea distribuido normalmente (bien como fuente,
bien en forma binaria) con los componentes principales (compilador, kernel y similares)
del sistema operativo en el cual funciona el ejecutable, a no ser que el propio componente
acompae al ejecutable.

Si la distribucin del ejecutable o del cdigo objeto se hace mediante la oferta acceso
para copiarlo de un cierto lugar, entonces se considera la oferta de acceso para copiar el
cdigo fuente del mismo lugar como distribucin del cdigo fuente, incluso aunque
terceras partes no estn forzadas a copiar el fuente junto con el cdigo objeto.

No puede copiar, modificar, sublicenciar o distribuir el Programa excepto como prev


expresamente esta Licencia. Cualquier intento de copiar, modificar sublicenciar o distribuir
el Programa de otra forma es invlida, y har que cesen automticamente los derechos
que te proporciona esta Licencia. En cualquier caso, las partes que hayan recibido copias
o derechos de usted bajo esta Licencia no cesarn en sus derechos mientras esas partes
continen cumplindola.

No est obligado a aceptar esta licencia, ya que no la ha firmado. Sin embargo, no hay
hada ms que le proporcione permiso para modificar o distribuir el Programa o sus
trabajos derivados. Estas acciones estn prohibidas por la ley si no acepta esta Licencia.
Por lo tanto, si modifica o distribuye el Programa (o cualquier trabajo basado en el
Programa), est indicando que acepta esta Licencia para poder hacerlo, y todos sus
trminos y condiciones para copiar, distribuir o modificar el Programa o trabajos basados
en l.

Cada vez que redistribuya el Programa (o cualquier trabajo basado en el Programa), el


receptor recibe automticamente una licencia del licenciatario original para copiar,
distribuir o modificar el Programa, de forma sujeta a estos trminos y condiciones. No
puede imponer al receptor ninguna restriccin ms sobre el ejercicio de los derechos aqu
garantizados. No es usted responsable de hacer cumplir esta licencia por terceras partes.

Si como consecuencia de una resolucin judicial o de una alegacin de infraccin de


patente o por cualquier otra razn (no limitada a asuntos relacionados con patentes) se le
imponen condiciones (ya sea por mandato judicial, por acuerdo o por cualquier otra
causa) que contradigan las condiciones de esta Licencia, ello no le exime de cumplir las
condiciones de esta Licencia. Si no puede realizar distribuciones de forma que se
satisfagan simultneamente sus obligaciones bajo esta licencia y cualquier otra obligacin
pertinente entonces, como consecuencia, no puede distribuir el Programa de ninguna
forma. Por ejemplo, si una patente no permite la redistribucin libre de derechos de autor
del Programa por parte de todos aquellos que reciban copias directa o indirectamente a
travs de usted, entonces la nica forma en que podra satisfacer tanto esa condicin
como esta Licencia sera evitar completamente la distribucin del Programa.

Si cualquier porcin de este apartado se considera invlida o imposible de cumplir bajo


cualquier circunstancia particular ha de cumplirse el resto y la seccin por entero ha de
cumplirse en cualquier otra circunstancia.

No es el propsito de este apartado inducirle a infringir ninguna reivindicacin de patente


ni de ningn otro derecho de propiedad o impugnar la validez de ninguna de dichas
reivindicaciones. Este apartado tiene el nico propsito de proteger la integridad del
sistema de distribucin de software libre, que se realiza mediante prcticas de licencia
pblica. Mucha gente ha hecho contribuciones generosas a la gran variedad de software
distribuido mediante ese sistema con la confianza de que el sistema se aplicar
consistentemente. Ser el autor/donante quien decida si quiere distribuir software
mediante cualquier otro sistema y una licencia no puede imponer esa eleccin.

Este apartado pretende dejar completamente claro lo que se cree que es una
consecuencia del resto de esta Licencia.

Si la distribucin y/o uso de el Programa est restringida en ciertos pases, bien por
patentes o por interfaces bajo copyright, el tenedor del copyright que coloca este
Programa bajo esta Licencia puede aadir una limitacin explcita de distribucin
geogrfica excluyendo esos pases, de forma que la distribucin se permita slo en o
entre los pases no excluidos de esta manera. En ese caso, esta Licencia incorporar la
limitacin como si estuviese escrita en el cuerpo de esta Licencia.

La Free Software Foundation puede publicar versiones revisadas y/o nuevas de la


Licencia Pblica General de tiempo en tiempo. Dichas nuevas versiones sern similares
en espritu a la presente versin, pero pueden ser diferentes en detalles para considerar
nuevos problemas o situaciones.

Cada versin recibe un nmero de versin que la distingue de otras. Si el Programa


especifica un nmero de versin de esta Licencia que se refiere a ella y a cualquier
versin posterior, tienes la opcin de seguir los trminos y condiciones, bien de esa
versin, bien de cualquier versin posterior publicada por la Free Software Foundation. Si
el Programa no especifica un nmero de versin de esta Licencia, puedes escoger
cualquier versin publicada por la Free Software Foundation.

Si quiere incorporar partes del Programa en otros programas libres cuyas condiciones de
distribucin son diferentes, escribe al autor para pedirle permiso. Si el software tiene
copyright de la Free Software Foundation, escribe a la Free Software Foundation: algunas
veces hacemos excepciones en estos casos. Nuestra decisin estar guiada por el doble
objetivo de de preservar la libertad de todos los derivados de nuestro software libre y
promover el que se comparta y reutilice el software en general.

AUSENCIA DE GARANTA
Como el programa se licencia libre de cargas, no se ofrece ninguna garanta sobre el
programa, en todas la extensin permitida por la legislacin aplicable. Excepto cuando se
indique de otra forma por escrito, los tenedores del copyright y/u otras partes
proporcionan el programa tal cual, sin garanta de ninguna clase, bien expresa o
implcita, con inclusin, pero sin limitacin a las garantas mercantiles implcitas o a la
conveniencia para un propsito particular. Cualquier riesgo referente a la calidad y
prestaciones del programa es asumido por usted. Si se probase que el Programa es
defectuoso, asume el coste de cualquier servicio, reparacin o correccin.

En ningn caso, salvo que lo requiera la legislacin aplicable o haya sido acordado por
escrito, ningn tenedor del copyright ni ninguna otra parte que modifique y/o redistribuya
el Programa segn se permite en esta Licencia ser responsable ante usted por daos,
incluyendo cualquier dao general, especial, incidental o resultante producido por el uso o
la imposibilidad de uso del Programa (con inclusin, pero sin limitacin a la prdida de
datos o a la generacin incorrecta de datos o a prdidas sufridas por usted o por terceras
partes o a un fallo del Programa al funcionar en combinacin con cualquier otro
programa), incluso si dicho tenedor u otra parte ha sido advertido de la posibilidad de
dichos daos.

FIN DE TRMINOS Y CONDICIONES

D.2. Cmo aplicar estos trminos a sus


nuevos programas.
Si usted desarrolla un nuevo Programa, y quiere que sea del mayor uso posible para el
pblico en general, la mejor forma de conseguirlo es convirtindolo en software libre que
cualquiera pueda redistribuir y cambiar bajo estos trminos.

Para hacerlo, aada los siguientes anuncios al programa. Lo ms seguro es aadirlos al


principio de cada fichero fuente para transmitir lo ms efectivamente posible la ausencia
de garanta. Adems cada fichero debera tener al menos la lnea de copyright y un
indicador a dnde puede encontrarse el anuncio completo.

<una lnea para indicar el nombre del programa y una rpida idea de qu hace.>

Copyright (C) 19aa <nombre del autor>

Este programa es software libre. Puede redistribuirlo y/o modificarlo bajo los trminos de
la Licencia Pblica General de GNU segn es publicada por la Free Software Foundation,
bien de la versin 2 de dicha Licencia o bien (segn su eleccin) de cualquier versin
posterior.

Este programa se distribuye con la esperanza de que sea til, pero SIN NINGUNA
GARANTA, incluso sin la garanta MERCANTIL implcita o sin garantizar la
CONVENIENCIA PARA UN PROPSITO PARTICULAR. Vase la Licencia Pblica
General de GNU para ms detalles.
Debera haber recibido una copia de la Licencia Pblica General junto con este programa.
Si no ha sido as, escriba a la Free Software Foundation, Inc., en 675 Mass Ave,
Cambridge, MA 02139, EEUU.

Aada tambin informacin sobre cmo contactar con usted mediante correo electrnico y
postal.

Si el programa es interactivo, haga que muestre un pequeo anuncio como el siguiente,


cuando comienza a funcionar en modo interactivo:

Gnomovision versin 69, Copyright (C) 19aa nombre del autor

Gnomovision no ofrece ABSOLUTAMENTE NINGUNA GARANTA. Para ms detalles


escriba show w.

Los comandos hipotticos show w y show c deberan mostrar las partes adecuadas
de la Licencia Pblica General. Por supuesto, los comandos que use pueden llamarse de
cualquier otra manera. Podran incluso ser pulsaciones del ratn o elementos de un men
(lo que sea apropiado para su programa).

Tambin deberas conseguir que su empleador (si trabaja como programador) o tu


Universidad (si es el caso) firme un renuncia de copyright para el programa, si es
necesario. A continuacin se ofrece un ejemplo, altere los nombres segn sea
conveniente:

Yoyodyne, Inc. mediante este documento renuncia a cualquier inters de derechos de


copyright con respecto al programa Gnomovision (que hace pasadas a compiladores)
escrito por Pepe Programador.

<firma de Pepito Grillo>, 20 de diciembre de 1996

Pepito Grillo, Presidente de Asuntillos Varios.

Esta Licencia Pblica General no permite que incluya sus programas en programas
propietarios. Si su programa es una biblioteca de subrutinas, puede considerar ms til el
permitir el enlazado de aplicaciones propietarias con la biblioteca. Si este es el caso, use
la Licencia Pblica General de GNU para Bibliotecas en lugar de esta Licencia.

También podría gustarte