0 BEGIN PGM 82701_FR MM 1 ;Programme CN permettant d'écrire des 2 ;valeurs dans un tableau de protocole. 3 ;Dans cet exemple de programme, la CN 4 ;écrit l'heure, la date, la durée 5 ;d'exécution du programme, le numéro du 6 ;point de référence actif, les 7 ;transformations de base et le 8 ;décalageC du point de référence actif 9 ;ainsi qu'un compteur dans le tableau. 10 ;Dans la première section du programme, 11 ;la CN lit les valeurs. 12 ;La CN copie ensuite un tableau de 13 ;protocole et enregistre la copie sous un 14 ;nom de fichier composé du nom de fichier 15 ;du programme CN et du texte «_Protocoll». 16 ;Si un tableau portant le même nom existe 17 ;déjà dans le répertoire, la CN ouvre le 18 ;tableau existant et ne crée pas de 19 ;nouveau tableau. 20 ;Ensuite, la CN écrit les valeurs lues 21 ;dans le nouveau tableau. 22 ;En outre, la CN écrit le nombre 23 ;d'exécutions de programme dans le tableau. 24 ; 25 FN 18: SYSREAD Q21 = ID992 NR16 ;Vérifier si le programme test est actif 26 FN 18: SYSREAD Q22 = ID992 NR10 ;Vérifier si l'amorce de séquence est active 27 FN 9: IF +Q21 EQU +0 GOTO LBL "Simu" ;Si le programme test est actif, saut vers la fin du programme 28 FN 10: IF +Q22 NE +0 GOTO LBL "Simu" ;Si l'amorce de séquence est active, saut vers la fin du programme 29 ; 30 ;Lire les données 31 FN 18: SYSREAD QL99 = ID530 NR1 ;Lire le numéro de point de référence actif 32 QL11 = QL99 ;Transférer le numéro de point de référence 33 FN 18: SYSREAD QL12 = ID507 NRQL99 IDX1 ;Lire la valeur de la colonneX du tableau de point de référence 34 FN 18: SYSREAD QL13 = ID507 NRQL99 IDX2 ;lire la valeur de la colonne Y du tableau de point de référence 35 FN 18: SYSREAD QL14 = ID507 NRQL99 IDX3 ;Lire la valeur de la colonneZ du tableau de point de référence 36 FN 18: SYSREAD QL15 = ID507 NRQL99 IDX4 ;Lire la valeur issue de la colonne SPA du tableau de point de référence 37 FN 18: SYSREAD QL16 = ID507 NRQL99 IDX5 ;Lire la valeur issue de la colonne SPB du tableau de point de référence 38 FN 18: SYSREAD QL17 = ID507 NRQL99 IDX6 ;Lire la valeur issue de la colonne SPC du tableau de point de référence 39 FN 18: SYSREAD QL18 = ID508 NRQL99 IDX6 ;Lire la valeur issue de la colonne C_OFFS du tableau de point de référence 40 FN 18: SYSREAD QL19 = ID320 NR3 ;Lire la durée d'exécution du programme 41 FN 18: SYSREAD QL20 = ID320 NR1 IDX0 ;Lire la date actuelle 42 ; 43 ;Définir le nom de fichier du programme CN et 44 ;le nom de fichier pour le tableau de protocole 45 ; 46 ;Lire le chemin d'accès du programme CN actif 47 QS0 = SYSSTR( ID10010 NR1 ) 48 QS3 = SYSSTR( ID10010 NR1 ) 49 ; 50 ;Marque de saut de la répétition 51 LBL "LOOP" 52 ; 53 ;Déterminer la longueur de la chaîne 54 Q1600 = STRLEN( SRC_QS0 ) 55 Q1610 = STRLEN( SRC_QS3 ) 56 ; 57 QS1 = "\" ;Définir la caractéristique de recherche 58 ; 59 Q1601 = INSTR( SRC_QS0 SEA_QS1 BEG0 ) + 1 ;Rechercher dans la chaîne en fonction de la caractéristique de recherche 60 ; 61 Q1602 = Q1600 - Q1601 ;Calculer la longueur de la chaîne par rapport à la caractéristique de recherche 62 ; 63 FN 9: IF +Q1602 EQU -1 GOTO LBL "JUMP" ;Sauter si aucune caractéristique de recherche n'existe 64 ; 65 ;Raccourcir la chaîne à la caractéristique de recherche 66 QS0 = SUBSTR( SRC_QS0 BEGQ1601 LENQ1602 ) 67 ; 68 FN 9: IF +0 EQU +0 GOTO LBL "LOOP" ;Appel de la répétition 69 ; 70 ;Marque de saut 71 LBL "JUMP" 72 ;Déterminer la longueur de la chaîne 73 Q1600 = STRLEN( SRC_QS0 ) 74 ; 75 ;Déterminer la longueur de la chaîne sans extension de fichier 76 Q1602 = Q1600 - 2 77 Q1610 = Q1610 - 2 78 ; 79 ;Raccourcir une chaîne avec une extension de fichier 80 QS2 = SUBSTR( SRC_QS0 BEG0 LENQ1602 ) 81 QS3 = SUBSTR( SRC_QS3 BEG0 LENQ1610 ) 82 ; 83 ;Composer la chaîne pour le fichier journal 84 QS3 = QS3 || "_Protocoll.TAB" 85 ; 86 ;Copier le tableau de prototype dans le tableau de protocole 87 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'" 88 ; 89 ;Ouvrir le tableau de protocole 90 FN 26: TABOPEN :'QS3' 91 ;Lire le compteur du tableau 92 FN 28: TABREAD QR0 =0 /"Counter" 93 ; 94 ;Sauter s'il existe déjà une valeur pour le compteur dans le tableau 95 FN 9: IF +QR0 IS DEFINED GOTO LBL "count" 96 ; 97 QR0 = 1 ;Définir la valeur du compteur comme étant égale à 1 98 ; 99 ;Saut 100 FN 9: IF +0 EQU +0 GOTO LBL "Jump_1" 101 ; 102 ;Marque de saut pour le comptage ultérieur 103 LBL "count" 104 ; 105 ;Incrémentation du compteur 106 QR0 = QR0 + 1 107 ; 108 ;Marque de saut 109 LBL "Jump_1" 110 ; 111 ;Écrire les valeurs lues dans le tableau 112 SQL Q1 "DROP SYNONYM WERT" 113 SQL QL2 "CREATE SYNONYM WERT FOR ':'QS3''" 114 SQL BIND QL20 "WERT.Date" 115 SQL BIND QL19 "WERT.Run_Time" 116 SQL BIND QL11 "WERT.PRESET" 117 SQL BIND QL12 "WERT.X" 118 SQL BIND QL13 "WERT.Y" 119 SQL BIND QL14 "WERT.Z" 120 SQL BIND QL15 "WERT.SPA" 121 SQL BIND QL16 "WERT.SPB" 122 SQL BIND QL17 "WERT.SPC" 123 SQL BIND QL18 "WERT.C_OFFSET" 124 SQL QL1 "SELECT Date,Run_Time,PRESET,X,Y,Z,SPA,SPB,SPC,C_OFFSET FROM WERT WHERE NR==:'QR0'" 125 ;Mettre à jour le tableau 126 SQL UPDATE Q1 HANDLE QL1 127 SQL COMMIT Q1 HANDLE QL1 128 ; 129 ;Inscrire l'état actuel du compteur dans le tableau de protocole 130 FN 26: TABOPEN :'QS3' 131 FN 27: TABWRITE 0 /"Counter" = QR0 132 ; 133 ;Réinitialiser la durée d'exécution du programme 134 FN 17: SYSWRITE ID 320 NR3 =+0 135 ; 136 ;Marque de saut pour le programme test et l'amorce de séquence 137 LBL "Simu" 138 END PGM 82701_FR MM