0 BEGIN PGM 82701_es MM 1 ;Programa NC para escribir valores en una 2 ;tabla de protocolo. En este programa de 3 ;ejemplo, el control numérico escribe la 4 ;hora actual, la fecha actual, el tiempo 5 ;de ejecución del programa, el número del 6 ;punto de referencia activo, las 7 ;transformaciones básicas y el offset C del 8 ;punto de referencia activo y un contador 9 ;en la tabla. 10 ;En el primer tramo del programa, el 11 ;control numérico lee los valores. 12 ;A continuación, el control numérico copia 13 ;una tabla de protocolo y guarda la copia 14 ;bajo un nombre de fichero que se compone 15 ;del nombre de fichero del programa NC 16 ;y el texto "_Protocolo". 17 ;Si en el directorio ya hubiera una tabla 18 ;con este nombre, el control numérico abre 19 ;la tabla existente y no crea ninguna tabla 20 ;nueva. 21 ;A continuación, el control numérico escribe 22 ;en la nueva tabla los valores leídos. 23 ;Además, el control numérico escribe en la 24 ;tabla el número de ejecuciones del programa. 25 ; 26 FN 18: SYSREAD Q21 = ID992 NR16 ;comprobar si el test del programa está activo 27 FN 18: SYSREAD Q22 = ID992 NR10 ;comprobar si la ejecución del proceso hasta una frase está activa 28 FN 9: IF +Q21 EQU +0 GOTO LBL "Simu" ;si el test de programa está activo, salto al final del programa 29 FN 10: IF +Q22 NE +0 GOTO LBL "Simu" ;si la ejecución del proceso hasta una frase está activa, salto al final del programa 30 ; 31 ;leer datos 32 FN 18: SYSREAD QL99 = ID530 NR1 ;leer el número del punto de referencia activo QL11 = QL99 ;transferir el número del punto de referencia 33 FN 18: SYSREAD QL12 = ID507 NRQL99 IDX1 ;leer el valor de la columna X de la tabla de puntos de referencia 34 FN 18: SYSREAD QL13 = ID507 NRQL99 IDX2 ;leer el valor de la columna Y de la tabla de puntos de referencia 35 FN 18: SYSREAD QL14 = ID507 NRQL99 IDX3 ;leer el valor de la columna Z de la tabla de puntos de referencia 36 FN 18: SYSREAD QL15 = ID507 NRQL99 IDX4 ;leer el valor de la columna SPA de la tabla de puntos de referencia 37 FN 18: SYSREAD QL16 = ID507 NRQL99 IDX5 ;leer el valor de la columna SPB de la tabla de puntos de referencia 38 FN 18: SYSREAD QL17 = ID507 NRQL99 IDX6 ;leer el valor de la columna SPC de la tabla de puntos de referencia 39 FN 18: SYSREAD QL18 = ID508 NRQL99 IDX6 ;leer el valor de la columna C_OFFS de la tabla de puntos de referencia 40 FN 18: SYSREAD QL19 = ID320 NR3 ;leer el tiempo de ejecución del programa 41 FN 18: SYSREAD QL20 = ID320 NR1 IDX0 ;leer la fecha actual 42 ; 43 ;determinar el nombre del fichero del programa NC 44 ;y fijar el nombre del fichero para la tabla de 45 ;protocolo 46 ; 47 ;leer la ruta del fichero del programa NC activo QS0 = SYSSTR( ID10010 NR1 ) QS3 = SYSSTR( ID10010 NR1 ) 48 ; 49 ;label de repetición 50 LBL "LOOP" 51 ; 52 ;determinar la longitud de la secuencia de caracteres Q1600 = STRLEN( SRC_QS0 ) Q1610 = STRLEN( SRC_QS3 ) 53 ; QS1 = "\" ;definir la característica de búsqueda 54 ; Q1601 = INSTR( SRC_QS0 SEA_QS1 BEG0 ) + 1 ;buscar la secuencia de caracteres según la característica de búsqueda 55 ; Q1602 = Q1600 - Q1601 ;calcular la longitud de la secuencia de caracteres hasta la característica de búsqueda 56 ; 57 FN 9: IF +Q1602 EQU -1 GOTO LBL "JUMP" ;salto cuando no hay ninguna característica de búsqueda 58 ; 59 ;acortar la secuencia de caracteres hasta la característica de búsqueda QS0 = SUBSTR( SRC_QS0 BEGQ1601 LENQ1602 ) 60 ; 61 FN 9: IF +0 EQU +0 GOTO LBL "LOOP" ;llamada de repetición 62 ; 63 ;label 64 LBL "JUMP" 65 ;determinar la longitud de la secuencia de caracteres Q1600 = STRLEN( SRC_QS0 ) 66 ; 67 ;determinar la longitud de la secuencia de caracteres sin extensión de fichero Q1602 = Q1600 - 2 Q1610 = Q1610 - 2 68 ; 69 ;acortar la secuencia de caracteres por la extensión de fichero QS2 = SUBSTR( SRC_QS0 BEG0 LENQ1602 ) QS3 = SUBSTR( SRC_QS3 BEG0 LENQ1610 ) 70 ; 71 ;componer la secuencia de caracteres para el fichero de protocolo QS3 = QS3 || "_Protocollo.TAB" 72 ; 73 ;copiar la tabla de prototipo a la tabla de protocolo 74 SQL Q1 "CREATE TABLE ':'QS3'' AS SELECT NR,Date,Run_Time,PRESET,X,Y,Z,SPA,SPB,SPC,C_OFFSET,Counter FROM 'TNC:\table\Protocol.TAB'" 75 ; 76 ;abrir la tabla de protocolo 77 FN 26: TABOPEN :'QS3' 78 ;leer el contador de la tabla 79 FN 28: TABREAD QR0 =0 /"Counter" 80 ; 81 ;salto cuando ya hay un valor para el contador en la tabla 82 FN 9: IF +QR0 IS DEFINED GOTO LBL "count" 83 ; QR0 = 1 ;poner el contador a 1 84 ; 85 ;salto 86 FN 9: IF +0 EQU +0 GOTO LBL "Jump_1" 87 ; 88 ;label para seguir contando 89 LBL "count" 90 ; 91 ;incrementar el contador QR0 = QR0 + 1 92 ; 93 ;label 94 LBL "Jump_1" 95 ; 96 ;escribir en la tabla los valores leídos 97 SQL Q1 "DROP SYNONYM WERT" 98 SQL QL2 "CREATE SYNONYM WERT FOR ':'QS3''" 99 SQL BIND QL20 "WERT.Date" 100 SQL BIND QL19 "WERT.Run_Time" 101 SQL BIND QL11 "WERT.PRESET" 102 SQL BIND QL12 "WERT.X" 103 SQL BIND QL13 "WERT.Y" 104 SQL BIND QL14 "WERT.Z" 105 SQL BIND QL15 "WERT.SPA" 106 SQL BIND QL16 "WERT.SPB" 107 SQL BIND QL17 "WERT.SPC" 108 SQL BIND QL18 "WERT.C_OFFSET" 109 SQL QL1 "SELECT Date,Run_Time,PRESET,X,Y,Z,SPA,SPB,SPC,C_OFFSET FROM WERT WHERE NR==:'QR0'" 110 ;actualizar la tabla 111 SQL UPDATE Q1 HANDLE QL1 112 SQL COMMIT Q1 HANDLE QL1 113 ; 114 ;escribir el valor de contador en la tabla de protocolo 115 FN 26: TABOPEN :'QS3' 116 FN 27: TABWRITE 0 /"Counter" = QR0 117 ; 118 ;reiniciar el tiempo de ejecución del programa 119 FN 17: SYSWRITE ID 320 NR3 =+0 120 ; 121 ;label para test de programa y proceso hasta una frase 122 LBL "Simu" 123 END PGM 82701_es MM