Beruflich Dokumente
Kultur Dokumente
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.
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...).
Utilidades "de fabrica"; normalmente se trata de programas ejecutables que vienen junto
con el Sistema Operativo; algunas de ellas son:
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.
Seccin B - Funcionalidad
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.
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.
Seccin C - Interfases
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.
inv o invert
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)
Direccin de la E/S fsica. El formato de esta direccin depender del tipo de E/S fsica
con que se trabaje.
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:
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
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
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
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.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.
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
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.
Cdir
Define la direccin { entrada | salida } que el registro C debe utilizar. Si se omite esto, ser
deducido automticamente del registro.
Ejemplo: Cdir = in
C.1.4.1. Introduccin
Opciones de la configuracin que necesitan ser fijadas para utilizar un mdulo de log:
scan_period = sec
Ejemplo:
[ Logger ]
file = chaser.log
points L1 L2
points L3 L4
scan_period = 0.25
Opciones de la configuracin que necesitan ser fijadas para utilizar un mdulo del
logger_db:
password = password
#port_num = port#
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
Tarjetas 8255
Modbus
Conexin UDP
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).
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.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.
La extensin del python debe ser instalada antes de que pueda ser utilizada.
opcional ./setup.py
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.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.
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...]
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
array(x,
value) valor del punto en el ndice x
#include <plc.h>
plc_init("modulename",argc,argv);
while (1) {
plc_scan_beg();
plc_update();
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.
plc_get(point)
plc_set(point,value)
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.
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.
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.
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)
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.
El principal propsito del interpretador HMI es construir un GUI (interfase grafica hacia el
usuario) para leer y escribir puntos en MatPLC
Una vez que se haya llenado, debe hacer un click en select. Las entradas pueden ser
limpiadas con el boton Clear.
_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.
Label (Output)
GnomePixmap (Output)
ToggleButton (Input)
Button (Input)
Entry (Input)
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
Signal: Clicked
Handler: run_window
Data: WindowName (This has to be the name of the window in Glade)
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 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.4. Conclusin
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.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.
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 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.
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.
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.
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
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 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.
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.
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.
<una lnea para indicar el nombre del programa y una rpida idea de qu hace.>
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.
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).
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.