0 BEGIN PGM 82701_DE MM 1 ;NC-Programm, um Werte in eine 2 ;Protokolltabelle zu schreiben. Im diesem 3 ;Beispielprogramm schreibt die Steuerung die 4 ;aktuelle Uhrzeit, das aktuelle Datum, die 5 ;Programmlaufzeit, die Nummer des aktiven 6 ;Bezugspunkt, die Basistransformationen und 7 ;den C-Offset des aktiven Bezugspunkts und 8 ;einen Zaehler in die Tabelle. 9 ;Im ersten Programmabschnitt liest die 10 ;Steuerung die Werte aus. 11 ;Anschliessend kopiert die Steuereung eine 12 ;Prototyptabelle und speichert die 13 ;Kopie unter einem Dateinamen, der sich aus 14 ;dem Dateinamen des NC-Programms und 15 ;dem Text "_Protocoll" zusammensetzt. 16 ;Sollte im Verzeichnis schon eine Tabelle mit 17 ;dem Namen bestehen, oeffnet die Steuerung 18 ;die bestehende Tabelle und erstellt keine 19 ;neue Tabelle. 20 ;Danach schreibt die Steuerung die 21 ;ausgelesenen Werte in die neue Tabelle. 22 ;Zusaetzlich schreibt die Steuerung die Anzahl 23 ;der Programmdurchlaeufe in die Tabelle. 24 ; 25 FN 18: SYSREAD Q21 = ID992 NR16 ;pruefen ob Programm-Test aktiv ist 26 FN 18: SYSREAD Q22 = ID992 NR10 ;pruefen ob Satzvorlauf aktiv ist 27 FN 9: IF +Q21 EQU +0 GOTO LBL "Simu" ;wenn Programm-Test aktiv, Sprung zum Programmende 28 FN 10: IF +Q22 NE +0 GOTO LBL "Simu" ;wenn Satzvorlauf aktiv, Sprung zum Programmende 29 ; 30 ;Daten auslesen 31 FN 18: SYSREAD QL99 = ID530 NR1 ;aktive Bezugspunktnummer lesen 32 QL11 = QL99 ;Bezugspunktnummer uebergeben 33 FN 18: SYSREAD QL12 = ID507 NRQL99 IDX1 ;Wert der Spalte X aus Bezugspunkttabelle lesen 34 FN 18: SYSREAD QL13 = ID507 NRQL99 IDX2 ;Wert der Spalte Y aus der Bezugspunkttabelle lesen 35 FN 18: SYSREAD QL14 = ID507 NRQL99 IDX3 ;Wert der Spalte Z aus der Bezugspunkttabelle lesen 36 FN 18: SYSREAD QL15 = ID507 NRQL99 IDX4 ;Wert aus der Spalte SPA der Bezugspunkttabelle lesen 37 FN 18: SYSREAD QL16 = ID507 NRQL99 IDX5 ;Wert aus der Spalte SPB der Bezugspunkttabelle lesen 38 FN 18: SYSREAD QL17 = ID507 NRQL99 IDX6 ;Wert aus der Spalte SPC der Bezugspunkttabelle lesen 39 FN 18: SYSREAD QL18 = ID508 NRQL99 IDX6 ;Wert aus der Spalte C_OFFS der Bezugspunkttabelle lesen 40 FN 18: SYSREAD QL19 = ID320 NR3 ;Programmlaufzeit lesen 41 FN 18: SYSREAD QL20 = ID320 NR1 IDX0 ;Aktuelles Datum lesen 42 ; 43 ;Dateiname vom NC-Programm ermitteln und 44 ;Dateiname fuer Protokolltabelle festlegen 45 ; 46 ;Dateipfad des aktiven NC-Programms auslesen 47 QS0 = SYSSTR( ID10010 NR1 ) 48 QS3 = SYSSTR( ID10010 NR1 ) 49 ; 50 ;Sprungmarke Wiederholung 51 LBL "LOOP" 52 ; 53 ;Laenge der Strings ermitteln 54 Q1600 = STRLEN( SRC_QS0 ) 55 Q1610 = STRLEN( SRC_QS3 ) 56 ; 57 QS1 = "\" ;Suchmerkmal definieren 58 ; 59 Q1601 = INSTR( SRC_QS0 SEA_QS1 BEG0 ) + 1 ;String nach Suchmerkmal durchsuchen 60 ; 61 Q1602 = Q1600 - Q1601 ;Laenge des Strings bis zum Suchmerkmal berechnen 62 ; 63 FN 9: IF +Q1602 EQU -1 GOTO LBL "JUMP" ;Sprung, wenn kein Suchmerkmal vorhanden 64 ; 65 ;String bis zum Suchmerkmal kuerzen 66 QS0 = SUBSTR( SRC_QS0 BEGQ1601 LENQ1602 ) 67 ; 68 FN 9: IF +0 EQU +0 GOTO LBL "LOOP" ;Aufruf Wiederholung 69 ; 70 ;Sprungmarke 71 LBL "JUMP" 72 ;Laenge des Strings ermitteln 73 Q1600 = STRLEN( SRC_QS0 ) 74 ; 75 ;Laenge des Strings ohne Dateiendung ermitteln 76 Q1602 = Q1600 - 2 77 Q1610 = Q1610 - 2 78 ; 79 ;String um Dateiendung kuerzen 80 QS2 = SUBSTR( SRC_QS0 BEG0 LENQ1602 ) 81 QS3 = SUBSTR( SRC_QS3 BEG0 LENQ1610 ) 82 ; 83 ;String fuer Protokolldatei zusammensetzen 84 QS3 = QS3 || "_Protokoll.TAB" 85 ; 86 ;Prototyptabelle zur Prokolltabelle kopieren 87 SQL Q1 "CREATE TABLE ':'QS3'' AS SELECT NR,Datum,Laufzeit_min,PRESET,X,Y,Z,SPA,SPB,SPC,C_OFFSET,Zaehler FROM 'TNC:\table\Protokoll.TAB'" 88 ; 89 ;Protokolltabelle oeffnen 90 FN 26: TABOPEN :'QS3' 91 ;Zaehler aus Tabelle auslesen 92 FN 28: TABREAD QR0 =0 /"Zaehler" 93 ; 94 ;Sprung, wenn schon ein Wert fuer den Zaehler in der Tabelle steht 95 FN 9: IF +QR0 IS DEFINED GOTO LBL "count" 96 ; 97 QR0 = 1 ;Zaehler gleich 1 setzen 98 ; 99 ;Sprung 100 FN 9: IF +0 EQU +0 GOTO LBL "Jump_1" 101 ; 102 ;Sprungmarke zum Weiterzaehlen 103 LBL "count" 104 ; 105 ;Zaehler erhoehen 106 QR0 = QR0 + 1 107 ; 108 ;Sprungmarke 109 LBL "Jump_1" 110 ; 111 ;Ausgelesene Werte in die Tabelle schreiben 112 SQL Q1 "DROP SYNONYM WERT" 113 SQL QL2 "CREATE SYNONYM WERT FOR ':'QS3''" 114 SQL BIND QL20 "WERT.Datum" 115 SQL BIND QL19 "WERT.Laufzeit_min" 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 Datum,Laufzeit_min,PRESET,X,Y,Z,SPA,SPB,SPC,C_OFFSET FROM WERT WHERE NR==:'QR0'" 125 ;Tabelle aktualisieren 126 SQL UPDATE Q1 HANDLE QL1 127 SQL COMMIT Q1 HANDLE QL1 128 ; 129 ;Zaehlerstand in die Protokolltabelle schreiben 130 FN 26: TABOPEN :'QS3' 131 FN 27: TABWRITE 0 /"Zaehler" = QR0 132 ; 133 ;Programmlaufzeit zuruecksetzen 134 FN 17: SYSWRITE ID 320 NR3 =+0 135 ; 136 ;Sprungmarke fuer Programmtest und Satzvorlauf 137 LBL "Simu" 138 END PGM 82701_DE MM