Moin,
Ich bin ein Software-Entwickler und komme somit nicht aus dem Umfeld (Nie eine echte
CNC bedient, eben nur die verschiednen Simulatoren benutzt -> Siemens, Heidenhain)
Ich arbeite mich gerade in die Heidenhain NC-Programmierung ein. Also (.h) programme schreiben welche dann einen Anwendungsfall abdecken.
-> Jeder hier im Forum der NC-Programme für die Heidenhain schreiben muss für tut mir Leid, es ist ein reiner Krampf und das sagt ein Softwareentwickler
(#offtopic)
Vorab habe ich das was ich jetzt bei der Heidenhain vorhabe, bereits für die Fanuc bzw. Siemens über NC-Programme funktional umgesetzt..
Nun muss ich mich bei der Heidenhain TNC640 dranmachen..
Hier stoße ich aktuell auf das folgende Problem (wo ich hoffe, dass mir hier einer der Experten von euch helfen kann):
1. Ich habe ein Hauptprogramm welches mehrere Unterprogramm aufruft..
2. Eines der Unterprogramme liest Daten aus einer von mir zuvor definierten Tabelle "tabelle.tab" über SQL (TNC640)
2.1 Tabelle über den Config Bereich angelegt und beschrieben -> Tabelle funktioniert.
2.2 Lesen der Daten aus der Tabelle "TNC:\nc_prog\tabelle.tab" über SQL funktioniert.
3. Eines der anderen Unterprogramme schreibt nun Daten zurück in diese von mir zuvor definierten Tabelle "tabelle.tab" über SQL (TNC640)
3.1 Schreiben der Daten in die Tabelle "TNC:\nc_prog\tabelle.tab" über SQL funktioniert -> die neuen Daten sind nach dem Aufruf "SQL COMMIT" in der Datei "tabelle.tab" enthalten!
4. Diese Tabelle lade ich als Datei "tabelle.tab" direkt von der TNC "TNC:\nc_prog\tabelle.tab" runter (über die Heidenhain
API "Interop.HeidenhainDNCLib") um diese abzuändern, und im Anschluss wieder unter dem selben Namen "tabelle.tab" auf die TNC "TNC:\nc_prog\tabelle.tab" rauf zu laden.
-> Hier habe ich jetzt das Problem, dass sich eben diese Datei nicht mehr auf die TNC zurückspielen lässt (nicht über die Heidenhain API und auch nicht über TNCremo), solange mein Hauptprogramm noch läuft! Stoppe ich mein Hauptprogramm ist die Datei freigegeben und ich darf sie auf der TNC überspielen. -> Das Lesen bzw. schreiben der Tabellen findet aber in einem Unterprogram statt, welches nach abarbeitung ja wieder geschlossen sein müsste (inklusive der Dateizugriffe ?)
Laut den Aussagen von einem Mitarbeiter welcher sich, im Vergleich zu mir mit den Maschinen auskennt, sollte genau dies aber möglich sein, da er sowas wohl genau so macht. Also eine Tabelle aus einem Programm raus beschreiben, diese vom PC runterladen -> abändern und im Anschluss wieder "hochladen" um diese dann vom Programm wieder auslesen zu können und das alles ohne das Program stoppen zu müssen.
Wenn ich mir seinen und meinen Ablauf anschaue, wie wir beide die Zugriffe über SQL auf Tabellen machen, finde ich keinen leider keinen Unterschied.
Hier mein program "tabelleschreiben.h" welches Daten in meine zuvor definierte die Tabelle schreibt:
CODE
BEGIN PGM TABELLESCHREIBEN MM
SQL QL51 "DROP SYNONYM TABELLE"; ggfs. vorhandenes Tabellen Synonym löschen.
SQL QL51 "CREATE SYNONYM TABELLE FOR 'TNC:\nc_prog\imc\tabelle.tab'"; Tabelle aus Dateisystem auf Synonym linken.
SQL QL52 "SELECT SPALTE1 FROM TABELLE"; Select abfrage für Spalte 1
SQL BIND QL55 "TABELLE.SPALTE1"; Spalte 1 an lokale Variable QL55 binden
SQL FETCH QL51 HANDLE QL52 INDEX0; Daten aus Zeile 0 auslesen (es wird nur eine Zeile geben)
QL55 = Q1600; Wert aus Q1600 in Zeile 0 - "SPALTE1" schreiben
SQL UPDATE QL51 HANDLE QL52; Werte in Tabelle Updaten
SQL COMMIT QL51 HANDLE QL52; Änderung in Tabelle übernehmen
SQL BIND QL55; zuvor erzeugten link zu Spalte 1 entfernen
FN 20: WAIT FOR SYNC; Synchronisation der Daten
SQL QL51 "DROP SYNONYM IMCSTATE"; Benutztes Tabellen Synonym löschen.
END PGM TABELLESCHREIBEN MM
Ich habe zu dem Thema leider in der Doku nichts gefunden.
Mein aktueller Work-a-round ist die Tabelle über die
DNC Schnittstelle von PC Seite über "DataAcess" zu beschreiben während mein NC-Programm läuft (dies führt zu keinem Fehler - da ja keine Datei mehr auf die TNC hochgeladen wird, sondern ich wohl direkt auf die Tabelle in der TNC schreibe) .. aber führt auf NC-Program Seite dazu, dass ich die "aktualisierten" Werte erst nach Mehrmaligem auslesen über SQL bekomme. -> Schau ich über TNCremo im Dateisystem auf der TNC in meine Tabelle "tabelle.tab" dann hält diese aber die neuen korrekten Werte! Wenn ich nun versuche parallel über SQL diese neuen Werte auszulesen, dann bekomme ich aktuelle nur die alten Werte. Erst nach mehrmaligem aufruf meines Unterprograms (welches die Daten über SQL liest), bekomme ich dann die neuen Daten.
Hoffe ihr könnt mir hier auf die Sprünge helfen wo mein Fehler liegt, da ich eben nicht vom Fach bin und diese Thematik ziemlich aufhält und Nerven frisst
Danke & Gruß
Henrik
Der Beitrag wurde von dev-hm bearbeitet: 31.08.2020, 14:27 Uhr