Software Val3 142

186

Click here to load reader

description

VAL3 Staubli

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