Software Val3 142
Click here to load reader
-
Upload
javierruizthorrens -
Category
Documents
-
view
54 -
download
15
description
Transcript of Software Val3 142
-
St
ubl
i Fav
erge
s 20
08
MANUAL DE REFERENCIA VAL3
Versin 6
D28065205B - 01/2008
-
2 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
Encontrar adiciones y "erratas" en el documento "readme.pdf" suministrado con el CD-ROMdel controlador.
-
D28065205B - 01/2008 3 / 186
S
tub
li Fa
verg
es 2
008
NDICE
1 - INTRODUCCIN ............................................................................... 112 - ELEMENTOS DEL LENGUAJE VAL3 .............................................. 15
2.1 APLICACIONES .................................................................................................................... 172.1.1 Definicin.................................................................................................................... 172.1.2 Contenido predeterminado......................................................................................... 172.1.3 Puesta en marcha y parada ....................................................................................... 172.1.4 Parmetros de aplicacin........................................................................................... 17
2.1.4.1 Unidad de longitud ...................................................................................... 182.1.4.2 Cantidad de memoria de ejecucin............................................................. 18
2.2 PROGRAMAS........................................................................................................................ 182.2.1 Definicin.................................................................................................................... 182.2.2 Reentrada................................................................................................................... 182.2.3 Programa Start()......................................................................................................... 182.2.4 Programa Stop()......................................................................................................... 18
2.3 TIPOS DE DATOS ................................................................................................................. 192.3.1 Definicin.................................................................................................................... 192.3.2 Tipos sencillos............................................................................................................ 192.3.3 Tipos estructurados.................................................................................................... 19
2.4 INICIALIZACIN DE VARIABLES ........................................................................................ 192.4.1 Variables de tipo simple ............................................................................................. 192.4.2 Datos de tipo estructurado ......................................................................................... 202.4.3 Conjunto de constantes.............................................................................................. 20
2.5 VARIABLES........................................................................................................................... 202.5.1 Definicin.................................................................................................................... 202.5.2 Alcance de una variable ............................................................................................. 202.5.3 Acceso al valor de una variable ................................................................................. 212.5.4 Parmetro pasado "por valor" .................................................................................... 212.5.5 Parmetro pasado "por referencia" ............................................................................ 22
2.6 INSTRUCCIONES DE CONTROL DE SECUENCIA............................................................. 23Comentario // .................................................................................................................................. 23Llamada de subprograma call ......................................................................................................... 23Retorno de subprograma return ..................................................................................................... 23Instruccin de control if ................................................................................................................. 24Instruccin de control while ............................................................................................................. 25Instruccin de control do ... until ..................................................................................................... 25Instruccin de control for ................................................................................................................. 26Instruccin de control switch .......................................................................................................... 27
-
4 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
3 - TIPOS SENCILLOS........................................................................... 293.1 INSTRUCCIONES.................................................................................................................. 31
num tamao(variable) ..................................................................................................................... 31num getData(string sNombreDatos, & variable) ............................................................................. 32
3.2 TIPO BOOL............................................................................................................................ 333.2.1 Definicin.................................................................................................................... 333.2.2 Operadores ................................................................................................................ 33
3.3 TIPO NUM .............................................................................................................................. 343.3.1 Definicin.................................................................................................................... 343.3.2 Operadores ................................................................................................................ 353.3.3 Instrucciones .............................................................................................................. 35
num sin(num nAngulo) .................................................................................................................... 35num asin(num nValor) .................................................................................................................... 36num cos(num nAngulo) ................................................................................................................... 36num acos(num nValor) ................................................................................................................... 36num tan(num nAngulo) ................................................................................................................... 37num atan(num nValor) .................................................................................................................... 37num abs(num nValor) ..................................................................................................................... 37num sqrt(num nValor) ..................................................................................................................... 38num exp(num nValor) ..................................................................................................................... 38num power(num nX, num nY) ......................................................................................................... 38num ln(num nValor) ........................................................................................................................ 39num log(num nValor) ...................................................................................................................... 39num roundUp(num nValor) ............................................................................................................. 40num roundDown(num nValor) ........................................................................................................ 40num round(num nValor) ................................................................................................................. 40num min(num nX, num nY) ............................................................................................................. 41num max(num nX, num nY) ............................................................................................................ 41num limit(num nValor, num nMn, num nMx) ............................................................................... 41num sel(bool bCondicin, num nValor1, num nValor2) .................................................................. 42
3.4 TIPO DE CAMPO DE BITS.................................................................................................... 433.4.1 Definicin.................................................................................................................... 433.4.2 Operadores ................................................................................................................ 433.4.3 Instrucciones .............................................................................................................. 43
num bAnd(num nCampoBit1, num nCampoBit2) ........................................................................... 43num bOr(num nCampoBit1, num nCampoBit2) .............................................................................. 44num bXor(num nCampoBit1, num nCampoBit2) ............................................................................ 44num bNot(num nCampoBit) ............................................................................................................ 45num toBinary(num nValor, num nTamaoValor, cadena sFormatoDatos, num& nByteDatos) ..... 46num fromBinary(num nByteDatos, num nTamaoDatos, cadena sFormatoDatos, num& nValor) 46
3.5 TIPO STRING......................................................................................................................... 483.5.1 Definicin.................................................................................................................... 483.5.2 Operadores ................................................................................................................ 483.5.3 Instrucciones .............................................................................................................. 48
string toString(string sFormato, num nValor) ................................................................................. 48string toNum(string sCadena, num& nValor, bool& bRelacin) ...................................................... 49string chr(num nPuntoCdigo) ........................................................................................................ 50num asc(string sTexto, num nPosicin) .......................................................................................... 51string left(string sTexto, num nTamao) ......................................................................................... 51string right(string sTexto, num nTamao) ...................................................................................... 52string mid(string sTexto, num nTamao, num nPosicin) .............................................................. 52string insert(string sTexto, string sInsercin, num nPosicin) ........................................................ 53string delete(string sTexto, num nTamao, num nPosicin) .......................................................... 53string replace(string sTexto, string sSustitucin, num nTamao, num nPosicin) ......................... 54
-
D28065205B - 01/2008 5 / 186
S
tub
li Fa
verg
es 2
008
num find(string sTexto1, string sTexto2) ......................................................................................... 54num len(string sTexto) ..................................................................................................................... 55
3.6 TIPO DIO................................................................................................................................ 563.6.1 Definicin.................................................................................................................... 563.6.2 Operadores ................................................................................................................ 563.6.3 Instrucciones .............................................................................................................. 57
void dioLink(dio& diVariable, dio diOrigen) .................................................................................... 57num dioGet(dio diMatriz) ................................................................................................................. 57num dioSet(dio diMatriz, num nValor) ............................................................................................. 58
3.7 TIPO AIO................................................................................................................................ 593.7.1 Definicin.................................................................................................................... 593.7.2 Instrucciones .............................................................................................................. 59
void aioLink(aio& aiVariable, aio aiOrigen) ..................................................................................... 59num aioGet(aio aiEntrada) .............................................................................................................. 59num aioSet(aio aiSalida, num nValor) ............................................................................................. 60
3.8 TIPO SIO ................................................................................................................................ 613.8.1 Definicin.................................................................................................................... 613.8.2 Instrucciones .............................................................................................................. 62
void sioLink(sio& siVariable, sio siOrigen) ..................................................................................... 62num clearBuffer(sio siEntrada) ....................................................................................................... 62num sioGet(sio siEntrada, num& nDatos) ....................................................................................... 62num sioSet(sio siSalida, num& nDatos) .......................................................................................... 63num sioCtrl(sio siCanal, string nParmetro, valor) ......................................................................... 64
4 - INTERFAZ DE USUARIO .................................................................. 654.1 PGINA DE USUARIO .......................................................................................................... 674.2 INSTRUCCIONES.................................................................................................................. 67
void userPage(), void userPage(bool bFijo) ................................................................................... 67void gotoxy(num nX, num nY) ........................................................................................................ 68void cls() .......................................................................................................................................... 68num getDisplayLen(string sTexto) ................................................................................................. 68void put() void putln() ..................................................................................................................... 69void title(string sTexto) .................................................................................................................... 69num get() ......................................................................................................................................... 69num getKey() .................................................................................................................................. 71bool isKeyPressed(num nCdigo) .................................................................................................. 71void popUpMsg(string sTexto) ........................................................................................................ 71void logMsg(string sTexto) .............................................................................................................. 72string getProfile() ............................................................................................................................ 72num setProfile(string sLoginUsuario, string sContraseaUsuario) ................................................. 72string getLanguage() ...................................................................................................................... 73bool setLanguage(string sLenguaje) .............................................................................................. 74string getDate(string sFormato) ...................................................................................................... 74
5 - TAREAS............................................................................................. 775.1 DEFINICIN........................................................................................................................... 795.2 REANUDACIN TRAS UN ERROR DE EJECUCIN.......................................................... 795.3 VISIBILIDAD .......................................................................................................................... 79
5.4 SECUENCIACIN ................................................................................................................. 805.5 TAREAS SNCRONAS .......................................................................................................... 81
-
6 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
5.6 ERROR DE CADENCIA......................................................................................................... 81
5.7 ACTUALIZACIN DE LAS ENTRADAS/SALIDAS .............................................................. 815.8 SINCRONIZACIN ................................................................................................................ 825.9 REPARTICIN DE RECURSO.............................................................................................. 835.10 INSTRUCCIONES.................................................................................................................. 84
void taskSuspend(string sNombre) ................................................................................................ 84void taskResume(string sNombre, num nSalto) ............................................................................. 84void taskKill(string sNombre) ......................................................................................................... 85void setMutex(bool& bMutex) ......................................................................................................... 85string help(num nCdigoError) ....................................................................................................... 85num taskStatus(string sNombre) ................................................................................................... 86void taskCreate string sNombre, num nPrioridad, programa(...) .................................................... 87void taskCreateSync string sNombre, num nPeriodo, bool& bSobreejecucin, programa(...) ...... 88void wait(bool bCondicin) .............................................................................................................. 89void delay(num nSegundos) ........................................................................................................... 89num clock() ..................................................................................................................................... 90bool watch(bool bCondicin, num nSegundos) .............................................................................. 90
6 - BIBLIOTECAS................................................................................... 916.1 DEFINICIN........................................................................................................................... 936.2 INTERFAZ.............................................................................................................................. 93
6.3 IDENTIFICADOR DE INTERFAZ........................................................................................... 93
6.4 CONTENIDO .......................................................................................................................... 93
6.5 CODIFICACIN ..................................................................................................................... 946.6 CARGA Y DESCARGA.......................................................................................................... 95
6.7 INSTRUCCIONES.................................................................................................................. 97num identificante:libLoad(string sCamino) ..................................................................................... 97num identificante:libLoad(string sCamino, string sContrasea) ..................................................... 97num identificante:libSave(), num libSave() .................................................................................... 97num libDelete(string sCamino) ....................................................................................................... 97string identificante:libPath(), string libPath() ................................................................................. 98bool libList(string sCamino, string& scontenido) ......................................................................... 98bool identifier:libExist(string sNombreSmbolo) ............................................................................. 98
7 - CONTROL DEL ROBOT ................................................................... 997.1 INSTRUCCIONES................................................................................................................ 101
void disablePower() ..................................................................................................................... 101void enablePower() ...................................................................................................................... 101bool isPowered() .......................................................................................................................... 101bool isCalibrated() ........................................................................................................................ 102num workingMode(), num workingMode(num& nEstado) .......................................................... 102num esStatus() ............................................................................................................................. 103num getMonitorSpeed() ............................................................................................................... 104num setMonitorSpeed(num nVelocidad) ..................................................................................... 104string getVersion(string nComponente) ....................................................................................... 105
-
D28065205B - 01/2008 7 / 186
S
tub
li Fa
verg
es 2
008
8 - POSICIONES DEL BRAZO ............................................................. 1078.1 INTRODUCCIN.................................................................................................................. 1088.2 TIPO JOINT.......................................................................................................................... 108
8.2.1 Definicin.................................................................................................................. 1088.2.2 Operadores .............................................................................................................. 1098.2.3 Instrucciones ............................................................................................................ 109
joint abs(joint jposicin) ................................................................................................................. 109joint herej() .................................................................................................................................... 110bool isInRange(joint jposicin) ...................................................................................................... 110void setLatch(dio diEntrada) (CS8C only) .................................................................................... 111bool getLatch(joint& jposicin) (CS8C only) ................................................................................. 112
8.3 TIPO TRSF........................................................................................................................... 1138.3.1 Definicin.................................................................................................................. 1138.3.2 Orientacin ............................................................................................................... 1148.3.3 Operadores .............................................................................................................. 1168.3.4 Instrucciones ............................................................................................................ 116
num distance(trsf trPosicin1, trsf trPosicin2) ............................................................................ 116trsf interpolateL(trsf trInicio, trsf trFin, num nPosicin) ................................................................ 117trsf interpolateC(trsf trInicio, trsf trIntermediario, trsf trFin, num nPosicin) ................................. 118trsf align(trsf trPosicin, trsf Marca de referencia) ........................................................................ 119
8.4 TIPO FRAME ....................................................................................................................... 1208.4.1 Definicin.................................................................................................................. 1208.4.2 Utilizacin ................................................................................................................. 1208.4.3 Operadores .............................................................................................................. 1218.4.4 Instrucciones ............................................................................................................ 121
num setFrame(point pOrigen, point pEjeOx, point pPlanoOxy, frame& fResult) .......................... 121trsf position(frame tPlano, frame fMarca de referencia) ............................................................... 121
8.5 TIPO TOOL .......................................................................................................................... 1228.5.1 Definicin.................................................................................................................. 1228.5.2 Utilizacin ................................................................................................................. 1228.5.3 Operadores .............................................................................................................. 1238.5.4 Instrucciones ............................................................................................................ 124
void open(tool tHerramienta) ......................................................................................................... 124void close(tool tHerramienta) ........................................................................................................ 124trsf position(tool tHerramienta, tool tMarca de referencia) ........................................................... 125
8.6 TIPO POINT ......................................................................................................................... 1268.6.1 Definicin.................................................................................................................. 1268.6.2 Operadores .............................................................................................................. 1278.6.3 Instrucciones ............................................................................................................ 128
num distance(point pPosicin1, point pPosicin2) ....................................................................... 128point compose(point pPosicin, frame fMarca de referencia, trsf trTransformacin) ................... 129point appro(point pPosicin, trsf trTransformacin) ...................................................................... 130point here(tool therramienta, frame fMarca de referencia) ............................................................ 130point jointToPoint(tool tHerramienta, frame fMarca de referencia, joint jPosicin) ...................... 131bool pointToJoint(tool tHerramienta, joint jInicial, point pPosicin,joint& jResult) ....................... 131trsf position(point pPosicin, frame fMarca de referencia) ........................................................... 132
-
8 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
8.7 TIPO CONFIG ...................................................................................................................... 1338.7.1 Introduccin.............................................................................................................. 1338.7.2 Definicin.................................................................................................................. 1338.7.3 Operadores .............................................................................................................. 1348.7.4 Configuracin (brazo RX/TX) ................................................................................... 135
8.7.4.1 Configuracin del hombro ......................................................................... 1358.7.4.2 Configuracin del codo ............................................................................. 1368.7.4.3 Configuracin de la mueca ..................................................................... 136
8.7.5 Configuracin (brazo RS) ......................................................................................... 1378.7.6 Instrucciones ............................................................................................................ 137
config config(joint jPosicin) ......................................................................................................... 137
9 - CONTROL DE LOS MOVIMIENTOS .............................................. 1399.1 CONTROL DE TRAYECTORIA ........................................................................................... 141
9.1.1 Tipos de movimiento: punto a punto, lnea recta, crculo ......................................... 1419.1.2 Encadenamiento de movimientos ............................................................................ 143
9.1.2.1 Alisado ...................................................................................................... 1439.1.2.2 Anulacin del alisado ................................................................................ 144
9.1.3 Reanudacin de movimiento .................................................................................... 1459.1.4 Particularidades de los movimientos cartesianos (lnea recta, crculo).................... 146
9.1.4.1 Interpolacin de la orientacin .................................................................. 1469.1.4.2 Cambio de configuracin (Brazo RX/TX) .................................................. 1489.1.4.3 Singularidades (Brazo RX/TX) .................................................................. 150
9.2 ANTICIPACIN DE LOS MOVIMIENTOS........................................................................... 1509.2.1 Principio.................................................................................................................... 1509.2.2 Anticipacin y alisado............................................................................................... 1519.2.3 Sincronizacin .......................................................................................................... 151
9.3 CONTROL DE VELOCIDAD................................................................................................ 1529.3.1 Principio.................................................................................................................... 1529.3.2 Ajuste sencillo .......................................................................................................... 1529.3.3 Ajuste avanzado....................................................................................................... 1529.3.4 Error de arrastre ....................................................................................................... 153
9.4 CONTROL DEL MOVIMIENTO EN TIEMPO REAL............................................................ 153
9.5 TIPO MDESC ....................................................................................................................... 1559.5.1 Definicin.................................................................................................................. 1559.5.2 Operadores .............................................................................................................. 155
9.6 INSTRUCCIONES DE MOVIMIENTO.................................................................................. 156void movej(joint jPosicin, tool tHerramienta, mdesc mDesc) ...................................................... 156void movej(point pPosicin, tool tHerramienta, mdesc mDesc) ................................................... 156void movel(point pPosicin, tool tHerramienta, mdesc mDesc) ................................................... 157void movec(point pIntermediario, point pObjetivo, tool tHerramienta, mdesc mDesc) ................. 158void stopMove() ............................................................................................................................ 159void resetMotion(), void resetMotion(joint jpartida) .................................................................... 159void restartMove() ........................................................................................................................ 160void waitEndMove() ..................................................................................................................... 160bool isEmpty() .............................................................................................................................. 161
-
D28065205B - 01/2008 9 / 186
S
tub
li Fa
verg
es 2
008
bool isSettled() .............................................................................................................................. 161void autoConnectMove(bool bActivo), bool autoConnectMove() .............................................. 161num getSpeed(tool tHerramienta) ................................................................................................ 162num getPositionErr() ................................................................................................................... 162void getJointForce(num& nFuerza) ............................................................................................. 162
10 - OPCIONES ...................................................................................... 16310.1 MOVIMIENTOS CONSECUENTES CON CONTROL DE ESFUERZO............................... 165
10.1.1 Principio.................................................................................................................... 16510.1.2 Programacin ........................................................................................................... 16510.1.3 Control del esfuerzo ................................................................................................. 16510.1.4 Limitaciones ............................................................................................................. 16610.1.5 Instrucciones ............................................................................................................ 166
void movejf(joint jPosicin, tool tHerramienta, mdesc mDesc, num nFuerza) .............................. 166void movelf(point pPosicin, tool tHerramienta, mdesc mDesc, num nFuerza) ........................... 167bool isCompliant() ........................................................................................................................ 168
10.2 ALTER: CONTROL EN TIEMPO REAL DE UNA TRAYECTORIA .................................... 16910.2.1 Principio.................................................................................................................... 16910.2.2 Programacin ........................................................................................................... 16910.2.3 Exigencias ................................................................................................................ 16910.2.4 Seguridad ................................................................................................................. 17010.2.5 Limitaciones ............................................................................................................. 17010.2.6 Instrucciones ............................................................................................................ 170
void alterMovej(joint jPosicin, tool tHerramienta, mdesc mDesc) ............................................... 170void alterMovej(point pPosicin, tool tHerramienta, mdesc mDesc) ............................................ 170void alterMovel(point pPosicin, tool tHerramienta, mdesc mDesc) ............................................ 171void alterMovec (point pIntermediario, point pObjetivo, tool tHerramienta, mdesc mDesc) ......... 171num alterBegin(frame fReferenciaAlter, mdesc mVelocidadMxima) .......................................... 172num alterBegin(tool tReferenciaAlter, mdesc mVelocidadMxima) ............................................. 172num alterEnd() .............................................................................................................................. 173num alter(trsf trAlteracin) ............................................................................................................. 173num alterStopTime() .................................................................................................................... 174
10.3 CONTROL DE LICENCIA OEM........................................................................................... 17510.3.1 Principios.................................................................................................................. 17510.3.2 Instrucciones ............................................................................................................ 175
string getLicence(string sOemNombreLicencia, string sOemContrasea) .................................. 175
11 - ADJUNTO........................................................................................ 17711.1 CDIGOS DE ERROR DE EJECUCIN............................................................................. 17911.2 CDIGOS DE LAS TECLAS DEL TECLADO DE LA CONSOLA...................................... 180
12 - ILUSTRACIN................................................................................. 18113 - INDEX .............................................................................................. 183
-
10 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
-
Captulo 1 - Introduccin
D28065205B - 01/2008 11 / 186
S
tub
li Fa
verg
es 2
008
CAPTULO 1
INTRODUCCIN
-
12 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
-
Captulo 1 - Introduccin
D28065205B - 01/2008 13 / 186
S
tub
li Fa
verg
es 2
008
VAL3 es un lenguaje de programacin diseado para controlar Stubli robots en todo tipo deaplicaciones. El lenguaje VAL3 combina las caractersticas bsicas de un lenguaje informtico de alto nivel en tiemporeal 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, ydetalla las instrucciones del lenguaje VAL3, clasificadas segn las siguientes categoras:
Elementos del lenguaje Tipos sencillos Interfaz de usuario Tareas Bibliotecas Control del robot Posicin del brazo Control de los movimientos
Cada instruccin, con su sintaxis, figura en el ndice general para facilitar su rpida consulta.
-
14 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
-
Captulo 2 - Elementos del lenguaje VAL3
D28065205B - 01/2008 15 / 186
S
tub
li Fa
verg
es 2
008
0
CAPTULO 2
ELEMENTOS DEL LENGUAJE VAL3
-
16 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
*
-
Captulo 2 - Elementos del lenguaje VAL3
D28065205B - 01/2008 17 / 186
S
tub
li Fa
verg
es 2
008
Los elementos constitutivos del lenguaje VAL3 son: las aplicaciones los programas las bibliotecas los tipos de datos las constantes variables (variables globales, variables locales y parmetros) las tareas
2.1. APLICACIONES
2.1.1. DEFINICINUna aplicacin VAL3 es un paquete de software autnomo diseado para controlar robots y entradas/salidasasociadas 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 PREDETERMINADOUna aplicacin VAL3 siempre contiene los programas start() y stop(), un sistema de referencia (tipoframe) world y una herramienta (tipo tool) flange. En el momento de crearse, una aplicacin VAL3 contiene adems las instrucciones y datos del modeloelegido. Estos elementos se describen con mayor precisin en el captulo correspondiente a su tipo.
2.1.3. PUESTA EN MARCHA Y PARADALas instrucciones VAL3 no permiten manipular aplicaciones: La carga, descarga, puesta en marcha yparada 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, seejecuta el programa stop(). Todas las tareas creadas por bibliotecas, si quedan, son destruidas en elorden inverso de su creacin.Si la parada de una aplicacin VAL3 se provoca desde la interfaz de usuario del MCP, la tarea dearranque, 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 inversodel orden en que fueron creadas.
2.1.4. PARMETROS DE APLICACINUna 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 lainterfaz del usuario MCP o con la ayuda del editor SRS.
-
18 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
2.1.4.1. UNIDAD DE LONGITUDEn aplicaciones VAL3, la unidad de longitud es el milmetro o la pulgada. sta es utilizada por los tipos dedatos geomtricos del VAL3: sistema de referencia, punto, transformacin, herramienta, alisado detrayectoria.La unidad de longitud de una aplicacin se define en el momento de su creacin por la unidad de longituden curso del sistema, y no puede ser ya modificada a continuacin.
2.1.4.2. CANTIDAD DE MEMORIA DE EJECUCINSe necesita alguna memoria para el almacenamiento de cada tarea VAL3:
- La pila de ejecucin (lista de las llamadas del programa ejecutadas durante esta tarea)- Los parmetros para cada programa de la pila de llamada- Las variables locales para cada programa de la pila de llamada
Por defecto, cada tarea incluye 5000 bytes para la memoria de ejecucin. Este nivel puede no ser suficiente para las aplicaciones que contengan grandes tablas de variableslocales o de algoritmos recursivos: en este caso, debe aumentarse mediante la interfaz del usuario MCP oel editor SRS, u bien la aplicacin debe optimizarse reduciendo el nmero de programas en la pila deejecucin o utilizando variables globales en lugar de las variables locales.
2.2. PROGRAMAS2.2.1. DEFINICINUn programa es una secuencia de instrucciones VAL3 por ejecutar. Un programa est constituido por los siguientes elementos:
- La secuencia de instrucciones: las instrucciones VAL3 que deben ejecutarse- Un conjunto de variables locales: los datos internos del programa- Un conjunto de parmetros: los datos facilitados al programa cuando se le llama
Los programas permiten agrupar secuencias de instrucciones suceptibles de ser utilizadas en varioslugares en una aplicacin. Adems de economizar tiempo de programacin, tambin simplifican laestructura de las aplicaciones, facilitan la programacin y el mantenimiento, y mejoran la legibilidad. El nmero de instrucciones de un programa est nicamente limitado por el espacio disponible en lamemoria del sistema. El nmero de variables locales y de parmetros slo est limitado por el tamao de la memoria deejecucin para la aplicacin.
2.2.2. REENTRADALos programas son reentrantes, lo que quiere decir que un programa puede iniciarse l mismo de manerarecursiva (instruccin call), o ser llamado simultneamente por varias tareas. Cada instancia de unprograma 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 tenerparmetros. 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 deaplicacin. Es posible iniciar el programa start() al interior de un programa (instruccin call) como cualquier otroprograma.
2.2.4. PROGRAMA STOP()El programa stop() es el programa llamado durante la parada de la aplicacin VAL3. No puede tenerparmetros. En este programa se encontrarn especialmente todas las operaciones necesarias para terminarpropiamente la aplicacin: reactualizar las salidas y detener las tareas de la aplicacin, segn lasecuencia apropiada, etc. El programa stop() puede llamarse desde un programa (instruccin call), de la misma manera quecualquier otro programa, pero, el inicio del programa stop() no activa la parada de la aplicacin.
-
Captulo 2 - Elementos del lenguaje VAL3
D28065205B - 01/2008 19 / 186
S
tub
li Fa
verg
es 2
008
2.3. TIPOS DE DATOS
2.3.1. DEFINICINEl tipo de una constante o de una variable VAL3 es una caracterstica que permite que el sistema controlelas instrucciones y programas a su disposicin. Todas las constantes y variables VAL3 tienen un tipo. Esto permite un control inicial por el sistema en elmomento de editar un programa y, por lo tanto, la deteccin inmediata de ciertos errores deprogramacin.
2.3.2. TIPOS SENCILLOSEl lenguaje VAL3 soporta los siguientes tipos sencillos:
- el tipo bool: para los valores booleanos (verdadero / falso)- el tipo num: para los valores numricos- el tipo string: para las cadenas de caracteres- el tipo dio: para entradas/salidas digitales- el tipo aio: para las entradas-salidas numricas (analgicas o digitales)- el tipo sio: para las entradas-salidas en conexin serie y socket Ethernet
2.3.3. TIPOS ESTRUCTURADOSUn 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. INICIALIZACIN DE VARIABLES2.4.1. VARIABLES DE TIPO SIMPLELa sintaxis precisa para la inicializacin de una variable de tipo simple se especifica en el captulo dedescripcin de cada tipo simple. Todas las variables deben declararse en la seccin de los datos globaleso la seccin de los datos locales para poder utilizarse.
EjemploEn este ejemplo, bBool es una variable booleana, nPi una variable numrica y sCadena un variable decadena.bBool = truenPi = 3.141592653sString = "esto es una cadena constante"
-
20 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
2.4.2. DATOS DE TIPO ESTRUCTURADOEl valor de un dato de tipo estructurado est definido por la secuencia de valores en estos campos. Elorden de la secuencia est especificado en el captulo que detalla cada tipo estructurado. Los smbolos {} pueden utilizarse para indicar una estructura.
EjemploEn este ejemplo, p es una variable de punto y dummy un programa que utiliza un dato trsf y un dio comoparmetros. 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 CONSTANTESUn conjunto debe inicializarse, entrada por entrada. EjemploEn este ejemplo, j es un cuadro de articulaciones de 5 elementos.// Para los brazos de 6 ejesj[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. DEFINICINUna variable es un dato referenciado en un programa por su nombre. Una variable se caracteriza por:
- su nombre: una cadena de caracteres- su tipo: uno de los tipos VAL3 descritos anteriormente- su tamao: para un conjunto, el nmero de elementos que contiene- su alcance: el o los programas que pueden utilizar la variable
El nombre de una variable es una cadena de 1 a 15 caracteres entre "a..zA..Z0..9_", y que comienza conuna letra.Todas las variables pueden utilizarse como cuadros. Las variables simples tienen un tamao de 1. Lainstruccin size() define el tamao de una variable.
2.5.2. ALCANCE DE UNA VARIABLEEl alcance de la variables puede ser:
global: todos los programas de la aplicacin pueden utilizar la variable, o local: puede accederse a la variable nicamente mediante el programa en el cual est declarado
Cuando una variable global y una variable local tienen el mismo nombre, el programa donde estdeclarada la variable local utilizar la variable local, y no tendr acceso a la variable global. Los parmetros de un programa son variables locales, accesibles nicamente en el programa en el queestn declarados.
-
Captulo 2 - Elementos del lenguaje VAL3
D28065205B - 01/2008 21 / 186
S
tub
li Fa
verg
es 2
008
2.5.3. ACCESO AL VALOR DE UNA VARIABLELos elementos de un cuadro son accesibles con un ndice entre los corchetes [ y ]. El ndice debe estarcomprendido 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
2.5.4. PARMETRO PASADO "POR VALOR"Cuando se pasa un parmetro "por valor", el sistema crea una variable local y la inicializa con el valor dela variable o de la expresin suministrada por el programa solicitante. Las variables del programa solicitante utilizadas como parmetros "por valor" no cambian, aun si elprograma llamado modifica el valor del parmetro. Un cuadro de datos no puede ser pasado por valor.
Ejemplo:
num a // a es una variable de tipo num y de tamao 1num b[10] // b es una variable de tipo num y de tamao 10trsf tpoint p
a = 0 // Inicializacin de una variable sencillaa[0] = 0 // Correcto: equivalente a a = 0b[0] = 0 // Inicializacin del primer elemento en un conjunto bb = 0 // Correcto: equivalente a b[0] = 0b[5] = 5 // Inicializacin del sexto elemento en un conjunto bb[5.13] = 7 // Correcto: equivalente a b[5] = 7 (slo se utiliza la parte entera)
b[-1] = 0 // error: ndice inferior a 0b[10] = 0 // error: ndice demasiado grande (un conjunto de los tamaos 10 tiene ndices en
0..9)
t = p.trsf // Inicializacin de tp.trsf.x = 100 // Inicializacin del campo x del campo trsf de la variable p
program dummy(num x) // x ha pasado por valorbeginx=0putln(x) // muestra 0
end
num aa=10putln(a) // muestra 10call dummy(a) // muestra 0putln(a) // muestra 10: a no es modificado por dummy()
-
22 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
2.5.5. PARMETRO PASADO "POR REFERENCIA"Cuando se pasa un parmetro "por referencia", el programa deja de trabajar sobre una copia del datopasada por el solicitante, hacindolo sobre el propio dato, al que sencillamente se cambia de nombrelocalmente. Las variables del programa solicitante utilizadas como parmetros "por referencia" cambian de valor encuanto el programa llamado modifica el valor del parmetro. Puede utilizarse o modificarse todos los componentes de un conjunto pasados por referencia. Si se pasaun elemento de un cuadro por referencia, este elemento y todos los elementos siguientes pueden serutilizados y modificados. En este caso, el parmetro se considera como un conjunto que se inicia con elcomponente pasado por la llamada. La instruccin size() permite conocer el tamao efectivo de unparmetro.Cuando se pasa "por referencia" una constante o una expresin, una asignacin del parmetrocorrespondiente no tendr efecto alguno: el parmetro conservar el valor de la constante o de laexpresin.
Ejemplo:program dummy(num& x) // x es pasado por referenciabegin
x=0putln(x) // muestra 0
end
program element(num& x)begin
x[3] = 0putln(size(x))
end
num anum b[10]a=10putln(a) // muestra 10call dummy(a) // muestra 0putln(a) // muestra 0: a es modificado por dummy()b[2] = 2b[5] = 5call element(b[2]) // muestra 8, los elementos 0 y 1 de b no son pasadosputln(b[5]) // Muestra 0: b[5] fue vinculado a x[3] y modificado en el programa
element()
-
Captulo 2 - Elementos del lenguaje VAL3
D28065205B - 01/2008 23 / 186
S
tub
li Fa
verg
es 2
008
2.6. INSTRUCCIONES DE CONTROL DE SECUENCIA
Comentario //
Sintaxis//
FuncinUna lnea que comienza con // no se evala y la ejecucin contina en la lnea siguiente. No puedeutilizarse // en la mitad de una lnea; estos deben ser los primeros caracteres en la lnea.
Ejemplo// Esto es un ejemplo de comentario
Llamada de subprograma call
Sintaxiscall programa([parmetro1][,parmetro2])
FuncinEjecuta el programa especificado con los parmetros especificados. Ejemplo// Llama los programas pick() y place() para i,j entre 1 y 10for i = 1 to 10
for j = 1 to 10call pick (i, j)call place (i, j)
endForendFor
Retorno de subprograma return
Sintaxisreturn
FuncinAbandona inmediatamente el programa en curso. Si este programa ha sido iniciado por un call, laejecucin se reanuda en el programa solicitante despus del call. En caso contrario (si el programa es elprograma start() o el punto de lanzamiento de una tarea), la tarea en curso se termina. Un retorno seefecta automticamente al final de un programa.
-
24 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
Instruccin de control if
Sintaxisif
[elseIf
]../..[elseIf
][else
]endIf
FuncinLa secuencia if...elseIf...else...endIf evala sucesivamente las expresiones booleanas marcadas por laspalabras clave if elseIf hasta que una expresin sea verdadera. Las instrucciones segn la expresinbooleana luego son evaluadas, hasta la siguiente palabra clave elseIf, else o endIf. El programa sereanuda finalmente despus de la palabra clave endIf.Si todas las expresiones booleanas sealadas por if o elseIf son falsas, se evalan las instruccionescomprendidas entre las palabras clave else y endIf (si la palabra clave else est presente). El programase 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 secuenciaswitch...case...default...endSwitch cuando se prueban los distintos valores posibles de una mismaexpresin.
EjemploEste programa convierte un da escrito en un string (sDa) en un num (nDa).put("Enter a day: ")get(sDa)if sDa=="Lunes"nDa=1
elseIf sDa=="Martes"nDa=2
elseIf sDa=="Mircoles"nDa=3
elseIf sDa=="Jueves"nDa=4
elseIf sDa=="Viernes"nDa=5
else// Fin de semana !nDa=0
endIf
Vase tambinInstruccin de control switch
S6.4
S6.4
-
Captulo 2 - Elementos del lenguaje VAL3
D28065205B - 01/2008 25 / 186
S
tub
li Fa
verg
es 2
008
Instruccin de control while
Sintaxiswhile
endWhile
FuncinLas instrucciones entre while y endWhile se ejecutan mientras que la expresin booleana Condicin seaverdadera (true). Si la expresin booleana Condicin no es verdadera en el momento de la primera evaluacin, lasinstrucciones entre while y endWhile no se ejecutan. Parmetro
Ejemplo
Instruccin de control do ... until
Sintaxisdo
until
FuncinLas instrucciones entre do y until se ejecutan hasta que la expresin booleana bCondicin seaverdadera (true). Las instrucciones entre do y until se ejecutan una vez si la expresin booleana bCondicin es verdaderaal hacerse su primera evaluacin.
Parmetro
Ejemplo
bool bCondicin expresin booleana por evaluar
dio diLmpara// Hace parpadear una seal mientras que el robot no est paradodiLmpara = falsewhile (isSettled()==false)diLmpara = !diLmpara // Invierte el valor de diLmpara: true falsedelay(0.5) // Espera s
endWhilediLmpara = false
bool bCondicin expresin booleana por evaluar
num a// Espera que se pulse la tecla Enterdoa = get() // Espera que se pulse una tecla
until (a == 270) // Prueba el cdigo de la tecla Enter
-
26 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
Instruccin de control for
Sintaxisfor = to [step ]
endFor
FuncinLas instrucciones entre for y endFor se ejecutan hasta que el nContador exceda el valor de nFinespecificado. El nContador se inicializa mediante el valor nComienzo. Si nComienzo excede nFin las instruccionesentre 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 esnegativo, el nContador excede nFin si es estrictamente inferior a nFin.
Parmetros
Ejemplonum ijoint jDestjDest = {0,0,0,0,0,0}// Hace girar el eje 1, 90 grados en -90 gradosfor i = 90 to -90 step -10
jDest.j1 = imovej(jDest, flange, mNomSpeed)waitEndMove()
endFor
num nContador variable de tipo num utilizada como contador
num nComienzo expresin numrica de inicializacin del contador
num nFin expresin numrica de prueba de fin de bucle
[num nPaso] expresin numrica de incremento del contador
-
Captulo 2 - Elementos del lenguaje VAL3
D28065205B - 01/2008 27 / 186
S
tub
li Fa
verg
es 2
008
Instruccin de control switch
Sintaxisswitch case [, ]
break
[case [, ]
break ]
[default
break ]
endSwitch
FuncinLa secuencia switch...case...default...endSwitch evala sucesivamente las expresiones indicadas por lapalabra clave case hasta que una expresin sea igual a la expresin inicial despus de la palabra claveswitch. Las instrucciones segn la expresin luego se evalan, hasta la palabra clave break. El programase reanuda finalmente despus de la palabra clave endSwitch.Si ninguna expresin case es igual a la expresin switch inicial, se evalan las instruccionescomprendidas 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 expresionessegn 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. Acepta no solamente las expresiones booleanas, sino cualquier tipo de expresin que acepte al operadorestndar "is equal to""==".
EjemploEste programa lee un num (nmen) correspondiente a un key strike y modifica un string s enconsecuencia.nmen = get()switch nmen
case 271s = "men 1"
breakcase 272
s = "men 2"breakcase 273, 274, 275, 276, 277, 278
s = "Men 3 en 8"breakdefault
s = "esta tecla no est en el men"break
endSwitchEste programa convierte un da escrito en un string (sDa) en un num (nDa).put("Enter a day: ")get(sDa)switch sDa case "Lunes" nDa=1 break case "Martes" nDa=2 break case "Mircoles"
S6.4
-
28 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
nDa=3 break case "Jueves" nDa=4 break case "Viernes" nDa=5 break default // Fin de semana ! nDa=0 breakendIf
-
Captulo 3 - Tipos sencillos
D28065205B - 01/2008 29 / 186
S
tub
li Fa
verg
es 2
008
0
CAPTULO 3
TIPOS SENCILLOS
-
30 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
-
Captulo 3 - Tipos sencillos
D28065205B - 01/2008 31 / 186
S
tub
li Fa
verg
es 2
008
3.1. INSTRUCCIONES
num tamao(variable)
Sintaxisnum tamao()
FuncinDevuelve el tamao de variable. Si variable es un parmetro de programa pasado por referencia, el tamao depende del ndiceespecificado al hacer el llamado de programa. Si el variable es un individual y no un conjunto, el tamaoser 1.
Parmetro
Ejemplovariable variable de cualquier tipo
num nMatriz[10]program printSize(num& nparmetro)beginputln(size(nparmetro))
endcall printSize(nMatriz) // Muestra 10call printSize(nMatriz[6]) // Muestra 4
-
32 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
num getData(string sNombreDatos, & variable)
Sintaxisnum getData(, )
FuncinEsta instruccin copia el valor de los datos, especificado por su nombre sNombreDatos, en la variableespecificada. Si los datos y la variable son cuadros, la instruccin getData copia todas las entradas delcuadro hasta el final de uno de los cuadros. La instruccin devuelve el nmero de entradas copiadas en lavariable.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:
EjemploEste programa fusiona 2 cuadros de puntos pAcercamiento y pTrayectoria a partir de una libreraespecificada 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 endIfendIfif (i 0 La variable se ha actualizado con n entradas copiadas
-1 El dato no existe
-2 El identificante de librera no existe
-3 El ndice est fuera de los lmites
-4 El tipo de dato no corresponde al tipo de variable
S6.4
-
Captulo 3 - Tipos sencillos
D28065205B - 01/2008 33 / 186
S
tub
li Fa
verg
es 2
008
3.2. TIPO BOOL
3.2.1. DEFINICINLos valores posibles de las variables o constantes de tipo bool son:
- true: valor verdadero- false: valor falso
De manera predeterminada, una variable de tipo bool se inicializa en el valor false.
3.2.2. OPERADORESPor orden de prioridad creciente:
Para evitar confusiones entre los operadores = y ==, el operador = no est autorizado al interior deexpresiones VAL3 utilizadas como parmetro de instruccin.
bool =
Asigna el valor de bCondicin a la variable bVariable y reenva elvalor de bCondicin
bool or
Reenva el valor de la 0 lgica entre bCondicin1 y bCondicin2.bCondicin2 es evaluado nicamente si bCondicin1 es false.
bool and
Reenva el valor de la Y lgica entre bCondicin1 y bCondicin2.bCondicin2 es evaluado nicamente si bCondicin1 es true.
bool xor bool
Reenva el valor de la O exclusiva entre bCondicin1 ybCondicin2
bool !=
Prueba la desigualdad de los valores de bCondicin1 ybCondicin2. Reenva true si los valores son diferentes, false enel caso contrario.
bool ==
Prueba la desigualdad de los valores de bCondicin1 ybCondicin2. Reenva true si los valores son idnticos, false en elcaso contrario.
bool ! Reenva la negacin del valor de bCondicin
-
34 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
3.3. TIPO NUM
3.3.1. DEFINICINEl tipo num representa un valor numrico, con aproximadamente 14 dgitos significativos. Cada clculo numrico se hace por tanto con una precisin limitada por esas 14 cifras significativas. Hay que tenerlo en cuenta cuando se quiere probar la igualdad de dos valores numricos: la mayora delas veces, es necesario probar en un intervalo. Ejemplo
Las constantes de tipo numrico tienen el siguiente formato: [-] [.]
Ejemplo10.2-3.141592653Las variables de tipo num se reinicializan de manera predeterminada en el valor 0.
putln(sel(cos(90)==0,1,-1)) // Muestra -1putln(sel(abs(cos(90))
-
Captulo 3 - Tipos sencillos
D28065205B - 01/2008 35 / 186
S
tub
li Fa
verg
es 2
008
3.3.2. OPERADORESPor orden de prioridad creciente:
Para evitar confusiones entre los operadores = y ==, el operador = no est autorizado al interior deexpresiones VAL3 utilizadas como parmetro de instruccin.
3.3.3. INSTRUCCIONES
num sin(num nAngulo)
Sintaxisnum sin()
FuncinRetorna el seno de nAngulo.
Parmetro
Ejemplo
num = Asigna nValor a la variable nVariable y reenvanValor.
bool != Reenva true si nValor1 no es igual a nValor2, falseen el caso contrario.
bool == Reenva true si nValor1 es igual a nValor2, false enel caso contrario.
bool >= Reenva true si nValor1 es superior o igual anValor2, false en el caso contrario.
bool > Reenva true si nValor1 es estrictamente superior anValor2, false en el caso contrario.
bool
-
36 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
num asin(num nValor)
Sintaxisnum asin()
FuncinRetorna 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
Ejemplo
num cos(num nAngulo)
Sintaxisnum cos()
FuncinRetorna el coseno de Angulo.
Parmetro
Ejemplo
num acos(num nValor)
Sintaxisnum acos()
FuncinRetorna 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
Ejemplo
num nValor expresin numrica
putln(asin(0.5)) // muestra 30
num nAngulo ngulo en grados
putln(cos(60)) // muestra 0.5
num nValor expresin numrica
putln(acos(0.5)) // muestra 60
-
Captulo 3 - Tipos sencillos
D28065205B - 01/2008 37 / 186
S
tub
li Fa
verg
es 2
008
num tan(num nAngulo)
Sintaxisnum tan()
FuncinRetorna la tangente de Angulo.
Parmetro
Ejemplo
num atan(num nValor)
Sintaxisnum atan()
FuncinRetorna la tangente inversa de nValor, en grados. El resultado est comprendido entre -90 y +90 grados.
Parmetro
Ejemplo
num abs(num nValor)
Sintaxisnum abs()
FuncinRetorna el valor absoluto de nValor.
Parmetro
Ejemplo
num nAngulo ngulo en grados
putln(tan(45)) // muestra 1.0
num nValor expresin numrica
putln(atan(1)) // muestra 45
num nValor expresin numrica
putln(sel(abs(45)==abs(-45),1,-1)) // muestra 1
-
38 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
num sqrt(num nValor)
Sintaxisnum sqrt()
FuncinRetorna la raz cuadrada de nValor. Se genera un error de ejecucin si nValor es negativo.Parmetro
Ejemplo
num exp(num nValor)
Sintaxisnum exp()
FuncinRegresa la exponencial de nValor.Se genera un error de ejecucin si nValor es demasiado grande.Parmetro
Ejemplo
num power(num nX, num nY)
Sintaxisnum power(, )
FuncinDevuelve nX a la potencia nY: nXnY
Se genera un error de ejecucin si nX es negativo o nulo o si el resultado es demasiado grande.EjemploEste programa calcula de 2 maneras distintas 5 a la potencia 7.// Primera manera: instruccin powernResult = power(5,7)
// Segunda manera: power(x,y)=exp(y*ln(x)) (con imprecisin numrica)nResult = exp(7*ln(5))
num nValor Expresin numrica
putln(sqrt(9)) // muestra 3
num nValor Expresin numrica
putln(exp(1)) // muestra 2.718282
-
Captulo 3 - Tipos sencillos
D28065205B - 01/2008 39 / 186
S
tub
li Fa
verg
es 2
008
num ln(num nValor)
Sintaxisnum ln()
FuncinRetorna el logaritmo neperiano de nValor. Se genera un error de ejecucin si nValor es negativo o nulo.Parmetro
Ejemplo
num log(num nValor)
Sintaxisnum log()
FuncinRetorna el logaritmo decimal de nValor. Se genera un error de ejecucin si nValor es negativo o nulo.Parmetro
Ejemplo
num nValor Expresin numrica
putln(ln(2.718281828)) // muestra 1
num nValor Expresin numrica
putln(log(10)) // muestra 1
-
40 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
num roundUp(num nValor)
Sintaxisnum roundUp()
FuncinRetorna nValor redondeado al entero inmediatamente superior.
Parmetro
Ejemplo
num roundDown(num nValor)
Sintaxisnum roundDown()
FuncinRetorna nValor redondeado al entero inmediatamente inferior.
Parmetro
Ejemplo
num round(num nValor)
Sintaxisnum round()
FuncinRetorna nValor redondeado al entero ms cercano.
Parmetros
Ejemplo
num nValor Expresin numrica
putln(roundUp(7.8)) // Muestra el valor 8putln(roundUp(-7.8)) // Muestra el valor -7
num nValor Expresin numrica
putln(roundDown(7.8)) // Muestra el valor 7putln(roundDown(-7.8)) // Muestra el valor -8
num nValor Expresin numrica
putln(round(7.8)) // Muestra el valor 8putln(round(-7.8)) // Muestra el valor -8
-
Captulo 3 - Tipos sencillos
D28065205B - 01/2008 41 / 186
S
tub
li Fa
verg
es 2
008
num min(num nX, num nY)
Sintaxisnum min(, )
FuncinRetorna el mnimo de nX e nY.
Parmetros
Ejemplo
num max(num nX, num nY)
Sintaxisnum max(, )
FuncinRetorna el mximo de nX e nY.
Parmetros
Ejemplo
num limit(num nValor, num nMn, num nMx)
Sintaxisnum limit(, , )
FuncinReenva nValor limitado por nMn y nMx.
Parmetros
Ejemplo
num nX Expresin numrica
num nY Expresin numrica
putln(min(-1,10)) // Muestra el valor -1
num nX Expresin numrica
num nY Expresin numrica
putln(max(-1,10)) // Muestra el valor 10
num nValor Expresin numrica
num nMn Expresin numrica
num nMx Expresin numrica
putln(limit(30,-90,90)) // Muestra 30putln(limit(100,90,-90)) // Muestra 90putln(limit(-100,-90,90)) // Muestra -90
-
42 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
num sel(bool bCondicin, num nValor1, num nValor2)
Sintaxisnum sel(, , )
FuncinReenva nValor1 si Condicin es true, en caso contrario nValor2.
Parmetros
Ejemploputln(sel(bFlag,a,b))// es equivalente aif bFlag==true
putln(a)elseputln(b)
endIf
bool bCondicin Expresin booleana
num nValor1 Expresin numrica
num nValor2 Expresin numrica
-
Captulo 3 - Tipos sencillos
D28065205B - 01/2008 43 / 186
S
tub
li Fa
verg
es 2
008
3.4. TIPO DE CAMPO DE BITS3.4.1. DEFINICINUn 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 paraadministrar los campos de bits pero reutiliza el tipo num para almacenar un campo de bits de 32 bits enforma 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 detratamiento del campo de bits redondean automticamente un valor numrico a un nmero entero positivode 32 bits, que es entonces tratado como un campo de bits de 32 bits.
3.4.2. OPERADORESLos operadores estndar del tipo num se aplican en un campo de bits: '=', '==', '!='.
3.4.3. INSTRUCCIONES
num bAnd(num nCampoBit1, num nCampoBit2)
Sintaxisnum bAnd(, )
FuncinEsta instruccin reenva la operacin lgica binaria "y" sobre los dos campos de bits de 32 bits. (El i simobit del resultado se inicializa en 1 si los i simos bits de las dos entradas se inicializan en 1). Se obtieneas 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] antesde que la operacin binaria se aplique.
EjemploEste programa muestra un campo de bits nCampoBit de 32 bits en la pantalla probando sucesivamentecada 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") endIfendForputln("")
S6.4
^
^
^
-
44 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
num bOr(num nCampoBit1, num nCampoBit2)
Sintaxisnum bOr(, )
FuncinEsta instruccin reenva la operacin lgica binaria "o" sobre los dos campos de bits de 32 bits. (El i simobit del resultado se inicializa en 1 si el i simo bit de al menos una entrada se inicializa en 1). Se obtieneas 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] antesde que la operacin binaria se aplique.
EjemploEste programa calcula de dos maneras diferentes una mscara de campo de bits en la cual se activa los isimos a j simos bits.// Primera manera: lgica 'or' sobre los bits i a jnCampoBit=0for k=i to j nCampoBit=bOr(nCampoBit, power(2,k))endFor
// Segunda manera: calcular una mscara de bits de (j-i) bitsnCampoBit=(power(2,j-i+1)-1)// Desplazar luego la mscara de bits de i bitsnCampoBit=nCampoBit*power(2,i)
num bXor(num nCampoBit1, num nCampoBit2)
Sintaxisnum bXor(, )
FuncinEsta 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). Seobtiene 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] antesde que la operacin binaria se aplique.
EjemploEste programa invierte los bits i a j del campo de bits nCampoBit:// Calcular la mscara para los bits i a j (ver el ejemplo bOr)nMscara=(power(2,j-i+1)-1)*power(2,i)// Invertir los bits i a j con ayuda de la mscaranCampoBit=bXor(nCampoBit,nMscara)
^
^
^
^
-
Captulo 3 - Tipos sencillos
D28065205B - 01/2008 45 / 186
S
tub
li Fa
verg
es 2
008
num bNot(num nCampoBit)
Sintaxisnum bNot()
FuncinEsta instruccin reenva la operacin lgica binaria "no" (negacin) a un campo de bits de 32 bits. (El isimo bit del resultado se inicializa en 1 si el i simo bit de la entrada est en 0). Se obtiene as un nmeroentero 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 deque la operacin binaria se aplique.
EjemploEste programa reinicializa los bits i a j de un campo de bits nCampoBit con la ayuda de una mscaranMask.
// 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 jnMscara=bNot(nMscara)// Reinicializar los bits i a j con la ayuda de la operacin binaria 'and' nCampoBit=bAnd(nCampoBit, nMscara)
^
^
-
46 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
num toBinary(num nValor, num nTamaoValor, cadena sFormatoDatos, num& nByteDatos)
num fromBinary(num nByteDatos, num nTamaoDatos, cadena sFormatoDatos, num& nValor)
Sintaxisnum toBinary(, , , )num fromBinary(, , , )FuncinEl propsito de las instrucciones toBinary/fromBinary es permitir el intercambio de valores numricosentre dos dispositivos, utilizando una lnea serial o una conexin de red. Los valores numricos primero secodifican en una corriente de bytes. Los bytes se envan entonces al dispositivo paritario. Finalmente eldispositivo paritario descifra los bytes para recuperar los valores numricos iniciales. Diversascodificaciones 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 datossFormatoDatos. El nmero de valores numricos nValor a codificar es proporcionado por el parmetronTamaoValor. El resultado se almacena en la serie nByteDatos, y la instruccin devuelve el nmero debytes codificados en esta serie.Se genera un error de ejecucin si el nmero de valores a codificar nTamaoValor es mayor que eltamao de nValor, si el formato especificado no es soportado o si la serie nByteDatos del resultado noes lo bastante grande para codificar todos los datos de entrada.La instruccin fromBinary decodifica una serie de bytes en valores numricos nValor, segn loespecificado por el formato de datos sFormatoDatos. El nmero de bytes a decodificar es proporcionadopor el parmetro nTamaoDatos. El resultado se almacena en la serie nValor y la instruccin devuelve elnmero 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 valorescorrectamente decodificados (valor negativo). Se genera un error de ejecucin si el nmero de bytes a decodificar nTamaoDatos es mayor que eltamao de nByteDatos, si el formato especificado no es soportado o si la serie nValor del resultado noes lo bastante grande para decodificar todos los datos de entrada.Las codificaciones binarias soportadas se proporcionan en el cuadro de abajo:
El signo "-" indica la codificacin de un entero con signo (el ltimo bit del campo de bits codifica el signo del valor).
El dgito proporciona el nmero de bytes para la codificacin de cada valor numrico. La extensin ".0" marca los valores del punto flotante codificando (se soportan las codificaciones
simples y de precisin doble de IEEE 754). La letra final especifica el orden de los bytes: "l" para 'little endian' (el byte menos significativo se
codifica primero), "b" para 'big endian' (el byte ms significativo se codifica primero). La codificacin 'big endian' es el estndar para las aplicaciones de red (TCP/IP).
-
Captulo 3 - Tipos sencillos
D28065205B - 01/2008 47 / 186
S
tub
li Fa
verg
es 2
008
El formato nativo VAL3 para los datos numricos es la codificacin de precisin doble. Este formato sedebe utilizar para intercambiar valores numricos sin prdida de exactitud.
EjemploEl primer programa codifica un tShiftOut de dato trsf en una serie nByteOut del byte y lo enva con laconexin serie tcpClient. El segundo programa lee los bytes de la conexin serie tcpServer y losconvierte nuevamente en un trsf tShiftIn.// ---- Programa para enviar un trsf ----// Copiar las coordenadas trsf en un buffer numriconTrsfOut[0]=tShiftOut.xnTrsfOut[1]=tShiftOut.ynTrsfOut[2]=tShiftOut.znTrsfOut[3]=tShiftOut.rxnTrsfOut[4]=tShiftOut.rynTrsfOut[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 tcpClientsioSet(io:tcpClient, nByteOut)
// ---- Programa para leer un trsf ----nb=i=0while (nb0) i=i+nb else // Error de comunicacin return endIfendWhileif (fromBinary(nByteIn, 48, "8.0b", nTrsfIn) != 6) // Datos corrompidos returnelse tShiftIn.x=nTrsfIn[0] tShiftIn.y=nTrsfIn[1] tShiftIn.z=nTrsfIn[2] tShiftIn.rx=nTrsfIn[3] tShiftIn.ry=nTrsfIn[4] tShiftIn.rz=nTrsfIn[5]endIf
"-1" Byte con signo"1" Byte sin signo"-2l" Palabra con signo, little endian"-2b" Palabra con signo, big endian"2l" Palabras sin signo, little endian"2b" Palabra sin signo, big endian"-4l" Palabra con doble signo, little endian"-4b" Palabra con doble signo, big endian"4l" Doble palabra sin signo, little endian"4b" Doble palabra sin signo, big endian"4.0l" Valor del punto flotante de precisin simple, little endian"4.0b" Valor del punto flotante de precisin simple, big endian"8.0l" Valor del punto flotante de precisin doble, little endian"8.0b" Valor del punto fotante de precisin doble, big endian
-
48 / 186 D28065205B - 01/2008
S
tub
li Fa
verg
es 2
008
3.5. TIPO STRING3.5.1. DEFINICINLas variables de tipo cadena de caracteres permiten almacenar textos. El tipo de cadena de caracteres soportael grupo de caracteres Unicode. Cabe notar que la visualizacin correcta de un carcter Unicode depende delas 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 cadenadepende 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 longitudmxima de una cadena de caracteres en chino es de 42 caracteres.3.5.2. OPERADORESPor orden de prioridad creciente:
Para evitar confusiones entre los operadores = y ==, el operador = no est autorizado al interior deexpresiones VAL3 utilizadas como parmetro de instruccin.3.5.3. INSTRUCCIONES
string toString(string sFormato, num nValor)Sintaxisstring toString(, )
FuncinReenva 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 aadenespacios al comienzo de la cadena si fuera necesario), y precisin es la cantidad de cifras significativasdespus 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 devisualizacin es ms grande que tamao. Parmetros
Ejemplo
Vase tambinstring chr(num nPuntoCdigo)string toNum(string sCadena, num& nValor, bool& bRelacin)
string =
Asigna sCadena a la variable sVariable y reenvasCadena.
bool !=
Reenva true si sCadena1 y sCadena2 no sonidnticas, false en caso contrario.
bool ==
Reenva true si sCadena1 y sCadena2 sonidnticas, false en caso contrario.
string +
-
Captulo 3 - Tipos sencillos
D28065205B - 01/2008 49 / 186
S
tub
li Fa
verg
es 2
008
string toNum(string sCadena, num& nValor, bool& bRelacin)
Sintaxisstring toNum(, , bool& bRelacin)
FuncinCalcula el nValor numrico representado al comienzo de la sCadena especificada, y retorna sCadena enla 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 semodifica; en caso contrario, bRelacin se configura en true.
Parmetros
Ejemplo
Vase tambinstring toString(string sFormato, num nValor)
string sCadena Expresin de tipo cadena de caracteres
num& nValor Variable de tipo num
bool& bRelacin Variable de tipo bool
num nValbool bOkputln(toNum("10 20 30", nVal, bOk)) // %Muestra 20 30, nVal vale 10, bOk vale trueputln(toNum("a10 20 30", nVal, bOk)) // Muestra a10 20 30, nVal no cambia, bOk vale falseputln(toNum("10 end", nVal, bOk)) // %Muestra , nVal vale 10, bOk vale truebuffer = "+90 0.0 -7.6 17.3"dobuffer = toNum(buffer, nVal, bOk)putln(nVal) // Muestra sucesivamente 90, 0, -7.6, 17.3
until (bOk != true)
-
50 / 186 D28065205B - 01/2008