Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Versin 6
D28065205B - 01/2008
2 / 186
D28065205B - 01/2008
NDICE
1 - INTRODUCCIN ............................................................................... 11
2 - ELEMENTOS DEL LENGUAJE VAL3 .............................................. 15
2.2
2.3
2.4
2.5
2.6
APLICACIONES .................................................................................................................... 17
2.1.1
Definicin.................................................................................................................... 17
2.1.2
Contenido predeterminado......................................................................................... 17
2.1.3
2.1.4
Parmetros de aplicacin........................................................................................... 17
2.1.4.1
2.1.4.2
PROGRAMAS........................................................................................................................ 18
2.2.1
Definicin.................................................................................................................... 18
2.2.2
Reentrada................................................................................................................... 18
2.2.3
Programa Start()......................................................................................................... 18
2.2.4
Programa Stop()......................................................................................................... 18
Definicin.................................................................................................................... 19
2.3.2
Tipos sencillos............................................................................................................ 19
2.3.3
Tipos estructurados.................................................................................................... 19
2.4.2
2.4.3
Conjunto de constantes.............................................................................................. 20
VARIABLES........................................................................................................................... 20
2.5.1
Definicin.................................................................................................................... 20
2.5.2
2.5.3
2.5.4
2.5.5
D28065205B - 01/2008
3 / 186
2.1
3 - TIPOS SENCILLOS........................................................................... 29
3.1
INSTRUCCIONES .................................................................................................................. 31
num tamao(variable) ..................................................................................................................... 31
num getData(string sNombreDatos, & variable) ............................................................................. 32
3.2
3.3
Definicin.................................................................................................................... 33
3.2.2
Operadores ................................................................................................................ 33
Definicin.................................................................................................................... 34
3.3.2
Operadores ................................................................................................................ 35
3.3.3
Instrucciones .............................................................................................................. 35
3.4
Definicin.................................................................................................................... 43
3.4.2
Operadores ................................................................................................................ 43
3.4.3
Instrucciones .............................................................................................................. 43
3.5
TIPO STRING......................................................................................................................... 48
3.5.1
Definicin.................................................................................................................... 48
3.5.2
Operadores ................................................................................................................ 48
3.5.3
Instrucciones .............................................................................................................. 48
4 / 186
D28065205B - 01/2008
3.6
TIPO DIO................................................................................................................................ 56
3.6.1
Definicin.................................................................................................................... 56
3.6.2
Operadores ................................................................................................................ 56
3.6.3
Instrucciones .............................................................................................................. 57
3.7
TIPO AIO................................................................................................................................ 59
3.7.1
Definicin.................................................................................................................... 59
3.7.2
Instrucciones .............................................................................................................. 59
3.8
Definicin.................................................................................................................... 61
3.8.2
Instrucciones .............................................................................................................. 62
4.2
INSTRUCCIONES.................................................................................................................. 67
5 - TAREAS............................................................................................. 77
5.1
DEFINICIN........................................................................................................................... 79
5.2
5.3
VISIBILIDAD .......................................................................................................................... 79
5.4
SECUENCIACIN ................................................................................................................. 80
5.5
D28065205B - 01/2008
5 / 186
5.6
ERROR DE CADENCIA......................................................................................................... 81
5.7
5.8
SINCRONIZACIN ................................................................................................................ 82
5.9
6 - BIBLIOTECAS................................................................................... 91
6.1
DEFINICIN ........................................................................................................................... 93
6.2
INTERFAZ .............................................................................................................................. 93
6.3
IDENTIFICADOR DE INTERFAZ........................................................................................... 93
6.4
CONTENIDO .......................................................................................................................... 93
6.5
CODIFICACIN ..................................................................................................................... 94
6.6
CARGA Y DESCARGA.......................................................................................................... 95
6.7
INSTRUCCIONES .................................................................................................................. 97
num identificante:libLoad(string sCamino) ..................................................................................... 97
num identificante:libLoad(string sCamino, string sContrasea) ..................................................... 97
num identificante:libSave(), num libSave() .................................................................................... 97
num libDelete(string sCamino) ....................................................................................................... 97
string identificante:libPath(), string libPath() ................................................................................. 98
bool libList(string sCamino, string& scontenido) ......................................................................... 98
bool identifier:libExist(string sNombreSmbolo) ............................................................................. 98
6 / 186
D28065205B - 01/2008
INTRODUCCIN.................................................................................................................. 108
8.2
Definicin.................................................................................................................. 108
8.2.2
8.2.3
8.3
Definicin.................................................................................................................. 113
8.3.2
8.3.3
8.3.4
8.4
Definicin.................................................................................................................. 120
8.4.2
8.4.3
8.4.4
num setFrame(point pOrigen, point pEjeOx, point pPlanoOxy, frame& fResult) .......................... 121
trsf position(frame tPlano, frame fMarca de referencia) ............................................................... 121
8.5
Definicin.................................................................................................................. 122
8.5.2
8.5.3
8.5.4
Definicin.................................................................................................................. 126
8.6.2
8.6.3
D28065205B - 01/2008
7 / 186
8.6
8.7
8.7.2
Definicin.................................................................................................................. 133
8.7.3
8.7.4
8.7.4.2
8.7.4.3
8.7.5
8.7.6
9.2
9.3
9.1.2
9.1.2.2
9.1.3
9.1.4
9.1.4.2
9.1.4.3
Principio.................................................................................................................... 150
9.2.2
9.2.3
Principio.................................................................................................................... 152
9.3.2
9.3.3
9.3.4
9.4
9.5
9.6
9.5.1
Definicin.................................................................................................................. 155
9.5.2
8 / 186
D28065205B - 01/2008
11 - ADJUNTO........................................................................................ 177
11.1 CDIGOS DE ERROR DE EJECUCIN............................................................................. 179
12 - ILUSTRACIN................................................................................. 181
13 - INDEX .............................................................................................. 183
D28065205B - 01/2008
9 / 186
10 / 186
D28065205B - 01/2008
Captulo 1 - Introduccin
CAPTULO 1
INTRODUCCIN
D28065205B - 01/2008
11 / 186
12 / 186
D28065205B - 01/2008
Captulo 1 - Introduccin
VAL3 es un lenguaje de programacin diseado para controlar Stubli robots en todo tipo de
aplicaciones.
El lenguaje VAL3 combina las caractersticas bsicas de un lenguaje informtico de alto nivel en tiempo
real estndar y de las funcionalidades especficas del control de una clula de robot industrial:
herramientas de control del robot
herramientas de modelizacin geomtrica
herramientas de control de entradas salidas
El presente manual de referencia explica las nociones indispensables para la programacin de un robot, y
detalla las instrucciones del lenguaje VAL3, clasificadas segn las siguientes categoras:
Cada instruccin, con su sintaxis, figura en el ndice general para facilitar su rpida consulta.
D28065205B - 01/2008
13 / 186
14 / 186
D28065205B - 01/2008
CAPTULO 2
D28065205B - 01/2008
15 / 186
16 / 186
D28065205B - 01/2008
2.1.
2.1.1.
APLICACIONES
DEFINICIN
Una aplicacin VAL3 es un paquete de software autnomo diseado para controlar robots y entradas/salidas
asociadas a un controlador.
Una aplicacin VAL3 est constituida por los siguientes elementos:
- un conjunto de programas: las instrucciones VAL3 que deben ejecutarse
- un conjunto de Variables globales: las variables utilizadas por todos los programas
- un conjunto de bibliotecas: las instrucciones y variables externas utilizadas por la aplicacin
Cuando una aplicacin est siendo ejecutada, contiene asimismo:
- un conjunto de tareas: los programas ejecutados en paralelo
2.1.2.
CONTENIDO PREDETERMINADO
Una aplicacin VAL3 siempre contiene los programas start() y stop(), un sistema de referencia (tipo
frame) world y una herramienta (tipo tool) flange.
En el momento de crearse, una aplicacin VAL3 contiene adems las instrucciones y datos del modelo
elegido.
Estos elementos se describen con mayor precisin en el captulo correspondiente a su tipo.
2.1.3.
Las instrucciones VAL3 no permiten manipular aplicaciones: La carga, descarga, puesta en marcha y
parada de las aplicaciones se hace nicamente a travs de la interfaz de usuario del MCP.
Cuando una aplicacin VAL3 est en funcionamiento, se ejecuta su programa start().
Una aplicacin VAL3 se para por s misma cuando se termina la ltima de sus tareas: entonces, se
ejecuta el programa stop(). Todas las tareas creadas por bibliotecas, si quedan, son destruidas en el
orden inverso de su creacin.
Si la parada de una aplicacin VAL3 se provoca desde la interfaz de usuario del MCP, la tarea de
arranque, si sta existe todava, se destruye inmediatamente. Se ejecuta despus del programa stop(), y,
a continuacin, todas las tareas de la aplicacin, si quedan por hacer, se destruyen en el orden inverso
del orden en que fueron creadas.
PARMETROS DE APLICACIN
Una aplicacin VAL3 puede ser configurada por los siguientes parmetros:
- la unidad de longitud
- cantidad de memoria de ejecucin
Estos parmetros no son accesibles con ayuda de una instruccin VAL3 y slo pueden modificarse en la
interfaz del usuario MCP o con la ayuda del editor SRS.
D28065205B - 01/2008
17 / 186
2.1.4.
2.2.
PROGRAMAS
2.2.1.
DEFINICIN
2.2.2.
REENTRADA
Los programas son reentrantes, lo que quiere decir que un programa puede iniciarse l mismo de manera
recursiva (instruccin call), o ser llamado simultneamente por varias tareas. Cada instancia de un
programa tiene sus propias variables locales y parmetros.
2.2.3.
PROGRAMA START()
El programa start() es el programa llamado cuando se ejecuta la aplicacin VAL3. No puede tener
parmetros.
Tpicamente, este programa incluye todas las operaciones requeridas para ejecutar la aplicacin:
inicializacin de las variables globales y de las salidas, creacin de las tareas de aplicacin, etc.
La aplicacin no se termina al final del programa start(), si continan ejecutndose otras tareas de
aplicacin.
Es posible iniciar el programa start() al interior de un programa (instruccin call) como cualquier otro
programa.
2.2.4.
PROGRAMA STOP()
El programa stop() es el programa llamado durante la parada de la aplicacin VAL3. No puede tener
parmetros.
En este programa se encontrarn especialmente todas las operaciones necesarias para terminar
propiamente la aplicacin: reactualizar las salidas y detener las tareas de la aplicacin, segn la
secuencia apropiada, etc.
El programa stop() puede llamarse desde un programa (instruccin call), de la misma manera que
cualquier otro programa, pero, el inicio del programa stop() no activa la parada de la aplicacin.
18 / 186
D28065205B - 01/2008
2.3.
2.3.1.
TIPOS DE DATOS
DEFINICIN
El tipo de una constante o de una variable VAL3 es una caracterstica que permite que el sistema controle
las instrucciones y programas a su disposicin.
Todas las constantes y variables VAL3 tienen un tipo. Esto permite un control inicial por el sistema en el
momento de editar un programa y, por lo tanto, la deteccin inmediata de ciertos errores de
programacin.
2.3.2.
TIPOS SENCILLOS
2.3.3.
TIPOS ESTRUCTURADOS
Un tipo estructurado es un tipo que rene varios datos caracterizados, los campos del tipo estructurado.
Los campos de tipo estructurado son accesibles individualmente por su nombre.
El lenguaje VAL3 soporta los siguientes tipos estructurados:
- el tipo trsf: para las transformaciones geomtricas cartesianas
- el tipo frame: para los planos geomtricos cartesianos
- el tipo tool: para las herramientas ajustadas en un robot
- el tipo point: para las posiciones cartesianas de una herramienta
- el tipo joint: para las posiciones articulares del robot
- el tipo config: para las configuraciones del robot
- el tipo mdesc: para los parmetros de desplazamiento del robot
2.4.
2.4.1.
INICIALIZACIN DE VARIABLES
VARIABLES DE TIPO SIMPLE
La sintaxis precisa para la inicializacin de una variable de tipo simple se especifica en el captulo de
descripcin de cada tipo simple. Todas las variables deben declararse en la seccin de los datos globales
o la seccin de los datos locales para poder utilizarse.
Ejemplo
En este ejemplo, bBool es una variable booleana, nPi una variable numrica y sCadena un variable de
cadena.
D28065205B - 01/2008
bBool = true
nPi = 3.141592653
sString = "esto es una cadena constante"
19 / 186
2.4.2.
El valor de un dato de tipo estructurado est definido por la secuencia de valores en estos campos. El
orden de la secuencia est especificado en el captulo que detalla cada tipo estructurado. Los smbolos {
} pueden utilizarse para indicar una estructura.
Ejemplo
En este ejemplo, p es una variable de punto y dummy un programa que utiliza un dato trsf y un dio como
parmetros.
p = {{100, -50, 200, 0, 0, 0}, {sfree, efree, wfree}}
call dummy({a+b, 2* c, 120, limit(c, 0, 90), 0, 0}, io:vlvula1)
2.4.3.
CONJUNTO DE CONSTANTES
Ejemplo
En este ejemplo, j es un cuadro de articulaciones de 5 elementos.
// Para los brazos de 6 ejes
j[0] = {0, 0, 0, 0, 0, 0}
j[1] = {90, 0, 90, 0, 0, 0}
j[2] = {-90, 0, 90, 0, 0, 0}
j[3] = {90, 0, 0, -90, 0, 0}
j[4] = {-90, 0, 0, -90, 0, 0}
2.5.
VARIABLES
2.5.1.
DEFINICIN
2.5.2.
20 / 186
D28065205B - 01/2008
2.5.3.
Los elementos de un cuadro son accesibles con un ndice entre los corchetes [ y ]. El ndice debe estar
comprendido entre 0 y (tamao-1), si no se genera un error de ejecucin.
Si ningn ndice est especificado, se utiliza el ndice 0: var[0] es equivalente a var.
Los campos de las variables de tipo estructurado son accesibles por un . seguido del nombre del campo.
Ejemplo
num a
num b[10]
trsf t
point p
a = 0
a[0] = 0
b[0] = 0
b = 0
b[5] = 5
b[5.13] = 7
//
//
//
//
//
//
b[-1] = 0
b[10] = 0
t = p.trsf
p.trsf.x = 100
// Inicializacin de t
// Inicializacin del campo x del campo trsf de la variable p
2.5.4.
Cuando se pasa un parmetro "por valor", el sistema crea una variable local y la inicializa con el valor de
la variable o de la expresin suministrada por el programa solicitante.
Las variables del programa solicitante utilizadas como parmetros "por valor" no cambian, aun si el
programa llamado modifica el valor del parmetro.
Un cuadro de datos no puede ser pasado por valor.
Ejemplo:
program dummy(num x)
begin
x=0
putln(x)
end
// muestra 0
// muestra 10
// muestra 0
// muestra 10: a no es modificado por dummy()
num a
a=10
putln(a)
call dummy(a)
putln(a)
D28065205B - 01/2008
21 / 186
2.5.5.
Cuando se pasa un parmetro "por referencia", el programa deja de trabajar sobre una copia del dato
pasada por el solicitante, hacindolo sobre el propio dato, al que sencillamente se cambia de nombre
localmente.
Las variables del programa solicitante utilizadas como parmetros "por referencia" cambian de valor en
cuanto el programa llamado modifica el valor del parmetro.
Puede utilizarse o modificarse todos los componentes de un conjunto pasados por referencia. Si se pasa
un elemento de un cuadro por referencia, este elemento y todos los elementos siguientes pueden ser
utilizados y modificados. En este caso, el parmetro se considera como un conjunto que se inicia con el
componente pasado por la llamada. La instruccin size() permite conocer el tamao efectivo de un
parmetro.
Cuando se pasa "por referencia" una constante o una expresin, una asignacin del parmetro
correspondiente no tendr efecto alguno: el parmetro conservar el valor de la constante o de la
expresin.
Ejemplo:
program dummy(num& x)
begin
x=0
putln(x)
end
// muestra 0
program element(num& x)
begin
x[3] = 0
putln(size(x))
end
// muestra 10
// muestra 0
// muestra 0: a es modificado por dummy()
num a
num b[10]
a=10
putln(a)
call dummy(a)
putln(a)
b[2] = 2
b[5] = 5
call element(b[2])
putln(b[5])
22 / 186
D28065205B - 01/2008
2.6.
Comentario //
Sintaxis
// <Cadena>
Funcin
Una lnea que comienza con // no se evala y la ejecucin contina en la lnea siguiente. No puede
utilizarse // en la mitad de una lnea; estos deben ser los primeros caracteres en la lnea.
Ejemplo
// Esto es un ejemplo de comentario
Funcin
Ejecuta el programa especificado con los parmetros especificados.
Ejemplo
// Llama los programas pick() y place() para i,j entre 1 y 10
for i = 1 to 10
for j = 1 to 10
call pick (i, j)
call place (i, j)
endFor
endFor
Funcin
Abandona inmediatamente el programa en curso. Si este programa ha sido iniciado por un call, la
ejecucin se reanuda en el programa solicitante despus del call. En caso contrario (si el programa es el
programa start() o el punto de lanzamiento de una tarea), la tarea en curso se termina. Un retorno se
efecta automticamente al final de un programa.
D28065205B - 01/2008
23 / 186
Instruccin de control if
Sintaxis
if <bool bCondicin>
<instrucciones>
S6.4 [elseIf <bool bCondicinAlterna1>
<instrucciones>]
../..
S6.4 [elseIf <bool bCondicinAlternaN>
<instrucciones>]
[else
<instrucciones>]
endIf
Funcin
La secuencia if...elseIf...else...endIf evala sucesivamente las expresiones booleanas marcadas por las
palabras clave if elseIf hasta que una expresin sea verdadera. Las instrucciones segn la expresin
booleana luego son evaluadas, hasta la siguiente palabra clave elseIf, else o endIf. El programa se
reanuda finalmente despus de la palabra clave endIf.
Si todas las expresiones booleanas sealadas por if o elseIf son falsas, se evalan las instrucciones
comprendidas entre las palabras clave else y endIf (si la palabra clave else est presente). El programa
se reanuda a continuacin despus de la palabra clave endIf.
No hay lmite al nmero de expresiones elseIf en una secuencia if...endIf.
Es
mejor
reemplazar
la
secuencia
if...elseIf...else...endIf
por
la
secuencia
switch...case...default...endSwitch cuando se prueban los distintos valores posibles de una misma
expresin.
Ejemplo
Este programa convierte un da escrito en un string (sDa) en un num (nDa).
Vase tambin
Instruccin de control switch
24 / 186
D28065205B - 01/2008
Funcin
Las instrucciones entre while y endWhile se ejecutan mientras que la expresin booleana Condicin sea
verdadera (true).
Si la expresin booleana Condicin no es verdadera en el momento de la primera evaluacin, las
instrucciones entre while y endWhile no se ejecutan.
Parmetro
bool bCondicin
Ejemplo
dio diLmpara
// Hace parpadear una seal mientras que el robot no est parado
diLmpara = false
while (isSettled()==false)
diLmpara = !diLmpara
// Invierte el valor de diLmpara: true false
delay(0.5)
// Espera s
endWhile
diLmpara = false
Funcin
Las instrucciones entre do y until se ejecutan hasta que la expresin booleana bCondicin sea
verdadera (true).
Las instrucciones entre do y until se ejecutan una vez si la expresin booleana bCondicin es verdadera
al hacerse su primera evaluacin.
Parmetro
bool bCondicin
num a
// Espera que se pulse la tecla Enter
do
a = get()
until (a == 270)
D28065205B - 01/2008
Ejemplo
25 / 186
Funcin
Las instrucciones entre for y endFor se ejecutan hasta que el nContador exceda el valor de nFin
especificado.
El nContador se inicializa mediante el valor nComienzo. Si nComienzo excede nFin las instrucciones
entre for y endFor no se ejecutan. Con cada interaccin, el nContador se incrementa por el valor nPaso,
y las instrucciones entre for y endFor se ejecutan de nuevo si el nContador no excede nFin.
Si nPaso es positivo, el nContador excede nFin si es estrictamente superior a nFin. Si nPaso es
negativo, el nContador excede nFin si es estrictamente inferior a nFin.
Parmetros
num nContador
num nComienzo
num nFin
[num nPaso]
Ejemplo
num i
joint jDest
jDest = {0,0,0,0,0,0}
// Hace girar el eje 1, 90 grados en -90 grados
for i = 90 to -90 step -10
jDest.j1 = i
movej(jDest, flange, mNomSpeed)
waitEndMove()
endFor
26 / 186
D28065205B - 01/2008
Funcin
La secuencia switch...case...default...endSwitch evala sucesivamente las expresiones indicadas por la
palabra clave case hasta que una expresin sea igual a la expresin inicial despus de la palabra clave
switch. Las instrucciones segn la expresin luego se evalan, hasta la palabra clave break. El programa
se reanuda finalmente despus de la palabra clave endSwitch.
Si ninguna expresin case es igual a la expresin switch inicial, se evalan las instrucciones
comprendidas entre las palabras clave default y endSwitch (si la palabra clave default est presente).
No hay lmite al nmero de expresiones case en una secuencia switch...endSwitch. Las expresiones
segn la palabra clave case deben ser del mismo tipo que las que siguen a la palabra clave switch.
La secuencia switch...case...default...endSwitch es muy similar a la secuencia if...elseIf...else...endIf.
S6.4 Acepta no solamente las expresiones booleanas, sino cualquier tipo de expresin que acepte al operador
estndar "is equal to""==".
Ejemplo
Este programa lee un num (nmen) correspondiente a un key strike y modifica un string s en
consecuencia.
nmen = get()
switch nmen
case 271
s = "men 1"
break
case 272
s = "men 2"
break
case 273, 274, 275, 276, 277, 278
s = "Men 3 en 8"
break
default
s = "esta tecla no est en el men"
break
endSwitch
Stubli Faverges 2008
D28065205B - 01/2008
27 / 186
nDa=3
break
case "Jueves"
nDa=4
break
case "Viernes"
nDa=5
break
default
// Fin de semana !
nDa=0
break
endIf
28 / 186
D28065205B - 01/2008
CAPTULO 3
TIPOS SENCILLOS
D28065205B - 01/2008
29 / 186
30 / 186
D28065205B - 01/2008
3.1.
INSTRUCCIONES
num tamao(variable)
Sintaxis
num tamao(<variable>)
Funcin
Devuelve el tamao de variable.
Si variable es un parmetro de programa pasado por referencia, el tamao depende del ndice
especificado al hacer el llamado de programa. Si el variable es un individual y no un conjunto, el tamao
ser 1.
Parmetro
variable
Ejemplo
// Muestra 10
// Muestra 4
num nMatriz[10]
program printSize(num& nparmetro)
begin
putln(size(nparmetro))
end
call printSize(nMatriz)
call printSize(nMatriz[6])
D28065205B - 01/2008
31 / 186
S6.4
Sintaxis
num getData(<string sNombreDatos>, <& variable>)
Funcin
Esta instruccin copia el valor de los datos, especificado por su nombre sNombreDatos, en la variable
especificada. Si los datos y la variable son cuadros, la instruccin getData copia todas las entradas del
cuadro hasta el final de uno de los cuadros. La instruccin devuelve el nmero de entradas copiadas en la
variable.
El nombre de los datos debe tener el siguiente formato: "library:name[index]", donde "library:" y "[index]"
son facultativos:
- "name" es el nombre del dato
- "library" es el nombre del identificante de librera donde se define el dato
- "index" es el valor numrico del ndice al cual acceder cuando el dato est en un cuadro
La instruccin devuelve un cdigo de error cuando los datos no se han podido copiar:
Valor devuelto
Descripcin
n>0
-1
El dato no existe
-2
-3
-4
Ejemplo
Este programa fusiona 2 cuadros de puntos pAcercamiento y pTrayectoria a partir de una librera
especificada por una cadena sParte para dar un cuadro local un nico pCamino.
i = getData(sParte+":pAcercamiento", pCamino)
if(i > 0)
nPuntos = i
i = getData(sParte+":pTrayectoria", pCamino[nPuntos])
if(i >0)
nPuntos=nPuntos+i
endIf
endIf
if (i<0)
putln("Missing data in part "+sParte)
endIf
32 / 186
D28065205B - 01/2008
3.2.
3.2.1.
TIPO BOOL
DEFINICIN
3.2.2.
OPERADORES
Para evitar confusiones entre los operadores = y ==, el operador = no est autorizado al interior de
expresiones VAL3 utilizadas como parmetro de instruccin.
D28065205B - 01/2008
33 / 186
3.3.
TIPO NUM
3.3.1.
DEFINICIN
// Muestra -1
// Muestra 1
Ejemplo
1
0.2
-3.141592653
34 / 186
D28065205B - 01/2008
3.3.2.
OPERADORES
Para evitar confusiones entre los operadores = y ==, el operador = no est autorizado al interior de
expresiones VAL3 utilizadas como parmetro de instruccin.
3.3.3.
INSTRUCCIONES
Funcin
Stubli Faverges 2008
Parmetro
num nAngulo
ngulo en grados
Ejemplo
putln(sin(30))
D28065205B - 01/2008
// muestra 0.5
35 / 186
Funcin
Retorna el seno inverso de nValor, en grados. El resultado est comprendido entre -90 y +90 grados.
Se genera un error de ejecucin si nValor es superior a 1 o inferior a -1.
Parmetro
num nValor
expresin numrica
Ejemplo
putln(asin(0.5))
// muestra 30
Funcin
Retorna el coseno de Angulo.
Parmetro
num nAngulo
ngulo en grados
Ejemplo
putln(cos(60))
// muestra 0.5
Funcin
Retorna el coseno inverso de nValor, en grados. El resultado est comprendido entre 0 y 180 grados.
Se genera un error de ejecucin si nValor es superior a 1 o inferior a -1.
Parmetro
num nValor
expresin numrica
Ejemplo
putln(acos(0.5))
36 / 186
// muestra 60
D28065205B - 01/2008
Funcin
Retorna la tangente de Angulo.
Parmetro
num nAngulo
ngulo en grados
Ejemplo
putln(tan(45))
// muestra 1.0
Funcin
Retorna la tangente inversa de nValor, en grados. El resultado est comprendido entre -90 y +90 grados.
Parmetro
num nValor
expresin numrica
Ejemplo
putln(atan(1))
// muestra 45
Funcin
Retorna el valor absoluto de nValor.
Parmetro
num nValor
expresin numrica
Ejemplo
// muestra 1
Stubli Faverges 2008
putln(sel(abs(45)==abs(-45),1,-1))
D28065205B - 01/2008
37 / 186
Funcin
Retorna la raz cuadrada de nValor.
Se genera un error de ejecucin si nValor es negativo.
Parmetro
num nValor
Expresin numrica
Ejemplo
putln(sqrt(9))
// muestra 3
Funcin
Regresa la exponencial de nValor.
Se genera un error de ejecucin si nValor es demasiado grande.
Parmetro
num nValor
Expresin numrica
Ejemplo
putln(exp(1))
// muestra 2.718282
Funcin
Ejemplo
Este programa calcula de 2 maneras distintas 5 a la potencia 7.
// Primera manera: instruccin power
nResult = power(5,7)
// Segunda manera: power(x,y)=exp(y*ln(x)) (con imprecisin numrica)
nResult = exp(7*ln(5))
38 / 186
D28065205B - 01/2008
Funcin
Retorna el logaritmo neperiano de nValor.
Se genera un error de ejecucin si nValor es negativo o nulo.
Parmetro
num nValor
Expresin numrica
Ejemplo
putln(ln(2.718281828))
// muestra 1
Funcin
Retorna el logaritmo decimal de nValor.
Se genera un error de ejecucin si nValor es negativo o nulo.
Parmetro
num nValor
Expresin numrica
Ejemplo
// muestra 1
putln(log(10))
D28065205B - 01/2008
39 / 186
Funcin
Retorna nValor redondeado al entero inmediatamente superior.
Parmetro
num nValor
Expresin numrica
Ejemplo
putln(roundUp(7.8))
putln(roundUp(-7.8))
// Muestra el valor 8
// Muestra el valor -7
Funcin
Retorna nValor redondeado al entero inmediatamente inferior.
Parmetro
num nValor
Expresin numrica
Ejemplo
putln(roundDown(7.8))
putln(roundDown(-7.8))
// Muestra el valor 7
// Muestra el valor -8
Funcin
Retorna nValor redondeado al entero ms cercano.
Parmetros
num nValor
Expresin numrica
Ejemplo
putln(round(7.8))
putln(round(-7.8))
40 / 186
// Muestra el valor 8
// Muestra el valor -8
D28065205B - 01/2008
Funcin
Retorna el mnimo de nX e nY.
Parmetros
num nX
Expresin numrica
num nY
Expresin numrica
Ejemplo
putln(min(-1,10))
// Muestra el valor -1
Funcin
Retorna el mximo de nX e nY.
Parmetros
num nX
Expresin numrica
num nY
Expresin numrica
Ejemplo
putln(max(-1,10))
// Muestra el valor 10
Funcin
Reenva nValor limitado por nMn y nMx.
num nValor
Expresin numrica
num nMn
Expresin numrica
num nMx
Expresin numrica
Parmetros
Ejemplo
putln(limit(30,-90,90))
putln(limit(100,90,-90))
putln(limit(-100,-90,90))
D28065205B - 01/2008
// Muestra 30
// Muestra 90
// Muestra -90
41 / 186
Funcin
Reenva nValor1 si Condicin es true, en caso contrario nValor2.
Parmetros
bool bCondicin
Expresin booleana
num nValor1
Expresin numrica
num nValor2
Expresin numrica
Ejemplo
putln(sel(bFlag,a,b))
// es equivalente a
if bFlag==true
putln(a)
else
putln(b)
endIf
42 / 186
D28065205B - 01/2008
3.4.
3.4.1.
Un campo de bits es un medio de almacenar e intercambiar bajo forma compacta una serie de bits
(valores booleanos o entradas/salidas numricas). VAL3 no da un tipo de datos especfico para
administrar los campos de bits pero reutiliza el tipo num para almacenar un campo de bits de 32 bits en
forma de un nmero entero positivo en el margen [0, 2^ 32].
Todo valor numrico de VAL3 puede considerarse como un campo de bits de 32 bits ; las instrucciones de
tratamiento del campo de bits redondean automticamente un valor numrico a un nmero entero positivo
de 32 bits, que es entonces tratado como un campo de bits de 32 bits.
3.4.2.
OPERADORES
Los operadores estndar del tipo num se aplican en un campo de bits: '=', '==', '!='.
3.4.3.
INSTRUCCIONES
Funcin
Esta instruccin reenva la operacin lgica binaria "y" sobre los dos campos de bits de 32 bits. (El i simo
bit del resultado se inicializa en 1 si los i simos bits de las dos entradas se inicializan en 1). Se obtiene
as un nmero entero positivo en el margen [0, 2^ 32].
Las entradas numricas primero se redondean a un nmero entero positivo en el margen [0, 2^ 32] antes
de que la operacin binaria se aplique.
Ejemplo
Este programa muestra un campo de bits nCampoBit de 32 bits en la pantalla probando sucesivamente
cada bit:
for i=31 to 0 step -1
// Calcular la mscara para el i simo bit
nMscara=power(2,i)
if (nCampoBit and nMscara)==nMscara
put("1")
else
put("0")
endIf
endFor
putln("")
S6.4
D28065205B - 01/2008
43 / 186
Funcin
Esta instruccin reenva la operacin lgica binaria "o" sobre los dos campos de bits de 32 bits. (El i simo
bit del resultado se inicializa en 1 si el i simo bit de al menos una entrada se inicializa en 1). Se obtiene
as un nmero entero positivo en el margen [0, 2^ 32].
Las entradas numricas primero se redondean a un nmero entero positivo en el margen [0, 2^ 32] antes
de que la operacin binaria se aplique.
Ejemplo
Este programa calcula de dos maneras diferentes una mscara de campo de bits en la cual se activa los i
simos a j simos bits.
// Primera manera: lgica 'or' sobre los bits i a j
nCampoBit=0
for k=i to j
nCampoBit=bOr(nCampoBit, power(2,k))
endFor
// Segunda manera: calcular una mscara de bits de (j-i) bits
nCampoBit=(power(2,j-i+1)-1)
// Desplazar luego la mscara de bits de i bits
nCampoBit=nCampoBit*power(2,i)
Funcin
Esta instruccin reenva la operacin lgica binaria "xor" (o exclusivo) a los dos campos de bits de 32 bits.
(El i simo bit del resultado se inicializa en 1 si los i simos bits de las dos entradas son diferentes). Se
obtiene as un nmero entero positivo en el margen [0, 2^ 32].
Las entradas numricas primero se redondean a un nmero entero positivo en el margen [0, 2^ 32] antes
de que la operacin binaria se aplique.
Ejemplo
44 / 186
D28065205B - 01/2008
Funcin
Esta instruccin reenva la operacin lgica binaria "no" (negacin) a un campo de bits de 32 bits. (El i
simo bit del resultado se inicializa en 1 si el i simo bit de la entrada est en 0). Se obtiene as un nmero
entero positivo en el margen [0, 2^ 32].
La entrada numrica se redondea primero a un nmero entero positivo en el margen [0, 2^ 32] antes de
que la operacin binaria se aplique.
Ejemplo
Este programa reinicializa los bits i a j de un campo de bits nCampoBit con la ayuda de una mscara
nMask.
// Calcular una mscara de bits con los bits i a j inicializados en 1 (ver el ejemplo bOr)
nMscara=(power(2,j-i+1)-1)*power(2,i)
// Invertir la mscara para que todos los bits estn en 1 excepto los bits i a j
nMscara=bNot(nMscara)
// Reinicializar los bits i a j con la ayuda de la operacin binaria 'and'
nCampoBit=bAnd(nCampoBit, nMscara)
D28065205B - 01/2008
45 / 186
Funcin
El propsito de las instrucciones toBinary/fromBinary es permitir el intercambio de valores numricos
entre dos dispositivos, utilizando una lnea serial o una conexin de red. Los valores numricos primero se
codifican en una corriente de bytes. Los bytes se envan entonces al dispositivo paritario. Finalmente el
dispositivo paritario descifra los bytes para recuperar los valores numricos iniciales. Diversas
codificaciones binarias de valores numricos son posibles.
La instruccin toBinary codifica valores numricos en una serie de bytes (campo de bits de 8-bits,
nmero entero positivo en el rango [0, 255]) segn lo especificado por el formato de datos
sFormatoDatos. El nmero de valores numricos nValor a codificar es proporcionado por el parmetro
nTamaoValor. El resultado se almacena en la serie nByteDatos, y la instruccin devuelve el nmero de
bytes codificados en esta serie.
Se genera un error de ejecucin si el nmero de valores a codificar nTamaoValor es mayor que el
tamao de nValor, si el formato especificado no es soportado o si la serie nByteDatos del resultado no
es lo bastante grande para codificar todos los datos de entrada.
La instruccin fromBinary decodifica una serie de bytes en valores numricos nValor, segn lo
especificado por el formato de datos sFormatoDatos. El nmero de bytes a decodificar es proporcionado
por el parmetro nTamaoDatos. El resultado se almacena en la serie nValor y la instruccin devuelve el
nmero de valores en esta serie. Si algunos datos binarios estn corrompidos (bytes fuera del rango [0,
255] o codificacin invlida de punto flotante), la instruccin devuelve el opuesto del nmero de valores
correctamente decodificados (valor negativo).
Se genera un error de ejecucin si el nmero de bytes a decodificar nTamaoDatos es mayor que el
tamao de nByteDatos, si el formato especificado no es soportado o si la serie nValor del resultado no
es lo bastante grande para decodificar todos los datos de entrada.
46 / 186
D28065205B - 01/2008
"-1"
"1"
"-2l"
"-2b"
"2l"
"2b"
"-4l"
"-4b"
"4l"
"4b"
"4.0l"
"4.0b"
"8.0l"
"8.0b"
El formato nativo VAL3 para los datos numricos es la codificacin de precisin doble. Este formato se
debe utilizar para intercambiar valores numricos sin prdida de exactitud.
Ejemplo
El primer programa codifica un tShiftOut de dato trsf en una serie nByteOut del byte y lo enva con la
conexin serie tcpClient. El segundo programa lee los bytes de la conexin serie tcpServer y los
convierte nuevamente en un trsf tShiftIn.
// ---- Programa para enviar un trsf ---// Copiar las coordenadas trsf en un buffer numrico
nTrsfOut[0]=tShiftOut.x
nTrsfOut[1]=tShiftOut.y
nTrsfOut[2]=tShiftOut.z
nTrsfOut[3]=tShiftOut.rx
nTrsfOut[4]=tShiftOut.ry
nTrsfOut[5]=tShiftOut.rz
// Codificar los valores numricos 6 (punto flotante de precisin doble, por lo tanto 8 bytes) en 6*8=48 bytes en la
serie nByteOut[48]
toBinary(nTrsfOut, 6, "8.0b", nByteOut)
// Enviar serie nByte (bytes 48) a travs de tcpClient
sioSet(io:tcpClient, nByteOut)
D28065205B - 01/2008
47 / 186
3.5.
TIPO STRING
3.5.1.
DEFINICIN
Las variables de tipo cadena de caracteres permiten almacenar textos. El tipo de cadena de caracteres soporta
el grupo de caracteres Unicode. Cabe notar que la visualizacin correcta de un carcter Unicode depende de
las fuentes del carcter instaladas en el dispositivo de visualizacin.
Una cadena de caracteres se memoriza en 128 octetos; la cantidad mxima de caracteres en una cadena
depende de los caracteres utilizados, debido a que la codificacin interna de caracteres (Unicode UTF8)
utiliza de 1 byte (para ASCII caracteres) a 4 bytes (3 para los caracteres chinos).
Por consiguiente, la longitud mxima de una cadena de caracteres ASCII es de 128 caracteres; la longitud
mxima de una cadena de caracteres en chino es de 42 caracteres.
3.5.2.
OPERADORES
Para evitar confusiones entre los operadores = y ==, el operador = no est autorizado al interior de
expresiones VAL3 utilizadas como parmetro de instruccin.
3.5.3.
INSTRUCCIONES
Funcin
Reenva una cadena de caracteres que representa nValor segn el formato de visualizacin sFormato.
El formato es "tamao.precisin", en dnde tamao es el tamao mnimo del resultado (se aaden
espacios al comienzo de la cadena si fuera necesario), y precisin es la cantidad de cifras significativas
despus de la coma (los 0 al final de la cadena son sustituidos por espacios). De manera predeterminada,
tamao y precisin valen 0. La parte entera del valor no se trunca jams, aun si su longitud de
visualizacin es ms grande que tamao.
Parmetros
string sFormato
num nValor
Expresin numrica
Ejemplo
num nPi
nPi = 3.141592654
putln(toString(".4", nPi))
putln(toString("8", nPi))
putln(toString("8.4", nPi))
putln(toString("8.4", 2.70001))
putln(toString("", nPi))
putln(toString("1.2", 1234.1234))
//
//
//
//
//
//
muestra 3.1416
muestra
3
muestra 3.1416
muestra 2.7
muestra 3
muestra 1234.12
Vase tambin
D28065205B - 01/2008
Funcin
Calcula el nValor numrico representado al comienzo de la sCadena especificada, y retorna sCadena en
la cual todos los caracteres han sido suprimidos hasta la representacin siguiente de un valor numrico.
Si el inicio de sCadena no representa un valor numrico, bRelacin se configura en false y nValor no se
modifica; en caso contrario, bRelacin se configura en true.
Parmetros
string sCadena
num& nValor
bool& bRelacin
Ejemplo
num nVal
bool bOk
putln(toNum("10 20 30", nVal, bOk))
putln(toNum("a10 20 30", nVal, bOk))
putln(toNum("10 end", nVal, bOk))
buffer = "+90 0.0 -7.6 17.3"
do
buffer = toNum(buffer, nVal, bOk)
putln(nVal)
until (bOk != true)
Vase tambin
D28065205B - 01/2008
49 / 186
Funcin
Retorna la cadena de caracteres constituida por el carcter de punto de cdigo Unicode, si sta es un
punto de cdigo Unicode vlido. En caso contrario, retorna una cadena de caracteres vaca.
El siguiente cuadro proporciona los puntos de cdigo Unicode debajo de 128 (corresponde al cuadro de
caracteres ASCII). Los carcteres en las celdas grises son los cdigos de control que se pueden substituir
por un signo de interrogacin cuando se visualiza la secuencia.
Todos los puntos de cdigo Unicode vlidos son soportados por el tipo de secuencia VAL3. Sin embargo,
la visualizacin del carcter depende de las fuentes de carcter instaladas en el dispositivo de
visualizacin. La lista completa de carcteres Unicode se puede encontrar en http://www.unicode.org
(buscar 'Tablas de cdigos').
Parmetros
num nPuntoCdigo
Ejemplo
putln(chr(65))
// Muestra A
Vase tambin
50 / 186
D28065205B - 01/2008
Funcin
Retorna el punto de cdigo Unicode del carcter del ndice nPosicin.
Retorna -1 si nPosicin es negativo o superior a la longitud de texto especificada.
Parmetros
string sTexto
num nPosicin
Expresin numrica
Ejemplo
putln(asc("A",0))
// Muestra 65
Vase tambin
string chr(num nPuntoCdigo)
Funcin
Reenva nTamao de los primeros caracteres de sTexto. Si nTamao es ms grande que la longitud de
la cadena sTexto, la instruccin reenva la cadena sTexto.
Se genera un error de ejecucin si nTamao es negativo.
Parmetros
string sTexto
num nTamao
Expresin numrica
Ejemplo
// Muestra hello
putln(left("hello world",5))
D28065205B - 01/2008
51 / 186
Funcin
Reenva nTamao de los ltimos caracteres de sTexto. Si el nmero especificado es ms grande que la
longitud de sTexto, la instruccin reenva sTexto.
Se genera un error de ejecucin si nTamao es negativo.
Parmetros
string sTexto
num nTamao
Expresin numrica
Ejemplo
putln(right("hello world",5))
// Muestra world
Funcin
Reenva nTamao de los caracteres de sTexto a partir del carcter de ndice nPosicin, parndose al
final de sTexto.
Se genera un error de ejecucin si nTamao o nPosicin son negativos.
Parmetros
string sTexto
num nTamao
Expresin numrica
num nPosicin
Ejemplo
// Muestra wild
52 / 186
D28065205B - 01/2008
Funcin
Reenva sTexto en la cual sInsercin est insertada despus del carcter de ndice nPosicin. Si
nPosicin es ms grande que el tamao de sTexto, se aade sInsercin al final de sTexto. El resultado
es truncado, si excede los 128 bytes.
Se genera un error de ejecucin si nPosicin es negativo.
Parmetros
string sTexto
string sInsercin
num nPosicin
Ejemplo
putln(insert("hello world","wild ",6))
Funcin
Reenva sTexto en la cual nTamao de caracteres han sido suprimidos a partir del carcter de ndice
nPosicin. Si nPosicin es superior a la longitud de sTexto, la instruccin reenva sTexto.
Se genera un error de ejecucin si nTamao o nPosicin son negativos.
Parmetros
string sTexto
num nTamao
Expresin numrica
num nPosicin
Ejemplo
string sSource
sSource = "hello wild world"
putln(delete(sSource,5,6))
putln(sSource)
D28065205B - 01/2008
53 / 186
Funcin
Reenva sTexto en la cual nTamao de los caracteres han sido sustituidos a partir del carcter del ndice
de nPosicin por sSustitucin. Si nPosicin es superior a la longitud de sTexto, la instruccin reenva
sTexto.
Se genera un error de ejecucin si nTamao o nPosicin son negativos.
Parmetros
string sTexto
string sSustitucin
num nTamao
Expresin numrica
num nPosicin
Ejemplo
putln(replace("hello ? world","wild",1,6))
Funcin
Reenva el ndice (entre 0 y 127) del primer carcter de la primera ocurrencia de sTexto2 en sTexto1. Si
sTexto2 no figura en sTexto1, la instruccin reenva -1.
Parmetros
string sTexto1
string sTexto2
Ejemplo
// Muestra 6
54 / 186
D28065205B - 01/2008
Funcin
Retorna el nmero de caracteres en sTexto.
Parmetros
string sTexto
Ejemplo
putln(len("hello wild world"))
// Muestra 16
Vase tambin
D28065205B - 01/2008
55 / 186
3.6.
TIPO DIO
3.6.1.
DEFINICIN
El tipo dio se utiliza para vincular una variable VAL3 a una entrada/salida digital de sistema.
Las entradas/salidas declaradas en el sistema pueden utilizarse en una aplicacin VAL3, a partir de la
biblioteca io, sin tener que ser declaradas en la aplicacin como variable global o local. Por consiguiente,
el tipo dio se utiliza para una entrada/salida de sistema o como parmetro, cuando se llama un programa.
Todas las instrucciones que utilizan un tipo variable dio no vinculado a una entrada/salida declarada en el
sistema, generan un error de ejecucin.
Por defecto, un tipo variable dio no est vinculada a una entrada/salida del sistema y por lo tanto no
genera un error de ejecucin si se utiliza como tal en un programa antes de ser vinculado.
3.6.2.
OPERADORES
Para evitar confusiones entre los operadores = y ==, el operador = no est autorizado al interior de
expresiones VAL3 utilizadas como parmetro de instruccin.
56 / 186
D28065205B - 01/2008
3.6.3.
INSTRUCCIONES
Funcin
Conecta diVariable a la entrada-salida del sistema a cuyo diOrigen est enlazada.
Se genera un error de ejecucin si diVariable es una entrada/salida de la biblioteca io.
Parmetros
dio& diVariable
dio diOrigen
Ejemplo
dio dpinza1
dio dpinza2
dioLink(diPinza1,
io:vlvula1)
dioLink(diPinza2, diPinza1)
dioLink(diPinza1,
io:vlvula2)
Funcin
Retorna el valor numrico a partir de la lectura diMatriz, como un nmero entero en cdigo binario, es
decir: diMatriz[0]+2
diMatriz[1]+4
diMatriz[2]+...+2 k
diMatriz[k], en dnde diMatriz[i] = 1 si
diMatriz[i] es true, 0 en el caso contrario.
Se genera un error de ejecucin si no se vincula un miembro de diMatriz a una entrada/salida del
sistema.
Parmetros
dio diMatriz
dio diCode[4]
diCode[0] = false
diCode[1] = true
diCode[2] = false
diCode[3] = true
putln(dioGet(diCode))
// Muestra 10 = 0 + 2
1 + 4
0 + 8
Ejemplo
Vase tambin
num dioSet(dio diMatriz, num nValor)
D28065205B - 01/2008
57 / 186
Funcin
Asigna la parte entera de nValor escrita en binario a las salidas todo o nada de diMatriz, y reenva el
valor efectivamente asignado, es decir:
diMatriz[0]+2
diMatriz[1]+4
diMatriz[2]+...+2 k
diMatriz[i] es true, 0 en el caso contrario.
Se genera un error de ejecucin si no se vincula un miembro de dcuadro a una salida del sistema.
Parmetros
dio diMatriz
num nValor
Ejemplo
dio dCode[4]
putln(dioSet(diCode, 10)
putln(dioSet(diCode, 26)
// Muestra 10 = 0 + 2
1 + 4
0 + 8
1
// Muestra 10, cdigo no es suficientemente grande para codificar por
entero 26
Vase tambin
58 / 186
D28065205B - 01/2008
3.7.
3.7.1.
TIPO AIO
DEFINICIN
El tipo aio permite enlazar una variable VAL3 a una entrada-salida numrica del sistema (digital o
analgico).
Las entradas/salidas declaradas en el sistema pueden utilizarse en una aplicacin VAL3, a partir de la
aplicacin io, sin tener que declararlas en la biblioteca como variable global o local. Por consiguiente, se
utiliza el tipo aio como un alias, para una entrada/salida analgica de sistema, o como un parmetro,
cuando se llama un programa.
Todas las instrucciones que utilizan un tipo variable aio no vinculado a una entrada/salida declarada en el
sistema, generan un error de ejecucin.
Por defecto, un tipo variable aio no est vinculada a una entrada/salida del sistema y por lo tanto no
genera un error de ejecucin si se utiliza como tal en un programa antes de ser vinculado
3.7.2.
INSTRUCCIONES
Funcin
Conecta aiVariable a la entrada-salida del sistema a cuyo aiOrigen est enlazada.
Se genera un error de ejecucin si aiVariable es una entrada/salida de la biblioteca io.
Parmetros
aio& aiVariable
aio aiOrigen
Ejemplo
aio aiSensor1
aio aiSensor2
aioLink(aiSensor1, io:system1)
aioLink(aiSensor2, aiSensor1)
aioLink(aiSensor1, io:system2)
Funcin
Parmetros
aio& aiEntrada
Ejemplo
aio aiSensor
putln(aioGet(aiSensor))
Vase tambin
num aioSet(aio aiSalida, num nValor)
D28065205B - 01/2008
59 / 186
Funcin
Asigna nValor a aiSalida, y reenva nValor. Si el valor configurado se encuentra fuera de la gama de aio,
el nmero retornado ser el valor actual de la salida aio.
Se genera un error de ejecucin si aiSalida no est vinculado a una salida de sistema.
Parmetros
aio& aiSalida
num nValor
Ejemplo
aio aiCommand
putln(aioSet(aiCommand, -12.3))
// Muestra -12.3
Vase tambin
60 / 186
D28065205B - 01/2008
3.8.
3.8.1.
TIPO SIO
DEFINICIN
El tipo sio permite vincular una variable VAL3 a una entrada-salida serie del sistema o una conexin
mediante socket Ethernet. Una entrada-salida sio se caracteriza por:
Parmetros propios al tipo de comunicacin, definidos en el sistema
Un caracter de fin de cadena, para hacer posible la utilizacin del tipo string
Un plazo de espera de comunicacin
Las entradas-salidas serie del sistema estn siempre activas. Las conexiones mediante socket Ethernet
se activan en el primer acceso en lectura o escritura por medio de un programa VAL3. Las conexiones
mediante socket Ethernet se desactivan automticamente cuando se termina la aplicacin VAL3.
Las entradas/salidas declaradas en el sistema pueden utilizarse en una aplicacin VAL3, a partir de la
biblioteca io, sin tener que declararlas en la aplicacin, como variable global o local. Por consiguiente, el
tipo sio se utiliza como un alias, para una entrada/salida sio de sistema, o como un parmetro, al llamar
un programa.
Todas las instrucciones que utilizan un tipo variable sio no vinculado a una entrada/salida declarada en el
sistema, generan un error de ejecucin.
Por defecto, un tipo variable sio no est vinculada a una entrada/salida del sistema y por lo tanto no
genera un error de ejecucin si se utiliza como tal en un programa antes de ser vinculado.
Operadores
Cuando se alcanza el plazo de tiempo de espera de la comunicacin en lectura o escritura de la entradasalida serie, se genera un error de ejecucin.
string <sio siSalida> = <string sTexto>
Para evitar confusiones entre los operadores = y ==, el operador = no est autorizado al interior de
expresiones VAL3 utilizadas como parmetro de instruccin.
D28065205B - 01/2008
61 / 186
3.8.2.
INSTRUCCIONES
Funcin
Enlaza siVariable a la entrada-salida serie del sistema sobre el cual est enlazado dicho siOrigen.
Se genera un error de ejecucin si siVariable es una entrada/salida de la biblioteca io.
Parmetros
sio& siVariable
sio siOrigen
Ejemplo
sio siSensor1
sio siSensor2
sioLink(siSensor1, io:portSerial1)
sioLink(siSensor2, siSensor1)
sioLink(siSensor2, io:portSerial1)
Funcin
Vaca el buffer de lectura de siEntrada y retorna la cantidad de caracteres as borrados.
Para una conexin socket Ethernet, clearBuffer desactiva (cierra) el socket, clearBuffer retorna -1 si el
socket estaba ya desactivado.
Se genera un error de ejecucin si siEntrada no est conectado a un enlace serie del sistema o a una
base Ethernet.
Funcin
Lee una carcter individual sobre un conjunto de caracteres, a partir de siEntrada, y retorna el nmero de
caracteres ledos. La secuencia de lectura se detiene cuando el nDatos est lleno o cuando la memoria
intermedia de lectura est llena.
Para una conexin socket Ethernet, sioGet trata primero de establecer la conexin si sta no est ya
activa. Cuando se alcanza el plazo de espera de comunicacin de entrada, sioGet retorna -1. Si la
conexin est activa pero no hay datos en el buffer de lectura de entrada, sioGet espera hasta que los
datos sean recibidos o que el plazo de espera se cumpla.
Se genera un error de ejecucin si siEntrada no est enlazado a un puerto serie del sistema o a una base
Ethernet, o si nDatos no es una variable VAL3.
62 / 186
D28065205B - 01/2008
Funcin
D28065205B - 01/2008
63 / 186
S6.4
Sintaxis
num sioCtrl(<sio siCanal>, <string nParmetro>, <valor>)
Funcin
Esta instruccin modifica un parmetro de comunicacin de la siCanal de entrada/salida serie
especificada.
(!) Para las lneas serie, algunos parmetros o valores de parmetro pueden no ser soportados por el
hardware: remitirse al manual del controlador.
La instruccin devuelve:
0
-1
-2
-3
-4
-5
Tipo de
parmetro
Descripcin
"port"
num
"target"
string
(Para el cliente TCP) Direccin IP del servidor TCP por alcanzar, como
"192.168.0.254"
"clients"
num
"endOfString"
num
"timeout"
num
"baudRate"
num
"parity"
string
"bits"
num
"stopBits"
num
"mode"
string
"flowControl"
string
Ejemplo
Este programa fija los parmetros para una lnea serie.
sioCtrl(io:portSerial1,
sioCtrl(io:portSerial1,
sioCtrl(io:portSerial1,
sioCtrl(io:portSerial1,
sioCtrl(io:portSerial1,
sioCtrl(io:portSerial1,
64 / 186
"baudRate", 115200)
"bits", 8)
"parity", "none")
"stopBits", 1)
"timeout", 0)
"endOfString", 13)
D28065205B - 01/2008
CAPTULO 4
INTERFAZ DE USUARIO
D28065205B - 01/2008
65 / 186
66 / 186
D28065205B - 01/2008
4.1.
PGINA DE USUARIO
Pgina de usuario
La pgina de usuario tiene 14 lneas de 40 columnas. La ltima lnea puede ser utilizada para realizar
mens con tecla asociada. Se encuentra disponible una lnea adicional para la visualizacin de un ttulo.
4.2.
INSTRUCCIONES
Funcin
Hace que se presente la pgina de usuario en la pantalla del MCP.
Si el parmetro bFijo es true, slo la pgina de usuario ser accesible al operador, a excepcin de la
pgina de cambio de perfil accesible por la tecla de acceso rpido "Shift User". Cuando esta pgina se
muestra, es posible detener la aplicacin con la tecla "Stop" si el perfil de usuario en curso lo autoriza.
Si el parmetro es false, las otras pginas de la interfaz de usuario MCP vuelven a ser accesibles.
D28065205B - 01/2008
67 / 186
Funcin
Coloca el cursor de la pgina de usuario en las coordenadas (nX, nY). La esquina de arriba a la izquierda
tiene por coordenadas (0,0) y la esquina de abajo a la derecha (39, 13).
El nmero de la columna nX es tomado del mdulo 40. El nmero de lneas nY es tomado del mdulo 14.
Parmetros
num nX
num nY
Vase tambin
void cls()
void cls()
Sintaxis
void cls()
Funcin
Borra la pgina de usuario y coloca el cursor en (0,0).
Vase tambin
void gotoxy(num nX, num nY)
Funcin
Retorna la longitud de sTexto sobre la visualizacin MCP (nmero de columnas necesarias para
visualizar sTexto).
Para las cadenas de caracteres ASCII, la longitud sobre la visualizacin es el nmero de caracteres en la
cadena de caracteres; por consiguiente getDisplayLen() es idntico a la instruccin len().
Algunos caracteres (chinos) se visualizan sobre dos columnas de visualizacin adyacentes; por
consiguiente, getDisplayLen() es mayor que la longitud sTexto y puede utilizarse para controlar el
alineamiento sTexto en la pantalla.
Parmetros
string sTexto
Vase tambin
num len(string sTexto)
68 / 186
D28065205B - 01/2008
Funcin
Muestra, en la posicin del cursor de la pgina de usuario, la sTexto o el nValor especificado (con 3 cifras
despus de la coma). A continuacin, el cursor se coloca sobre el carcter que sigue el ltimo carcter del
mensaje visualizado (instruccin put), o sobre el primer carcter de la lnea siguiente (instruccin putln).
Al final de la lnea, la visualizacin contina en la lnea siguiente.
Al final de la pgina, la visualizacin de la pgina de usuario se desfasa una lnea hacia arriba.
Parmetros
string sTexto
num nValor
Expresin numrica
Vase tambin
void popUpMsg(string sTexto)
void logMsg(string sTexto)
void title(string sTexto)
Funcin
Cambia el ttulo de la pgina de usuario.
La posicin actual del cursor no se modifica por la instruccin title().
Parmetros
string sTexto
num get()
Sintaxis
num get(<string& sCadena>)
num get(<num& nValor>)
num get()
Hace la adquisicin de una cadena, un nmero o una tecla en el teclado de la consola.
El parmetro sCadena o nValor se visualiza en la posicin actual del cursor y puede ser cambiado por el
usuario. La introduccin se completa pulsando una tecla de men o las teclas Return o Esc.
La instruccin reenva el cdigo de la tecla que ha terminado la entrada de datos.
Cuando se pulsa Return o un men, la variable sCadena o nValor se actualiza. Cuando se pulsa
Esc,sta no cambia.
Si no ha pasado ningn parmetro, la instruccin get() espera que se pulse una tecla cualquiera y retorne
su cdigo. La tecla pulsada no aparece en la pantalla.
D28065205B - 01/2008
69 / 186
Funcin
En todos los casos, la posicin en curso del cursor no se modifica por la instruccin get().
Sin Shift
3
Caps
Space
283
32
2
282
Shift
Esc
Con Shift
3
Caps
Space
283
32
Run
Shift
282
Move
Help
Move
Ret.
255
270
Menu
Tab
Up
Bksp
Stop
-
Esc
Help
Ret.
Run
255
270
Menu
UnTab
PgUp
Bksp
Stop
-
259
261
263
260
262
263
User
Left
Down
Right
User
Home
PgDn
End
281
264
266
268
281
265
267
269
F2
272
F3
273
F4
274
F5
275
F6
276
F7
277
F8
278
Para las teclas estndares, el cdigo retornado es el cdigo ASCII del carcter correspondiente:
Sin Shift
q
113
a
97
z
122
w
119
s
115
x
120
e
101
d
100
c
99
r
114
f
102
v
118
t
116
g
103
b
98
7
55
4
52
1
49
8
56
5
53
2
50
9
57
6
54
3
51
+
43
45
0
48
*
42
/
47
"
34
Q
81
A
65
Z
90
W
87
S
83
X
88
E
69
D
68
C
67
R
82
F
70
V
86
y
121
h
104
n
110
u
117
j
106
m
109
i
105
k
107
.
46
o
111
l
108
,
44
p
112
<
60
=
61
(
40
:
58
95
)
41
!
33
.
46
[
91
{
123
,
44
]
93
}
125
>
62
U
85
J
74
M
77
I
73
K
75
$
36
O
79
L
76
\
92
P
80
}
125
=
61
Con Shift
;
59
?
63
%
37
Y
89
H
72
N
78
Parmetros
string& sCadena
num& nValor
Ejemplo
num nValor
num nKey
// Espera la presin de Return para validar la entrada
do
nKey = get (nValor)
until (nKey == 270)
Vase tambin
num getKey()
70 / 186
D28065205B - 01/2008
num getKey()
Sintaxis
num getKey()
Funcin
Hace la adquisicin de una tecla en el teclado de la consola. Retorna el cdigo de la ltima tecla pulsada
despus de la ltima llamada a getKey(), -1 si no se ha pulsado desde entonces ninguna tecla. Un golpe
de tecla puede detectarse nicamente cuando se visualiza la pgina del usuario.
Contrariamente a la instruccin get(), getKey() retorna de inmediato.
La tecla pulsada no se muestra, y la posicin en curso del cursor no se modifica.
Ejemplo
// Muestra el reloj sistema hasta que se pulse una tecla cualquiera
getKey()
// Reinicializa el cdigo de la ltima tecla pulsada
while (getKey()== -1)
gotoxy(0,0)
put(toString(, clock()* 10))
endWhile
Vase tambin
num get(), void userPage(), void userPage(bool bFijo)
bool isKeyPressed(num nCdigo)
Funcin
Retorna el estado de la tecla especificada por su cdigo (vase get()), true si se pulsa la tecla, false en
caso contrario. Un golpe de tecla puede detectarse nicamente cuando se visualiza la pgina del usuario,
excepto para las teclas (1), (2) y (3), las cuales son siempre detectadas.
Vase tambin
num get(), void userPage(), void userPage(bool bFijo)
Vase tambin
void userPage(), void userPage(bool bFijo)
void put() void putln()
D28065205B - 01/2008
71 / 186
Funcin
Escribe sTexto en el historial del sistema (mensaje de error). El mensaje ser grabado con la fecha y la
hora en curso. "USR" se aade al inicio de la cadena de caracteres, para etiquetarlo como mensaje de
usuario.
Vase tambin
void popUpMsg(string sTexto)
string getProfile()
Sintaxis
string getProfile()
Funcin
Retorna el nombre del perfil de usuario en curso.
Vase tambin
num setProfile(string sLoginUsuario, string sContraseaUsuario)
Funcin
Cambia el perfil del usuario actual (efecto inmediato).
La funcin reenva:
0: El perfil del usuario especificado es ahora efectivo
-1: El perfil del usuario definido no est especificado
-2: La contrasea del usuario especificado no es correcta
-3: staubli no est autorizado como perfil del usuario con esta instruccin
-4: El perfil de usuario actual es staubli y no puede cambiarse con esta instruccin
Vase tambin
string getProfile()
72 / 186
D28065205B - 01/2008
string getLanguage()
S6.4
Sintaxis
string getLanguage()
Funcin
Esta instruccin devuelve el lenguaje actual del controlador del robot.
Ejemplo
switch(getLanguage())
case "francais"
sMessage="Attention!"
break
case "english"
sMessage="Warning!"
break
case "deutsch"
sMessage="Achtung!"
break
case "italiano"
sMessage="Avviso!"
break
case "espanol"
sMessage="Advertencia!"
break
case "chinese"
sMessage=" !"
break
default
sMessage="Warning!"
break
endSwitch
Vase tambin
D28065205B - 01/2008
73 / 186
S6.4
Sintaxis
bool setLanguage(<string sLenguaje>)
Funcin
Esta instruccin modifica el lenguaje actual del controlador del robot: el nombre del lenguaje especificado
sLenguaje debe corresponder al nombre de un archivo de traduccin en el controlador. Remitirse al
manual del controlador para eliminar, o instalar lenguajes adicionales en el controlador del robot.
Ejemplo
Este programa cambia el lenguaje del robot al chino:
if(setLanguage("chinese")==false)
putln("The Chinese language is not available on the robot controller")
endIf
Vase tambin
string getLanguage()
S6.4
Sintaxis
string getDate(<string sFormato>)
Funcin
Esta instruccin devuelve la fecha actual y/o la hora del controlador del robot. El parmetro sFormato
especifica el formato para la fecha devuelta. En esta secuencia, cada ocurrencia de algunas palabras
claves se substituye por el valor correspondiente de la fecha o la hora. Las palabras claves de formato
soportadas se enumeran en el cuadro de abajo:
Palabra clave
%y
%Y
%m
%d
%H
%I
%p
%M
%S
Descripcin
Ao de 2 dgitos (00-99), sin siglo
Ao de 4 dgitos como 2007
Mes (00-12)
Da (00-31)
Hora en el formato 24 horas (00-23)
Hora en el formato 12 horas (01-12)
Indicador A.M./P.M. para el reloj de 12 horas
Minutos (00-59)
Secundos (00-59)
Ejemplo
Este programa muestra la fecha y la hora en el formato "January 01, 2007 13:45:23"
switch (getDate("%m"))
case "01"
sMes="Enero"
break
case "02"
sMes="Febrero"
break
case "03"
sMes="Marzo"
break
case "04"
sMes="Abril"
74 / 186
D28065205B - 01/2008
break
case "05"
sMes="Mayo"
break
case "06"
sMes="Junio"
break
case "07"
sMes="Julio"
break
case "08"
sMes="Agosto"
break
case "09"
sMes="Septiembre"
break
case "10"
sMes="Octubre"
break
case "11"
sMes="Noviembre"
break
case "12"
sMes="Diciembre"
break
default
sMes="???"
break
endSwitch
// Muestra la fecha y la fecha en la forma: "January 01, 2007 13:45:23"
putln(getDate(sMes+" %d, %Y %H:%M:%S"))
D28065205B - 01/2008
75 / 186
76 / 186
D28065205B - 01/2008
Captulo 5 - Tareas
CAPTULO 5
TAREAS
D28065205B - 01/2008
77 / 186
78 / 186
D28065205B - 01/2008
Captulo 5 - Tareas
5.1.
DEFINICIN
Una tarea es un programa que est siendo ejecutado. Una aplicacin puede (y generalmente tiene)
diversas tareas en ejecucin.
En una aplicacin, se encontrar especialmente una tarea para los desplazamientos del brazo, una tarea
autmata, una tarea para la interfaz de usuario, una tarea para el seguimiento de las seales de
seguridad, tareas de comunicacin...
Una tarea se caracteriza por los siguientes elementos:
5.2.
Cuando una instruccin causa un error de ejecucin, se para la tarea. Se utiliza la instruccin
taskStatus() para diagnosticar el error de ejecucin. Entonces es posible volver a arrancar la tarea con la
instruccin taskResume(). Si el error de ejecucin puede corregirse, la tarea puede reanudarse desde la
lnea de instruccin donde se par. En caso contrario, es necesario volver a partir sea antes, sea despus
de esta lnea de instruccin.
5.3.
VISIBILIDAD
Las tareas slo son visibles desde el interior del programa o de la biblioteca que las cre. Las
instrucciones taskSuspend(), taskResume(), taskKill() y taskStatus() actan sobre una tarea creada por
otra biblioteca, como si no se hubiese creado la tarea. Esto significa que dos bibliotecas diferentes
pueden crear tareas que tienen el mismo nombre.
D28065205B - 01/2008
79 / 186
5.4.
SECUENCIACIN
Cuando una aplicacin tiene varias tareas en curso de ejecucin, stas parecen ejecutarse simultnea e
independientemente. Esto es cierto si se observa la aplicacin globalmente en intrvalos de tiempo
suficientemente largos (del orden del segundo), pero no es exacto cuando uno se interesa en el
comportamiento preciso en un intervalo de tiempo reducido.
En efecto, como el sistema tiene un solo procesador, slo puede ejecutar una tarea a la vez. La
simultaneidad de la ejecucin se simula a travs de una secuenciacin rpida de las tareas, que ejecutan
una despus de otras unas instrucciones, antes que el sistema pase a la tarea siguiente.
Secuenciacin
Prioridad
T1 ejecuta la
funcin delay()
T1
ejecucin
normal
Plazo transcurrido
T1
ejecucin
normal
T1
T2
T2
T3
T2
T3
T2
T3
T2
T3
T3
tiempo
D28065205B - 01/2008
Captulo 5 - Tareas
5.5.
TAREAS SNCRONAS
La secuencia anteriormente descrita es la secuencia de las tareas normales, llamadas tareas asncronas,
cuya ejecucin programa el sistema lo ms rpido posible. A veces es necesario programar las tareas a
intervalos regulares, tanto para la adquisicin de datos como para el control de perifricos: se habla
entonces de tareas sncronas.
Estas son ejecutadas en ciclo en secuencia, mediante la interrupcin de la tarea asncrona actual entre
dos lneas VAL3. Cuando las tareas sncronas se terminan, la tarea asncrona se reanuda.
La secuenciacin de las tareas sncronas VAL3 obedece a las siguientes reglas:
1. Cada tarea sncrona es secuenciada exactamente una vez para cada perodo definido en el
momento de la creacin de la tarea (por ejemplo cada 4 ms).
2. Durante cada secuenciacin, el sistema ejecuta hasta 3000 lneas de instrucciones VAL3. Pasa a
la siguiente tarea cuando una lnea de instrucciones no puede terminarse inmediatamente (error en
la ejecucin (runtime), espera de una seal, tarea parada, etc.).
En la prctica, una tarea sncrona se termina a menudo explcitamente por la instruccin delay(0)
que obliga el sistema a pasar a la secuenciacin de la siguiente tarea.
3. Las tareas sncronas de la misma duracin son secuenciadas segn su orden de creacin.
5.6.
ERROR DE CADENCIA
Si la duracin de ejecucin de una tarea sncrona VAL3 es superior al perodo definido, el ciclo en curso
se termina normalmente pero se anula el ciclo siguiente. Este error de cadencia se indica a la aplicacin
VAL3 regulando la variable booleana especialmente prevista a tal efecto en el momento de la creacin de
la tarea en "true". As pues, esta variable booleana indica al principio de cada ciclo si la secuencia anterior
se realiz completamente o no.
5.7.
Las entradas son refrescadas antes de la ejecucin de las tareas sncronas y asncronas. De la misma
manera, las salidas son refrescadas tras la ejecucin de las tareas sncronas y asncronas.
ATENCIN:
No es posible definir cules son las entradas/salidas que debe utilizar una tarea
determinada. Cada actualizacin se refiere, por lo tanto, al conjunto de las
entradas/salidas.
La actualizacin de las entradas/salidas en Modbus, BIO board, MIO board, CIO board o
AS-i bus no es controlado por el programador VAL3. Se pueden actualizar en cualquier
momento durante la secuenciacin de una tarea VAL3.
D28065205B - 01/2008
81 / 186
5.8.
SINCRONIZACIN
A veces es necesario sincronizar varias tareas antes que estas prosigan su ejecucin.
Si se conoce a priori la duracin de ejecucin de cada una de estas tareas, esta sincronizacin puede
hacerse sencillamente por la espera de una seal emitida por la tarea ms lenta. Pero cuando no se sabe
cul de las tareas ser la ms lenta, hay que utilizar un mecanismo de sincronizacin ms complejo, del
cual se da a continuacin un ejemplo de programacin VAL3.
Ejemplo
82 / 186
D28065205B - 01/2008
Captulo 5 - Tareas
5.9.
REPARTICIN DE RECURSO
Cuando varias tareas utilizan un mismo recurso del sistema o de la clula (variables globales, pantalla,
teclado, robot, etc.), es indispensable asegurarse que no van a perturbarse mutuamente.
Para esto puede utilizarse un mecanismo de exclusin mutua (mutex) que proteje un recurso
autorizando su acceso a una sola tarea a la vez. Un ejemplo de programacin de mutex en VAL3 se
presenta a continuacin.
Ejemplo
bool bScreen
bScreen= false
program Task1()
begin
while(true)
setMutex(bScreen)
call fillScreen(1)
bScreen = false
delay(0)
endWhile
end
program Task2()
begin
while(true)
setMutex(bScreen)
call fillScreen(2)
bScreen = false
delay(0)
endWhile
end
D28065205B - 01/2008
83 / 186
5.10. INSTRUCCIONES
Funcin
Suspende la ejecucin de la tarea sNombre.
Si la tarea est ya en el estado STOPPED, la instruccin no tiene efecto.
Un error de ejecucin se genera si sNombre no corresponde a ninguna tarea VAL3, o corresponde a una
tarea VAL3 creada por otra biblioteca.
Parmetros
string sNombre
Vase tambin
void taskResume(string sNombre, num nSalto)
void taskKill(string sNombre)
Funcin
Reanuda la ejecucin de la tarea sNombre en la lnea situada nSalto lneas de instrucciones antes o
despus de la lnea en curso.
Si nSalto es negativo, la ejecucin se reanuda antes de la lnea en curso. Si la tarea no est en el estado
STOPPED, la instruccin no tiene efecto.
Un error de ejecucin se genera si sNombre no corresponde a una tarea VAL3, corresponde a una tarea
VAL3 creada por otra biblioteca, o si no hay ninguna lnea de instruccin en el nSalto especificado.
Parmetros
string sNombre
num nSalto
Expresin numrica
Vase tambin
84 / 186
D28065205B - 01/2008
Captulo 5 - Tareas
Funcin
Suspende y despus destruye la tarea sNombre. Despus de ejecutarse esta instruccin, la tarea
sNombre deja de estar presente en el sistema.
Si no existe tarea sNombre o si la tarea sNombre fue creada por otra biblioteca, la instruccin no tiene
ningn efecto.
Parmetros
string sNombre
Vase tambin
void taskSuspend(string sNombre)
void taskCreate string sNombre, num nPrioridad, programa(...)
Funcin
Espera que la variable bMutex sea falsa, y luego la ajusta en true.
Esta funcin exige que se utilice una variable booleana como mecanismo de exclusin mutua con el fin de
proteger los recursos compartidos (vase captulo 5.9).
Funcin
Esta instruccin devuelve la descripcin del cdigo de error de ejecucin de la tarea especificada con el
parmetro nCdigoError. La descripcin se proporciona en el lenguaje del controlador actual.
Ejemplo
Este programa verifica si la tarea del "robot" est en error, y muestra el cdigo de error al operador si
existe.
D28065205B - 01/2008
nCdigoError=taskStatus("robot")
if (nCdigoError > 1)
gotoxy(0,12)
put(help(nCdigoError))
endIf
85 / 186
Funcin
Devuelve el estado actual de la tarea sNombre, o el cdigo de error de ejecucin de la tarea si este ltimo
est en la condicin de error:
Cdigo
Descripcin
-1
0
1
10
11
20
21
29
30
31
32
40
41
60
61
70
80
81
82
90
100
101
102
103
104
105
106
122
123
124
125
150
153
154
160
161
162
163
164
165
250
86 / 186
D28065205B - 01/2008
Captulo 5 - Tareas
Parmetros
string sNombre
Vase tambin
void taskResume(string sNombre, num nSalto)
void taskKill(string sNombre)
Funcin
Crea y pone en marcha la tarea sNombre.
sNombre debe tener de 1 a 15 caracteres entre "a..zA..Z0..9_". Ninguna otra tarea creada por la misma
biblioteca debe llevar el mismo nombre.
La ejecucin de sNombre comienza con la llamada de programa con los parmetros especificados. No
es posible utilizar una variable local para un parmetro pasado por referencia.
La tarea se terminar de manera predeterminada con la ltima lnea de instrucciones de programa, o ms
pronto si es explcitamente destruida.
nPrioridad debe estar comprendido entre 1 y 100. En cada secuenciacin de la tarea, el sistema
ejecutar un nmero de lneas de instrucciones igual a nPrioridad, o menos si se encuentra una
instruccin bloqueante.
Se genera un error de ejecucin si el sistema no tiene suficiente memoria para crear la tarea, si sNombre
no es vlido o ya se est utilizando en la misma biblioteca, o si nPrioridad no es vlido.
Parmetros
string sNombre
num nPrioridad
Expresin numrica
programa
p1
Ejemplo
program display(string& sText)
begin
putln(sText)
sText = "stop"
end
string sMessage
program start()
// Muestra start
// Espera el final de t1
// Muestra "stop"
begin
sMessage = "start"
taskCreate "t1", 10, display(sMessage)
wait(taskStatus("t1") == -1)
putln(sMessage)
end
Vase tambin
void taskSuspend(string sNombre)
void taskKill(string sNombre)
num taskStatus(string sNombre)
D28065205B - 01/2008
87 / 186
Funcin
Crea y ejecuta una tarea sncrona.
La ejecucin de la tarea exige ejecutar el programa especificado con los parmetros especificados.
Se genera un error de runtime si el sistema no posee la cantidad de memoria necesaria para poder crear
la tarea o si uno o ms parmetros no son vlidos.
Para una presentacin detallada de las tareas sncronas (vase captulo 5.5).
Parmetros
string sNombre
num nPeriodo
bool&
bSobreejecucin
Variable booleana que indica los errores de cadencia. Slo son soportadas las
variables globales, con el fin de garantizar que la variable no se suprima antes de
la tarea.
programa
Nombre del programa VAL3 por llamar cuando se ejecuta la tarea, los parmetros
correspondientes aparecen entre parntesis. Las variables locales no pueden
utilizarse como parmetro si ste ha pasado por referencia con el fin de garantizar
que la variable no se suprima antes de la tarea.
Ejemplo
// Crear una tarea de supervisin cada 20 ms
88 / 186
D28065205B - 01/2008
Captulo 5 - Tareas
Funcin
Pone la tarea en curso en espera hasta que bCondicin sea true.
La tarea se mantiene RUNNING durante el tiempo de espera. Si bCondicin es true al hacerse la
primera evaluacin, la ejecucin contina inmediatamente en la misma tarea (no hay secuenciacin de la
tarea siguiente).
Parmetros
bool bCondicin
Expresin booleana
Vase tambin
void delay(num nSegundos)
bool watch(bool bCondicin, num nSegundos)
Funcin
Pone la tarea en curso en espera durante nSegundos segundos.
La tarea se mantiene RUNNING durante el tiempo de espera. Si nSegundos es negativo o nulo, el
sistema procede inmediatamente a la secuenciacin de la siguiente tarea VAL3.
Parmetros
num nSegundos
Expresin numrica
Vase tambin
num clock()
bool watch(bool bCondicin, num nSegundos)
D28065205B - 01/2008
89 / 186
num clock()
Sintaxis
num clock()
Funcin
Reenva el valor en curso del reloj interno del sistema, expresado en segundos.
La precisin del reloj interno del sistema es el milisegundo. Este se inicializa en 0 cuando se pone en
marcha el controlador, y, por tanto, no tiene ninguna relacin con la hora civil.
Ejemplo
num nStart
nStart=clock()
<instructions>
put("duracin de la operacin= " )
putln(clock()-nStart)
Vase tambin
void delay(num nSegundos)
bool watch(bool bCondicin, num nSegundos)
Funcin
Coloca la tarea actual en espera, hasta que bCondicin es true o han transcurrido nSegundos
segundos.
Reenva true si la espera se termina cuando la bCondicin es true,en caso contrario false cuando la
espera se termina porque el plazo ha transcurrido.
La tarea se mantiene RUNNING durante el tiempo de espera. Si bCondicin es true al hacerse la
primera evaluacin, la ejecucin contina inmediatamente en la misma tarea; en caso contrario el sistema
secuenciar las otras tareas VAL3 (an si nSegundos es inferior o igual a 0).
Parmetros
bool bCondicin
Expresin booleana
num nSegundos
Expresin numrica
Ejemplo
while (watch (diSensor==true, 20)) == false
popUpMsg("Espera de la pieza")
wait(diSensor==true)
endWhile
Vase tambin
void delay(num nSegundos)
void wait(bool bCondicin)
num clock()
90 / 186
D28065205B - 01/2008
Captulo 6 - Bibliotecas
CAPTULO 6
BIBLIOTECAS
D28065205B - 01/2008
91 / 186
92 / 186
D28065205B - 01/2008
Captulo 6 - Bibliotecas
6.1.
DEFINICIN
Una biblioteca VAL3 es una aplicacin VAL3 con variables o programas que pueden volver a ser
utilizados por otra aplicacin u otros bibliotecas VAL3.
Al ser una aplicacin VAL3, una biblioteca VAL3 consta de los siguientes componentes:
- un conjunto de programas: las instrucciones VAL3 que deben ejecutarse
- Un conjunto de variables globales: los datos de la biblioteca
- un conjunto de bibliotecas: las instrucciones y variables externas utilizadas por la biblioteca
Cuando una biblioteca se est ejecutando, puede contener asimismo:
- un conjunto de tareas: los programas propios de la biblioteca que est ejecutndose
Cualquier aplicacin puede utilizarse como una biblioteca, y cualquier biblioteca puede utilizarse como
una aplicacin, si los programas start() y stop() estn definidos en la misma.
6.2.
INTERFAZ
Los programas y variables globales de una biblioteca son pblicos o privados. Slo los programas y
variables globales pblicos son accesibles fuera de la biblioteca. Los programas privados y variables
globales pueden ser utilizados nicamente por los programas de la biblioteca.
El conjunto de los programas y variables globales pblicos de una biblioteca forman su interfaz: un cierto
nmero de bibliotecas diferentes pueden tener la misma interfaz, en la medida en que sus programas y
variables pblicos utilicen los mismos nombres.
Las tareas creadas por un programa de una biblioteca son siempre privadas, es decir que son nicamente
accesibles por esta biblioteca.
6.3.
IDENTIFICADOR DE INTERFAZ
Para poder utilizar una biblioteca, una aplicacin debe en primer lugar declarar un identificante que se le
asigne, y luego solicitar, en un programa, cargar la biblioteca en la memoria utilizando este identificador.
El identificador se asigna a la interfaz de la librera y no a la propia librera. Toda librera que posea la
misma interfaz se puede a continuacin cargar utilizando este identificante. Este mecanismo puede
utilizarse, por ejemplo, para definir una biblioteca para cada parte posible de una aplicacin, y luego carga
nicamente la parte actualmente procesada por cada ciclo.
6.4.
CONTENIDO
Una biblioteca no tiene un contenido obligatorio: esta puede contener nicamente programas, o
nicamente variables, o ambos.
pieza:libLoad("pieza_7")
title(pieza:Nombre)
call pieza:init()
El acceso al contenido de una biblioteca que todava no se ha cargado en la memoria causa un error de
ejecucin.
D28065205B - 01/2008
93 / 186
Para acceder al contenido de una biblioteca, se escribe el nombre del identificador seguido de : antes del
nombre del programa o del dato de la biblioteca, por ejemplo:
S6.1
6.5.
CODIFICACIN
VAL3 soporta bibliotecas codificadas, basadas en las herramientas de compresin y codificacin ZIP, de
uso extendido.
Una biblioteca codificada es un archivo ZIP estndar del contenido de la carpeta de biblioteca (atencin:
no est soportada la codificacin avanzada de 128-bit y 256-bit). El nombre del archivo zip debe tener la
extensin '.zip' y menos de 15 caracteres (incluida la extensin). Para lograr una codificacin slida, la
contrasea ZIP debe tener ms de 10 caracteres y no debe poder encontrarse en un diccionario.
Contrasea secreta, contrasea pblica
El intrprete VAL3 debe tener acceso a la contrasea ZIP secreta, para cargar una biblioteca codificada;
para ello, se suministra una herramienta PC, con Stubli Robotics Studio( ), para codificar la contrasea
ZIP secreta en una contrasea VAL3 pblica. La contrasea VAL3 pblica hace posible utilizar la
biblioteca codificada en un programa VAL3. Pero el contenido de la biblioteca contina siendo secreto,
debido a que la contrasea ZIP no puede calcularse a partir de la contrasea VAL3.
( ) Esta herramienta, un passwordZip.exe ejecutable, suministrada con el emulador VAL3, requiere la
utilizacin de una licencia SRS especfica.
Codificacin del proyecto
No se puede codificar directamente el proyecto de inicio sobre el controlador. Un proyecto completo
puede codificarse:
- Declarando su programa de inicio() como pblico.
- Creando otro proyecto, el cual simplemente carga el proyecto codificado y llama al programa inicio().
94 / 186
D28065205B - 01/2008
Captulo 6 - Bibliotecas
6.6.
CARGA Y DESCARGA
Cuando est abierta una aplicacin VAL3, todas las bibliotecas declaradas son analizadas para construir
las interfaces correspondientes. Esta etapa no carga las bibliotecas en la memoria.
ATENCIN:
No estn soportadas las referencias circulares entre bibliotecas. Si la biblioteca A utiliza la
biblioteca B, la biblioteca B no puede utilizar la biblioteca A.
Cuando se carga una biblioteca, se inicializan sus variables globales y se comprueban sus programas
para detectar eventuales errores de sintaxis.
No es necesaria la descarga de una biblioteca; sta se hace automticamente cuando se termina la
aplicacin o cuando se carga una nueva biblioteca en lugar de otra.
Cuando se para una aplicacin VAL3 desde la interfaz de usuario del MCP, se ejecuta en primer lugar el
programa stop() y, a continuacin, se destruyen todas las tareas de la aplicacin y de sus bibliotecas, si
quedan algunas.
Ruta de acceso
Las instrucciones libLoad(), libSave() y libDelete() utilizan una ruta de acceso a una biblioteca,
especificado en forma de cadena de caracteres. Una ruta de acceso contiene una raz (facultativa), una
ruta (facultativa), y un nombre de biblioteca, segn el formato:
raz://Camino/Nombre
La raz especifica el soporte de fichero: "Floppy" para un disquete, "USB0" para un dispositivo sobre un
puerto USB (stick, lector de disquetes), "Disk" para el disco flash del controlador, o el nombre de una
conexin Ftp definida sobre el controlador para un acceso de red.
De forma predeterminada, la raz es "Disk" y la ruta queda vaca.
Ejemplos
pieza:libLoad("pieza_1")
pieza:libSave("USB0://pieza")
pieza:libSave("Disk://pieza_x/pieza_1")
Cdigos de error
La biblioteca VAL3 que maneja funciones nunca genera errores de ejecucin pero devuelven un cdigo
de error utilizado para comprobar el resultado de la instruccin y para localizar cualquier problema que
pueda presentarse.
S6.1
Descripcin
Sin error
10
11
12
13
Descarga de biblioteca imposible: La biblioteca est siendo utilizada por otra tarea.
14
20
21
22
23
>=30
D28065205B - 01/2008
95 / 186
Cdigo
Descripcin
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
S6.2
96 / 186
D28065205B - 01/2008
Captulo 6 - Bibliotecas
6.7.
INSTRUCCIONES
Funcin
Incializa el identificador de biblioteca, cargando el programa y variables de biblioteca en la memoria, tras
los sCamino especificados. El parmetro sContrasea (opcional) especificado se utiliza como clave de
descodificacin para bibliotecas codificadas. El sContrasea especificado debe ser la contrasea VAL3
calculada a partir de la contrasea ZIP secreta de la biblioteca codificada (vase el captulo 6.5,
pgina 94).
Retorna 0 tras una carga exitosa, un cdigo de error de carga de biblioteca, si persisten tareas en
ejecucin creadas por la biblioteca, si el camino de acceso a la biblioteca es invlido, si la biblioteca
contiene errores de sintaxis o si la biblioteca especificada no corresponde a la interfaz declarada por el
identificador.
Vase tambin
num identificante:libSave(), num libSave()
num identificante:libSave()
num identificante:libSave(string sCamino)
Funcin
Guarda las variables y programas asignados al identificador de la biblioteca. Si se llama libSave() sin
identificador, se guarda la aplicacin de la biblioteca que inicia. Si est especificado un parmetro, la
salvaguarda se hace en el sCamino indicado. En caso contrario, la salvaguarda se hace en la ruta
especificada al proceder a la carga.
Devuelve 0 si se ha guardado el contenido, un cdigo de error si el identificador no se ha inicializado, si el
camino no es vlido, si se produce un error de la escritura o si la trayectoria especificada ya contiene una
biblioteca.
Vase tambin
num libDelete(string sCamino)
Vase tambin
num identificante:libSave(), num libSave()
string identificante:libPath(), string libPath()
D28065205B - 01/2008
97 / 186
Funcin
Esta instruccin devuelve el camino de acceso de la biblioteca asociada al identificador, o el de la
aplicacin de llamada si no se especifica ningn identificador.
Vase tambin
bool libList(string sCamino, string& scontenido)
Funcin
Lista el contenido de acceso de sCamino especificado en el conjunto scontenido. Retorna true si el
conjunto scontenido lista el resultado completo, y false si el conjunto es demasiado pequeo para
contener toda la lista.
Todos los elementos del conjunto scontenido son primero inicializados en "" (cadena de caracteres
vaca). Por consiguiente, tras la ejecucin de libList(), se encuentra el fin de la lista, mediante la bsqueda
de la primera cadena de caracteres vaca en el conjunto scontenido.
Si scontenido es una variable global, el tamao del conjunto es automticamente extendido, segn lo
requerido para permitir el almacenamiento del resultado total.
Vase tambin
string identificante:libPath(), string libPath()
S6.4
Sintaxis
bool identifier:libExist(string sNombreSmbolo)
Funcin
La instruccin libExist prueba si un smbolo (datos globales o programa) est definido en una biblioteca.
Devuelve verdadero si el smbolo existe y es accesible (pblico), de lo contrario, falso.
El nombre del smbolo para un programa se debe aadir con "()": "mySymbol" denota un nombre de
datos, mientras que "mySymbol()" denota un nombre de programa.
Resulta til probar la instruccin libExist si se define una entrada/salida en un controlador ; tambin
resulta provechoso manejar la evolucin de la interfaz de una biblioteca, y adaptar su uso dependiendo de
si es una versin ms nueva o ms vieja de la interfaz.
Ejemplo
Este programa enva un mensaje de registro sMensajeRegistro a la lnea serie COM1 si existe, de lo
contrario lo registra.
if(io:libExist("COM1")==true)
io:COM1=sMensajeRegistro
else
logMsg(sMensajeRegistro)
endIf
98 / 186
D28065205B - 01/2008
CAPTULO 7
D28065205B - 01/2008
99 / 186
100 / 186
D28065205B - 01/2008
Este captulo enumera las instrucciones que dan acceso al estado de las diferentes partes del robot.
7.1.
INSTRUCCIONES
void disablePower()
Sintaxis
void disablePower()
Funcin
Corta la potencia del brazo y espera que la potencia est efectivamente cortada.
Si el brazo est en movimiento, se efecta una rpida parada en trayectoria antes del corte de potencia.
Vase tambin
void enablePower()
bool isPowered()
void enablePower()
Sintaxis
void enablePower()
Funcin
En modo desplazado, aplica la potencia al brazo.
Esta instruccin no tiene ningn efecto en los modos local, manual o prueba, o cuando la potencia est
siendo cortada.
Ejemplo
// Aplica la potencia y espera que est instalada
enablePower()
if(watch(isPowered(), 5) == false)
putln("No puede ponerse la potencia")
endIf
Vase tambin
void disablePower()
bool isPowered()
bool isPowered()
Sintaxis
bool isPowered()
Stubli Faverges 2008
Funcin
Reenva el estado de la potencia del brazo:
true: el brazo est con potencia
false: La potencia de brazo ha sido desactivada, o est siendo habilitada
D28065205B - 01/2008
101 / 186
bool isCalibrated()
Sintaxis
bool isCalibrated()
Funcin
Devuelve el estado de la calibracin del robot:
true: todos los ejes del robot estn calibrados
false: por lo menos un eje de robot no est calibrado
Funcin
Reenva el modo de funcionamiento en curso del robot:
Modo
Estado
Modo de funcionamento
Estado
No vlido o en transicin
3
4
0
1
2
3
4
5
6
0
1
2
3
0
1
2
0
1
2
Manual
Prueba
Local
Desplazado
Movimiento programado
Movimiento de conexin
Articular (Joint)
Cartesiano (Frame)
Herramienta (Tool)
Hacia punto (Point)
Hold
Movimiento programado (< 250 mm/s)
Movimiento de conexin (< 250 mm/s)
Movimiento rpido programado (> 250 mm/s)
Hold
Move (movimiento programado)
Move (movimiento de conexin)
Hold
Move (movimiento programado)
Move (movimiento de conexin)
Hold
Parmetros
Variable de tipo numrico.
num& nEstado
102 / 186
D28065205B - 01/2008
num esStatus()
Sintaxis
num esStatus()
Funcin
Reenva el estado del circuito de seales de seguridad:
Cdigo
Estado
Vase tambin
D28065205B - 01/2008
103 / 186
num getMonitorSpeed()
S6.4
Sintaxis
num getMonitorSpeed()
Funcin
Esta instruccin devuelve la velocidad del monitor actual del robot (en el rango [0, 100]).
Ejemplo
Este programa, a llamarse en una tarea especfica, comprueba que el primer ciclo del robot se haya
efectuado a baja velocidad:
while true
if(nCiclo < 2)
if (getMonitorSpeed()> 10)
stopMove()
gotoxy(0,0)
putln("For the first cycle the monitor speed must remain at 10%")
wait(getMonitorSpeed()> 10)
endIf
restartMove()
endIf
endWhile
Vase tambin
num setMonitorSpeed(num nVelocidad)
S6.4
Sintaxis
num setMonitorSpeed(<num nVelocidad>)
Funcin
Esta instruccin modifica la velocidad del monitor actual del robot. Es eficaz solamente si el robot est en
modo de funcionamiento remoto y si el operador no tiene acceso a la velocidad del monitor.
Devuelve 0 si la velocidad del monitor se ha modificado con xito, de lo contrario un cdigo de error
negativo:
Cdigo
Descripcin
-1
-2
La velocidad del monitor est bajo el control del operador: cambiar el perfil de usuario
actual para quitar el acceso del operador a la velocidad del monitor
-3
Vase tambin
num getMonitorSpeed()
104 / 186
D28065205B - 01/2008
S6.4
Sintaxis
num getVersion(<string nComponente>)
Funcin
Esta instruccin devuelve la versin de los diversos componentes de hardware y de software del
controlador del robot. El cuadro de abajo lista los componentes soportados y, para cada uno, el formato
del valor devuelto:
Componente
Descripcin
"VAL3"
"ArmType"
"Tuning"
"Mounting"
"ControllerSN"
"ArmSN"
"Starc"
La versin del paquete de firmware Starc (CS8C), como "1.16.3 - Sep 27 2007
- 16:01:17"
Nombre de la
licencia
Estado de la licencia del software del controlador: "" (no instalado o plazo de
demostracin vencido), "demo" o "enabled"
Los nombres de las licencias de controlador instaladas (por ejemplo "alter",
"compliance", "remoteMcp", "oemLicence", "plc", "testMode", "mcpMode",
etc.) se enumeran en el panel de control del robot colgante
Ejemplo
if getVersion("compliance")!="enabled"
putln("The compliance license is missing on the controller")
endIf
Vase tambin
D28065205B - 01/2008
105 / 186
106 / 186
D28065205B - 01/2008
CAPTULO 8
D28065205B - 01/2008
107 / 186
8.1.
INTRODUCCIN
Este captulo describe los tipos de datos VAL3 que permiten programar las posiciones del brazo
ocupadas en una aplicacin VAL3.
Se definen dos tipos de posiciones en VAL3: posiciones joint (tipo joint) que proporcionan la posicin
angular de cada eje angular y la posicin lineal para cada eje lineal, y puntos cartesianos (tipo point) que
proporcionan la posicin cartesiana del punto central de la herramienta en el extremo del brazo relativo a
un plano de referencia.
El tipo tool describe una herramienta y su geometra, utilizadas para posicionar y controlar la velocidad
del brazo; describe igualmente cmo activar la herramienta (salida digital, retardo).
El tipo frame describe un plano de referencia geomtrico. La ventaja de utilizar sistemas de referencia es
que hace ms sencillas e intuitivas las manipulaciones geomtricas, especialmente en los puntos.
El tipo trsf describe una transformacin geomtrica. Es utilizado por los tipos tool, point y frame.
Por ltimo, el tipo config describe la nocin ms avanzada de configuracin de brazo.
Las relaciones entre estos diferentes tipos pueden resumirse de la manera siguiente:
tool t22
Trsf
Trsf
point p21a
point p21b
Trsf
Trsf
tool t2
tool t1
point p1a
Trsf
Trsf
Trsf
frame f21
frame f22
Trsf
Trsf
point p2a
Trsf
frame f1
flange
Trsf
frame f2
Trsf
robot
world
8.2.
TIPO JOINT
8.2.1.
DEFINICIN
Un emplazamiento de articulacin (de tipo joint) define la posicin angular de cada articulacin y la
posicin lineal de cada eje de robot de eje lineal.
El tipo joint es un tipo estructurado cuyos campos, presentados en orden, son:
num j1
num j2
num j3
num j...
Estos campos se expresan en grados para los ejes rotativos, y en milmetros para los ejes lineales. El
origen de cada eje se define segn el tipo de brazo utilizado.
De manera predeterminada, cada campo de una variable de tipo joint se inicializa en el valor 0.
108 / 186
D28065205B - 01/2008
8.2.2.
OPERADORES
Para evitar confusiones entre los operadores = y ==, el operador = no est autorizado al interior de
expresiones VAL3 utilizadas como parmetro de instruccin.
8.2.3.
INSTRUCCIONES
Sintaxis
joint abs(joint jposicin)
Funcin
Devuelve el valor absoluto de un campo Posicin, campo por campo.
Parmetros
jPosition
Detalles
El valor absoluto de un campo, con los operadores de campo ">" o "<", permite calcular fcilmente la
distancia que separa la posicin de un campo de la posicin de referencia.
Ejemplo
Stubli Faverges 2008
Vase tambin
Operator < (joint)
Operator > (joint)
D28065205B - 01/2008
109 / 186
joint herej()
Sintaxis
joint herej()
Funcin
Reenva la posicin actual del campo del brazo.
Detalles
Con la potencia de brazo activada, el valor retornado es la posicin enviada a los amplificadores por el
controlador y no la posicin leada a partir de los codificadores de eje.
Con la potencia de brazo desactivada, el valor retornado es la posicin leda a partir de los codificadores
de eje; debido al ruido en las medidas del codificador, la posicin puede variar un poco, incluso con el
brazo detenido.
La posicin del campo del controlador se reactualiza cada 4 ms.
Ejemplo
//Esperar hasta que el brazo est cerca de la posicin de la referencia, con un tiempo de espera de 60 s
bStart = watch(abs(herej() - jMarca de referencia) < jMaxDistance, 60)
if bStart==false
popUpMsg("Move closer to the start position")
endIf
Vase tambin
point here(tool therramienta, frame fMarca de referencia)
bool getLatch(joint& jposicin) (CS8C only)
bool isInRange(joint jposicin)
Funcin
Prueba si la posicin de un campo se ajusta a los lmites de software de campo del brazo.
Parmetros
jPosition
Detalles
Cuando el brazo est fuera de los lmites de articulacin del software (tras una operacin de
mantenimiento), no puede moverse el brazo con una aplicacin VAL3; slo son posibles los movimientos
manuales (con la direccin de movimiento limitada al movimiento hacia los lmites).
Ejemplo
// Verifica que la posicin actual se site dentro de los lmites de campo
if isInRange(herej())==false
putln("Please place the arm within its workspace")
endIf
Vase tambin
joint herej()
110 / 186
D28065205B - 01/2008
Funcin
Activa el bloqueo de la posicin del robot sobre el prximo frente ascendente de la seal de entrada.
Parmetros
diEntrada
Detalles
El bloqueo de la posicin del robot es una funcin material que slo es soportada por las entradas rpidas
del controlador CS8C(io:fIn0, io:fIn1).
Slo se garantiza la deteccin del frente ascendente de la seal de entrada si la seal permanece baja al
menos durante 0.2 ms antes del frente ascendente, y alta durante al menos 0.2 ms despus del frente
ascendente.
ATENCIN:
El cerrojo slo se activa al cabo de un determinado tiempo (entre 0 y 0.2 ms) despus
de la ejecucin de la instruccin setLatch. Puede aadir una instruccin delay(0)
despus de setLatch para cerciorarse de que el cerrojo sea efectivo antes de la
ejecucin de la siguente instruccin VAL3.
Se genera el error 70 de tiempo de ejecucin (valor de parmetro invlido), si la entrada digital
especificada no soporta el seguro de posicin de robot.
Ejemplo
// activa el cerrojo durante la primera entrada rpida (CS8C)
setLatch(io:fIn0)
Vase tambin
D28065205B - 01/2008
111 / 186
Funcin
Lee la ltima posicin bloqueada del robot.
Parmetros
jposicin
Detalles
La funcin enva un mensaje si se puede leer una posicin bloqueada vlida. Si un cerrojo est pendiente,
o si el bloqueo nunca se activ, la funcin enva un mensaje false y la posicin no se actualiza.
getLatch reenva la misma posicin bloqueada mientras un nuevo cerrojo no sea activado por la
instruccin setLatch.
La posicin del brazo se reactualiza en el controlador CS8C cada 0.2 ms; la posicin bloqueada
corresponde a la posicin del brazo entre 0 y 0.2 ms despus del frente ascendente de la entrada rpida.
Ejemplo
// Espera una posicin bloqueada durante 5 segundos.
bLatch = watch(getLatch(jposicin)==true, 5)
if bLatch==true
putln("Posicin anclaje alcanzada")
else
putln("'No se ha detectado ninguna seal anclaje")
endif
Vase tambin
112 / 186
D28065205B - 01/2008
8.3.
TIPO TRSF
8.3.1.
DEFINICIN
Una transformacin (de tipo trsf) define un cambio de posicin y/o orientacin. Es la composicin
matemtica de una traslacin y una rotacin.
Una transformacin no representa por s misma una posicin en el espacio, pero puede interpretarse
como la posicin y orientacin de un punto cartesiano o plano relativo a otro plano.
El tipo trsf es un tipo estructurado, cuyos campos, presentados en orden, son:
num x
num y
num z
num rx
num ry
num rz
D28065205B - 01/2008
113 / 186
8.3.2.
ORIENTACIN
Orientacin
z1
z2
450 mm
x2
250 mm
y2
350 mm
y1
x1
y
20
x = x
A continuacin, el plano est girado 20 alrededor del eje y del sistema de referencia que se obtuvo en la
etapa anterior. Se obtiene un nuevo plano (x,y,z). Los ejes y y y se confunden.
114 / 186
D28065205B - 01/2008
10
y = y
x = x
y
x
Por ltimo, el sistema de referencia est girado 20 alrededor del eje z del sistema de referencia que se
obtuvo en la etapa anterior. El nuevo plano (x,y,z) obtenido es aquel cuya orientacin est definida
por rx, ry, rz. Los ejes z y z se confunden.
30
y
y = y
x = x
D28065205B - 01/2008
115 / 186
8.3.3.
OPERADORES
<trsf trPosicin2>
Para evitar confusiones entre los operadores = y ==, el operador = no est autorizado al interior de
expresiones VAL3 utilizadas como parmetro de instruccin.
8.3.4.
INSTRUCCIONES
Funcin
Reenva la distancia entre trPosicin1 y trPosicin2.
ATENCIN:
Para que la distancia sea vlida, es necesario que posicin 1 y posicin 2 sean
definidas respecto al mismo plano de referencia.
Parmetros
trsf trPosicin1
trsf trPosicin2
Ejemplo
Stubli Faverges 2008
// Muestra la distancia entre dos puntos, cualquiera que sea sus sistemas de referencia
putln(distance(position(point1, world), position(point2, world)))
Vase tambin
point appro(point pPosicin, trsf trTransformacin)
point compose(point pPosicin, frame fMarca de referencia, trsf trTransformacin)
trsf position(point pPosicin, frame fMarca de referencia)
num distance(point pPosicin1, point pPosicin2)
116 / 186
D28065205B - 01/2008
Funcin
Esta instruccin devuelve una posicin intermedia alineada con una posicin de inicio trInicio y una
posicin de objetivo trFin. El parmetro nPosicin especifica la interpolacin lineal a aplicar segn la
ecuacin, para la coordenada x: trsf.x0 = trInicio.x + (trFin.x-trInicio.x)*nPosicin. La misma ecuacin
sostiene las coordenadas Y y Z.
La orientacin rx, ry, rz se calcula con una ecuacin similar, pero ms compleja. El algoritmo utilizado por
interpolateL es igual al algoritmo utilizado por el generador de movimiento para calcular posiciones
intermedias sobre una instruccin de movimiento.
interpolateL(trInicio, trFin, 0) devuelve trInicio ; interpolateL(trInicio, trFin, 1) devuelve trFin ;
interpolateL(trInicio, trFin, 0.5) devuelve la posicin media entre trInicio y trFin. Un valor negativo del
parmetro nPosicin da lugar a una posicin "antes" de trInicio. Un valor superior a 1 da lugar a una
posicin "despus" de trFin.
Se genera un error de ejecucin si el parmetro nPosicin no est en el rango ]-1, 2[.
Vase tambin
trsf position(point pPosicin, frame fMarca de referencia)
trsf position(frame tPlano, frame fMarca de referencia)
trsf position(tool tHerramienta, tool tMarca de referencia)
trsf interpolateC(trsf trInicio, trsf trIntermediario, trsf trFin, num nPosicin)
trsf align(trsf trPosicin, trsf Marca de referencia)
S6.4
D28065205B - 01/2008
117 / 186
S6.4
Funcin
Esta instruccin devuelve una posicin intermedia respecto al arco de un crculo definido por las
posiciones trInicio, trIntermediario y trFin. El parmetro nPosicin especifica la interpolacin circular a
aplicarse. El algoritmo utilizado por interpolateC es igual al algoritmo utilizado por el generador del
movimiento para calcular posiciones intermedias respecto a una instruccin movec.
interpolateC(trInicio, trIntermediario, trFin, 0)
devuelve
trInicio ;
interpolateC(trInicio, trIntermediario, trFin, 1)
devuelve
trFin ;
interpolateC(trInicio, trIntermediario, trFin, 0.5) devuelve la posicin media respecto al arco entre trInicio
y trFin. Un valor negativo del parmetro nPosicin da lugar a una posicin "antes" de trInicio. Un valor
superior a 1 da lugar a una posicin "despus" de trFin.
Se genera un error de ejecucin si el arco no est correctamente definido (posiciones demasiado
cercanas), o si la interpolacin de la rotacin sigue siendo indeterminada (ver captulo "Control del
movimiento - interpolacin de la orientacin").
Vase tambin
trsf position(point pPosicin, frame fMarca de referencia)
trsf position(frame tPlano, frame fMarca de referencia)
trsf position(tool tHerramienta, tool tMarca de referencia)
trsf interpolateL(trsf trInicio, trsf trFin, num nPosicin)
118 / 186
D28065205B - 01/2008
S6.4
Sintaxis
trsf align(<trsf trPosicin>, <trsf Marca de referencia>)
Funcin
Esta instruccin devuelve la entrada trPosicin con la orientacin modificada de tal modo que el eje Z de
la orientacin devuelta est alineada con el eje ms cercano X, Y o Z de la orientacin de la referencia de
trMarca de referencia. Las coordenadas X, Y, Z de trPosicin y de trMarca de referencia no se utilizan:
las coordenadas x, y, z del valor devuelto son iguales a las coordenadas x, y, z de trPosicin.
Vase tambin
trsf position(point pPosicin, frame fMarca de referencia)
trsf position(frame tPlano, frame fMarca de referencia)
trsf position(tool tHerramienta, tool tMarca de referencia)
trsf interpolateL(trsf trInicio, trsf trFin, num nPosicin)
D28065205B - 01/2008
119 / 186
8.4.
TIPO FRAME
8.4.1.
DEFINICIN
point21a
point1a
point21b
frame 21
frame 21
point2a
frame1
frame2
world
De manera predeterminada, una variable de tipo frame utiliza world como sistema de referencia.
8.4.2.
UTILIZACIN
120 / 186
D28065205B - 01/2008
8.4.3.
OPERADORES
Para evitar confusiones entre los operadores = y ==, el operador = no est autorizado al interior de
expresiones VAL3 utilizadas como parmetro de instruccin.
8.4.4.
INSTRUCCIONES
Funcin
Calculas las coordenadas de fResult a partir de su punto de origen pOrigen, de un punto pEjeOx sobre
el eje (Ox), y un punto pPlanoOxy sobre el plano (Oxy).
El punto pEjeOx debe estar del lado de las x positivas. El punto pPlanoOxy debe estar del lado de las y
positivas.
La funcin reenva:
0
Sin error.
-1
-2
Se genera un error de ejecucin si uno de los puntos no tiene ningn plano de referencia.
Funcin
Esta instruccin devuelve las coordenadas del plano tPlano en el plano de referencia fMarca de
referencia.
Se genera un error de ejecucin si tPlano o fMarca de referencia no tienen ningn plano de referencia.
Vase tambin
trsf position(point pPosicin, frame fMarca de referencia)
trsf position(tool tHerramienta, tool tMarca de referencia)
D28065205B - 01/2008
121 / 186
S6.4
8.5.
TIPO TOOL
8.5.1.
DEFINICIN
dio gripper
num otime
num ctime
La herramienta bsica de una variable de tipo tool queda definida al inicializarla (desde la interfaz de
usuario, o por el operador =). La herramienta bsica flange, de tipo tool, est siempre definida en una
aplicacin VAL3: toda herramienta est, directamente o a travs de otras herramientas, vinculada a la
herramienta flange.
Un error de ejecucin se genera durante un clculo geomtrico si se han modificado las coordenadas de
la herramienta flange.
outil21
outil1
outil21
outil2
flange
De manera predeterminada, la salida de una herramienta es la salida io:vlvula1 del sistema, los tiempos
de apertura y cierre estn en 0, y la herramienta bsica es flange.
8.5.2.
UTILIZACIN
122 / 186
D28065205B - 01/2008
8.5.3.
OPERADORES
Para evitar confusiones entre los operadores = y ==, el operador = no est autorizado al interior de
expresiones VAL3 utilizadas como parmetro de instruccin.
D28065205B - 01/2008
123 / 186
8.5.4.
INSTRUCCIONES
Sintaxis
void open (tool tHerramienta)
Funcin
Acciona la herramienta (apertura) poniendo la salida digital de la herramienta en true.
Antes de accionar la herramienta, open() espera que el robot est en el punto al hacer el equivalente de
un waitEndMove(). Una vez activado, el sistema espera otime segundos antes de ejecutar la instruccin
siguiente.
Con esta instruccin, no es seguro que el robot sea estabilizado en su posicin final antes que la
herramienta se active. Cuando la espera de estabilizacin completa del movimiento es necesaria, se debe
utilizar la instruccin isSettled().
Se genera un error de ejecucin si el tHerramienta dio no est definido o no es una salida, o si no se
puede ejecutar un comando previamente grabado del movimiento.
Parmetros
tool tHerramienta
Ejemplo
// la instruccin open() es equivalente a:
waitEndMove()
therramienta.gripper=true
delay(therramienta.otime)
Vase tambin
void close(tool tHerramienta)
void waitEndMove()
Sintaxis
void close (tool tHerramienta)
Funcin
Acciona la herramienta (cierre) poniendo la salida digital de la herramienta en false.
Antes de accionar la herramienta, open() espera que el robot est parado en el punto al hacer el
equivalente de un waitEndMove(). Una vez activado, el sistema espera ctime segundos antes de ejecutar
la instruccin siguiente.
Con esta instruccin, no es seguro que el robot sea estabilizado en su posicin final antes que la
herramienta se active. Cuando la espera de estabilizacin completa del movimiento es necesaria, se debe
utilizar la instruccin isSettled().
Se genera un error de ejecucin si el tHerramienta dio no est definido o no es una salida, o si no se
puede ejecutar un comando previamente grabado del movimiento.
Parmetros
tool tHerramienta
Ejemplo
// la instruccin close es equivalente a:
waitEndMove()
therramienta.gripper = false
delay(therramienta.ctime)
Vase tambin
Type tool
void open(tool tHerramienta)
void waitEndMove()
124 / 186
D28065205B - 01/2008
Funcin
Esta instruccin devuelve las coordenadas de la herramienta tHerramienta en el plano de referencia de la
herramienta tMarca de referencia.
Se genera un error de ejecucin si tHerramienta o tMarca de referencia no tienen ninguna herramienta
de referencia.
Vase tambin
trsf position(point pPosicin, frame fMarca de referencia)
trsf position(frame tPlano, frame fMarca de referencia)
S6.4
D28065205B - 01/2008
125 / 186
8.6.
TIPO POINT
8.6.1.
DEFINICIN
El tipo point permite definir la posicin y la orientacin de la herramienta del robot en la clula.
El tipo point es un tipo estructurado con, como campos, en el orden siguiente:
trsf trTrsf
config config
El sistema de referencia de un point es una variable de tipo frame, que se define al iniciarla (desde la
interfaz de usuario, por el operador = y las instrucciones here(), appro() y compose()).
Definicin punto
Frame world
Frame f1
Point p0
Frame f2
Point p1
Point p2
Point p3
Se genera un error de ejecucin si se utiliza un tipo variable point sin plano de referencia definido.
ATENCIN:
De manera predeterminada, una variable local de tipo point no tiene un sistema de
referencia. Antes de utilizarla, debe inicializarse a partir de otro point, con el operador
=, o mediante una de las instrucciones here(), appro() y compose().
126 / 186
D28065205B - 01/2008
8.6.2.
OPERADORES
Para evitar confusiones entre los operadores = y ==, el operador = no est autorizado al interior de
expresiones VAL3 utilizadas como parmetro de instruccin.
D28065205B - 01/2008
127 / 186
8.6.3.
INSTRUCCIONES
Funcin
Reenva la distancia entre pPosicin1 y pPosicin2.
Se genera un error de ejecucin si pPosicin1 o pPosicin2 no tiene un plano de referencia definido.
Parmetros
point pPosicin1
point pPosicin2
Ejemplo
// Muestra la distancia entre dos puntos, cualquiera que sea sus sistemas de referencia
putln(distance(pPoint1, pPoint2))
Vase tambin
128 / 186
D28065205B - 01/2008
Funcin
Reenva pPosicin a la cual est aplicada la transformacin geomtrica trTransformacin definida
respecto a fMarca de referencia.
ATENCIN:
El componente de rotacin de tTransformacin modifica en general no slo la
orientacin de pPosicin, sino tambin sus coordenadas cartesianas (salvo si
pPosicin se sita en el origen de fMarca de referencia).
Si se desea que tTransformacin slo modifique la orientacin de pPosicin, hay que
actualizar el resultado con las coordenadas cartesianas de pPosicin (vase ejemplo).
El sistema de referencia y la configuracin del punto reenviado son los de pPosicin.
Se genera un error de ejecucin si pPosicin no tiene ningn plano de referencia definido.
Parmetros
point pPosicin
trsf trTransformacin
Ejemplo
point pResult
// modificacin de la orientacin sin modificacin de Posicin
pResult = compose (pPosicin,fMarca de referencia,trTransformacin)
pResult.trsf.x = pPosicin.trsf.x
pResult.trsf.y = pPosicin.trsf.y
pResult.trsf.z = pPosicin.trsf.z
// modificacin de Posicin sin modificacin de orientacin
trTransformacin.rx = trTransformacin.ry =trTransformacin.rz = 0
pResult = compose (pResult,fMarca de referencia,trTransformacin)
Vase tambin
D28065205B - 01/2008
129 / 186
Funcin
Esta instruccin devuelve un punto modificado por una transformacin geomtrica. La transformacin se
define relativamente al mismo plano de referencia que el punto de entrada.
El plano de referencia y la configuracin del punto devuelto son los del punto de entrada.
Se genera un error de ejecucin si pPosicin no tiene ningn plano de referencia definido.
Parmetros
point pPosicin
trsf trTransformacin
Ejemplo
// acrquese a 100 mm por encima del punto (eje Z)
point p
movej(appro(p,{0,0,-100,0,0,0}), flange, mNomDesc)
movel(p, flange, mNomDesc)
// Aproximacin
// Vaya al punto
Vase tambin
Operator trsf <trsf trPosicin1> * <trsf trPosicin2>
point compose(point pPosicin, frame fMarca de referencia, trsf trTransformacin)
Funcin
Reenva la posicin actual de la herramienta tHerramienta en fMarca de referencia (posicin ordenada y
no la posicin medida).
El sistema de referencia del punto reenviado es fMarca de referencia. La configuracin del punto
reenviado es la configuracin en curso del brazo.
Vase tambin
joint herej()
config config(joint jPosicin)
point jointToPoint(tool tHerramienta, frame fMarca de referencia, joint jPosicin)
130 / 186
D28065205B - 01/2008
Funcin
Retorna la posicin de tHerramienta en el plano fMarca de referencia, cuando el brazo se encuentra en
la posicin angular jPosicin.
El sistema de referencia del punto reenviado es fMarca de referencia. La configuracin del punto
reenviado es la configuracin del brazo en la posicin articular jPosicin.
Parmetros
tool tHerramienta
joint jPosicin
Vase tambin
point here(tool therramienta, frame fMarca de referencia)
bool pointToJoint(tool tHerramienta, joint jInicial, point pPosicin,joint& jResult)
Funcin
Esta instruccin calcula la posicin angular jResult que corresponde al punto especificado pPosicin.
Devuelve true si jResult se actualiza, false si no se ha encontrado ninguna solucin.
La posicin angular a localizar corresponde a la configuracin de pPosicin. Los campos de valor free no
imponen la configuracin. Los campos de valor same imponen la misma configuracin que jInicial.
Para los ejes que pueden dar ms de una vuelta, hay varias soluciones articulares que tienen
exactamente la misma configuracin: en ese caso se adopta la solucin ms cercana a la jInicial.
No puede haber una solucin si pPosicin est fuera de alcance (brazo demasiado corto) o fuera de los
topes de los softwares. Si pPosicin especifica una configuracin, puede estar fuera de los topes para
dicha configuracin, pero dentro de los topes para otra configuracin.
Se genera un error de ejecucin si pPosicin no tiene ningn plano de referencia definido.
tool tHerramienta
joint jInicial
point pPosicin
joint& jResult
Parmetros
Vase tambin
joint herej()
point jointToPoint(tool tHerramienta, frame fMarca de referencia, joint jPosicin)
D28065205B - 01/2008
131 / 186
Funcin
Reenva las coordenadas de pPosicin en fMarca de referencia.
Se genera un error de ejeucin si pPosicin no tiene ningn plano de referencia.
Ejemplo
// Muestra la distancia entre dos puntos, cualquiera que sea sus sistemas de referencia
putln(distance(position(pPoint1, world), position(pPoint2, world)))
Vase tambin
num distance(point pPosicin1, point pPosicin2)
trsf position(tool tHerramienta, tool tMarca de referencia)
132 / 186
D28065205B - 01/2008
8.7.
TIPO CONFIG
El concepto de configuracin del punto cartesiano es un concepto "avanzado"; si se lee este documento
por la primera vez, puede saltarse este captulo.
8.7.1.
INTRODUCCIN
En general, el robot tiene varias posibilidades para alcanzar una posicin cartesiana dada.
Estas diferentes posibilidades se llaman " configuraciones ". En la figura siguiente se representan dos
configuraciones diferentes:
En algunos casos, es importante especificar, entre todas las configuraciones posibles, las que son vlidas
y las que se quiere prohibir. Para resolver este problema, el tipo point permite especificar las
configuraciones admitidas para el robot gracias a su campo de tipo config que se define a continuacin.
8.7.2.
DEFINICIN
El tipo config permite definir las configuraciones autorizadas para una posicin cartesiana dada.
Depende del tipo de brazo utilizado.
Para un brazo Stubli RX/TX el tipo config es un tipo estructurado cuyos campos son, en este orden:
shoulder
elbow
wrist
configuracin de la mueca
Los campos shoulder, elbow y wrist pueden tomar los valores siguientes:
shoulder
lefty
ssame
sfree
D28065205B - 01/2008
righty
133 / 186
elbow
epositive
enegative
esame
efree
wrist
wpositive
wnegative
wsame
wfree
8.7.3.
OPERADORES
Para evitar confusiones entre los operadores = y ==, el operador = no est autorizado al interior de
expresiones VAL3 utilizadas como parmetro de instruccin.
134 / 186
D28065205B - 01/2008
8.7.4.
Configuracin: righty
Configuracin: lefty
D28065205B - 01/2008
135 / 186
Configuracin: enegative
Configuracin: epositive
Configuracin: wnegative
Configuracin: wpositive
D28065205B - 01/2008
8.7.5.
Para alcanzar un punto cartesiano, el brazo del robot puede estar a la derecha o a la izquierda del punto:
estas dos configuraciones se llaman respectivamente righty y lefty.
Configuracin: righty
Configuracin: lefty
La configuracin righty se define mediante sin(j2) > 0, la configuracin lefty se define mediante
sin(j2) < 0.
8.7.6.
INSTRUCCIONES
Funcin
Retorna la configuracin del robot para la posicin de articulacin jPosicin.
Parmetros
joint jPosicin
Vase tambin
Stubli Faverges 2008
D28065205B - 01/2008
137 / 186
138 / 186
D28065205B - 01/2008
CAPTULO 9
D28065205B - 01/2008
139 / 186
140 / 186
D28065205B - 01/2008
9.1.
CONTROL DE TRAYECTORIA
No basta con dar una sucesin de puntos para definir la trayectoria de un robot. Hay tambin que indicar
el tipo de trayectoria utilizado entre los puntos (curva o lnea recta), especificar cmo esas trayectorias se
conectan entre s, y por ltimo definir los parmetros relativos a la velocidad del movimiento. Por
consiguiente, esta seccin presenta los diferentes tipos de movimientos (instrucciones movej, movel y
movec) y describe cmo utilizar los parmetros de descriptor (de tipo mdesc).
9.1.1.
Los movimientos del robot se programan bsicamente con las instrucciones movej, movel y movec. La
instruccin movej permite hacer movimientos punto a punto, movel se utiliza para los movimientos en
lnea y movec en los movimientos circulares.
Un movimiento punto a punto es un movimiento donde slo importa el destino final (punto cartesiano o
articular). Entre el punto de partida y el punto de llegada, el centro de la herramienta sigue una curva
definida por el sistema de manera que se optimice la velocidad del movimiento.
Posicin final
Z
Y
Stubli Faverges 2008
Z
X
X
D28065205B - 01/2008
141 / 186
Movimiento circular
Z
Movimiento siguie
Movimiento anterior
Trayectoria descrita por la herramienta
durante el movimiento circular
Ejemplo:
Una tarea de manipulacin tpica consiste en coger piezas en un lugar dado y depositarlas en otro lugar.
Se supone que deben tomarse las piezas en el punto de toma pPick, y depositarlas en el punto de
dposito pPlace. Para ir del punto pPick al punto pPlace, el robot debe pasar por un punto de liberacin
pDepart y un punto de aproximacin pAppro.
Ciclo en: U
pLibera
X
Z
Pcoge
Paprox
Pdeposita
Se supone que el robot est inicialmente en el punto pPick. El programa para ejecutar el movimiento
puede escribirse:
movel(pDepart, tHerramienta, mDesc)
movej(pAppro, tHerramienta, mDesc)
movel(pPlace, tHerramienta, mDesc)
142 / 186
D28065205B - 01/2008
9.1.2.
ENCADENAMIENTO DE MOVIMIENTOS
9.1.2.1. ALISADO
Volvamos a examinar el ejemplo de ciclo en U del captulo anterior. Sin una gestin especial del
encadenamiento de los movimientos, el robot va a pararse en los puntos pDepart y pAppro, ya que la
trayectoria presenta ngulos en esos puntos. Esto aumenta intilmente la duracin de la operacin, y no
presenta ninguna utilidad pasar exactamente por esos puntos.
Es posible reducir considerablemente la duracin del movimiento "alisando" la trayectoria en las cercanas
de los puntos pDepart y pAppro. Para esto, se utiliza el campo blend del descriptor de movimiento.
Cuando el valor de este campo es off, la trayectoria del robot se para en cada punto. En cambio, cuando
este parmetro se pone en joint, la trayectoria se alisa en las cercanas de cada uno de los puntos y el
robot no se para ya en los puntos de paso.
Cuando el campo blend toma el valor joint, deben especificarse otros dos parmetros: leave y reach.
Estos parmetros determinan a qu distancia del punto de llegada se abandona la trayectoria nominal
(inicio del alisado), y a qu distancia del punto de llegada se vuelve unirse a ella (fin del alisado).
EA
Ejemplo:
Volvamos a examinar el programa del apartado "Tipos de movimiento: punto a punto o lnea recta". Es
posible modificar el programa de movimiento anterior:
D28065205B - 01/2008
mDesc.blend = joint
mDesc.leave = 50
mDesc.reach = 200
movel(pDepart, tHerramienta, mDesc)
mDesc.leave = 200
mDesc.reach = 50
movej(pAppro, tHerramienta, mDesc)
mDesc.blend = OFF
movel(pPlace, tHerramienta, mDesc)
143 / 186
Ciclo alisado
200
200
pLibera
pAprox
50
50
pCoge
pDeposita
El robot ya no se para en los puntos pDepart y pAppro. El movimiento resulta as ms rpido. Y no slo
eso, sino que ser tanto ms rpido cuanto ms grandes sean las distancias leave y reach.
9.1.2.2. ANULACIN DEL ALISADO
La instruccin waitEndMove() permite, entre otras cosas, anular el efecto del alisado. El robot termina
entonces completamente el ltimo movimiento programado hasta su punto de llegada, como si el campo
blend del descriptor de movimiento hubiera sido puesto en el valor off.
Por ejemplo, consideremos el programa siguiente:
mDesc.blend = joint
mDesc.leave = 10
mDesc.reach = 10
movej(pA, tHerramienta,
movej(pB, tHerramienta,
waitEndMove()
movej(pC, tHerramienta,
movej(pD, tHerramienta,
mDesc)
mDesc)
mDesc)
mDesc)
etc.
La trayectoria seguida por el robot es en este caso la siguiente:
pC
10
10
10
No smoothing at pB
(WaitEndMove())
10
10
pB
144 / 186
10
pD
10
D28065205B - 01/2008
9.1.3.
REANUDACIN DE MOVIMIENTO
Cuando la potencia del brazo se corta mientras que el robot no ha terminado sus movimientos, debido por
ejemplo a una parada de emergencia, debe hacerse una reanudacin de movimiento al volverse a aplicar
la potencia. Si se ha desplazado manualmente el brazo durante la parada, puede encontrarse en una
posicin alejada de su trayectoria normal. En ese caso hay que asegurarse que la reanudacin de
movimiento pueda hacerse sin colisin. El control de trayectoria del VAL3 proporciona la posibilidad de
gestionar la reanudacin de movimiento por medio de un "movimiento de conexin".
D28065205B - 01/2008
145 / 186
9.1.4.
Movimiento siguient
Movimiento anterior
Para una orientacin constante respecto a la trayectoria (por ejemplo, direccin Y del punto de
referencia herramienta tangente a la trayectoria), las posiciones de partida, de llegada y la posicin
intermedia para un crculo, deben tener la misma orientacin respecto a la trayectoria.
Movimiento siguiente
146 / 186
D28065205B - 01/2008
OK !
<
<
A
En particular, la programacin de un crculo completo requiere 2 instrucciones movec:
movec (B, C, Herramienta, mDesc)
movec (D, A, Herramienta, mDesc)
Crculo completo
Movimiento
anterior
Y
Stubli Faverges 2008
Movimiento
siguiente
D28065205B - 01/2008
147 / 186
Cuando se produce un cambio de la configuracin del hombro, el centro de la mueca del robot pasa
necesariamente por la vertical del eje 1 (no exactamente en el caso de robots con desfase).
En el caso de un cambio de la configuracin del codo, el brazo pasa necesariamente por la posicin brazo
tenso (j3 = 0).
148 / 186
D28065205B - 01/2008
En ciertos casos excepcionales, la lnea recta o el arco de crculo pasa efectivamente por una posicin
donde es posible un cambio de configuracin. En este caso, si la configuracin ha sido dejada libre, el
sistema puede decidir cambiar de configuracin en un movimiento en lnea recta o circular.
Para un movimiento circular, la configuracin del punto intermedio no se toma en cuenta. Slo cuentan las
configuraciones de las posiciones de partida y llegada.
D28065205B - 01/2008
149 / 186
Dicho de otro modo, en un movimiento en lnea recta o circular, slo puede imponerse una configuracin
si esta es compatible con la posicin de partida: entonces siempre puede especificarse una configuracin
libre, o bien idntica a la inicial.
9.2.
9.2.1.
PRINCIPIO
El sistema controla los movimientos del robot un poco como un piloto que conduce un coche. Por un lado,
adapta la velocidad del robot a la geometra de la trayectoria. Por otra parte, cuanto mejor se conoce la
trayectoria de antemano, ms efectivo puede mostrarse el sistema para optimizar la velocidad del
movimiento. Es por esta razn que el sistema no espera que el movimiento en curso del robot se haya
terminado para tomar en cuenta las prximas instrucciones de movimiento.
Consideremos las siguientes lneas de programa:
movej
movej
movej
movej
(pA,
(pB,
(pC,
(pD,
tHerramienta,
tHerramienta,
tHerramienta,
tHerramienta,
mDesc)
mDesc)
mDesc)
mDesc)
Supongamos que el robot est parado cuando la ejecucin del programa alcanza estas lneas. Cuando se
ejecuta la primera instruccin, el robot comienza su movimiento hacia el punto pA. La ejecucin del
programa prosigue entonces inmediatamente con la segunda lnea, mucho antes que el robot alcance el
punto pA.
Cuando el sistema ejecuta la segunda lnea, el robot est comenzando su movimiento hacia pA y el
sistema registra que, despus del punto pA, el robot deber ir al punto pB. La ejecucin del programa
contina entonces con la lnea siguiente: mientras que el robot contina su movimiento hacia pA, el
sistema registra que, despus del movimiento hacia pB, el robot deber dirigirse a pC. Puesto que el
programa se ejecuta mucho ms rpido que los movimientos reales del robot, al ejecutar la lnea
siguiente, el robot probablemente contina desplazndose hacia pA. El sistema registra de esta forma los
puntos sucesivos siguientes.
As, en el momento en que el robot comienza su movimiento hacia pA, ya 'sabe' que, despus de pA
deber ir sucesivamente a pB, pC y finalmente pD. Si el alisado ha sido activado, el sistema sabe que el
robot no se parar antes del punto pD. Puede entonces acelerar mucho ms que si debiera a prepararse
a pararse en pB o pC.
150 / 186
D28065205B - 01/2008
La ejecucin de las lneas de comando no hace sino registrar los comandos de movimiento sucesivos. El
robot los efecta a continuacin segn sus posibilidades. La memoria en la que se registran los
movimientos es importante, con objeto de permitir que el sistema optimice la trayectoria al mximo. No
obstante, es limitada. Cuando est llena, la ejecucin del programa se para en la prxima instruccin de
movimiento. La ejecucin del programa se reanuda en cuanto el robot ha terminado el movimiento en
curso, liberando as espacio en la memoria del sistema.
9.2.2.
ANTICIPACIN Y ALISADO
Volvemos en este apartado a lo que sucede en detalle cuando se encadenan los movimientos. Tomemos
el ejemplo anterior:
movej
movej
movej
movej
(pA,
(pB,
(pC,
(pD,
tHerramienta,
tHerramienta,
tHerramienta,
tHerramienta,
mDesc)
mDesc)
mDesc)
mDesc)
Se supone que el alisado est activado en el descriptor de movimiento mDesc. Cuando se ejecuta la
primera lnea, el sistema no sabe todava cul ser el movimiento siguiente. Slo el movimiento entre el
punto inicial y el punto pA leave est completamente determinado; estando el punto pA leave
determinado por el sistema a partir del dato leave del descriptor de movimientos (vase figura siguiente).
Ciclo alisado
pA
pA leave
pC
pC leave
pA reach
pB leave
pC reach
pB reach
pB
pD
Mientras que no haya sido ejecutada la segunda lnea, la porcin de trayectoria de alisado cercana al
punto pA no est completamente determinada, ya que el sistema no ha tomado en cuenta todava el
movimiento siguiente. En el modo paso a paso, mientras que el usuario no pase a la instruccin siguiente,
el robot no ir ms lejos que el punto pA leave. En el momento en que se ejecuta la instruccin siguiente,
la trayectoria de alisado cercana al punto pA (entre pA leave y pA reach) puede ser definida, as como el
movimiento hasta el punto pB leave. El robot puede entonces avanzar hasta el punto pB leave. En el
modo paso a paso, no exceder este punto mientras que el usuario no ejecute la tercera instruccin, y as
sucesivamente.
9.2.3.
SINCRONIZACIN
El mecanismo de anticipacin causa una desincronizacin entre las lneas de instrucciones VAL3 y los
movimientos correspondientes del robot: el programa VAL3 est adelantado respecto al robot.
Cuando se quiere efectuar una accin en una posicin dada del robot, es necesario que el programa
espere que el robot haya terminado sus movimientos: la instruccin waitEndMove() permite esta
sincronizacin.
D28065205B - 01/2008
151 / 186
Este modo de funcionamiento es interesante porque el robot pasa exactamente por el mismo sitio en el
modo paso a paso y en ejecucin normal del programa.
9.3.
CONTROL DE VELOCIDAD
9.3.1.
PRINCIPIO
2.
La aceleracin determina la rapidez con la cual la velocidad aumenta al comienzo de una trayectoria.
Inversamente, la deceleracin define la rapidez con la cual la velocidad disminuye al final de la trayectoria.
Cuando se utilizan grandes valores de aceleracin y deceleracin, los movimientos son ms rpidos, pero
ms bruscos. Con valores reducidos, los movimientos toman un poco ms de tiempo, pero se hacen con
mayor suavidad.
9.3.2.
AJUSTE SENCILLO
Ponga las restricciones de velocidad cartesiana en valores muy grandes, por ejemplo los valores
predeterminados, para que estas no intervengan en el resto del ajuste.
2.
3.
4.
9.3.3.
AJUSTE AVANZADO
Cuando se quiere controlar la velocidad cartesiana a nivel de la herramienta, por ejemplo para obtener
una trayectoria efectuada a velocidad constante, se proceder ms bien de la manera siguiente:
1.
Ponga las restricciones de velocidades cartesianas en los valores que a priori se deseen.
2.
3.
4.
152 / 186
D28065205B - 01/2008
9.3.4.
ERROR DE ARRASTRE
Los valores nominales para velocidad y aceleracin de articulacin son los valores de carga nominales
soportados por el robot, al margen de la trayectoria.
Pero el robot puede con frecuencia ir ms rpido: las velocidades mximas alcanzables por el robot
dependen de su carga y de la trayectoria. En casos favorables (carga reducida, impacto favorable de la
gravedad) el robot podr exceder sus valores nominales sin ningn perjuicio.
Si el robot transporta una carga superior a su carga nominal, o si los valores de velocidad y aceleracin de
articulacin son demasiado elevados, el robot no puede obedecer a sus mandos de movimiento y se
detiene cuando se produce un error de envoltura. Estos errores pueden evitarse, especificando
parmetros menores de velocidades y aceleracin.
ATENCIN:
En el caso de movimientos en lnea recta cerca a una singularidad, el movimiento de
una herramienta pequea requiere amplios movimientos de articulacin. Si la velocidad
se configura demasiado elevada, el robot no puede obedecer el mando y se detiene,
cuando se produce un error de envoltura.
9.4.
Los comandos de movimiento que se han abordado hasta ahora no tienen un efecto inmediato: en el
momento en que cada uno de ellos se ejecuta, el sistema registra una orden de movimiento. El robot
ejecuta a continuacin los movimientos registrados.
Es posible intervenir inmediatamente en el movimiento del robot de las siguientes maneras:
La velocidad del monitor modifica la velocidad de todos los desplazamientos. Esta puede ajustarse
nicamente mediante el mando manual del robot, y no en una aplicacin VAL3. Sin embargo, la
instruccin speedScale() permite que una aplicacin conozca la velocidad del monitor corriente y,
por lo tanto, si fuera necesario, solicitar al usuario su reduccin durante una reanudacin de ciclo, o
ponerla al 100% en produccin.
Las instrucciones stopMove() y restartMove() permiten la parada y la reanudacin de movimiento
en la trayectoria.
La instruccin resetMotion() permite parar el movimiento en curso y anular los comandos de
movimientos registrados.
La instruccin Alter (opcin) se refiere a la trayectoria de una transformacin geomtrica (translacin,
rotacin, rotacin en el punto del centro de herramienta) que es inmediatamente efectiva.
D28065205B - 01/2008
153 / 186
154 / 186
D28065205B - 01/2008
9.5.
TIPO MDESC
9.5.1.
DEFINICIN
El tipo mdesc permite definir los parmetros de un movimiento (velocidad, aceleracin, alisado).
El tipo mdesc es un tipo estructurado cuyos campos, presentados en orden, son:
num accel
num vel
num decel
num tvel
num rvel
blend
blend
num leave
num reach
9.5.2.
OPERADORES
campo
al
D28065205B - 01/2008
155 / 186
9.6.
INSTRUCCIONES DE MOVIMIENTO
Funcin
Registra un mando para el movimiento de una articulacin hacia las posiciones pPosicin o jPosicin,
utilizando los parmetros de movimiento tHerramienta y mDesc.
ATENCIN:
El sistema no espera el final del movimiento para pasar a la siguiente instruccin VAL3:
varios comandos de movimientos pueden haber sido registrados de antemano. Cuando
al sistema no le queda ms memoria disponible para registrar un nuevo comando, la
instruccin espera hasta que pueda hacerse el registro.
La explicacin detallada de los diferentes parmetros de movimiento se da al comienzo del
captulo "Control de los movimientos".
Se genera un error de ejecucin si mDesc contiene valores invlidos, si jPosicin se sita fuera de los
topes de software, si pPosicin no puede alcanzarse o si una solicitud de movimiento anteriormente
registrada no puede realizarse (posicin fuera de alcance).
Parmetros
tool tHerramienta
mdesc mDesc
joint jPosicin
point pPosicin
Vase tambin
156 / 186
D28065205B - 01/2008
Funcin
Registra un mando para un movimiento lineal hacia el punto pPosicin, utilizando la herramienta
tHerramienta y los parmetros de movimiento mDesc.
ATENCIN:
El sistema no espera el final del movimiento para pasar a la siguiente instruccin VAL3:
varios comandos de movimientos pueden haber sido registrados de antemano. Cuando
al sistema no le queda ms memoria disponible para registrar un nuevo comando, la
instruccin espera hasta que pueda hacerse el registro.
La explicacin detallada de los diferentes parmetros de movimiento se da al comienzo del
captulo "Control de los movimientos".
Se genera un error de ejecucin si mDesc contiene valores invlidos, si pPosicin no puede alcanzarse,
si un movimiento en lnea recta hacia pPosicin no es posible o si una solicitud de movimiento
anteriormente registrada no puede realizarse (destino fuera de alcance).
Parmetros
point pPosicin
tool tHerramienta
mdesc mDesc
Vase tambin
D28065205B - 01/2008
157 / 186
Funcin
Graba un comando de movimiento circular partiendo del destino del movimiento anterior haste el point
pObjetivo y pasando por el point pIntermediario.
La orientacin de la herramienta se interpola de modo que es posible programar una orientacin
constante en absoluto, o respecto a la trayectoria.
ATENCIN:
El sistema no espera el final del movimiento para pasar a la siguiente instruccin VAL3:
varios comandos de movimientos pueden haber sido registrados de antemano. Cuando
al sistema no le queda ms memoria disponible para registrar un nuevo comando, la
instruccin espera hasta que pueda hacerse el registro.
La explicacin detallada de los diferentes parmetros de movimiento e interpolacin de la
orientacin se proporciona al comienzo del captulo "Control de los movimientos".
Se genera un error de ejecucin si mDesc tiene valores invlidos, si point pIntermediario (o point
pObjetivo) no puede alcanzarse, si el movimiento circular no es posible (ver el captulo "Control de los
movimientos - Interpolacin de la orientacin") o si una solicitud de movimiento anteriormente registrada
no puede realizarse (destino fuera de alcance).
Parmetros
point pIntermediario
point pObjetivo
tool tHerramienta
mdesc mDesc
Vase tambin
158 / 186
D28065205B - 01/2008
void stopMove()
Sintaxis
void stopMove()
Funcin
Para el brazo en la trayectoria y suspende la autorizacin de movimiento programada.
ATENCIN:
Esta instruccin devuelve inmediatamente: la tarea VAL3 no espera la parada del brazo
para ejecutar la instruccin siguiente.
Los parmetros cinemticos utilizados para efectuar la parada son aquellos del movimiento en curso.
Los movimientos no pueden reanudarse sino despus de ejecutar una instruccin restartMove() o
resetMotion().
Los movimientos no programados (desplazamientos manuales) son posibles.
Ejemplo
wait (diSignal==true)
stopMove()
<instructions>
restartMove()
Vase tambin
void restartMove()
void resetMotion(), void resetMotion(joint jpartida)
Funcin
Para el brazo en la trayectoria y anula todos los comandos de movimientos registrados.
ATENCIN:
Esta instruccin devuelve inmediatamente: la tarea VAL3 no espera la parada del brazo
para ejecutar la instruccin siguiente.
Si se especifica la posicin articular jpartida, el prximo comando de movimiento slo podr ejecutarse a
partir de esta posicin: deber efectuarse previamente un movimiento de conexin para alcanzar jpartida.
Si no se especifica ninguna posicin articular, el prximo comando de movimiento se ejecutar a partir de
la posicin en curso del brazo, fuera la que fuera.
Vase tambin
bool isEmpty()
void stopMove()
void autoConnectMove(bool bActivo), bool autoConnectMove()
D28065205B - 01/2008
159 / 186
La autorizacin de movimiento programado puede restaurarse si haba sido suspendida por la instruccin
stopMove().
void restartMove()
Sintaxis
void restartMove()
Funcin
Restaura la autorizacin de movimiento programado, y reanuda la trayectoria interrumpida por la
instruccin stopMove().
Si la autorizacin de movimiento programado no ha sido interrumpida por la instruccin stopMove(), esta
instruccin no tiene ningn efecto.
Vase tambin
void stopMove()
void resetMotion(), void resetMotion(joint jpartida)
void waitEndMove()
Sintaxis
void waitEndMove()
Funcin
Anula el alisado del ltimo comando de movimiento registrado, y espera que este comando sea ejecutado.
Esta instruccin no espera que el robot se estabilice en su posicin final, solamente que la consigna de la
posicin enviada a los variadores corresponda a la posicin final deseada. Cuando la espera de
estabilizacin completa del movimiento es necesaria, se debe utilizar la instruccin isSettled().
Se genera un error de ejecucin si un movimiento registrado anteriormente no puede realizarse (destino
fuera de alcance).
Ejemplo
waitEndMove()
putln(sel(isEmpty(),1,-1))
putln(sel(isSettled(),1,-1))
watch(isSettled(), 1)
Vase tambin
bool isSettled()
bool isEmpty()
void stopMove()
void resetMotion(), void resetMotion(joint jpartida)
160 / 186
D28065205B - 01/2008
bool isEmpty()
Sintaxis
bool isEmpty()
Funcin
Reenva true si todos los comandos de movimiento han sido ejecutados, false si queda por lo menos un
comando en curso.
Ejemplo
// Si hay comandos en curso
if ! isEmpty()
// Parar el robot y anular los comandos
resetMotion()
endIf
Vase tambin
void waitEndMove()
void resetMotion(), void resetMotion(joint jpartida)
bool isSettled()
Sintaxis
bool isSettled()
Funcin
Reenva true si el robot est parado, false si su posicin no est ya estabilizada.
La posicin se considera estabilizada cuando el error de posicin en cada eje permanece, durante 50 ms,
inferior al 1% del error de posicin mxima autorizada.
Vase tambin
bool isEmpty()
void waitEndMove()
Funcin
En modo desalineado, el movimiento de conexin es automtico si el brazo est muy cerca de su
trayectoria (distancia inferior al error de arrastre mximo autorizado). Si el brazo est demasiado alejado
de su trayectoria, el movimiento de conexin ser automtico o con control manual segn el modo
definido por la instruccin autoConnectMove: automtico si bActivo vale true, bajo control manual si
bActivo vale false. De ser llamado sin parmetro, autoConnectMove voltea el modo de movimiento de
conexin en curso.
ATENCIN:
En condiciones normales de uso, el brazo se detiene en su trayectoria cuando se da
una parada de emergencia. Por consiguiente, en modo desalineado, el brazo podr
accionarse de nuevo automticamente en cualquier modo de movimiento de conexin
definido por la instruccin autoConnectMove.
Vase tambin
void resetMotion(), void resetMotion(joint jpartida)
D28065205B - 01/2008
161 / 186
De manera predeterminada, el movimiento de conexin en modo desplazado est bajo control manual.
S6.4
Sintaxis
num getSpeed(<tool tHerramienta>)
Funcin
Esta instruccin reenva la velocidad de translacin cartesiana actual al extremo de la herramienta tTool
especificada. La velocidad se calcula a partir de la solicitud de velocidad de la articulacin y no del retorno
de velocidad de la articulacin.
Vase tambin
point here(tool therramienta, frame fMarca de referencia)
num getPositionErr()
S6.4
Sintaxis
num getPositionErr()
Funcin
Esta instruccin reenva el error de posicin de articulacin actual del brazo. El error de posicin de la
articulacin es la diferencia entre el mando de posicin de la articulacin enviada a los motores y el
retorno de posicin de la articulacin medida por los codificadores.
Vase tambin
void getJointForce(num& nFuerza)
S6.4
Sintaxis
void getJointForce(<num& nFuerza>)
Funcin
Esta instruccin reenva el par actual (N.m para el eje de revolucin) o lo fuerza (N para el eje lineal) sobre
la articulacin calculados a partir de las intensidades del motor.
La fuerza sobre la articulacin no es una estimacin directa de los esfuerzos externos. Tambin incluye la
gravedad, la friccin, la viscosidad, la inercia, el ruido y la precisin de los captadores de intensidad, la
relacin entre la intensidad del motor y el par. Slo puede utilizarse para estimar los esfuerzos externos
registrando las fuerzas en condiciones de referencia y comparndolas con las fuerzas medidas en
condiciones similares con esfuerzos externos suplementarios
Slo proporciona una magnitud de las fuerzas. Su precisin no est garantizada y se debe evaluar para
cada aplicacin.
Vase tambin
num getPositionErr()
162 / 186
D28065205B - 01/2008
Captulo 10 - Opciones
CAPTULO 10
OPCIONES
D28065205B - 01/2008
163 / 186
164 / 186
D28065205B - 01/2008
Captulo 10 - Opciones
10.1.2. PROGRAMACIN
Los movimientos consecuentes se programan como movimientos estndar con las instrucciones movelf()
y movejf(), permitiendo un parmetro adicional para controlar el esfuerzo ejercido por el brazo. Durante el
movimiento consecuente, se efectan limitaciones de velocidad, como en un movimiento estndar, a
partir del descriptor de movimiento. El movimiento puede hacerse en la trayectoria en un sentido como en
el otro.
Es posible encadenar movimientos consecuentes, o encadenar movimientos consecuentes y movimientos
estndar: en cuanto se alcanza la posicin de destino, el robot prosigue con el comando de movimiento
siguiente. La instruccin waitEndMove() permite esperar el final de un movimiento consecuente.
La instruccin resetMotion() anula todos los movimientos, sean estos consecuentes o no. Despus de la
instruccin resetMotion(), el robot deja de ser consecuente.
Las instrucciones stopMove() y restartMove() se aplican tambin a los movimientos consecuentes:
stopMove() fuerza la velocidad del movimiento en curso a cero. Si se trata de un movimiento
consecuente, ste ser as detenido, y el robot dejar de ser consecuente hasta la ejecucin del
restartMove().
Por ltimo, la instruccin isCompliant() permite asegurarse que el robot est efectivamente en el modo
consecuente antes, por ejemplo, de autorizar un esfuerzo exterior sobre el brazo.
Cuando el parmetro de esfuerzo es negativo, todo sucede como si un esfuerzo exterior tirara el brazo
hacia su posicin inicial: para desplazar el brazo hacia la posicin comandada, hay entonces que
suministrar un esfuerzo exterior ms fuerte que el esfuerzo comandado.
El parmetro fuerza se expresa como porcentaje de la carga nominal del brazo. 100% significa que el
brazo aplica una fuerza hacia la posicin solicitada, que es equivalente a la carga nominal. En rotacin,
100% corresponde al par nominal autorizado sobre el brazo.
Cuando la velocidad o la aceleracin del brazo alcanzan los valores especificados en el descriptor de
movimiento, el robot se opone con toda su potencia a cualquier tentativa de aumento de velocidad o de
aceleracin.
D28065205B - 01/2008
165 / 186
Cuando el parmetro de esfuerzo es positivo, todo sucede como si un esfuerzo exterior empujara el brazo
hacia la posicin comandada: el brazo se desplaza entonces completamente solo, pero puede ser
retenido o acelerado por una accin exterior que se aade al esfuerzo comandado.
10.1.4. LIMITACIONES
Los movimientos consecuentes presentan las siguientes limitaciones:
- No es posible utilizar el alisado al comienzo o al final de un movimiento consecuente: el brazo
marcar necesariamente una parada al comienzo y al final de cada movimiento consecuente.
- Cuando se produce un movimiento consecuente, el brazo puede regresar hacia atrs hacia su
punto de inicio, pero no puede excederlo: el brazo se para entonces brutalmente en el punto de
inicio.
- El parmetro de esfuerzo en el brazo no puede exceder 1000%. La precisin obtenida sobre el
esfuerzo est limitada por los rozamientos internos. Esta depende en gran parte de la posicin del
brazo y de la trayectoria pedida.
- Los movimientos consecuentes largos requieren mucha memoria interna. Se genera un error de
ejecucin si el sistema no tiene suficiente memoria para realizar completamente el movimiento.
10.1.5. INSTRUCCIONES
Funcin
Registra un mando de movimiento de articulacin conforme, hacia la posicin jPosicin, utilizando la
herramienta tHerramienta, los parmetros de movimiento mDesc, y un mando de fuerza nFuerza.
El mando de fuerza nFuerza es un valor numrico que representa la fuerza del brazo, que no puede
sobrepasar 1000. Un valor de 100 corresponde aproximadamente a la masa nominal del brazo.
ATENCIN:
El sistema no espera el final del movimiento para pasar a la siguiente instruccin VAL3:
varios comandos de movimientos pueden haber sido registrados de antemano. Cuando
al sistema no le queda ms memoria disponible para registrar un nuevo comando, la
instruccin espera hasta que pueda hacerse el registro.
La explicacin detallada de los diferentes parmetros de movimiento se proporciona al comienzo del
captulo.
Se genera un error de ejecucin si mDesc o nFuerza tiene valores invlidos, si jPosicin est fuera de
los topes de software, si el movimiento anterior requiere un alisado, o si un mando de movimiento
anteriormente registrado no puede realizarse (destino fuera de alcance).
Parmetros
tool tHerramienta
mdesc mDesc
joint jPosicin
num nFuerza
Vase tambin
void movelf(point pPosicin, tool tHerramienta, mdesc mDesc, num nFuerza)
bool isCompliant()
166 / 186
D28065205B - 01/2008
Captulo 10 - Opciones
Funcin
Registra un comando de movimiento consintiente hacia la posicin pPosicin, con la herramienta
tHerramienta, los parmetros de movimiento mDesc, y un comando de esfuerzo nFuerza.
El mando de fuerza nFuerza es un valor numrico que representa la fuerza del brazo, que no puede
sobrepasar 1000. Un valor de 100 corresponde aproximadamente a la masa nominal del brazo.
ATENCIN:
El sistema no espera el final del movimiento para pasar a la siguiente instruccin VAL3:
varios comandos de movimientos pueden haber sido registrados de antemano. Cuando
al sistema no le queda ms memoria disponible para registrar un nuevo comando, la
instruccin espera hasta que pueda hacerse el registro.
La explicacin detallada de los diferentes parmetros de movimiento se proporciona al comienzo del
captulo.
Se genera un error de ejecucin si mDesc o nFuerza tiene valores invlidos, si pPosicin no es
alcanzable, si el movimiento hacia pPosicin es imposible en lnea recta, si el movimiento anterior
requiere un alisado, o si un mando de movimiento anteriormente registrado no puede realizarse (destino
fuera de alcance).
Parmetros
point pPosicin
tool tHerramienta
mdesc mDesc
num nFuerza
Vase tambin
D28065205B - 01/2008
167 / 186
bool isCompliant()
Sintaxis
bool isCompliant()
Funcin
Reenva true si el robot est en modo consecuente; en caso contrario, false.
Ejemplo
movelf(pPosicin, tHerramienta,
mDesc, 0)
wait(isCompliant())
diEjection = true
waitEndMove()
movej(jDepart, tHerramienta, mDesc)
//
//
//
//
Vase tambin
168 / 186
D28065205B - 01/2008
Captulo 10 - Opciones
10.2.2. PROGRAMACIN
La programacin consiste en definir en primer lugar la trayectoria nominal, y luego en definir la diferencia
correspondiente en tiempo real.
La trayectoria nominal se programa de la misma manera que los movimientos estndares, por medio de
las instrucciones alterMovel(), alterMovej() y alterMovec(). Varios movimientos modificables pueden
sucederse, o algunos movimientos modificables pueden alternarse con movimientos no alterables.
Definiremos una trayectoria modificable como la sucesin de comandos de movimiento modificables
situados entre dos comandos de movimiento no modificables.
La modificacin propiamente dicha se programa por medio de la instruccin alter(). Distintos modos alter
son posibles en funcin de la transformacin geomtrica por practicar; el modo se define por medio de la
instruccin alterBegin(). La instruccin alterEnd() sirve, finalmente, para indicar cmo debe terminarse la
modificacin, ya sea antes del final del movimiento nominal, para poder secuenciar el prximo movimiento
no alterable sin causar un paro; o bien despus, para poder desplazar el brazo por medio de alter
mientras que el movimiento nominal est parado.
Las otras instrucciones de mando de movimiento siguen siendo efectivas en modo alter.
ATENCIN:
Las instrucciones waitEndMove, open y close esperan el final del movimiento nominal,
y no el final del movimiento modificado. Por consiguiente, se reanuda la ejecucin de
VAL3, tras un waitEndMove, incluso si brazo contina desplazndose, debido a una
alteracin cambiante.
169 / 186
10.2.3. EXIGENCIAS
10.2.4. SEGURIDAD
En cualquier momento, la modificacin del usuario puede ser invlida: objetivo fuera de alcance,
velocidad o aceleracin demasiado elevadas. Cuando el sistema detecta situaciones de este tipo, se
genera un error y se detiene bruscamente el brazo en la ltima posicin vlida. Es necesario restablecer
en primer lugar el movimiento antes de volver a iniciar el funcionamiento.
Cuando el movimiento del brazo se desactiva en el transcurso de un movimiento (modo mantenimiento,
solicitud de parada o parada de emergencia), el mando de parada se ejerce tanto sobre los movimientos
nominales como sobre los movimientos estndares. Al cabo de un determinado tiempo de espera, el
modo alter tambin se desactiva automticamente con el fin de garantizar una parada completa del brazo.
Cuando desaparece el estado de parada, el movimiento se reanuda y se reactiva automticamente el
modo alter.
10.2.5. LIMITACIONES
Los movimientos nulos (cuando el objetivo de movimiento se encuentra en posicin de inicio) no son
considerados por el sistema. En consecuencia, debe recurrir a un movimiento no nulo para pasar a modo
alter.
No se puede especificar la configuracin que debe aplicarse a la trayectoria modificada; en efecto, el
sistema siempre utiliza la misma configuracin. Por lo tanto, es imposible modificar la configuracin del
brazo dentro de una trayectoria modificada (incluso utilizando la instruccin alterMovej).
10.2.6. INSTRUCCIONES
Funcin
Registra un mando de movimiento de campo modificable (una lnea en el espacio del campo)
Parmetros
jPosicin/pPosicin
tHerramienta
mDesc
Detalles
Esta instruccin se comporta exactamente como la instruccin movej, salvo que no autoriza el modo alter
para el movimiento. Ver movej para ms informacin.
170 / 186
D28065205B - 01/2008
Captulo 10 - Opciones
Funcin
Registra un mando de movimiento lineal modificable (una lnea en el espacio cartesiano)
Parmetros
pPosicin
tHerramienta
mDesc
Detalles
Esta instruccin se comporta exactamente como la instruccin movel, salvo que no autoriza el modo alter
para el movimiento. Ver movel para ms informacin.
void alterMovec
(point pIntermediario, point pObjetivo, tool tHerramienta, mdesc m
Desc)
Sintaxis
void alterMovec(point pIntermediario, point pObjetivo, tool tHerramienta, mdesc mDesc)
Funcin
Registra un mando de movimiento circular modificable.
pIntermediario
pObjetivo
tHerramienta
mDesc
Detalles
Esta instruccin se comporta exactamente como la instruccin movec, salvo que no autoriza el modo alter
para el movimiento. Ver movec para ms informacin.
D28065205B - 01/2008
171 / 186
Parmetros
Funcin
Parmetros
fReferenciaAlter/
tReferenciaAlter
mVelocidadMxima
Detalles
El modo alter iniciado con alterBegin slo se termina mediante un mando alterEnd, o mediante un
resetMotion. Cuando se alcanza el fin de una trayectoria modificable, el modo alter permanece activo
hasta la ejecucin de alterEnd.
La expresin trsf del mando alter define una transformacin de la trayectoria entera en torno a
alterReference:
La trayectoria gira alrededor del centro del marco o de la herramienta utilizando la parte de rotacin
del trsf.
La trayectoria luego se somete a una translacin por la parte de translacin del trsf.
Las coordenadas trsf del mando alter se definen en la base alterReference.
Cuando se utiliza un marco como referencia, el alterReference es fijo en el espacio (World). Este modo
debe utilizarse cuando la divergencia de la trayectoria se conoce o mide en el espacio cartesiano (parte
mvil como el rastreo del transportador).
Cuando se utiliza una herramienta como referencia, el alterReference es fijo con relacin al punto del
centro de la herramienta. Este modo debe utilizarse cuando la diferencia de la trayectoria se conoce o se
mide con relacin al punto del centro de la herramienta (por ejemplo el sensor de forma de pieza montado
sobre la herramienta).
Se utiliza el descriptor de movimiento para definir la velocidad de campo y la velocidad cartesiana mxima
sobre la trayectoria modificada (con la ayuda de los campos vel, tvel y rvel del descriptor de movimiento).
Se genera un error y se detiene el brazo en la trayectoria si la velocidad modificada supera los lmites
especificados.
Cuando se produce una parada (eStop, modo espera, VAL3 stopMove()), los campos de aceleracin y
deceleracin del descriptor de movimiento controlan el tiempo de parada: La modificacin de la trayectoria
se debe parar utilizando estos parmetros de desaceleracin (vase alterStopTime).
-1
-2
-3
Vase tambin
num alterEnd()
num alter(trsf trAlteracin)
num alterStopTime()
172 / 186
D28065205B - 01/2008
Captulo 10 - Opciones
num alterEnd()
Sintaxis
num alterEnd()
Funcin
Sale del modo alter y procura que el movimiento actual ya no sea modificable.
Detalles
-1
-3
Vase tambin
num alterBegin(frame fReferenciaAlter, mdesc mVelocidadMxima)
num alterBegin(tool tReferenciaAlter, mdesc mVelocidadMxima)
Funcin
Especifica una nueva modificacin de la trayectoria modificable.
Parmetros
trAlteracin
Detalles
La transformacin inducida por el trsf de modificacin depende del modo alter seleccionado por la
instruccin alterBegin. Los datos de la modificacin se definen en el marco o en la herramienta
especificados por la instruccin alterBegin.
Se debe calcular minuciosamente la modificacin de tal modo que los mandos de posicin y de velocidad
del brazo que resulten se realicen sin ruptura y sin ruido. A veces ser necesario filtrar previamente la
entrada del sensor para alcanzar la calidad buscada sobre la trayectoria y el comportamiento del brazo.
Cuando se para el movimiento (modo mantenimiento, parada de emergencia, instruccin stopMove()), la
modificacin de la trayectoria se bloquea hasta que todas las condiciones de parada se hayan borrado.
Cuando la modificacin de la trayectoria no es vlida (posicin inalcanzable, lmites de velocidad
superados), el brazo se detiene de golpe en la ltima posicin vlida y se bloquea el modo alter en
posicin de error. Se requiere de un resetMotion antes de poder reiniciar el funcionamiento. Los lmites de
velocidad del movimiento alter son definidos por la instruccin alterBegin.
D28065205B - 01/2008
173 / 186
La modificacin es aplicada por el sistema cada 4 ms: Cuando se realizan varias instrucciones alter en
menos de 4 ms, la ltima es la que se aplica. Generalmente, la instruccin alter debe realizarse en una
tarea sncrona para forzar una reactualizacin de la modificacin cada 4 ms.
-1
-2
-3
Vase tambin
num alterBegin(frame fReferenciaAlter, mdesc mVelocidadMxima)
num alterBegin(tool tReferenciaAlter, mdesc mVelocidadMxima)
void taskCreateSync string sNombre, num nPeriodo, bool& bSobreejecucin, programa(...)
num alterStopTime()
Sintaxis
num alterStopTime()
Funcin
Reenva el tiempo restante antes del bloqueo de la diferencia alter, cuando ocurre una parada.
Detalles
Cuando ocurre una parada, el sistema evala el tiempo necesario para la parada del brazo si se utilizan
los parmetros accel y decel del descriptor de movimiento especificados por alterBegin. La duracin
mnima necesaria para esta parada y el tiempo impuesto por el sistema (generalmente 0.5s cuando
ocurre un eStop) son reenviados por alterStopTime.
Cuando alterStopTime reenva un valor negativo, no hay condicin de parada pendiente. Cuando
alterStopTime reenva un valor nulo, el mando alter se bloquea hasta que todas las condiciones de parada
se hayan reinicializado.
alterStopTime reenva un valor nulo cuando no se activa el modo alter.
Vase tambin
174 / 186
D28065205B - 01/2008
Captulo 10 - Opciones
10.3.2. INSTRUCCIONES
Funcin
Retorna el estado de la licencia OEM especificada:
"oemLicenceDisabled"
""
"demo"
"enabled"
Vase tambin
S6.1
Codificacin
D28065205B - 01/2008
175 / 186
176 / 186
D28065205B - 01/2008
Captulo 11 - Adjunto
CAPTULO 11
ADJUNTO
D28065205B - 01/2008
177 / 186
178 / 186
D28065205B - 01/2008
Captulo 11 - Adjunto
Cdigo
Descripcin
-1
0
1
10
11
20
21
29
30
31
No se ha creado ninguna tarea que lleve el nombre especificado por esta librera o aplicacin
Ningn error de ejecucin
La tarea especificada est en curso de ejecucin
Clculo numrico no vlido (divisin por cero).
Clculo numrico no vlido (por ejemplo ln(-1))
Acceso a un conjunto con un ndice mayor que el tamao del conjunto.
Acceso a un conjunto con un ndice negativo.
Nombre de tarea no vlido. Vase instruccin taskCreate().
El nombre especificado no corresponde a ninguna tarea VAL3.
Existe ya una tarea del mismo nombre. Vase instruccin taskCreate.
Slo se soportan 2 perodos diferentes para las tareas sncronas. Modificar el perodo de
programacin.
No hay suficiente espacio de memoria sistema para los datos.
No hay suficiente espacio de memoria de ejecucin para la tarea. Vase Tamao de memoria de
ejecucin.
Tiempo mximo de ejecucin de la instruccin excedido.
Error interno al interpretador VAL3
Valor de parmetro de instruccin no vlido. Vase instruccin correspondiente.
Utilizacin de un dato o un programa de una biblioteca no cargada en la memoria.
Cinemtica incompatible: Utilizacin de un punto/campo/config incompatible con el brazo
cinemtico.
El plano o herramienta de referencia de una variable pertenece a una biblioteca y no es accesible a
partir del campo de la variable (biblioteca no declarada en el proyecto de la variable o la variable de
referencia es privada).
La tarea no puede reanudarse en el lugar especificado. Vase instruccin taskResume().
La velocidad especificada en el descriptor de movimiento no es vlida (negativa o demasiado alta).
La aceleracin especificada en el descriptor de movimiento no es vlida (negativa o demasiado
alta).
La deceleracin especificada en el descriptor de movimiento no es vlida (negativa, demasiado alta
o inferior a la velocidad).
La velocidad de traslacin especificada en el descriptor de movimiento es invlida (negativa o
demasiado grande).
La velocidad de rotacin especificada en el descriptor de movimiento es invlida (negativa o
demasiado grande).
El parmetro reach especificado en el descriptor de movimiento no es vlido (negativo).
El parmetro leave especificado en el descriptor de movimiento no es vlido (negativo).
Tentativa de escritura sobre una entrada del sistema.
Utilizacin de una entrada-salida dio, aio o sio no enlazada a una entrada-salida del sistema.
Tentativa de acceso a una entrada-salida protegida del sistema
Error de lectura o de escritura en una dio, aio o sio (error en un bus de campo)
Imposible ejecutar esta instruccin de movimiento: un movimiento solicitado anteriormente no ha
podido ser terminado (punto fuera de alcance, singularidad, problema de configuracin...)
Comando de movimiento no soportado
Instruccin de movimiento no vlido: compruebe el descriptor de movimiento.
Coordenadas de la herramienta flange no vlidas
Coordenadas del sistema de referencia world no vlidas
Utilizacin de un point sin plano. Vase Definicin.
Utilizacin de un plano sin sistema de referencia. Vase Definicin.
Utilizacin de una herramienta sin herramienta de referencia. Vase Definicin.
Sistema de referencia o herramienta de referencia no vlido (variable global enlazada a una variable
local)
No hay licencia de duracin de ejecucin (runtime) para esta instruccin, o se ha terminado la
validez de la licencia de demo.
32
40
41
60
61
70
80
81
82
90
100
101
102
103
104
105
106
122
123
124
125
150
153
154
160
161
162
163
164
165
250
D28065205B - 01/2008
179 / 186
Caps
Space
283
32
2
282
Shift
Esc
Con Shift
3
Caps
Space
283
32
Run
Shift
282
Move
Help
Move
Ret.
255
270
Menu
Tab
Up
Bksp
Stop
-
Esc
Help
Ret.
Run
255
270
Menu
UnTab
PgUp
Bksp
Stop
-
259
261
263
260
262
263
User
Left
Down
Right
User
Home
PgDn
End
281
264
266
268
281
265
267
269
F6
276
F7
277
F2
272
F3
273
F4
274
F5
275
F8
278
Para las teclas estndares, el cdigo retornado es el cdigo ASCII del carcter correspondiente:
w
119
s
115
x
120
e
101
d
100
c
99
r
114
f
102
v
118
Sin Shift
t
y
116
121
g
h
103
104
b
n
98
110
u
117
j
106
m
109
i
105
k
107
.
46
o
111
l
108
,
44
p
112
<
60
=
61
7
55
4
52
1
49
8
56
5
53
2
50
9
57
6
54
3
51
+
43
45
0
48
Con Shift
*
;
42
59
/
?
47
63
"
%
34
37
(
40
:
58
95
)
41
!
33
.
46
[
91
{
123
,
44
]
93
}
125
>
62
Q
81
A
65
Z
90
W
87
S
83
X
88
E
69
D
68
C
67
R
82
F
70
V
86
U
85
J
74
M
77
I
73
K
75
$
36
O
79
L
76
\
92
P
80
}
125
=
61
q
113
a
97
z
122
180 / 186
D28065205B - 01/2008
ILUSTRACIN
D28065205B - 01/2008
181 / 186
182 / 186
D28065205B - 01/2008
INDEX
abs (Funcin) 37, 109
accel 155
acos (Funcin) 36
aio 19, 59
aioGet (Funcin) 59
aioLink (Funcin) 59
aioSet (Funcin) 60
alter (Funcin) 173
alterBegin (Funcin) 172
alterEnd (Funcin) 173
alterMovec (Funcin) 171
alterMovej (Funcin) 170
alterMovel (Funcin) 171
alterStopTime (Funcin) 174
appro (Funcin) 130
asc (Funcin) 51
asin (Funcin) 36
atan (Funcin) 37
autoConnectMove 145
autoConnectMove (Funcin) 161
B
bAnd (Funcin) 43
blend 143, 155
bNot (Funcin) 45
bool 19
bOr (Funcin) 44
bXor (Funcin) 44
C
call 18, 23
call (Funcin) 23
chr (Funcin) 50
clearBuffer (Funcin) 62
clock (Funcin) 90
close 80
close (Funcin) 124
cls (Funcin) 68
codeAscii 50
compose (Funcin) 129
config 19, 108, 133
config (Funcin) 137
cos (Funcin) 36
D
decel 155
delay 80
delay (Funcin) 89
delete (Funcin) 53
dio 19, 56
dioGet (Funcin) 57
dioLink (Funcin) 57
dioSet (Funcin) 58
D28065205B - 01/2008
E
elbow 133
enablePower (Funcin) 101
endFor 26
endWhile 25
enegative 136
epositive 136
esStatus (Funcin) 103
exp (Funcin) 38, 43, 44, 46
F
find (Funcin) 54
flange 17
for 26
for (Funcin) 26
frame 19, 108
fromBinary (Funcin)
46
G
get 80
get (Funcin) 69
getData (Funcin) 32
getDate 74
getDisplayLen (Funcin) 68
getJointForce (Funcin) 162
getKey (Funcin) 71
getLanguage (Funcin) 73
getLatch (Funcin) 112
getLicence (Funcin) 175
getMonitorSpeed (Funcin) 104
getPosition (Funcin) 162
getProfile (Funcin) 72
getSpeed (Funcin) 162
getVersion (Funcin) 105
globale 20
gotoxy (Funcin) 68
H
help (Funcin) 85
here (Funcin) 130
herej (Funcin) 110
I
if (Funcin) 24
insert (Funcin) 53
interpolateC (Funcin) 118
interpolateL (Funcin) 117
isCalibrated (Funcin) 102
isCompliant 165
isCompliant (Funcin) 168
183 / 186
J
joint 19
jointToPoint (Funcin) 131
L
leave 143, 155
left (Funcin) 51
lefty 135, 137
len (Funcin) 55
libDelete (Funcin) 97
libList (Funcin) 98
libLoad 95
libLoad (Funcin) 97
libPath (Funcin) 98
libSave (Funcin) 97
limit (Funcin) 41
ln (Funcin) 39
locale 20
log (Funcin) 39
logMsg (Funcin) 72
M
max (Funcin) 41
mdesc 19, 141, 155
mid (Funcin) 52
min (Funcin) 41
movec (Funcin) 158
movej 141
movej (Funcin) 156
movejf 165
movejf (Funcin) 166
movel 141
movel (Funcin) 157
movelf 165
movelf (Funcin) 167
N
num
19, 51
124
P
point 19
pointToJoint (Funcin) 131
popUpMsg (Funcin) 71
position (Funcin) 121, 125, 132
power (Funcin) 38
184 / 186
R
reach 143, 155
replace (Funcin) 54
resetMotion 145, 159, 165
resetMotion (Funcin) 159
restartMove 159, 165
restartMove (Funcin) 160
return (Funcin) 23
right (Funcin) 52
righty 135, 137
round (Funcin) 40
roundDown (Funcin) 40
roundUp (Funcin) 40
RUNNING 89, 90
rvel 155
S
sel (Funcin) 42
setFrame (Funcin) 121
setLanguage (Funcin) 74
setLatch (Funcin) 111
setMonitorSpeed (Funcin)
setMutex (Funcin) 85
setProfile (Funcin) 72
shoulder 133
sin (Funcin) 35
sio 19, 61
SioCtrl (Funcin) 64
sioGet (Funcin) 62
sioLink (Funcin) 62
sioSet (Funcin) 63
size (Funcin) 31
sqrt (Funcin) 38
start 17
stop 17
stopMove 165
stopMove (Funcin) 159
STOPPED 84
string 19
switch (Funcin) 24, 27
104
O
open 80
open (Funcin)
put (Funcin) 69
putln (foncion) 69
tan (Funcin) 37
taskCreate (Funcin) 87
taskCreateSync (Funcin) 88
taskKill (Funcin) 85
taskResume 79
taskResume (Funcin) 84
taskStatus 79
taskStatus (Funcin) 86
taskSuspend (Funcin) 84
title (Funcin) 69
D28065205B - 01/2008
toBinary (Funcin) 46
toNum (Funcin) 49
tool 19, 108
toString (Funcin) 48
trsf 19, 108
trsf align (Funcin) 119
tvel 155
U
until 25
userPage (Funcin)
67
V
vel 155
void setLatch (Funcin)
111
wait 80
wait (Funcin) 89
waitEndMove 80, 144, 165
waitEndMove (Funcin) 160
watch 80
watch (Funcin) 90
while (Funcin) 25
wnegative 136
workingMode (Funcin) 102
world 17
wpositive 136
wrist 133
D28065205B - 01/2008
185 / 186
186 / 186
D28065205B - 01/2008